首页 > 其他 > 详细

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

时间:2020-02-23 13:31:17      阅读:59      评论:0      收藏:0      [点我收藏+]

一、要求:

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

 

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

原文:https://www.cnblogs.com/fly10086/p/12349064.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!