1 #!/usr/bin/python
  2 #-*-coding:utf-8-*-
  3 ''''
  4 作业题目: 用函数完成登录注册以及购物车的功能
  5 
  6 作业需求:
  7 1,启动程序,用户可选择四个选项:登录,注册,购物,退出。
  8 2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中。
  9 3,用户登录,用户名密码从文件中读取,进行三次验证,验证不成功则退出整个程序。
 10 4,用户登录成功之后才能选择购物功能进行购物,购物功能(就是将购物车封装到购物的函数中)。
 11 5,退出则是退出整个程序。
 12 '''
 13 
 14 def regist():
 15     print('注册页面'.center(10,''))
 16     name_list = []
 17     flag1 = True
 18     while flag1:
 19         regist_name = input('请输入注册用户名:')
 20         #判断用户注册的用户名是否重复
 21         with open('user_db','r+',encoding='utf-8') as f:
 22             for line in f:
 23                 line = line.strip().split('|')[0]
 24                 if regist_name == line:
 25                     print('该用户名已存在')
 26                     flag1 = True
 27                     break
 28                 else:
 29                     flag1 = False
 30     while 1:
 31                 regist_pwd = input('请输入注册密码:')
 32                 regist_pwd2 = input('请再次输入密码:')
 33                 #判断两次密码录入是否相同
 34                 if regist_pwd == regist_pwd2:
 35                     print('注册成功')
 36                     s = '\n'+regist_name+'|'+regist_pwd
 37                     #注册成功之后,将用户名和密码写入user_db文件
 38                     with open('user_db','a',encoding='utf-8') as f:
 39                         f.write(s)
 40                     break
 41                 else:
 42                     print('密码输入不一致')
 43 
 44 def login():
 45     print('登录页面'.center(10,''))
 46     flag = True
 47     count = 0
 48     while flag:
 49         login_name = input('请输入登录用户名:')
 50         login_pwd = input('请输入登录密码:')
 51         count +=1
 52         with open('user_db', 'r', encoding='utf-8') as f:
 53             for line in f:
 54                 line = line.strip().split('|')
 55                 if login_name == line[0]:
 56                     if login_pwd == line[1]:
 57                         print('登录成功\n')
 58                         flag = False
 59                         lable = 2  #2为登录成功的标识
 60                         global login_flag
 61                         login_flag = 1
 62                         break
 63                     elif login_pwd != line[1]:
 64                         lable = 1   #1为密码错误的标识
 65                         break
 66                 else:
 67                     lable = 0  #0为用户名错误的标识
 68             if lable == 1:
 69                 print('密码输入有误。\n')
 70                 if count == 3:    #如果达到最大错误次数,退出程序
 71                     print('已达到最大错误次数,退出程序!')
 72                     return
 73             elif lable == 0:
 74                 print('用户名输入有误。\n')
 75                 if count == 3:   #如果达到最大错误次数,退出程序
 76                     print('已达到最大错误次数,退出程序!')
 77                     return
 78 
 79 def shop():
 80     print('购物页面'.center(10, ''))
 81     global login_flag
 82     if login_flag == 0:
 83         print('请先登录')
 84         login()
 85     #购物之前判断是否是登录状态
 86     else:
 87         account = int(input('请输入充值金额:'))
 88         while 1:
 89             goods_list = []
 90             #从文件读取商品名称和金额,并展示给用户
 91             with open('goods_db','r',encoding='utf-8') as f:
 92                 for line in f:
 93                     goods_list.append(line.strip().split())
 94             for item in enumerate(goods_list,1):
 95                 num = item[0]
 96                 good_name = item[1][0]
 97                 good_price = item[1][1]
 98                 print(num,good_name,good_price)
 99             print('n','购物车结算')
100             #用户购买商品
101             flag1 = 1
102             shopping_car = []
103             buy_goods = [1]
104             while flag1:
105                 state = 1
106                 choice = input('请输入你选择的商品编码,输入q退出购物:')
107                 #购物车结算
108                 if choice == 'n':
109                     flag2 = 1
110                     while flag2:
111                         print('\n正在进行购物车结算,购物信息如下.......')
112                         # for item in enumerate(shopping_car, 1): #展示购物车商品信息
113                         #     print(item[0],item[1]['商品名'],item[1]['数量'],item[1]['单价'])
114                         while True:
115                             sum_money = 0  # 购物车总金额
116                             for el in shopping_car:
117                                 sum_money += int(el['数量'])*int(el['单价'])
118                             #结算时,如果余额不足,提示用户删除商品信息
119                             if sum_money > account:
120                                 print('\n账户总金额%s,商品总金额%s'%(account,sum_money))
121                                 while True:
122                                     for item in enumerate(shopping_car, 1):  # 展示购物车商品信息
123                                         print(item[0], item[1]['商品名'], item[1]['数量'], item[1]['单价'])
124                                     del_good = input('余额不足,输入一个您要删除的商品编号:')
125                                     if int(del_good) not in range(1,len(shopping_car)+1):
126                                         print('编码录入有误!')
127                                     elif int(del_good) in range(1,len(shopping_car)+1):
128                                         del shopping_car[int(del_good)-1]
129                                         break
130                             #如果用户余额充足,用户可直接购买
131                             elif sum_money <= account:
132                                 account -= sum_money
133                                 print('购买成功!余额%s,本次消费金额%s\n您可以继续进行购买操作!'%(account,sum_money))
134                                 flag1 = 0
135                                 if buy_goods[0] == 1:
136                                     del buy_goods[0]
137                                     buy_goods.extend(shopping_car)
138                                 else:
139                                     for el in shopping_car:
140                                         for i in range(len(buy_goods)):
141                                             if el['商品名'] in buy_goods[i]['商品名']:
142                                                 buy_goods[i]['数量'] += el['数量']
143                                                 break
144                                         buy_goods.append(el)
145                                 del shopping_car[:]
146                                 flag2 = False
147                                 break
148                 #退出购物功能,并显示用户所有购买的商品信息
149                 elif choice.upper() == 'Q':
150                     print('购买的商品信息如下:')
151                     for el in enumerate(buy_goods,1):
152                         if el[1] == 1:
153                             print('....经查询,您未购买商品,退出购物功能。\n')
154                             return
155                         else:
156                             print(el[0],el[1]['商品名'],el[1]['数量'])
157                     print('退出购物功能!\n')
158                     return
159                 #如果用户输入的编码不在是商品的序号,提示用户输入有误
160                 elif int(choice) not in range(1,len(goods_list)+1):
161                     print('商品编码录入有误!')
162                     continue
163                 #如果用户输入的编号正确,将商品信息存储在购物车列表中
164                 elif int(choice) in range(1,len(goods_list)+1):
165                     for i in range(len(shopping_car)):
166                         if goods_list[int(choice)-1][0] == shopping_car[i]['商品名']:
167                             shopping_car[i]['数量'] += 1
168                             state = 0
169                             break
170                     if state == 1:
171                         shopping_car.append({'商品名':goods_list[int(choice)-1][0],'数量':1,'单价':goods_list[int(choice)-1][1]})
172 
173 def q():
174     exit('退出系统')
175 
176 def main():
177     while True:
178         dic = {'regist':regist,'login':login,'shop':shop,'exit':q}
179         print('regist\nlogin\nshop\nexit')
180         func = input('请选择要使用的功能:')
181         if func in dic:
182             dic[func]()
183         else:
184             print('录入错误!')
185 login_flag = 0 #登录的标识
186 main()

 

posted on 2018-08-06 18:04  无伞  阅读(146)  评论(0编辑  收藏  举报