第三周周末作业
编写ATM程序实现下述功能,数据来源于文件db.txt
0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
def register():
tage = True
while tage:
print(\'<<注册账号>>\')
user = input(\'请输入账号: \').strip()
pwd = input(\'请输入密码: \').strip()
if not pwd.isdigit():
print(\'密码必须输入数字!\')
continue
pwd1 = input(\'请确认密码: \').strip()
if pwd1 == pwd:
print(\'注册成功\')
with open(\'db.txt\', mode=\'at\', encoding=\'utf-8\') as f:
f.write(f\'{user}:{pwd}\n\')
return
register()
1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录
import time
import os
user_info = {\'user\': None}
def login(username):
while True:
count = 0
dic = {}
with open(\'db.txt\', mode=\'rt\', encoding=\'utf-8\') as f1:
for line in f1:
user, pwd = line.strip().split(\':\')
dic[user] = pwd
if username not in dic:
print(f\'账户{username}未注册,请先注册\')
register()
continue
elif os.path.exists(f\'{username}.txt\'):
print(f\'当前账户{username}已被锁定,五分钟后解锁\')
time.sleep(3)
os.remove(f\'{username}.txt\')
print(f\'当前账户{username}解锁成功\')
elif user_info.get(\'user\') == username:
print(f\'当前账户{username}也登录\')
return
else:
print(f\'当前账户{username}还未登录,请先输入密码登录\')
while count < 3:
pwd = input(\'请输入密码: \').strip()
if not pwd.isdigit():
print(\'密码必须输入数字!\')
continue
elif pwd == dic.get(username):
print(f\'{username}登录成功!\')
user_info[\'user\'] = username
break
else:
count += 1
print(f\'当前用户{username}密码错误!\')
else:
with open(f\'{username}.txt\', mode=\'wt\', encoding=\'utf-8\') as f:
pass
print(f\'当前用户{username}已锁定\')
# 文件db.txt内容:
# tom:111
# egon:222
# tank:333
login(\'tom\')
下述操作,要求登录后才能操作
1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
# 文件db1.txt内容:
# tom:1
# egon:100
# tank:1000
user_info = {\'uesr\': None}
def pay_money(username, money):
\'\'\'
:param username: 充值账户
:param money: 充值金额
:return:
\'\'\'
if user_info.get(\'user\') != username:
print(f\'当前账户{username}未登录,请先登录!\')
login(username)
else:
dic = {}
with open(\'db1.txt\', mode=\'rt\', encoding=\'utf-8\') as f:
for line in f:
user, principal = line.strip().split(\':\')
principal = int(principal)
dic[user] = principal
dic[username] += money
with open(\'db1.txt\', mode=\'wt\', encoding=\'utf-8\') as f:
for key, value in dic.items():
f.write(f\'{key}:{value}\n\')
2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
user_info = {\'uesr\': None}
def transfer(username):
\'\'\'
:param userA: 转账用户
:return:
\'\'\'
if user_info.get(\'user\') != username:
print(f\'当前账户{username}未登录,请先登录!\')
login(username)
else:
while True:
username1=input(\'输入收款账户:\').strip()
money=input(\'输入转账金额:\').strip()
dic = {}
with open(\'db1.txt\', mode=\'rt\', encoding=\'utf-8\') as f:
for line in f:
user, principal = line.strip().split(\':\')
principal = int(principal)
dic[user] = principal
if username1 not in dic:
print(\'收款账户不存在!\')
continue
if not money.isdigit():
print(\'转账金额必须输入整数!\')
continue
else:
money=int(money)
if dic[username]>money or dic[username]==money:
dic[username] -= money
dic[username1] += money
with open(\'db1.txt\', mode=\'wt\', encoding=\'utf-8\') as f:
for key, value in dic.items():
f.write(f\'{key}:{value}\n\')
return
else:
print(f\'用户{username},余额不足{money}\')
3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
user_info = {\'uesr\': None}
def withdraw(username):
\'\'\'
:param userA: 提现用户
:return:
\'\'\'
if user_info.get(\'user\') != username:
print(f\'当前账户{username}未登录,请先登录!\')
login(username)
else:
while True:
money = input(\'提现金额:\').strip()
dic = {}
with open(\'db1.txt\', mode=\'rt\', encoding=\'utf-8\') as f:
for line in f:
user, principal = line.strip().split(\':\')
principal = int(principal)
dic[user] = principal
if not money.isdigit():
print(\'转账金额必须输入整数!\')
continue
else:
money = int(money)
if dic[username] > money or dic[username] == money:
dic[username] -= money
res = dic[username]
print(f\'用户{username},体现{money},余额{res}\')
with open(\'db1.txt\', mode=\'wt\', encoding=\'utf-8\') as f:
for key, value in dic.items():
f.write(f\'{key}:{value}\n\')
return
else:
print(f\'用户{username},余额不足{money}\')
4、查询余额功能:输入账号查询余额
user_info = {\'uesr\': None}
def check_money(username):
\'\'\'
:param username: 查询账户
:return:
\'\'\'
if user_info.get(\'user\') != username:
print(f\'当前账户{username}未登录,请先登录!\')
login(username)
else:
dic = {}
while True:
with open(\'db1.txt\', mode=\'rt\', encoding=\'utf-8\') as f:
for line in f:
user, principal = line.strip().split(\':\')
principal = int(principal)
dic[user] = principal
res = dic[username]
print(f\'当前账户{username}余额为{res}\')
return