day 2 作业, 购物车及用户登录,信息保存到文件中

时间:2022-09-30 22:56:25
作业要求:购物车程序:
1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
7、允许查询之前的消费记录
 
day 2 作业, 购物车及用户登录,信息保存到文件中day 2 作业, 购物车及用户登录,信息保存到文件中
 1 #先预定义工资及购物车列表
 2 salary =0
 3 sh_list=[]
 4 #打开用户信息文件、购物车文件,将信息读取成字典。
 5 with open("u_info","r",encoding="utf-8") as f:
 6     u_d=eval("{{{}}}".format(f.read()))
 7 with open("sh_list","r",encoding="utf-8") as f:
 8     sh_d=eval('{{{}}}'.format(f.read()))
 9 #定义商品列表
10 product_list=[("iphonex",8000),("tea",200),("pen",80),("computer",6000),("TV",3000),]
11 
12 #判断用户是否存在,如果存在就读取salary 记录和之前的购物记录。,
13 while True:
14     username = input("pls input your username:")
15     password = input("pls input your password:")
16     if username in u_d.keys():
17         if password == u_d[username][0]:
18             salary = u_d[username][1]
19             if username in sh_d.keys():
20                 sh_list=sh_d[username]
21                 print("\033[5;35;42m欢迎登陆,购物愉快!\033[0m")
22                 break
23             else:
24                 print("\033[5;35;42m欢迎登陆,购物愉快!\033[0m")
25                 sh_list=[]
26                 break
27         else:
28             print("密码错误,请重新输入")
29     else: #如果用户不存在,就将用户输入的账号及密码记录到用户信息文件中,并提示用户输入工资,做快速注册。
30         #print("用户第一次登陆,请输入工资")
31         salary = input("用户第一次登陆,请输入工资:")
32         if salary.isdigit():
33             with open("u_info","a",encoding="utf-8") as f1:
34                 f1.write("\n'{}':['{}',{}],".format(username, password, salary))
35             print("欢迎新用户{}登陆,购物愉快!".format(username))
36             break
37         else:
38             print("输入错误,请输入正确的数字")
39 while True: #开始购物流程,根据商品提示输入对应的编号。
40 
41     print("使用说明: 1.按‘q’ 退出  2.按‘s’显示购物记录 3.输入商品编号进行购物。")
42     for index,i in enumerate(product_list):
43         print(index,i)
44         #print(product_list.index(i),i)
45     user_choice = input("\033[1;35;40m请选择你要买的商品:\033[0m\n")
46     #如果用户的工资大于,等于商品价格,将商品添加到购物车中,并将余额减去商品价格
47     if user_choice.isdigit():
48         user_choice = int(user_choice)
49         if user_choice < len(product_list) and user_choice>=0:
50             p_item = product_list[user_choice]
51             if int(p_item[1])<= int(salary):
52                 sh_list.append(p_item)
53                 (salary) = int(salary) -int(p_item[1])
54                 print("你选择的商品是\033[1;35;40m{},\033[0m 你的余额是\033[1;35;40m{}\033[0m".format(p_item[0],salary))
55             else:#如果余额小于商品价格,提示余额不足。
56                 print("余额不足,你的余额是\033[1;35;40m{}\033[0m请充值".format(salary))
57         else:#如果用户输入错误的商品编号,提示商品编号不存在,让用户重新输入。
58             print("你输入的商品编号不存在,请重新输入!")
59     elif user_choice == "q": #当用户按推出的时候,将购物记录保存到文件中,余额信息保存到文件中,并打印购物记录
60         print("你购买了如下商品,欢迎下次惠顾!")
61         for index,p in sh_list:
62             print("\033[1;35;40m{} {}\033[0m".format(index,p))
63         with open("sh_list", "a", encoding="utf-8") as f:
64             f.write("\n'{}':{},".format(username, sh_list))
65         print("你的余额是:\033[1;35;40m{}\033[0m".format(salary))
66         with open("u_info", "r", encoding="utf-8") as f:
67             f_u_d = eval("{{{}}}".format(f.read()))
68             if username in f_u_d.keys():
69                 f_u_d[username][1] = salary
70         with open("u_info", "w", encoding="utf-8") as f:
71             f_s = str(f_u_d)[1:-1]
72             f.write("{},".format(f_s))
73         exit()
74     elif user_choice == "s":#用户输入S,可以查询是有购物记录
75         while True:
76             if len(sh_list) ==0:
77                 print("你没有购物记录!")
78                 break
79             else:
80                 print("你的购物记录如下:")
81                 for index,i in enumerate(sh_list):
82                     print("\033[1;35;40m{} {}\033[0m".format(index,i))
83                 break
84     else: #如果用户没有按照操作说明输入选项,则提示输入的选项错误,让用户重新输入。
85         print("invalid option")
View Code

u_info 内容如下

'keven': ['abc123', 100000], 'tom': ['123abc', 10000], 'zhangsan': ['zhangsan', 8000],