一、要求:
1、支持存钱,取款,借款,还款等功能
2、用户认证用装饰器
3、用户信息用文件形式保存
二、废话不多,上代码
1 import sys,os 2 Base_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 3 sys.path.append(Base_DIR) 4 from conf import Settings 5 from module import Serve 6 7 #认证用户Id和密码 8 def log(func): 9 def inner(*args,**kwargs): 10 user = input('>>>请输入用户名:') 11 pwd = input('>>>请输入密码:') 12 path = os.path.join(Base_DIR,'data','%s.text'% user) 13 try: 14 f = open(path,'r') 15 except Exception: 16 print('用户名或密码错误') 17 main() 18 dict = eval(f.read()) 19 20 if dict['user'] == user and dict['pwd'] == pwd: 21 print('验证通过') 22 f.close() 23 res = func(*args,**kwargs) 24 print('res is',res) 25 else: 26 print('账号或密码错误') 27 if res:return res 28 else:return dict 29 return inner 30 31 #注册新用户 32 def register(): 33 user= input('>>>请输入要使用的用户名:') 34 pwd = input('>>>请输入密码:') 35 pwdd = input('>>>请再次输入密码:') 36 if pwd == pwdd: 37 path = os.path.join(Base_DIR,'data', '%s.text'%user) 38 f = open(path, 'w') 39 dic = {'user':user,'pwd':pwd,'balance':0,'loan':20000,'has_loan':0} 40 f.write(str(dic)) 41 print('>>>注册成功,稍后会自动退出') 42 main() 43 else: 44 pass 45 46 47 #存钱 48 @log 49 def save(dic,num): 50 dic['balance'] += eval(num) 51 print('此次存入:%s,当前余额为:%s'%(num,dic['balance'])) 52 return dic 53 54 #支付 55 @log 56 def pay(dic,num): 57 if dic['balance'] >= eval(num): 58 dic['balance'] -= eval(num) 59 print('此次支付:%s,当前余额为:%d'%(num,dic['balance'])) 60 else: 61 print('当前余额仅剩%d'% dic['balance']) 62 return dic 63 64 #信用支付 65 @log 66 def loan(dic,num): 67 if dic['loan'] >= eval(num): 68 dic['loan'] -= eval(num) 69 dic['has_loan'] += eval(num) 70 print('此次支付:%s,信用余额为:%d'%(num,dic['loan'])) 71 else: 72 print('当前余额仅剩%d'% dic['loan']) 73 return dic 74 75 #还款 76 @log 77 def repay(dic,num): 78 if eval(num) <= dic['has_loan']: 79 dic['has_loan'] -= eval(num) 80 dic['loan'] += eval(num) 81 print('此次还款:%s,信用余额为:%d'%(num,dic['loan'])) 82 return dic 83 84 85 @log 86 def login(*args,**kwargs): 87 pass 88 89 def main(): 90 Serve.show(Settings.welcome) 91 inp = input('>>>请选择接下来的操作:') 92 dic = eval(Settings.welcome[inp])() 93 user = dic['user'] 94 while True: 95 path = os.path.join(Base_DIR, 'data', '{}.text'.format(user)) 96 f = open(path,'r') 97 dic = eval(f.read()) 98 f.close() 99 100 while True: 101 Serve.show(Settings.choice) 102 inp = input('>>>请选择接下来的操作:') 103 if inp == '5': 104 f = open(path, 'w') 105 f.write(str(dic)) 106 print('你的最终信息>>>',dic) 107 exit() 108 num = input('>>>请输入数额:') 109 dic = eval(Settings.choice[inp])(dic,num) 110 111 112 main()
Serve 模块
1 def show(dic): 2 for key in dic: 3 print('%s>>>%s'%(key,dic[key]))
执行结果:
E:\Python36-32\python.exe E:/PycharmProjects/ATM/module/ATM.py 1>>>register 2>>>login >>>请选择接下来的操作:2 >>>请输入用户名:464811597 >>>请输入密码:123 用户名或密码错误 1>>>register 2>>>login >>>请选择接下来的操作:2 >>>请输入用户名:464811697 >>>请输入密码:123 验证通过 res is None 1>>>save 2>>>pay 3>>>loan 4>>>repay 5>>>exit >>>请选择接下来的操作:1 >>>请输入数额:10000 >>>请输入用户名:464811697 >>>请输入密码:123 验证通过 此次存入:10000,当前余额为:10700 res is {'user': '464811697', 'pwd': '123', 'balance': 10700, 'loan': 19700, 'has_loan': 300} 1>>>save 2>>>pay 3>>>loan 4>>>repay 5>>>exit >>>请选择接下来的操作:2 >>>请输入数额:5000 >>>请输入用户名:464811697 >>>请输入密码:123 验证通过 此次支付:5000,当前余额为:5700 res is {'user': '464811697', 'pwd': '123', 'balance': 5700, 'loan': 19700, 'has_loan': 300} 1>>>save 2>>>pay 3>>>loan 4>>>repay 5>>>exit >>>请选择接下来的操作:3 >>>请输入数额:400 >>>请输入用户名:464811697 >>>请输入密码:123 验证通过 此次支付:400,信用余额为:19300 res is {'user': '464811697', 'pwd': '123', 'balance': 5700, 'loan': 19300, 'has_loan': 700} 1>>>save 2>>>pay 3>>>loan 4>>>repay 5>>>exit >>>请选择接下来的操作:5 你的最终信息>>> {'user': '464811697', 'pwd': '123', 'balance': 5700, 'loan': 19300, 'has_loan': 700} Process finished with exit code 0