这个超市收银系统包含以下功能:
系统运行后会显示菜单,用户可以通过数字选择不同操作,整个流程不需要图形界面,通过命令行交互完成购物和结算过程。
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()