python编程超市购物系统_[ python ] 购物系统

#!/usr/bin/python3#-*- coding: utf-8 -*-#Author: hkey

importos, pickledef file_oper(file, mode, *args):'''通过pickle序列化持久存储数据信息

:param file: 不同的用户生成不同的数据文件,文件名+'.db'

:param mode: 对数据文件的操作,读取还是写入

:param args: 需要写入的数据信息

:return: 返回读取数据文件的信息'''

if mode == 'wb':

data=args[0]

with open(file, mode) as f:

pickle.dump(data, f)elif mode == 'rb':

with open(file, mode) as f:

data=pickle.load(f)returndatadefuser(user, pwd, mode):'''用户注册及登录

:param user: 用户输入的用户名

:param pwd: 用户输入的密码

:param mode: 注册还是登录

:return: 登录成功,返回用户信息;登录失败,返回 None'''db_file= user + '.db'

#用户注册

if mode == 'regist':if notos.path.isfile(db_file):

user_info= {'name': user, 'passwd': pwd, 'stat': 0}

file_oper(db_file,'wb', user_info)print('\033[32;1m注册成功.\033[0m')else:print('\033[31;1m错误:该用户已存在.\033[0m')#用户登录

elif mode == 'login':ifos.path.isfile(db_file):

dict_user= file_oper(db_file, 'rb')if dict_user['name'] == user and dict_user['passwd'] ==pwd:print('\033[32;1m登录成功.\033[0m')returndict_userelse:print('\033[31;1m错误:用户名密码错误。\033[0m')else:print('\033[31;1m错误:该用户不存在.\033[0m')defshopping(user_dict, list_goods):'''用户购物信息

:param user_dict: 用户信息

:param list_goods: 商品列表'''

#判断购物车内是否有商品

if user_dict['shopping_car']:

list_shopping= user_dict['shopping_car']else:

list_shopping=[]whileTrue:print('\033[32;1m商品列表\033[0m'.center(50, '#'))for i, k inenumerate(list_goods):print('序号:%s\t商品名:%s\t\t价格:%s' % (i, k['name'], k['price']))

choice= input('\033[34;1m购买请输入商品序号[t 查看购物清单 q 退出]:\033[0m').strip()if not choice: continue

#用户输入大小写 'q' 都是退出

if choice.upper() == 'Q':break

#购买商品必须输入商品范围类的数字

if choice.isdigit() and 0 <= int(choice)

num= input('\033[34;1m输入购买的数量:\033[0m').strip()ifnum.isdigit():

num=int(num)else:print('\033[31;1m错误:数量必须是正整数.\033[0m')#获取用户输入的商品信息,并生成商品字典

good = {'name': list_goods[int(choice)]['name'], 'num': num,'total_prices': list_goods[int(choice)]['price'] *num}#获取用户的余额

money = user_dict['money']#用户的余额 - 商品的总价

res_money = money - good['total_prices']if res_money >=0:#这里目前没有想到好的处理办法,只能使用标记来做判断

#默认 flag 为 True,因为用户一次只能购买一件商品,如果用户购买的是重复的商品,就将购买过的商品信息合并,

#然后将 flag 设置为 False

flag =Truefor i inlist_shopping:if good['name'] == i['name']:

i['num'] += good['num']

i['total_prices'] += good['total_prices']

flag=False#当flag = True 说明用户没有购买重复的商品,添加新商品到购物清单;反之则购买了重复的商品 flag = False

ifflag:

list_shopping.append(good)print('\033[32;1m购买成功!\033[0m\n')print('\033[32;1m购物清单\033[0m'.center(50, '#'))for i inlist_shopping:print('商品名:%s\t数量:%s\t总价:%d元' % (i['name'], i['num'], i['total_prices']))print('\033[33;1m您的余额为:%d元\033[0m' %res_money)print('##########################################\n')#修改购物后的用户余额信息

user_dict['money'] =res_money#修改购物清单信息

user_dict['shopping_car'] =list_shopping#将修改后的数据写入数据文件

file_oper(user_dict['name'] + '.db', 'wb', user_dict)else:print('\033[31;1m错误:商品总价为:%d元,您的余额为:%d元,购物失败.\033[0m' % (good['total_prices'], money))elif choice.upper() == 'T':print('\033[32;1m购物清单\033[0m'.center(50, '#'))for i inlist_shopping:print('商品名:%s\t数量:%s\t总价:%d元' % (i['name'], i['num'], i['total_prices']))print('\033[33;1m您的余额为:%d元\033[0m' % user_dict['money'])print('##########################################\n')

any= input('\033[34;1m任意键返回商品列表\033[0m').strip()continue

else:print('\033[31;1m错误:输入商品序号错误。\033[0m')defstart(list_goods):whileTrue:print('1. 注册\n'

'2. 登录\n'

'3. 退出')

choice= input('>>>').strip()if not choice: continue

if choice.isdigit() and 0 < int(choice) < 4:if choice == '1':

username= input('\033[34;1m输入用户名:\033[0m').strip()

password= input('\033[34;1m输入密码:\033[0m').strip()

user(username, password,'regist')elif choice == '2':

username= input('\033[34;1m输入用户名:\033[0m').strip()

password= input('\033[34;1m输入密码:\033[0m').strip()

user_dict= user(username, password, 'login')#当 user(username, password, 'login') 返回 None表示登录失败

if user_dict isNone:continue

#user_dict['stat'] = 0 表示用户第一次登录,user_dict['stat'] 非零则表示用户多次登录

if user_dict['stat'] ==0:

money= input('\033[34;1m首次登录,请输入充值金额:\033[0m').strip()if money.isdigit(): #这里无法判断小数类型

user_dict['money'] =int(money)#第一次登录设置成功金额后,将 stat 设置为非零

user_dict['stat'] = 1user_dict['shopping_car'] =[]print('\033[32;1m恭喜:充值成功!\033[0m')

shopping(user_dict, list_goods)else:print('\033[31;1m错误:金额只能是正整数!\033[0m')#user_dict['stat'] = 0 表示用户第一次登录,user_dict['stat'] 非零则表示用户多次登录

else:

shopping(user_dict, list_goods)elif choice == '3':break

else:print('\033[31;1m错误:序号输入错误.\033[0m')if __name__ == '__main__':#商品列表

list_goods =[

{'name': '苹果', 'price': 10},

{'name': '鸭梨', 'price': 20},

{'name': '芒果', 'price': 30},

]

start(list_goods)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解一下Python实现购物系统的示例。 首先,我们需要定义一个商品类,包括商品的名称、价格和库存数量等属性,代码如下: ```python class Product: def __init__(self, name, price, stock): self.name = name self.price = price self.stock = stock ``` 然后,我们需要定义一个购物车类,包括购物车中的商品列表、添加商品、从购物车中移除商品、计算总价等方法,代码如下: ```python class ShoppingCart: def __init__(self): self.products = [] def add_product(self, product, quantity): if product.stock >= quantity: self.products.append((product, quantity)) product.stock -= quantity print(f"{quantity} {product.name} added to cart") else: print(f"Not enough {product.name} in stock") def remove_product(self, product, quantity): if (product, quantity) in self.products: self.products.remove((product, quantity)) product.stock += quantity print(f"{quantity} {product.name} removed from cart") else: print(f"{product.name} not in cart") def calculate_total(self): total = 0 for product, quantity in self.products: total += product.price * quantity return total ``` 最后,我们可以创建一些商品,将它们添加到购物车中,计算总价等操作,代码如下: ```python # 创建一些商品 apple = Product("Apple", 2.0, 10) banana = Product("Banana", 1.5, 20) orange = Product("Orange", 3.0, 15) # 创建购物车对象 cart = ShoppingCart() # 添加商品到购物车 cart.add_product(apple, 3) cart.add_product(banana, 2) cart.add_product(orange, 4) # 移除购物车中的商品 cart.remove_product(apple, 1) # 计算总价 total = cart.calculate_total() print(f"Total: {total}") ``` 以上就是一个简单的Python实现购物系统的示例,希望对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值