小练习:写一个模拟的ATM机

一、要求:

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

猜你喜欢

转载自www.cnblogs.com/fly10086/p/12349064.html