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()