python基础练习题:超市收银系统

这个超市收银系统包含以下功能:

  1. 商品管理:支持添加和显示商品信息(ID、名称、价格、库存)
  2. 购物车功能:可以添加、移除商品,查看购物车和计算总价
  3. 结算功能:生成收据、处理支付、计算找零并更新库存
  4. 数据模型:使用面向对象设计,包含商品、购物车和超市类

系统运行后会显示菜单,用户可以通过数字选择不同操作,整个流程不需要图形界面,通过命令行交互完成购物和结算过程。

python基础练习题:超市收银系统_第1张图片

import datetime

class Product:
    def __init__(self, id, name, price, stock):
        self.id = id
        self.name = name
        self.price = price
        self.stock = stock

    def update_stock(self, quantity):
        if self.stock >= quantity:
            self.stock -= quantity
            return True
        return False

class ShoppingCart:
    def __init__(self):
        self.items = {}

    def add_item(self, product, quantity):
        if product.id in self.items:
            self.items[product.id]['quantity'] += quantity
        else:
            self.items[product.id] = {
                'product': product,
                'quantity': quantity
            }

    def remove_item(self, product_id, quantity):
        if product_id in self.items:
            if self.items[product_id]['quantity'] <= quantity:
                del self.items[product_id]
            else:
                self.items[product_id]['quantity'] -= quantity
            return True
        return False

    def get_total(self):
        total = 0
        for item in self.items.values():
            total += item['product'].price * item['quantity']
        return total

    def clear(self):
        self.items = {}

class Supermarket:
    def __init__(self):
        self.products = {}
        self.cart = ShoppingCart()

    def add_product(self, product):
        self.products[product.id] = product

    def display_products(self):
        print("\n商品列表:")
        print("{:<5} {:<15} {:<10} {:<10}".format("ID", "名称", "价格", "库存"))
        for product in self.products.values():
            print("{:<5} {:<15} ¥{:<10.2f} {:<10}".format(
                product.id, product.name, product.price, product.stock))

    def process_payment(self, amount_paid):
        total = self.cart.get_total()
        if amount_paid < total:
            print("支付金额不足!")
            return False
        
        change = amount_paid - total
        self.generate_receipt(amount_paid, change)
        
        # 更新库存
        for item in self.cart.items.values():
            product = item['product']
            product.update_stock(item['quantity'])
        
        # 清空购物车
        self.cart.clear()
        
        print("\n交易成功!")
        return True

    def generate_receipt(self, amount_paid, change):
        print("\n===== 收据 =====")
        print(f"日期: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        print("\n购买商品:")
        print("{:<15} {:<10} {:<10} {:<10}".format("名称", "单价", "数量", "小计"))
        
        for item in self.cart.items.values():
            product = item['product']
            subtotal = product.price * item['quantity']
            print("{:<15} ¥{:<10.2f} {:<10} ¥{:<10.2f}".format(
                product.name, product.price, item['quantity'], subtotal))
        
        print("\n{:<25} ¥{:<10.2f}".format("总计:", self.cart.get_total()))
        print("{:<25} ¥{:<10.2f}".format("已支付:", amount_paid))
        print("{:<25} ¥{:<10.2f}".format("找零:", change))
        print("===============")

def main():
    # 初始化超市
    supermarket = Supermarket()
    
    # 添加商品
    supermarket.add_product(Product(1, "苹果", 5.99, 100))
    supermarket.add_product(Product(2, "香蕉", 3.99, 80))
    supermarket.add_product(Product(3, "牛奶", 8.50, 50))
    supermarket.add_product(Product(4, "面包", 6.80, 30))
    supermarket.add_product(Product(5, "鸡蛋", 12.99, 60))

    while True:
        print("\n欢迎使用超市收银系统")
        print("1. 查看商品列表")
        print("2. 添加商品到购物车")
        print("3. 从购物车移除商品")
        print("4. 查看购物车")
        print("5. 结算")
        print("6. 退出")
        
        choice = input("请选择操作 (1-6): ")
        
        if choice == "1":
            supermarket.display_products()
            
        elif choice == "2":
            supermarket.display_products()
            product_id = int(input("请输入要添加的商品ID: "))
            if product_id in supermarket.products:
                product = supermarket.products[product_id]
                if product.stock <= 0:
                    print("该商品已售罄!")
                else:
                    quantity = int(input(f"请输入要添加的 {product.name} 数量 (库存: {product.stock}): "))
                    if quantity <= 0:
                        print("数量必须大于0!")
                    elif quantity > product.stock:
                        print(f"库存不足! 最大可添加 {product.stock}")
                    else:
                        supermarket.cart.add_item(product, quantity)
                        print(f"已添加 {quantity} 个 {product.name} 到购物车")
            else:
                print("无效的商品ID!")
                
        elif choice == "3":
            if not supermarket.cart.items:
                print("购物车为空!")
            else:
                print("\n购物车内容:")
                print("{:<5} {:<15} {:<10} {:<10}".format("ID", "名称", "单价", "数量"))
                for item in supermarket.cart.items.values():
                    product = item['product']
                    print("{:<5} {:<15} ¥{:<10.2f} {:<10}".format(
                        product.id, product.name, product.price, item['quantity']))
                
                product_id = int(input("请输入要移除的商品ID: "))
                if product_id in supermarket.cart.items:
                    current_quantity = supermarket.cart.items[product_id]['quantity']
                    quantity = int(input(f"请输入要移除的数量 (当前数量: {current_quantity}): "))
                    if quantity <= 0:
                        print("数量必须大于0!")
                    else:
                        supermarket.cart.remove_item(product_id, quantity)
                        print("商品已从购物车移除")
                else:
                    print("购物车中没有该商品!")
        
        elif choice == "4":
            if not supermarket.cart.items:
                print("购物车为空!")
            else:
                print("\n购物车内容:")
                print("{:<15} {:<10} {:<10} {:<10}".format("名称", "单价", "数量", "小计"))
                total = 0
                for item in supermarket.cart.items.values():
                    product = item['product']
                    subtotal = product.price * item['quantity']
                    print("{:<15} ¥{:<10.2f} {:<10} ¥{:<10.2f}".format(
                        product.name, product.price, item['quantity'], subtotal))
                    total += subtotal
                print("\n{:<25} ¥{:<10.2f}".format("总计:", total))
                
        elif choice == "5":
            if not supermarket.cart.items:
                print("购物车为空!")
            else:
                total = supermarket.cart.get_total()
                print(f"\n总计: ¥{total:.2f}")
                amount_paid = float(input("请输入支付金额: "))
                supermarket.process_payment(amount_paid)
                
        elif choice == "6":
            print("感谢使用超市收银系统,再见!")
            break
            
        else:
            print("无效的选择,请重新输入!")

if __name__ == "__main__":
    main()    

你可能感兴趣的:(python,开发语言)