用python编写ATM+购物车(改进)

Posted taozi123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python编写ATM+购物车(改进)相关的知识,希望对你有一定的参考价值。

购物车程序要求:

1.允许用户根据商品编号购买商品。

2.用户选择商品后,检测余额是否充足,够就直接扣款,不够就提醒。

3.可随时推出,退出时打印以购买商品,购买商品数量及余额。

ATM程序要求:

1.管理账户,添加账户保存到文件。

2.还款、查余额、提款、冻结账户。

3.从购物车收到付款要求时付款。

改进:

1.主要函数保存在core文件中,bin文件中保存入口文件

2.编写账户密码验证和冻结验证函数,之后再由各模块调用

3.美化输出

目录结构:

ATM入口程序:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:James Tao
 4 
 5 import os
 6 import sys
 7 import pickle
 8 
 9 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
10 
11 #调用程序
12 core_DIR = BASE_DIR + \'\\\\\' + \'core\'
13 sys.path.append(core_DIR)# 添加环境变量
14 
15 
16 
17 while True:
18     menu=input(\'\'\'
19 请输入对应序号选择功能:
20 1.注册
21 2.查账单
22 3.支付
23 4.还款
24 5.提款
25 6.冻结
26 输入其它退出
27     \'\'\')
28 
29     if menu==\'1\':
30 
31         #注册
32         from atmfunction import register
33         register()
34 
35     elif menu==\'2\':
36         from atmfunction import check
37 
38         check()
39 
40 
41     elif menu==\'3\':
42 
43         r_money = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + \'money\' + \'.txt\', \'rb\')
44         list_money = pickle.load(r_money)
45         r_money.close()
46 
47         money=list_money[0]
48         print(\'您需要支付的金额为:\',money)
49 
50         from atmfunction import pay
51         pay(money)
52 
53         exit()
54 
55     elif menu==\'4\':
56 
57         repaymoney=int(input(\'请输入您要还款的金额:\'))
58 
59         from atmfunction import repay
60 
61         repay(repaymoney)
62 
63     elif menu==\'5\':
64 
65         drawmoney=int(input(\'请输入提款金额:\'))
66 
67         from atmfunction import draw
68 
69         draw(drawmoney)
70 
71     elif menu==\'6\':
72 
73         from atmfunction import freeze
74 
75         freeze()
76 
77 
78     else:
79         exit()

账号密码验证和冻结验证程序:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:James Tao
 4 import os
 5 import sys
 6 
 7 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 8 
 9 def useraccess(name,passwd):
10 
11     atmuser = name
12     atmpasswd = passwd
13 
14     # 判断账户是否被冻结
15     if os.path.exists(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + \'atmfreezeuser\' + \'.txt\'):
16 
17         # 读取冻结账户文件内账户
18         r_freezeuser = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + \'atmfreezeuser\' + \'.txt\', \'rb\')
19         freezeuser = pickle.load(r_freezeuser)
20         r_freezeuser.close()
21 
22         if atmuser in freezeuser:
23             # 如果账户被冻结直接退出函数
24             print(\'该账户已被冻结\')
25             return False
26 
27     # 验证用户是否存在
28     if os.path.exists(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atmpasswd\' + \'.txt\'):
29         # 读出用户信息,登陆密码
30         r_atmuser_passwd = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atmpasswd\' + \'.txt\', \'rb\')
31         read_atmuser_passwd = pickle.load(r_atmuser_passwd)
32         r_atmuser_passwd.close()
33 
34         # 判断输入的账号是否存在密码是否正确
35         if atmuser in read_atmuser_passwd and atmpasswd == read_atmuser_passwd[atmuser]:
36             return True
37         else:
38             print(\'密码错误!\')
39             return False
40     else:
41         print(\'账户不存在!\')
42         return False

ATM功能程序:

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 # Author:James Tao
  4 
  5 import os
  6 import sys
  7 import pickle
  8 
  9 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 10 
 11 #将登陆验证地址加入系统环境变量
 12 core_DIR=BASE_DIR+\'\\\\\'+\'core\'
 13 sys.path.append(core_DIR)
 14 
 15 #注册装饰器
 16 def register_wrapper(func):
 17     def wrapper(*args, **kwargs):
 18 
 19         atmuser = input(\'请输入用户名(由字母数字下划线组成):\')
 20         atmpasswd = input(\'请输入密码(由字母数字下划线组成):\')
 21 
 22         # 将用户密码存入字典
 23         atm_passwd = {}
 24         atm_passwd[atmuser] = atmpasswd
 25 
 26         # 将用户密码字典写入文件
 27         w_atm_passwd = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atmpasswd\' + \'.txt\', \'wb\')
 28         pickle.dump(atm_passwd, w_atm_passwd)
 29         w_atm_passwd.close()
 30 
 31         # 将用户信息存入字典
 32         atmuser_info = {}
 33         atmuser_info[\'balance\'] = 50000
 34 
 35         print(\'\'\'用户{_atmuser}恭喜您注册成功,您的信用卡账户余额为{_balance}元。
 36                     \'\'\'.format(_atmuser=atmuser, _balance=atmuser_info[\'balance\']))
 37 
 38         # 将用户信息字典写入文件
 39         w_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'wb\')
 40         pickle.dump(atmuser_info, w_atmuser_info)
 41         w_atmuser_info.close()
 42 
 43     return wrapper
 44 
 45 @register_wrapper
 46 def register():
 47     pass
 48 
 49 
 50 #登陆装饰器
 51 def check_wrapper(func):
 52     def wrapper(*args,**kwargs):
 53 
 54         atmuser = input(\'请输入用户名:\')
 55         atmpasswd = input(\'请输入密码:\')
 56 
 57         # 账户冻结和密码验证
 58         from atmuseraccess import useraccess
 59         login = useraccess(atmuser,atmpasswd)
 60 
 61         # 判断账户是否验证成功
 62         if login:
 63             # 读出用户信息,显示账户余额
 64             r_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'rb\')
 65             read_atmuser_info = pickle.load(r_atmuser_info)
 66             r_atmuser_info.close()
 67 
 68             need_repay=50000-read_atmuser_info[\'balance\']
 69 
 70             # 显示账户余额
 71             print(\'\'\'
 72 -----用户{_atmuser}登陆成功!您的账户信息如下-----\\n
 73 可用余额:{_balance}元\\n
 74 需还款金额:{_needrepay}元
 75                 \'\'\'.format(_atmuser=atmuser, _balance=read_atmuser_info[\'balance\'],_needrepay=need_repay))
 76 
 77 
 78     return wrapper
 79 
 80 @check_wrapper
 81 def check():
 82     pass
 83 
 84 #支付
 85 def pay_wrapper(func):
 86     def wrapper(*args,**kwargs):
 87 
 88         print(\'您好!请登录ATM!\')
 89         atmuser = input(\'请输入用户名:\')
 90         atmpasswd = input(\'请输入密码:\')
 91 
 92         # 账户冻结和密码验证
 93         from atmuseraccess import useraccess
 94         login = useraccess(atmuser,atmpasswd)
 95 
 96         #验证成功
 97         if login:
 98             # 读出用户信息,显示账户余额
 99             r_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'rb\')
100             read_atmuser_info = pickle.load(r_atmuser_info)
101             r_atmuser_info.close()
102 
103             # 显示账户余额
104             print(\'\'\'用户{_atmuser}登陆成功,您的账户余额为{_balance}元。
105             \'\'\'.format(_atmuser=atmuser, _balance=read_atmuser_info[\'balance\']))
106 
107             paymoney = args[0]
108             print(\'您需要付款的金额为:%s元\' % paymoney)
109             if paymoney <= read_atmuser_info[\'balance\']:
110 
111                 pay_or_out = input(\'确定付款请输入Y:\')
112                 if pay_or_out==\'Y\':
113 
114                     #计算余额
115                     balance=read_atmuser_info[\'balance\']-paymoney
116 
117                     # 将用户信息存入字典
118                     atmuser_info = {}
119                     atmuser_info[\'balance\'] = balance
120 
121                     #存入文件
122                     w_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'wb\')
123                     pickle.dump(atmuser_info, w_atmuser_info)
124                     w_atmuser_info.close()
125 
126                     #支付成功更改支付成功中间文件
127                     pay_accomplished=[\'accomplished\']
128                     w_pay_accomplished=open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + \'pay_accomplish\' + \'.txt\', \'wb\')
129                     pickle.dump(pay_accomplished, w_pay_accomplished)
130                     w_pay_accomplished.close()
131 
132                 else:
133                     print(\'验证失败!\')
134 
135             else:
136                 print(\'支付失败!原因:余额不足!\')
137     return wrapper
138 
139 @pay_wrapper
140 def pay():
141     pass
142 
143 #还款
144 def repay_wrapper(func):
145     def wrapper(*args,**kwargs):
146 
147         print(\'您好!请登录ATM!\')
148         atmuser = input(\'请输入用户名:\')
149         atmpasswd = input(\'请输入密码:\')
150 
151         # 账户冻结和密码验证
152         from atmuseraccess import useraccess
153         login = useraccess(atmuser,atmpasswd)
154 
155         #验证成功
156         if login:
157 
158             # 读出用户信息,显示账户余额
159             r_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'rb\')
160             read_atmuser_info = pickle.load(r_atmuser_info)
161             r_atmuser_info.close()
162 
163             # 显示账户余额和需还款金额
164             need_repaymoney=50000-read_atmuser_info[\'balance\']
165             print(\'\'\'
166 -----用户{_atmuser}登陆成功,您的账户信息如下-----
167 可用余额:{_balance}元\\n
168 需还款金额:{_needrepaymoney}元
169                     \'\'\'.format(_atmuser=atmuser, _balance=read_atmuser_info[\'balance\'],_needrepaymoney=need_repaymoney))
170 
171 
172             repaymoney = args[0]
173             print(\'您将要还款的金额为:%s元\' % repaymoney)
174             if repaymoney <= need_repaymoney:
175 
176                 repay_or_out = input(\'确定还款请输入Y:\')
177                 if repay_or_out == \'Y\':
178 
179                     # 计算余额
180                     balance = read_atmuser_info[\'balance\'] + repaymoney
181 
182                     # 将用户信息存入字典
183                     atmuser_info = {}
184                     atmuser_info[\'balance\'] = balance
185 
186                     # 存入文件
187                     w_atmuser_info = open(BASE_DIR + \'\\\\\' + \'docs\' + \'\\\\\' + atmuser + \'atminfo\' + \'.txt\', \'wb\')
188                     pickle.dump(atmuser_info, w_atmuser_info)
189                     w_atmuser_info.close()
190 
191                     print(\'还款成功!\')
192 
193                 else:
194                     print(\'验证失败!\')
195 
196             else:
197                 print(\'还款失败!原因:超出需还款金额!\')
198 
199 
200 
201 
202     return wrapper
203 
204 @repay_wrapper
205 def repay():
206     pass
207 
208 #提款
209 def draw_wrapper(func):
210     def wrapper(*args,**kwargs):
211 
212         print(\'您好!请登录ATM!\')
213         atmuser = input(\'请输入用户名:\')
214         atmpasswd = input(\'请输入密码:\')
215 
216         # 账户冻结和密码验证
217         from atmuseraccess import useraccess
218         login = useraccess(atmuser,atmpasswd)
219 
220         #验证成功
221         if login:
222 
223             # 读出用户信息,显示

以上是关于用python编写ATM+购物车(改进)的主要内容,如果未能解决你的问题,请参考以下文章

python练习_module02-1-ATM+购物车

python- ATM与购物商城

python实现购物车+ATM机 第五天

Python_购物商城ATM

Python_购物商城ATM

Python 基础 - Day 5 Assignment - ATM 取款机