2.4 KiB
2.4 KiB
基于文件的用户管理
需求
数据库文件设计
- 创建db文件,并且保存用户名、密码、剩余登录次数、解封的时间,示例如下
user01|123456|3|1733039528
user02|123123|3|1733039528
user03|121212|2|1733039528
登录功能
- 用户输入正确的用户名和密码,就可以登录
- 用户输入错误的用户名,提示用户名不存在
- 用户名正确,但是密码错误,就提示密码错误,输入错误3次,就封号30秒
- 用户名正确,只要是封号期间,不管密码是否正确,都提示已封号,还有xx秒解封
- 用户名正确,如果已经解封,就正常登录
参考代码
import time
# 数据库文件路径
db_file = 'db'
# 读取数据库文件,返回用户信息字典
users = {}
with open(db_file, 'a+') as file:
file.seek(0)
for line in file:
username, password, attempts, ban_time = line.strip().split('|')
users[username] = {
'password': password,
'attempts': int(attempts),
'ban_time': int(ban_time)
}
# 主程序
while True:
username = input("请输入用户名:")
if username not in users:
print("用户名不存在。")
continue
if users[username]['attempts'] <= 0 and users[username]['ban_time'] > int(time.time()):
remaining_time = users[username]['ban_time'] - int(time.time())
print(f"已封号,还有{remaining_time}秒解封。")
continue
password = input("请输入密码:")
if password == users[username]['password']:
users[username]['attempts'] = 3 # 重置尝试次数
print("登录成功。")
else:
users[username]['attempts'] -= 1
if users[username]['attempts'] == 0:
users[username]['ban_time'] = int(time.time()) + 30 # 封号30秒
print("密码错误,账号已被封禁30秒。")
else:
print("密码错误,剩余尝试次数:", users[username]['attempts'])
# 将更新后的用户信息写回数据库文件
with open(db_file, 'w') as file:
for user, info in users.items():
file.write(f"{user}|{info['password']}|{info['attempts']}|{info['ban_time']}\n")
作业4.1提交的内容
- 理解程序的运行逻辑
- 程序运行成功的截图,单独发送给组长