一、编写一个ATM取款机,功能,界面如下:
1). 注册新用户
2). 取款
3). 存款
4). 转账
5). 查询余额
6). 冻结账户
7). 修改密码
8). 退出
9).登陆
1、注册用户,并存入本地文件count.txt中。其中文件格式如下:
用户名 密码 账户余额 状态
tom 1234 100000 正常
其中,注册新用户时,默认账户余额为100元、状态为正常。
2、取款、存款时都需要验证用户身份
3、取款的金额必须小于账户余额
4、冻结账户为修改账户状态为冻结
5、修改密码时,需要验证原密码后,方能修改
二、修改上述的ATM取款系统,要求如下:
1). 每个选项操作前,显示用户欢迎信息;
eg: "***************ATM系统转账操作***************"
eg: "***************ATM系统存款操作***************"
2). 用户执行操作前显示操作时间;
3). 用户执行后显示结束时间;
4).要求时间格式不是时间戳,而是我们可以看懂的即(YYYY-MM-DD);
1、要求使用日志,进行记录
2、采用装饰器进行日志的记录
import os
import logging
import datetime
#日志
def log(msg):
logger=logging.getLogger('pythonlogger')
logger.setLevel(logging.INFO)
#创建一个handler,用来将日志内容存入文件
file=logging.FileHandler('test.log')
file.setLevel(logging.INFO)
#创建一个handler,用来将日志输出到控制台
console=logging.StreamHandler()
console.setLevel(logging.INFO)
#定义日志输出格式
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file.setFormatter(formatter)
console.setFormatter(formatter)
#将logger添加到handler
logger.addHandler(file)
logger.addHandler(console)
logger.info(msg)
logger.removeHandler(file)
logger.removeHandler(console)
def my_log(f):
def inner(*var):
if f(*var):
log(f.__name__+'操作成功!')
else:
log(f.__name__+'操作失败!')
return inner
#菜单项
def menu():
print('*'*30)
print('1. 注册新用户')
print('2. 取款')
print('3. 存款')
print('4. 转账')
print('5. 查询余额')
print('6. 冻结账户')
print('7. 修改密码')
print('8. 退出')
print('9.登陆')
print('*'*30)
#注册功能
#参数:无
#返回值:True or False
#描述:提示用户输入用户名和密码完成注册
@my_log
def register():
f1=open('count.txt','a+',encoding='UTF-8')
dic={}
flag=False
while True:
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
username=input('请输入你的用户名:')
userpass=input('请输入你的密码:')
if username in dic.keys():
print('用户名已存在')
continue
else:
f1.write(username+' '+userpass+' '+'100 正常\n')
os.system('cls')
print('注册成功!')
flag=True
break
return flag
f1.flush()
f1.close()
#取款功能
@my_log
def get_draw():
flag=False
f1=open('count.txt','r',encoding='UTF-8')
list1=[]
key=[]
dic={}
rest_money=[]
while True:
draw_money=int(input('请输入你的取款金额:'))
dic=dict()
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
if int(dic[user[0]][2])>draw_money:
dic[user[0]][2]=str(int(dic[user[0]][2])-draw_money)
else:
print('余额不足!')
break
f1=open('count.txt','w+',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
for i in range(len(dic)):
f1.write(' '.join(dic[list1[i]]))
f1.write('\n')
print('取款成功')
flag=True
break
f1.flush()
f1.close()
return flag
#存款功能
@my_log
def keep_money():
flag=False
f1=open('count.txt','r+',encoding='UTF-8')
list1=[]
key=[]
dic={}
while True:
draw_money=int(input('请输入你的存款款金额:'))
dic=dict()
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
dic[user[0]][2]=str(int(dic[user[0]][2])+draw_money)
f1=open('count.txt','w+',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
for i in range(len(dic)):
f1.write(' '.join(dic[list1[i]]))
f1.write('\n')
print('存款成功')
flag=True
break
f1.flush()
f1.close()
return flag
#转账
def exchange():
flag=False
f1=open('count.txt','r',encoding='UTF-8')
list1=[]
key=[]
dic={}
rest_money=[]
while True:
draw_money=int(input('请输入你的转账金额:'))
draw_people=input('请输入你要转账的用户名:')
dic=dict()
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
if int(dic[user[0]][2])>draw_money:
dic[user[0]][2]=str(int(dic[user[0]][2])-draw_money)
dic[draw_people][2]=str(int(dic[draw_people][2])+draw_money)
else:
print('余额不足!')
break
f1=open('count.txt','w+',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
for i in range(len(dic)):
f1.write(' '.join(dic[list1[i]]))
f1.write('\n')
print('转账成功')
flag=True
break
f1.flush()
f1.close()
return flag
#查询功能
@my_log
def look():
flag=False
f1=open('count.txt','r',encoding='UTF-8')
dic={}
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
a=dic[user[0]][2]
print('账户余额为{0}'.format(a))
flag=True
return flag
#冻结功能
@my_log
def ice_user():
flag=False
f1=open('count.txt','r',encoding='UTF-8')
dic={}
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
dic[user[0]][3]='冻结'
f1=open('count.txt','w+',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
for i in range(len(dic)):
f1.write(' '.join(dic[list1[i]]))
f1.write('\n')
flag=True
print('冻结成功!')
return flag
#退出功能
def quit_user():
print('退出成功!')
exit()
#修改密码
@my_log
def change():
flag= False
f1=open('count.txt','r',encoding='UTF-8')
list1=[]
key=[]
value=[]
dic={}
log=0
while True:
old_password=input('你已登录,请输入旧密码进行验证:')
new_password=input('请输入新密码进行更改:')
dic=dict()
while True:
f1.readline()
l1=f1.readline()
if l1=='':
break
else:
list1=l1.split()
dic[list1[0]]=list1
if dic[user[0]][1]==old_password:
dic[user[0]][1]=new_password
else:
print('密码不正确!')
break
f1=open('count.txt','w+',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
for i in range(len(dic)):
f1.write(' '.join(dic[list1[i]]))
f1.write('\n')
print('修改密码成功!')
flag=True
break
f1.flush()
f1.close()
return flag
#登录功能
@my_log
def login():
flag=False
f1=open('count.txt','r',encoding='UTF-8')
list1=[]
key=[]
value=[]
dic={}
log=0
while True:
username=input('请输入你的用户名:')
userpass=input('请输入你的密码:')
for line in f1:
list1.append(line.split())
for i in list1:
key.append(i[0])
value.append(i[1])
dic=dict(zip(key,value))
if username in dic.keys():
if dic[username]==userpass:
print('登陆成功!')
flag=True
log_tip=1
user.append(username)
break
else:
print('用户名或密码不正确!')
f1.flush()
f1.close()
return flag
def is_which(msg):
if msg=='1':
msg='注册新用户'
elif msg=='2':
msg='取款'
elif msg=='3':
msg='存款'
elif msg=='4':
msg='转账'
elif msg=='5':
mag='查询余额'
elif msg=='6':
msg='冻结用户'
elif msg=='7':
msg='修改密码'
elif msg=='8':
msg='退出'
else:
msg='登录'
return msg
#提示功能
def tip(msg):
os.system('cls')
print("***************ATM系统{0}操作***************".format(is_which(msg)))
def my_time():
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
user=[]
log_tip=0
if __name__=='__main__':
f1=open('count.txt','w',encoding='UTF-8')
f1.write('用户名 密码 账户余额 状态\n')
f1.close()
while True:
menu()
msg=input('请输入业务编号:')
if msg=='1':
tip(msg)
my_time()
register()
my_time()
elif msg=='2':
if log_tip==1:
tip(msg)
my_time()
get_draw()
my_time()
else:
print('请先登录')
elif msg=='3':
if log_tip==1:
tip(msg)
my_time()
keep_money()
my_time()
else:
print('请先登录')
elif msg=='4':
if log_tip==1:
tip(msg)
my_time()
exchange()
my_time()
else:
print('请先登录')
elif msg=='5':
if log_tip==1:
tip(msg)
my_time()
look()
my_time()
else:
print('请先登录')
elif msg=='6':
if log_tip==1:
tip(msg)
my_time()
ice_user()
my_time()
else:
print('请先登录')
elif msg=='7':
if log_tip==1:
tip(msg)
my_time()
change()
my_time()
else:
print('请先登录')
elif msg=='8':
tip(msg)
my_time()
quit_user()
my_time()
elif msg=='9':
tip(msg)
my_time()
login()
my_time()
else:
pass