用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+购物车(改进)的主要内容,如果未能解决你的问题,请参考以下文章