用python编写购物车程序(增加卖家入口,用户信息保存)

要求:

  • 卖家入口:
  1. 商家先将添加商品
  2. 可以添加商品修改商品价格
  • 买家入口:
  1. 允许多个买家注册
  2. 第一次启动才需要输入工资,之后信息被存储,已购商品、余额长时间留存
  3. 启动程序后,打印用户已购买的商品列表
  4. 允许用户根据商品编号购买商品
  5. 用户选择商品后,检测余额是否充足,够就直接扣款,不够就提醒
  6. 可随时推出,退出时打印以购买商品,购买商品数量及余额
  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 # Author:James Tao
  4 
  5 import pickle
  6 import os
  7 
  8 buyer_or_seller=input('您好!请登录(买家输入’买家‘卖家输入’卖家‘):')
  9 
 10 
 11 #--------------------------------买家入口----------------------------------------------
 12 if buyer_or_seller=='买家':
 13 
 14     #判断是否是新用户
 15     new_or_existuser=input('买家注册or登陆(注册输入’注册‘登陆输入’登陆‘):')
 16 
 17 
 18 
 19     #--------------------------------新用户注册输入薪水---------------------------------
 20     if new_or_existuser=='注册':
 21         buyername=input('请输入用户名(由字母数字下划线组成):')
 22         buyerpasswd=input('请输入密码(由字母数字下划线组成):')
 23 
 24         #输入初始工资
 25         initial_salary=int(input('注册成功!请输入您的工资:'))
 26 
 27         #将用户密码存入字典
 28         user_passwd={}
 29         user_passwd[buyername]=buyerpasswd
 30 
 31         #将用户密码字典写入文件
 32         w_user_passwd = open(buyername+'passwd'+'.txt', 'wb')
 33         pickle.dump(user_passwd, w_user_passwd)
 34         w_user_passwd.close()
 35 
 36 
 37         #将用户信息存入字典
 38         user_info = {}
 39         user_info[buyername]={'balance':initial_salary,'boughtgoods':[]}
 40 
 41         #将用户信息字典写入文件
 42         w_user_info = open(buyername+'info'+'.txt', 'wb')
 43         pickle.dump(user_info, w_user_info)
 44         w_user_info.close()
 45 
 46         # 将用户信息暂时导入到temp_user_info里
 47         temp_user_info=user_info
 48 
 49 
 50 
 51     #------------------------------旧用户登陆并导入用户信息-------------------------------
 52     elif new_or_existuser=='登陆':
 53 
 54         while True:
 55             buyername = input('请输入用户名:')
 56             buyerpasswd = input('请输入密码:')
 57 
 58             #读出用户信息,登陆密码
 59             r_user_passwd = open(buyername+'passwd'+'.txt', 'rb')
 60             read_user_passwd = pickle.load(r_user_passwd)
 61             r_user_passwd.close()
 62 
 63             # 判断输入的账号是否存在密码是否正确
 64             if buyername in read_user_passwd and buyerpasswd==read_user_passwd[buyername]:
 65 
 66                 # 读出用户信息,余额已购买商品
 67                 r_user_info = open(buyername+'info'+'.txt', 'rb')
 68                 read_user_info= pickle.load(r_user_info)
 69                 r_user_info.close()
 70 
 71                 # 打印用户信息,余额、已购买商品
 72                 print('''
用户{_user}您好,您的余额为{_balance}
 73                 '''.format(_user=buyername,_balance=read_user_info[buyername]['balance']))
 74                 print('------您已够买以下商品------')
 75                 for i in read_user_info[buyername]['boughtgoods']:
 76                     print(i)
 77 
 78                 #将用户信息暂时导入到temp_user_info里
 79                 temp_user_info=read_user_info
 80                 break
 81 
 82             else:
 83                 print('用户名不存在或密码错误,请重新登录')
 84 
 85 
 86     #用户注册或登陆之后已经有了用户信息,包括用户名、薪水或余额、已购买商品存在temp_user_info字典里
 87 
 88     #从文件中读出商品信息
 89     r_shoppinggoods = open('shoppinggoods.txt', 'rb')
 90     read_shoppinggoods = pickle.load(r_shoppinggoods)
 91     r_shoppinggoods.close()
 92 
 93     dict_of_bought={}
 94 
 95     #从字典temp_user_info读出用户信息,包括用户名、薪水或余额、已购买商品(以购买商品用数列存储)
 96     balance=temp_user_info[buyername]['balance']
 97     list_of_bought=temp_user_info[buyername]['boughtgoods']#以购买商品用数列存储
 98 
 99 
100 
101 
102     #---------------------------------开始购买流程-------------------------------------
103     while True:
104 
105         #输出商品及其编号
106         print('--------支持购买的商品-------')
107         for index,item in enumerate(read_shoppinggoods):#enumerate取出下标
108             print(index,item)
109             #print(read_shoppinggoods.index(item),item)
110         choice_of_user=input('选择购买商品编号输入q退出:')
111 
112         #判断输入是否合法
113         if choice_of_user.isdigit():
114             choice_of_user=int(choice_of_user)
115 
116             #判断编号是否有对应商品
117             if 0<=choice_of_user<len(read_shoppinggoods):
118 
119                 #判断余额是否足够买此商品
120                 if read_shoppinggoods[choice_of_user][1]<= balance:
121 
122                     #加入购物清单
123                     list_of_bought.append(read_shoppinggoods[choice_of_user][0])
124 
125                     #计算余额`
126                     balance-=read_shoppinggoods[choice_of_user][1]
127 
128                     print('''添加{_boughtgood}到您的购物车,此刻您的余额为{_balance}.
129                     '''.format(_boughtgood=read_shoppinggoods[choice_of_user][0],_balance=balance))
130                 else:
131                     print('您的余额不足,此实余额为%s,不够购买此商品',balance)
132             else:
133                 print('商品不存在')
134 
135         elif choice_of_user=='q':
136 
137             #统计购买的商品及数量
138             category_of_bought=set(list_of_bought)
139             for item in category_of_bought:
140                 dict_of_bought[item]=list_of_bought.count(item)
141             print('您购买的商品及数量分别为',dict_of_bought)
142 
143             print('您的余额为:',balance)
144 
145             #将用户余额和购买商品更新存入字典
146             temp_user_info[buyername] = {'balance': balance, 'boughtgoods': list_of_bought}
147 
148             #将用户余额和购买商品更新写入文件
149             w_user_userinfo = open(buyername+'info'+'.txt', 'wb')
150             pickle.dump(temp_user_info, w_user_userinfo)
151             w_user_userinfo.close()
152 
153             exit()
154         else:
155             print('输入不合法')
156 
157 
158 
159 
160 
161 
162 
163 
164 #--------------------------------卖家入口----------------------------------------------
165 elif buyer_or_seller=='卖家':
166 
167     #卖家注册(因为只有一个店,所以只有一个卖家)
168     if os.path.getsize('sellerpasswd.txt') == 0:
169         print('新卖家请注册')
170 
171         sellername = input('请输入用户名(由字母数字下划线组成):')
172         sellerpasswd = input('请输入密码(由字母数字下划线组成):')
173 
174         #将卖家密码存入字典
175         seller_passwd = {}
176         seller_passwd[sellername] = sellerpasswd
177 
178         # 将用户密码字典写入文件
179         w_seller_passwd = open('sellerpasswd.txt', 'wb')
180         pickle.dump(seller_passwd, w_seller_passwd)
181         w_seller_passwd.close()
182 
183         print('恭喜!注册成功!请重新登录。')
184 
185     #卖家登陆
186     while True:
187         print('请登录')
188         sellername = input('请输入用户名:')
189         sellerpasswd = input('请输入密码:')
190 
191         # 读出卖家信息,登陆密码
192         r_seller_passwd = open('sellerpasswd.txt', 'rb')
193         read_seller_passwd = pickle.load(r_seller_passwd)
194         r_seller_passwd.close()
195 
196         # 判断输入的账号是否存在密码是否正确
197         if sellername in read_seller_passwd and sellerpasswd == read_seller_passwd[sellername]:
198             print('欢迎')
199 
200             #从商品文件中读出已添加商品,若文件中存在商品则打印提示是否添加,若文件中不存在商品则提示添加
201             if os.path.getsize('shoppinggoods.txt') > 0:
202 
203                 # 从文件中读出已添加商品
204                 r_shoppinggoods = open('shoppinggoods.txt', 'rb')
205                 read_shoppinggoods = pickle.load(r_shoppinggoods)
206                 r_shoppinggoods.close()
207 
208                 temp_shoppinggoods=read_shoppinggoods
209 
210 
211                 #显示出已添加商品
212                 print('------您已添加商品及其价格如下------')
213                 for i in read_shoppinggoods:
214                     print(i)
215             else:
216                 temp_shoppinggoods = []
217                 print('您还未添加任何商品')
218 
219             #添加商品
220             add_or_not = input('是否添加商品?添加请输入A退出输入其它')
221             if add_or_not == 'A':
222                 while True:
223                     add_goodname = input('请输入您要添加的商品:')
224                     add_goodprice = int(input('请输入您要添加的商品价格:'))
225                     add_good = [add_goodname, add_goodprice]
226 
227                     temp_shoppinggoods.append(add_good)
228 
229                     continue_or_not = input('是否继续添加商品?继续请输入C')
230                     if continue_or_not == 'C':
231                         pass
232                     else:
233                         break
234 
235             #将商品列表写入文件
236             print('已添加商品:',temp_shoppinggoods)
237             w_seller_shoppinggoods = open('shoppinggoods.txt', 'wb')
238             pickle.dump(temp_shoppinggoods, w_seller_shoppinggoods)
239             w_seller_shoppinggoods.close()
240 
241             break
242 
243         else:
244             print('用户名不存在或密码错误,请重新登录')

原文地址:https://www.cnblogs.com/BIT-taozhen/p/9760948.html