一.环境:
python3 + vscode
二. 文件:
- 【程序文件】用户/管理员~注册/登陆.py
- 【启动标记文件】flag.txt -> 文件内容:0
三.程序步骤分块:
- 主程序入口
-
初次启动后,初始化文件更改标记
-
启动后信息初始化
-
打印登陆菜单
-
用户选择
-
管理员登陆
-
用户注册
-
用户登陆
四.程序:
import os
# 定义一个全局变量保存名字
file_name = '普通用户变量保存名字'
# 程序入口
def main():
# 打开文件
with open(r'flag.txt', mode='rt', encoding='utf-8') as flag:
# 读取文件
word = flag.read()
if word == '0':
print('首次启动!')
c_flag() # 更改标记为1
init() # 初始化资源
print_login_menu() # 打印登陆菜单
user_selsct() # 选择用户
elif word == '1':
print('欢迎会回来!')
print_login_menu()
user_selsct()
else:
print('初始化参数错误!')
# 初次启动后,标记文件更改
def c_flag():
with open(r'flag.txt', mode='wt', encoding='utf-8') as flag:
flag.write('1')
# 启动后信息初始化
def init():
root = {'r_name': 'zcy', 'r_pwd': '117'} # 字典存放管理员账号信息
with open(r'u_root.txt', mode='wt', encoding='utf-8') as u_root: # 创建并打开管理员账号的文件
u_root.write(str(root)) # 写入管理员信息
if not os.path.exists(file_name): # 判断是否存在存放普通用户信息的文件夹
os.mkdir(file_name) # 没有则创建
# 打印登陆菜单
def print_login_menu():
print('用户选择'.center(10, '-'))
print('1.管理员登陆')
print('2.普通用户登陆')
print(''.center(10, '-'))
# 用户选择
def user_selsct():
while True:
user_type_selext = input('请选择用户类型:').strip()
if user_type_selext == '1':
root_login() # 管理员登陆
break
elif user_type_selext == '2': # 普通用户登陆
while True:
select = input('是否需要注册?(y/n):').strip()
if select == 'y' or select == 'Y':
# print('用户注册')
user_register() # 用户注册
user_login()
break
elif select == 'n' or select == 'N':
# print('用户登陆')
user_login() # 用户登陆
break
else:
print('输入有误,请重新输入')
break
else:
print('请输入已有的编号')
# 管理员登陆
def root_login():
while True:
print('---管理员登陆---')
root_number = input('请输入你的账号:').strip()
root_password = input('请输入你的密码:').strip()
with open('u_root.txt', mode='rt', encoding='utf-8') as u_root: # 打开存放管理员信息的文件
root = eval(u_root.read()) # 读取管理员信息,并把读取成字符串的信息转换成字典
# 账号信息验证
if root_number == root['r_name'] and root_password == root['r_pwd']:
print('登陆成功')
break
else:
print('验证失败!')
# 用户注册
def user_register():
print('---用户注册---')
while True:
user_id = input('请输入你的账号:').strip()
user_pwd = input('请输入你的密码:').strip()
user_name = input('请输入你的昵称:')
# 获取file_name目录中所有的文件,os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
user_list = os.listdir(file_name)
# 遍历列表,判断user_id是否在列表中
if user_id not in user_list:
user = {"u_id": user_id, "u_pwd": user_pwd, "u_name": user_name}
user_path = file_name + '/' + user_id # 创建用户文件
with open(user_path, mode='wt', encoding='utf-8') as user_file: # 写入用户信息
user_file.write(str(user))
break
else:
print('账号已存在,请重新注册!')
# 用户登陆
def user_login():
while True:
print('---用户登陆---')
user_id = input('请输入你的账号:').strip()
user_pwd = input('请输入你的密码:').strip()
# 获取file_name目录中所有的文件,os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
user_list = os.listdir(file_name)
# 遍历列表,判断user_id是否在列表中
if user_id in user_list:
print('登陆中...')
# 构建用户路径
user_path = user_path = file_name + '/' + user_id
# 打开路径对应用户文件,读取,转换字典,关键字取密码进行判断
if user_pwd == eval(open(user_path, mode='rt', encoding='utf-8').read())['u_pwd']:
print('登陆成功')
break
else:
print('登陆失败,账号或密码错误,请重新输入')
else:
print('账号不存在,请先注册!')
break
if __name__ == '__main__':
main()
【注】:此为个人学习作业练习