第三周周末作业
第三周周末作业
编写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