1 #Author wangmengzhu
2 '''
3 用户认证,确认是用户登录,判断用户登录的用户名和密码是否正确,判断用户认证的长度是否为0,使用装饰器
4 用户登录认证,信用卡登录认证,管理员登录认证
5 '''
6 import time,os
7 def auth(auth_type):
8 '''
9 用户的认证信息
10 '''
11 def my_wrapper(func):
12 if auth_type == 'user_auth':
13 def wrpper(*args,**kwargs):
14 name = input('请输入你的用户名>>: ').strip()
15 password = input('请输入你的密码>>: ').strip()
16 if len(name) > 0:
17 with open('用户名和密码.txt','r',encoding = 'utf-8') as f:
18 line = f.read()
19 my_dic = eval(line)
20 if name in my_dic and password == my_dic[name]:
21 print('%s欢迎登陆'%(name))
22 func(*args,**kwargs)
23 else:
24 print('%s认证失败'%(name))
25 else:
26 print('输入的用户名不能为空')
27 return wrpper
28 elif auth_type == 'credit_auth':
29 def wrpper(*args, **kwargs):
30 credit_number = input('请输入你的信用卡号>>: ').strip()
31 credit_password = input('请输入你的信用卡密码>>: ').strip()
32 if len(credit_number) == 10:
33 with open('信用卡号和密码.txt','r',encoding = 'utf-8') as f:
34 line = f.read()
35 my_dic = eval(line)
36 if credit_number in my_dic and credit_password == my_dic[credit_number]:
37 print('认证成功,欢迎登陆')
38 func(*args, **kwargs)
39 else:
40 print('认证不成功')
41 else:
42 print('输入的信用卡号的长度不对')
43 return wrpper
44 elif auth_type == 'admin_auth':
45 def wrpper(*args, **kwargs):
46 admin_name = input('请输入你的管理员用户名>>: ').strip()
47 admin_password = input('请输入你的管理员密码>>: ').strip()
48 if len(admin_name) > 0:
49 with open('管理员用户名和密码.txt', 'r', encoding='utf-8') as f:
50 line = f.read()
51 my_dic = eval(line)
52 if admin_name in my_dic and admin_password== my_dic[admin_name]:
53 print('%s欢迎登陆' % (admin_name))
54 func(*args, **kwargs)
55 with open('日志模块.txt', 'a+', encoding='utf-8') as f:
56 f.write('%s %s run' % (time.strftime('%Y-%m-%d %X'), func.__name__))
57 else:
58 print('%s认证失败' % (admin_name))
59 else:
60 print('输入的用户名不能为空')
61
62 return wrpper
63 return my_wrapper
64 @auth(auth_type = 'user_auth')
65 def user_auth():
66 print('用户登录认证'.center(20,'*'))
67 @auth(auth_type = 'credit_auth')
68 def credit_auth():
69 print('信用卡认证'.center(20,'*'))
70 @auth(auth_type = 'admin_auth')
71 def admin_auth():
72 print('管理员认证'.center(20,'*'))
73
74 '''
75 购物商城和购物车
76 '''
77 def shop_list():
78 my_shop_list = []
79 my_buy_list = []
80 with open('商品列表.txt','r+',encoding = 'utf-8') as f:
81 for item in f:
82 item.split(',')
83 my_shop_list.append(item)
84 print('目前商品所在的信息'.center(20, '*'))
85 for j in my_shop_list:
86 print(j,end = '')
87 print('
',end = '')
88 while True:
89 my_choice = input('请输入想要购买的商品序号>>: ').strip()
90 if my_choice.isdigit():
91 my_choice = int(my_choice)
92 if my_choice < len(my_shop_list) and my_choice > 0:
93 my_buy = my_shop_list[my_choice]
94 print(my_buy)
95 with open('我的购物列表.txt', 'a+', encoding='utf-8') as f:
96 f.write(my_buy)
97 break
98 else:
99 print('输入的商品编号错误')
100 continue
101 else:
102 print('输入的数字不合法')
103 continue
104
105
106 '''
107 清空购物车
108 '''
109 def my_delete_cart():
110 while True:
111 my_cart = []#我的购物车
112 with open('我的购物列表.txt','r+',encoding = 'utf-8') as f:
113 for line in f:
114 my_cart.append(line)
115 if my_cart != []:
116 my_choice = input('是否清空购物车,回答YES或者NO>>: ').strip()
117 print('我的购物车中的商品'.center(20,'*'))
118 for j in my_cart:
119 print(j,end = '')
120 if my_choice =='YES':
121 with open('我的购物列表.txt','w',encoding = 'utf-8') as f:
122 pass
123 print('购物车已经清空')
124 elif my_choice == 'NO':
125 print('请继续购物吧!')
126 else:
127 print('输入不正确,请重新输入')
128 else:
129 print('购物车里边还没有商品')
130 break
131
132
133
134 '''
135 购物车结算
136 '''
137 def my_pay():
138 while True:
139 print('购物结算'.center(20,'*'))
140 my_cart = []
141 my_trans = []
142 with open('我的购物列表.txt','r+',encoding = 'utf-8') as f:
143 for line in f:
144 my_cart.append(line)
145 if my_cart != []:
146 print('购物车清单'.center(20,'*'))
147 for j in my_cart:
148 my_new = j.split(',')
149 my_trans.append(my_new)
150 money = sum([int(i[2]) for i in my_trans])
151 print(money)
152 else:
153 print('你还没有消费过,快去买点你心仪的商品吧!')
154 break
155 my_choice = input('是否进行结账[合计%s人民币](请回答Y或者N)>>: '%(money)).strip()
156 if my_choice == 'N':
157 break
158 elif my_choice == 'Y':
159 credit_auth()#调用信用卡接口认证
160 my_credit_num = input('请输入你的信用卡号').strip()
161 with open('信用卡号和密码.txt','r+',encoding = 'utf-8') as f:
162 line = f.read()
163 my_dic = eval(line)
164 if my_credit_num not in my_dic:
165 print('认证的信用卡号不存在,请重新输入')
166 else:
167 with open('信用卡号和资金.txt','r+',encoding = 'utf-8') as f1:
168 line1 = f1.read()
169 my_dic1 = eval(line1)
170 your_credit = input('请输入你的信用卡号>>: ').strip()
171 your_password = input('请输入你的密码>>: ').strip()
172 if your_credit in my_dic1 and your_password == my_dic1[your_credit]:
173 print('你的账户总共的资金为%s'%(my_dic1[your_credit]))
174 your_limit = my_dic1[your_credit] - money
175 if your_limit >= 0:
176 my_dic1[your_credit] = your_limit
177 print('支付成功,当前信用卡余额为%s'%(your_limit))
178 else:
179 print('余额不足,请充值')
180 else:
181 print('输入的密码错误,请重新输入')
182 continue
183 '''
184 信用卡信息
185 '''
186 def credit_data():
187 while True:
188 with open('信用卡号和资金.txt','r+',encoding = 'utf-8') as f:
189 my_msg = f.read()
190 my_dic = eval(my_msg)
191 your_choice = input('请输入要查看信息的信用卡号>>: ').strip()
192 if your_choice in my_dic:
193 print('我的信用卡信息'.center(20,'*'))
194 print('持卡人信用卡号%s
持卡人余额%s'%(your_choice,my_dic[your_choice]))
195 else:
196 print('你输入的信用卡号不存在,请重新输入')
197 continue
198 choice = input('是否选择退出(是或者否)>>: ').strip()
199 if choice == '是':
200 print('欢迎下次查询')
201 break
202 else:
203 continue
204
205
206
207 '''
208 信用卡转账
209 '''
210 def my_trans():
211 while True:
212 with open('信用卡号和资金.txt','r+',encoding = 'utf-8') as f:
213 line = f.read()
214 my_dict = eval(line)
215 choice = input('请输入信用卡号>>: ').strip()
216 if choice in my_dict:
217 current_money = my_dict[choice]
218 trans_account = input('请输入你要转账的账号>>: ').strip()
219 if trans_account.isdigit():
220 if len(trans_account) == 10:
221 if trans_account in my_dict:
222 your_trans_money = input('请输入你的转账金额>>: ').strip()
223 if your_trans_money.isdigit():
224 money = int(your_trans_money)
225 with open('信用卡号和密码.txt','r+',encoding = 'utf-8') as f1:
226 line1 = f1.read()
227 my_dict1 = eval(line1)
228 your_password = input('请输入你的信用卡密码>>: ').strip()
229 if your_password == my_dict1[trans_account]:
230 if money < my_dict[trans_account]:
231 my_dict[trans_account] = my_dict[trans_account] - money
232 my_dict[choice] = my_dict[choice] + money
233 print('转账成功'.center(20,'*'))
234 break
235 else:
236 print('密码不正确,请重新输入')
237 else:
238 print('输入的金额不合法')
239 else:
240 print('输入的账号不存在')
241 else:
242 print('信用卡号的长度不合法')
243
244 '''
245 锁定用户
246 '''
247 def lock_user():
248 while True:
249 print('锁定用户'.center(20,'*'))
250 with open('用户.txt','r+',encoding = 'utf-8') as f:
251 line= f.read()
252 my_lst = eval(line)
253 choice = input('是否进行锁定用户(是或者否)>>: ').strip()
254 if choice == '否':
255 break
256 if choice == '是':
257 my_lock_user = input('请输入想要锁定的用户名>>: ').strip()
258 for in_lst in my_lst:
259 if my_lock_user in in_lst:
260 in_lst[1] = '已锁定'
261 print('%s用户已经锁定'%(my_lock_user))
262
263
264 else:
265 print('输入的用户名不存在')
266
267 '''
268 创建用户
269 '''
270 def new_user():
271 while True:
272 print('创建用户'.center(20,'*'))
273 with open('用户名和密码.txt','r+',encoding = 'utf-8') as f:
274 line = f.read()
275 my_dic = eval(line)
276 for key in my_dic:
277 print('系统已经有的用户:%s'%(key))
278 my_choice = input('请输入你要创建的用户名(选择是或者否)>>: ').strip()
279 if my_choice == '否':
280 break
281 if my_choice == '是':
282 user_name = input('请输入你想要创建的用户名>>: ').strip()
283 user_password = input('请输入创建用户的密码>>: ').strip()
284 if user_name not in my_dic:
285 if len(user_name) > 0 and len(user_password) > 0:
286 my_dic[user_name] = user_password
287 print('创建%s成功'%(user_name))
288 else:
289 print('输入的用户或者密码不能为空!')
290 else:
291 print('输入的用户已经存在')
292 '''
293 主函数接口
294 '''
295 def main():
296 print('购物商城ATM系统'.center(20,'*'))
297 while True:
298 print('欢迎来到ATM购物系统'.center(20,'*'))
299 choice = input('请输入选择的ID号>>: ').strip()
300 if choice == 'q':
301 print('再见'.center(20,'*'))
302 exit()
303 if choice.isdigit():
304 choice = int(choice)
305 if choice >= 1 and choice <= 4:
306 while True:
307 if choice == 1:
308 print('欢迎来到信用卡中心'.center(20,'*'))
309 credit_choice = input('请输入信用卡板块号>>: ').strip()
310 if credit_choice.isdigit():
311 credit_choice = int(credit_choice)
312 if credit_choice >= 1 and credit_choice <= 2:
313 if credit_choice == 1:
314 credit_data()#信用卡信息
315 break
316 elif credit_choice == 2:
317 my_trans()#信用卡转账信息
318 break
319 elif choice == 2:
320 print('欢迎来到购物中心'.center(20,'*'))
321 shopping_choice = input('请选择购物板块>>: ').strip()
322 if shopping_choice.isdigit():
323 shopping_choice = int(shopping_choice)
324 if shopping_choice >= 1 and shopping_choice <= 3:
325 while True:
326 if shopping_choice == 1:
327 shop_list()#购物商城和购物车
328 break
329 elif shopping_choice == 2:
330 my_delete_cart()#清空购物车板块
331 break
332 elif shopping_choice == 3:
333 my_pay()#购物车结算版块
334 break
335 else:
336 print('请输入正确的板块号')
337 elif choice == 3:
338 print('欢迎来到用户管理中心'.center(20,'*'))
339 admin_choice = input('请输入选择的板块号>>: ').strip()
340 if admin_choice.isdigit():
341 admin_choice = int(admin_choice)
342 if admin_choice >= 1 and admin_choice <= 3:
343 while True:
344 if admin_choice == 1:
345 user_auth()#用户认证板块
346 break
347 elif admin_choice == 2:
348 credit_auth()#信用卡认证
349 break
350 elif admin_choice == 3:
351 admin_auth()#管理员认证
352 break
353 elif choice == 4:
354 print('欢迎来到创建用户板块'.center(20,'*'))
355 user_choice = input('请输入选择的板块号>>: ').strip()
356 if user_choice.isdigit():
357 user_choice = int(user_choice)
358 if user_choice >= 1 and user_choice <= 2:
359 while True:
360 if user_choice == 1:
361 lock_user()#锁定用户板块
362 break
363 elif user_choice == 2:
364 new_user()#创建用户板块
365 break
366
367 else:
368 print('输入的板块号不正确')
369 break
370
371
372 main()