1 # -*- coding:utf-8 -*-
2 # author: heimu
3
4 import os,sys
5 import json
6
7 user_dic = {} # 保存账户信息
8 shopping_list = {} # 保存账户购物清单
9 salary_list = {} # 保存账户余额
10
11 goods = [
12 {"name": "电脑", "price": 1999},
13 {"name": "鼠标", "price": 10},
14 {"name": "游艇", "price": 20},
15 {"name": "美女", "price": 998},
16 ]
17
18 def init_all():
19 '''
20 初始化 user_dic, shopping_list, salary_list
21 :return:
22 '''
23 user_dic['heimu_1'] = '111111'
24 user_dic['heimu_2'] = '222222'
25 user_dic['heimu_3'] = '333333'
26 for key in user_dic.keys():
27 shopping_list[key] = []
28 salary_list[key] = 0
29 save_data() # 保存初始化的数据到本地文件
30
31 def save_data():
32 '''
33 保存数据到本地文件
34 :return:
35 '''
36 with open("user_dic.txt",'w') as f:
37 json.dump(user_dic,f)
38 with open("shopping_list.txt",'w') as f:
39 json.dump(shopping_list,f)
40 with open("salary_list.txt",'w') as f:
41 json.dump(salary_list,f)
42
43 def download_data():
44 '''
45 从本地文件下载数据
46 :return:
47 '''
48 with open("user_dic.txt",'r') as f:
49 user_dic = json.load(f)
50 with open("shopping_list.txt",'r') as f:
51 shopping_list = json.load(f)
52 with open("salary_list.txt",'r') as f:
53 salary_list = json.load(f)
54 return user_dic,shopping_list,salary_list
55
56 def inquire_salary():
57 '''
58 账户查询余额,高亮打印账户余额
59 :return:
60 '''
61 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input])
62
63 def inquire_shopping_list():
64 '''
65 账户查询历史购物清单,打印历史购物清单
66 :return:
67 '''
68 print("-----------------你的历史购物清单------------")
69 [print(shopping_list[user_name_input][i]) for i in range(len(shopping_list[user_name_input]))]
70
71 def exit_print():
72 '''
73 账户退出,打印购物清单和账户余额
74 :return:
75 '''
76 print("----------------你的购物清单-------------")
77 [print(shopping_list[user_name_input][i]) for i in range(len(shopping_list[user_name_input]))]
78 print("-----------------你的账户余额------------")
79 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input])
80
81 def account_recharge():
82 '''
83 账户充值服务
84 :return:
85 '''
86 recharge_number = input("请输入您要充值的金额:").strip()
87 while True:
88 if recharge_number.isdigit():
89 salary_list[user_name_input]+=int(recharge_number)
90 break
91 else:
92 recharge_number = input("输入错误,请重新输入您要充值的金额").strip()
93 print("\033[31;1m充值成功,您的账户当前余额为%d\033[0m" % salary_list[user_name_input])
94
95 def start_shopping():
96 '''
97 账户购物流程
98 :return:
99 '''
100 while True:
101 print('-----------商品清单----------')
102 [print(goods[i]) for i in range(len(goods))] # 打印商品清单
103
104 choice_input = input("请输入你要购买的商品编号(1--4):").strip()
105 if choice_input.isdigit() and 1 <= int(choice_input) <= 4:
106 if goods[int(choice_input) - 1]['price'] <= salary_list[user_name_input]: # 余额充足
107 salary_list[user_name_input] -= goods[int(choice_input) - 1]['price'] # 更新账户的余额
108 shopping_list[user_name_input].append(goods[int(choice_input) - 1]) # 商品加入购物车,更新购物清单
109 print("商品----\033[31;1m[%s]\033[0m----已经加入购物车" % goods[int(choice_input) - 1]['name'])
110 while True:
111 exit_flag = input("退出请按e,继续请按g").strip()
112 if exit_flag.lower() == 'e':
113 save_data() # 退出保存数据
114 exit_print() # 退出打印
115 sys.exit()
116 elif exit_flag.lower() == 'g':
117 break
118 else:
119 print('输入错误,请重新输入')
120
121 else: # 账户余额不足
122 while True:
123 print("您的账户当前余额为:\033[31;1m%d\033[0m" % salary_list[user_name_input])
124 choose_user = input("您的账户余额不足,充值选择c,退出选择q").strip()
125 if choose_user.lower() == 'q':
126 save_data() # 退出保存数据
127 exit_print() # 退出打印
128 sys.exit()
129 elif choose_user.lower() == 'c':
130 account_recharge()
131 break
132 else:
133 print("输入错误,请重新输入")
134 else:
135 print("输入错误,请重新输入")
136
137 if os.path.isfile("user_dic.txt") and os.path.isfile("shopping_list.txt") and os.path.isfile("salary_list.txt"):
138 # 如果本地数据文件存在,从本地文件倒数数据
139 print('------------导入数据库----------')
140 user_dic, shopping_list, salary_list = download_data()
141 else:
142 # 本地数据文件不存在,初始化数据
143 print("-----------初始化数据----------")
144 init_all()
145
146 while True:
147 user_name_input = input("请输入账号:").strip()
148 pass_words_name = input("请输入密码:").strip()
149
150 if user_name_input in user_dic and pass_words_name == user_dic[user_name_input]:
151 if not shopping_list[user_name_input]: # 如果账户的历史购物清单为空,那么为第一次登陆
152 salary_input = input("您是第一次登陆,请输入工资:").strip()
153 salary_list[user_name_input] = int(salary_input) # 更新账户余额
154 print('\033[31;1m余额:%d\033[0m' % salary_list[user_name_input])
155 start_shopping() # 开始购物
156 else:
157 print('您以前有过消费记录')
158 while True:
159 choose_user = input("查询消费记录请按c,查询余额请按i,继续购物请按g,退出请按e").strip()
160 if choose_user.lower() == 'c':
161 inquire_shopping_list() # 查询消费记录
162 elif choose_user.lower() == 'i':
163 inquire_salary() # 查询余额
164 elif choose_user.lower() == 'e':
165 save_data() # 退出保存数据
166 exit_print() # 退出打印
167 sys.exit()
168 elif choose_user.lower() == 'g':
169 start_shopping() # 继续购物
170 else:
171 print("输入错误,请重新输入")
172 else:
173 print("该账户不存在,请重新输入")