编写ATM程序实现下述功能,数据来源于文件db.txt
0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)
下述操作,要求登录后才能操作
1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
4、查询余额功能:输入账号查询余额
def user():
# 用户信息读取
txt = 'db.txt'
dict_user = {}
def read_user():
with open(txt, 'rb') as f:
for line in f:
line = line.decode('utf-8')
s = line.strip().split(":")
dict_user[s[0]] = [s[1], s[2], s[3]]
return dict_user
return read_user
def w_user(dict_user=None):
# 用户信息写入
txt = 'db.txt'
def write_user():
with open(txt, 'wb') as f:
for x in dict_user:
f.write(f'{x}:{dict_user.get(x)[0]}:{dict_user.get(x)[1]}:'
f'{dict_user.get(x)[2]}\n'.encode('utf-8'))
return dict_user
return write_user
def register():
# 注册功能
dict_user = user()()
print('注册'.center(50, '='))
username = input('请输入用户名:').strip()
if username in dict_user:
print("用户名存在")
time.sleep(0.5)
else:
password = input('请输入密码:').strip()
again_pwd = input('请再次输入密码:').strip()
if password == again_pwd:
print("注册成功")
with open('db.txt', 'ab') as f:
f.write(f'{username}:{password}:{0}:{0}\n'.encode('utf-8'))
time.sleep(0.5)
else:
print('密码输入不一致')
def login():
# 登录功能
print('登录'.center(50, '='))
dict_user = user()()
if not dict_username['user']:
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
if username not in dict_user:
print("用户名不存在,请注册")
else:
in_name = dict_user.get(username)
if in_name[2] == '3':
print('账户已经被锁定,无法登录')
else:
if password == in_name[0]:
print('登录成功!')
dict_username['user'] = username
print("即将跳转回首页")
time.sleep(0.5)
else:
if 2 - int(in_name[2]) == 0:
print("账户已锁定")
else:
print(f"密码错误,你还有{2 - int(in_name[2])}次机会")
in_name[2] = int(in_name[2]) + 1
w_user(dict_user)()
time.sleep(0.5)
else:
print("账户已经登录")
def pay_money():
# 充值功能
print('充值'.center(50, '='))
dict_user = user()()
if not dict_username['user']:
username = input("请输入要充值的账户").strip()
if username not in dict_user:
print("充值的账户不存在")
else:
money = input("请输入要充值的金额").strip()
if not money.isdigit() or int(money) < 0:
print("请输入正确的金额")
else:
print(f"您将为{username}用户,充值{money}元")
time.sleep(0.5)
again = input("确认无误请输入Y/y,输入其他返回").strip()
if again == 'Y' or again == 'y':
dict_user[username][1] = int(dict_user[username][1]) + int(money)
w_user(dict_user)()
print("充值成功!")
time.sleep(0.5)
else:
print("充值失败!")
time.sleep(0.5)
else:
print("账户未登录,请先登录")
def transfer():
# 转账功能
print('转账'.center(50, '='))
dict_user = user()()
if not dict_username['user']:
username = input("请输入转账的用户:").strip()
if not username in dict_user:
print("用户不存在")
elif username == dict_username['user']:
print("不能为自己的账户转账")
else:
money = input("请输入要转账的金额:").strip()
user_money = int(dict_user.get(dict_username['user'])[1])
# print(user_money)
if not money.isdigit() or int(money) < 0:
print("请输入正确的金额")
elif int(money) > user_money:
print("账户金额不足")
else:
print(f"您将要为{username}账户,转账{money}元")
time.sleep(0.5)
again = input("确认无误请输入Y/y,输入其他返回").strip()
if again == 'Y' or again == 'y':
print("转账成功!")
dict_user.get(dict_username['user'])[1] = user_money - int(money)
dict_user.get(username)[1] = int(dict_user.get(username)[1]) + int(money)
w_user(dict_user)()
time.sleep(0.5)
else:
print("转账失败!")
else:
print("账户未登录,请先登录")
def withdraw():
# 提现功能
print('提现'.center(50, '='))
dict_user = user()()
if not dict_username['user']:
money = input("请输入要提现的金额:").strip()
user_money = int(dict_user.get(dict_username['user'])[1])
if not money.isdigit() or int(money) < 0:
print("请输入正确的金额")
elif int(money) > user_money:
print("账户金额不足")
else:
print(f"您将要为提现{money}元")
time.sleep(0.5)
again = input("确认无误请输入Y/y,输入其他返回").strip()
if again == 'Y' or again == 'y':
print("提现成功!")
dict_user.get(dict_username['user'])[1] = user_money - int(money)
w_user(dict_user)()
time.sleep(0.5)
else:
print("提现失败!")
else:
print("账户未登录,请先登录")
def check_money():
# 查询余额功能
print('查询'.center(50, '='))
dict_user = user()()
if not dict_username['user']:
print(f'账户名:{dict_username["user"]}')
print(f'账户余额:{dict_user.get(dict_username["user"])[1]}元')
else:
print("账户未登录,请先登录")
dict_func = {
'0': ['退出', exit],
'1': ['登录', login],
'2': ['注册', register],
'3': ['充值', pay_money],
'4': ['转账', transfer],
'5': ['提现', withdraw],
'6': ['查询', check_money],
}
dict_username = {'user': None}
import time
while 1:
print(''.center(52, '='))
print('欢迎来到ATM系统')
for x in dict_func:
print(x + ':' + dict_func.get(x)[0])
in_num = input("请输入对应功能的编号:\n")
if not in_num.isdigit():
print("请输入正确的数字编号")
if in_num in dict_func:
dict_func.get(in_num)[1]()
else:
print("输入的功能编号不存在")