1 # -*- coding: utf-8 -*-
2 """
3 扩展需求:
4 1.用户下一次登录后 输入用户名密码 直接回到上次得状态 即上次消费得余额 物品 再次登录可继续购买
5 2.允许查询之前得消费记录
6 """
7 import os
8
9 goods = [
10 {"name": "电脑", "price": 1999},
11 {"name": "鼠标", "price": 10},
12 {"name": "游艇", "price": 20},
13 {"name": "美女", "price": 998}
14 ]
15
16
17 def show_goods():
18 # 展示商品列表
19 print('展示商品列表'.center(20,'-'))
20 for index, i in enumerate(goods):
21 print('%d. %s %d' % (index, i['name'], i['price']))
22
23
24 def judge_is_buy():
25 # 判断用户曾经是否购买过商品
26 if os.path.exists('last_goods_new.txt'):
27 last_history = []
28 f = open('last_goods_new.txt', 'r', encoding='utf-8')
29 for line in f:
30 last_history = eval(line)
31 print('这是您第\033[1;31m%d\033[0m次登录,您上次消费余额\033[1;31m%s\033[0m' % (last_history[0]+1, last_history[1]))
32 for index, i in enumerate(last_history[2], 1):
33 print('%d. %s %s' % (index, i['name'], i['price']))
34 return last_history[0], last_history[1]
35 else:
36 return False
37
38
39 def save_to_file(salary, buy_goods, buy_count):
40 # 本次购买商品的记录存到文件中
41 f = open('last_goods_new.txt', 'a', encoding='utf-8')
42 f.write('%d,%s,%s\n' % (buy_count, salary, buy_goods))
43 f.close()
44
45
46 def show_buy_goods(salary, buy_goods, buy_count):
47 # 展示本次购买的商品
48 print('本次:您够买了\033[1;31m%s\033[0m件商品,余额为\033[1;31m%s\033[0m' % (len(buy_goods),salary))
49 for index, i in enumerate(buy_goods, 1):
50 print('%d. %s %d' % (index, i['name'], i['price']))
51 save_to_file(salary, buy_goods, buy_count)
52
53
54 def search_history(history_num):
55 # 查询购买记录
56 f = open('last_goods_new.txt', 'r', encoding='utf-8')
57 for line in f:
58 if history_num == eval(line)[0]:
59 print(eval(line))
60 print('您第%s次购买了:'%history_num)
61 for line in eval(line)[2]:
62 print('%s'%line['name'])
63 break
64
65
66 def buy_goods_now(salary, buy_count):
67 # 当前时刻 购买商品
68 show_goods()
69 buy_goods = []
70 while True:
71 choice = input('请选择购买商品的编号(输入q表示退出,输入x表示查询历史购买情况):').strip()
72 if choice.isdigit():
73 choice = int(choice)
74 if choice < len(goods):
75 if salary >= goods[choice]['price']:
76 buy_goods.append(goods[choice])
77 salary -= goods[choice]['price']
78 print('商品\033[1;35;46m%s\033[0m已加入购物车' % goods[choice]['name'])
79 continue
80 else:
81 print('您的余额不足,请重新选择商品')
82 continue
83 else:
84 print('编号不在商品范围内,请重新输入')
85 continue
86 elif choice == 'q':
87 show_buy_goods(salary, buy_goods, buy_count)
88 exit()
89 elif choice == 'x':
90 if os.path.exists('last_goods_new.txt'):
91 history_num = input('请输入历史纪录编号:').strip()
92 if history_num.isdigit():
93 history_num = int(history_num)
94 search_history(history_num)
95 else:
96 print('请重新选择')
97
98 else:
99 print('请重新输入')
100 continue
101
102
103 def login(username,password):
104 # 登录认证
105 _username = "alice"
106 _password = "123"
107 if username == _username and password == _password:
108 print('登录成功'.center(20, '-'))
109 data = judge_is_buy()
110 if data:
111 buy_count = data[0]+1
112 salary = data[1]
113 buy_goods_now(salary, buy_count)
114 else: # 用户第一次登录
115 while True:
116 salary = input('请输入工资:').strip()
117 if salary.isdigit():
118 salary = int(salary)
119 elif len(salary.split('.')) == 2 and salary.split('.')[0].isdigit() and salary.split('.')[1].isdigit():
120 salary = float(salary)
121 else:
122 print('请重新输入工资:')
123 continue
124 buy_goods_now(salary, 1)
125 else:
126 return False
127
128
129 def main():
130 # 主函数
131 while True:
132 username = input('请输入用户名(输入q表示退出):').strip()
133 if username == 'q':
134 break
135 password = input('请输入密码(输入q表示退出):').strip()
136 if password == 'q':
137 break
138 if not login(username, password): continue
139
140
141 if __name__ == '__main__':
142 main()