一.环境:

        python3 + vscode

二. 文件:

  1. 【程序文件】用户/管理员~注册/登陆.py
  2. 【启动标记文件】flag.txt  ->  文件内容:0

三.程序步骤分块:

  1.  主程序入口
  2. 初次启动后,初始化文件更改标记

  3. 启动后信息初始化

  4. 打印登陆菜单

  5. 用户选择

  6. 管理员登陆

  7. 用户注册

  8. 用户登陆

四.程序:

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()

【注】:此为个人学习作业练习

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐