关于员工管理系统的实现

发布时间 2023-05-26 22:23:59作者: Chimengmeng

关于员工管理系统的实现

***用到的知识点

【1】os模块

  • os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。
  • 通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。
# 本次用到的方法有两个
# 方法一:简单理解就是 OS模块创建新的文件夹,一般搭配使用的方法是
os.mkdir(file_name)
# 声明一个文件夹路径(文件夹名字)
file_name = 'InfoDetailes'
# IF做判断 --- 如果不存在当前路径下的文件夹 则新建文件夹,如果存在,则忽略
# 考虑到每个人的电脑上都不会存在这个新建的数据库位置,特意添加了这个语句,来声明数据库位置
if not os.path.exists(file_name):
    os.mkdir(file_name)
    
# 方法二:另一个方法是 删除文件
# 先声明要删除的文件的位置
file_path = file_name + '\\' + 'infodetails.text'
# 利用os方法删除文件
os.remove(file_path)

【2】函数相关的知识

  • 函数之间相互调用
  • 函数的形参和实参传值

【3】主程序入口即 if name == 'main'

  • 老师上课应该也讲过,其实主要的目的就是用来做测试用的
  • 在将本文件作文包导入到其他文件中运行的时候,不会被执行这部分内容
  • 不懂得我到时候可以详细再介绍

详见博客:【Python】main函数 if name=='main' 详解 - Chimengmeng - 博客园 (cnblogs.com)

【一】思路解析

'''

# # 员工管理系统初级 # #

【一】 让用户直接看到打印序号的功能

# 功能列表有
1. 添加用户
2. 查看用户
3. 删除用户
4. 退出系统

【二】 需要实现的功能
1. 可以添加用户

2. 判断用户是否存在
2.1 用户存在则重新输入
2.2 用户不存在则添加

3. 用户可以添加自己的信息
信息包括:用户名、年龄、薪资、爱好
并将数据存储到信息列表里

3. 查看用户信息功能(可选择)
3.1 用户可以指定查看指定用户的信息
3.2 用户可以查看所有用户的信息

4. 删除用户功能
4.1 用户可以按照指定编号删除用户

5. 退出系统

'''

【1】功能菜单

  • 用一个变量存储用户功能菜单,以便后期修改功能信息
  • 单独存储每个变量每个功能相关的信息,方便以后修改功能信息

【2】登陆验证

(1)数据库之存储用户名密码(注册功能)

  • 思路
    • 创建一个文件 text文档,存储用户名和密码
    • 写入信息,信息要以固定格式写入,以便去取数据的时候不会造成太大阻碍
    • 将用户名和密码信息写入到text文档
    • 打印,注册成功
# 功能分部一之写入数据
# 存储用户名和密码
def write_username_password():
    # 声明数据库路径
    file_path = file_name + '\\' + 'up.text'
    # 输入用户信息和密码
    username = input('Enter username:>>>>')
    password = input('Enter password:>>>>')
    # 用户数据存储格式 ----> dream#521
    data = f'{username}#{password}\n'
    # 打开文件进行存储
    with open(file_path, 'a') as f:
        # 写入数据
        f.write(data)
        print(f'{username}:>>>>用户注册成功!')

(2)数据库之读取用户名密码

  • 思路
    • 声明文件路径
    • 通过 读模式 将文件中的数据读取出来,再存成两个列表
      • 列表一:读取到的全部用户名,方便判断登录的用户是否已经注册过,且存在
      • 列表二:全部的用户名及密码,方便后期登陆验证
# 功能分部一之读取数据
def get_username_password():
    # 声明数据库路径
    file_path = file_name + '\\' + 'up.text'
    # 将读取出来的全部用户信息暂时存在列表里,返回调用

    username_lists = []
    us_details_lists = []

    with open(file_path, 'r') as info:
        for line in info.readlines():
            line = line.rstrip().split('#')
            username = line[0]
            password = line[1]
            data = {
                'username': username,
                'password': password
            }
            username_lists.append(username)
            us_details_lists.append(data)
    return [username_lists, us_details_lists]

(3)登陆用户校验

  • 思路
    • 输入用户名进行登录用户是否存在的校验
    • 从数据库拿到用户名列表,
      • 如果用户名存在列表中
        • 进行登录验证操作
      • 不存在列表中
        • 进行注册操作
# 员工注册校验系统
def login_befroe():
    # 输入用户名,进行信息校验
    # 输入用户名
    input_username = input('请输入用户名!')
    # 调用校验函数,在数据库中调出数据,进行比对,校验用户姓名是否已经存在
    if check_info_exist(input_username):
        # 用户名存在,进行登陆操作
        login(input_username)
    else:
        # 用户名不存在,进行注册操作
        print(f'当前用户{input_username}不存在,请先注册!谢谢!')
        write_username_password()
  • 检验用户名是否存在
def check_info_exist(input_username):
    # 从数据库中获取到用户名和密码的详细列表
    username_lists = get_username_password()[0]
    if input_username in username_lists:
        return True
    else:
        return False

(4)用户名存在进行登陆操作

  • 思路

    • 拿到用户输入的用户名

      • 校对用户名是否一致

        • 一致

          • 进行以下操作
        • 不一致

          • 则校验用户名是否一致
      • 从数据库拿到所有的用户名和密码

      • 循环遍历这个列表,找到对应的用户名和密码

      • 进行登陆判断

      • 用户名和密码一致

        • 打印欢迎语
        • 进入登陆后的功能菜单
      • 用户名和密码不一致

        • 退回到登陆前的验证操作
def login(input_username):
    # 从数据库中获取到用户名和密码的详细列表
    # [{'username': '33', 'password': '22'}, {'username': '22', 'password': '22'}]
    us_details_lists = get_username_password()[1]
    print('请输入用户名和密码进行登陆,谢谢!')
    input_username_check = input('请输入用户名::>>')
    # input_username_check = input_username
    # 校验是否是同一个用户
    if input_username_check == f'{input_username}':
        i = -1
        a = 0
        # 在详细信息列表里遍历用户名和密码
        for info in us_details_lists:
            i += 1
            if input_username_check == info['username']:
                # 将找到 username 的 索引值
                a = i
        # 找到索引所在的信息
        info_details = us_details_lists[a]
        username = info_details['username']
        password = info_details['password']
        input_password = input('请输入密码::>>')
        # 如果用户名和密码正确
        if username == input_username and password == input_password:
            # 打印欢迎登陆,并进入登陆后的功能
            print('Welcome to our system!')
            login_after()
        else:
            print('请核对你的信息!,是否继续尝试(y/n):>>')
            cmd_imput = input('请输入指令!:>>')
            if cmd_imput == 'y':
                login(input_username)
            else:
                print(f'退出到校验登陆界面!')
                # 信息错误,自调用函数进行再次校对
                login_befroe()
    else:
        print(f'请重新确认你的用户名是否正确?')
        login(input_username)

【3】添加用户信息

(1)数据库之添加用户详细信息

  • 思路:
    • 创建数据库文件位置
    • 拿到存储的数据
    • 按照指定格式进行文件的存储
    • 打印存储成功
# 功能部分二之存储用户信息
def write_user_infos(username, data_info):
    '''

    :param data: 写入的 data_info:a|b|c|d
    data_info = f'{username}|{age}|{salary}|{hobbies}\n'
    :return: 返回写入成功
    '''
    # 指定 用户详细信息文件路径
    file_path = file_name + '\\' + 'infodetails.text'
    with open(file_path, 'a') as info:
        info.write(data_info)
        print(f'{username}::>>录入信息成功!')

(2)数据库之读取用户详细信息

  • 思路:
    • 指定数据库文件位置
    • 将数据库文件读出来,按指定格式进行切分
    • 切分成两个部分
      • 部分一:存储用户名列表
        • 判断用户是否存在,不存在则新建信息
      • 部分二:存储全部用户信息
        • 为后期的查询信息做准备
# 功能部分三之读取用户信息
def get_user_details():
    '''

     :return: 返回用户信息暂存列表
     [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
     '''
    file_path = file_name + '\\' + 'infodetails.text'
    # 将读取出来的全部用户信息暂时存在列表里,等下一步调用
    username_lists = []
    user_info = []
    with open(file_path, 'r') as info:
        for line in info.readlines():
            line = line.rstrip().split('|')
            username = line[0]
            username_lists.append(username)
            age = line[1]
            salary = line[2]
            hobbies = line[3]
            data = {
                'username': username,
                'age': age,
                'salary': salary,
                'hobbies': hobbies,
            }
            user_info.append(data)
    return [username_lists, user_info]

(3)已经登陆成功,进行功能选择

def login_after():
    # 登录系统成功 :打印功能菜单
    print(function_menus)
    # 输入指令ID
    function_id = judge_function_id()
    # 得到指令ID(强转后的ID)进行登录后的各种操作
    # 进入到添加用户信息功能
    if function_id == 1:
        function_id_1()
    # 进入到查看用户信息功能
    elif function_id == 2:
        function_id_2()
    elif function_id == 3:
        function_id_3()
    elif function_id == 4:
        function_id_4()
    else:
        print(f'请重新校验指令')
        login_after()

(4)附加功能 - 判断指令是否为数字且在功能列表内


# 判断指令ID是否合法
def judge_function_id():
    '''

    :param function_id: 指令ID判断
    :return: 错误值 或者 指令ID
    '''
    function_id = input(f'请再次确认你的指令ID(可选项<1,2,3,4>):>>>>')
    if function_id.isdigit() and function_id in ['1', '2', '3', '4']:
        function_id = int(function_id)
        return function_id
    else:
        print(f'请确认你的指令ID是否合法:>>>>{function_id}')
        judge_function_id()

(5)指令合法,进入功能1:添加用户信息

  • 思路、:
    • 录取到指定的信息,并按照指定格式传给写入用户信息的部分进行信息录入
# 添加用户信息功能函数
def function_id_1():
    print('欢迎使用,当前是添加用户信息功能! (≖ᴗ≖)✧')
    username = input('请输入用户名:>>>>')
    age = input('请输入年龄(必须是数字):>>>>')
    age = check_isnumber(age)
    salary = input('请输入薪资(必须是数字):>>>>')
    salary = check_isnumber(salary)
    hobbies = input('请输入爱好:>>>>')
    # 存储的数据格式
    data_info = f'{username}|{age}|{salary}|{hobbies}\n'
    # 调用写入信息函数进行写入信息
    write_user_infos(username, data_info)
    chose = input('是否确认录入信息?(Y/N):>>>')
    if chose == 'Y':
        function_id_1()
    else:
        # 返回主菜单
        print('感谢你的使用!')
        login_after()

【4】查询用户信息

(1)进入到功能2

  • 思路:
    • 检验用户是否存在
    • 用户存在则进行用户信息搜索
def function_id_2():
    # 校验数字,否则重新输入
    # 先打印功能菜单
    print('你好,当前是查看用户信息功能,请根据提示选择功能ID')
    print(function_2)
    function_id_2_num = input('请输入指令ID:>>>>')
    function_id_2_num = check_isnumber(function_id_2_num)
    # 指令ID输入完成进行指令ID的校验(是否是数字)
    # 进行菜单选择 --- 1 为查询指定用户信息
    if function_id_2_num == 1:
        # 进入查询指定用户信息的功能,进行人员校验(是否存在个人信息)
        function_id_2_1_username = input('请输入你要查询的个人信息的用户姓名:>>>>')
        # 进入到查验用户名
        result = check_info_details_exist(function_id_2_1_username)
        if result:
            # 存在用户信息 进入查询并打印用户信息功能
            # 传入用户姓名列表 和 用户详细信息列表
            # search_user_info(function_id_2_1_username)
            search_user_info(function_id_2_1_username)
        else:

            print(f'查无此人,请确认输入的信息是否正确:::>>>>{function_id_2_1_username}')
            #  调回功能2进行功能复选
            function_id_2()
    # 进行菜单选择 --- 2 为查询全部用户信息
    elif function_id_2_num == 2:
        # search_user_info_all()
        search_user_info_all()

(2)检验用户信息是否存在

  • 思路
    • 从数据库拿到用户名列表
      • 用户名存在
        • 返回True,进行查询操作
      • 用户名不存在
        • 返回Faluse,然后进行录入操作
# 校验用户信息是否存在
def check_info_details_exist(inout_username_2):
    username_lists = get_user_details()[0]
    if inout_username_2 in username_lists:
        return True
    # 不存在 : 返回报错信息 查无此人
    else:
        return False

(3)附加之校验指令是否是数字

def check_isnumber(num):
    if num.isdigit():
        return int(num)
    else:
        # 不是数字的话就重新输入
        print('请确认输入的信息!')
        check_isnumber(num)

(4)查询指定用户信息

  • 思路
    • 在数据库中拿到所有信息列表
      • 循环遍历找到指定位置的用户信息
    • 取出信息并做打印输出
# 查询并打印指定用户信息功能
def search_user_info(function_id_2_1_username):
    # 拿到用户名列表 和 用户详细信息列表
    user_info = get_user_details()[1]

    # 到数据库中查询用户信息
    # 校验用户信息是否存在,存在则打印指定用户信息
    # check_info_details_exist(inout_username_2)  # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 定义初始变量
    # i 为列表循环次数(即每个用户所在的索引值) - 取到索引再去拿值
    # a 为替换后的索引值,因为每一次循环 i 都在发生变化
    i = -1
    a = 0
    for info in user_info:
        i += 1
        if function_id_2_1_username == info['username']:
            # 将找到 username 的 索引值
            a = i
    # 找到索引所在的信息
    info_details = user_info[a]
    username = info_details['username']
    age = info_details['age']
    salary = info_details['salary']
    hobbies = info_details['hobbies']
    print(f'用户详细信息为::姓名>{username},年龄>{age},薪资{salary},爱好>{hobbies}')
    print('感谢你的使用')
    # 是否再次查询或退出
    back_function(function_id_2)

(5)查询全部用户信息

  • 思路
    • 拿到全部用户信息列表
    • 循环遍历每一个信息
    • 循环打印输出
def search_user_info_all():
    # 拿到用户名列表 和 用户详细信息列表
    user_info = get_user_details()[1]
    for info_details in user_info:
        username = info_details['username']
        age = info_details['age']
        salary = info_details['salary']
        hobbies = info_details['hobbies']
        print(f'用户详细信息为::姓名>{username},年龄>{age},薪资{salary},爱好>{hobbies}')

    print('感谢你的使用')
    back_function(function_id_2)

(6)附加功能之是否再次进行查询

def back_function(function_id_i):
    # 请选择是否继续使用
    chose = input('请输入是否继续使用(Y/N)')
    if chose == 'Y':
        function_id_i()
    elif chose == 'N':
        login_after()
    else:
        back_function(function_id_i)
        print(f'请正确输入指令(Y/N):>>>')

【5】删除用户信息

  • 思路类查询用户操作

(1)进入到功能菜单

def function_id_3():
    # 打印欢迎语
    print('欢迎使用,当前是删除用户信息系统!')
    # 打印欢迎菜单
    print(function_3)
    function_id_3_1 = input('请输入指令ID:>>>>')
    # 进行功能ID的选择校验
    result = check_isnumber(function_id_3_1)
    # 进入修改指定用户信息指令
    if result == 1:
        delete_one_info()
    else:
        delete_all_info()

(2)删除指定用户信息之校验用户信息是否存在

# 校验用户信息是否存在
def check_info_details_exist(inout_username_2):
    username_lists = get_user_details()[0]
    if inout_username_2 in username_lists:
        return True
    # 不存在 : 返回报错信息 查无此人
    else:
        return False

(3)删除指定用户信息

  • 思路
    • 拿到全部用户信息列表
      • 将需要删除的用户信息进行比对
    • 找到相应的用户信息的位置
    • 利用 pop 方法删除指定用户信息
    • 将其余的信息写入到新的列表里
      • 这里有一个操作
      • 先将原来的表删除
      • 然后再将剩余的信息循环写入到文件里
        • 因为我们将全部的信息都读出来存放在列表里,相当于在内存里,然后我们再利用a方法将列表内的数据写入进去
def delete_one_info():
    # 修改信息首先要校验用户信息是否存在
    print('欢迎使用,当前是删除用户信息功能! (≖ᴗ≖)✧')
    inout_username_delete = input(f'请先输入信息校验用户信息是否存在:>>>>')
    result = check_info_details_exist(inout_username_delete)
    if result:
        # 校验到用户信息已经存在 进行修改指定用户信息功能
        delete_info_for_ones(inout_username_delete)
    else:
        print(f'查无此人:>>>>')
        function_id_3()
def delete_info_for_ones(username_input):
    # 去数据库读取信息
    user_info = get_user_details()[1]
    print('这里是删除个人信息功能')
    # 到数据库中查询用户信息
    # 校验用户信息是否存在,存在则打印指定用户信息
    # check_info_details_exist(inout_username_2)  # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 定义初始变量
    # i 为列表循环次数(即每个用户所在的索引值) - 取到索引再去拿值
    # a 为替换后的索引值,因为每一次循环 i 都在发生变化
    i = -1
    a = 0
    for info in user_info:
        i += 1
        if username_input == info['username']:
            # 将找到 username 的 索引值
            a = i
    # 找到索引所在的信息
    print(f'这是找到的用户信息:>>>{user_info[a]}')
    user_info.pop(a)
    print(f'这是删除后的信息{user_info}')
    # 存储的数据格式
    # 调用写入信息函数进行写入信息
    # user_info : [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 将原来的信息表删除,重新创建新的信息表进行信息的写入
    file_path = file_name + '\\' + 'infodetails.text'
    os.remove(file_path)
    for data in user_info:
        username = data['username']
        age = data['age']
        salary = data['salary']
        hobbies = data['hobbies']
        data_info = f'{username}|{age}|{salary}|{hobbies}\n'

        write_user_infos(username, data_info)
    print('感谢你的使用')
    back_function(function_id_3)

(4)删除全部用户信息

  • 思路:
    • 将原来的表删除
    • 新建表并写入空信息
def delete_all_info():
    # 去数据库读取信息
    user_info = get_user_details()[1]
    print('这里是删除全部信息功能')
    file_path = file_name + '\\' + 'infodetails.text'
    os.remove(file_path)
    with open(file_path, 'w') as f:
        f.write('')
    print('感谢你的使用')
    back_function(function_id_3)

【6】退出系统

  • 思路
    • 完全退出系统
    • 退出到功能界面
def function_id_4():
    cmd = input('确认是否退出系统?(y/n)>>>>>')
    if cmd == 'y':
        pass
    else:
        # 返回功能菜单
        login_after()

【7】完整的代码

# -*-coding: Utf-8 -*-
# @File : main .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/5/26


'''

# # 员工管理系统初级 # #

【一】 让用户直接看到打印序号的功能

# 功能列表有
1. 添加用户
2. 查看用户
3. 删除用户
4. 退出系统

【二】 需要实现的功能
1. 可以添加用户

2. 判断用户是否存在
2.1 用户存在则重新输入
2.2 用户不存在则添加

3. 用户可以添加自己的信息
信息包括:用户名、年龄、薪资、爱好
并将数据存储到信息列表里

3. 查看用户信息功能(可选择)
3.1 用户可以指定查看指定用户的信息
3.2 用户可以查看所有用户的信息

4. 删除用户功能
4.1 用户可以按照指定编号删除用户

5. 退出系统

'''

function_menus = '''
-------------- 欢迎使用员工信息管理系统 -------------
                请根据功能ID选择功能
                    1. 添加用户
                    2. 查看用户
                    3. 删除用户
                    4. 退出系统

'''

function_2 = '''
    欢迎使用,当前功能是查看用户
     请选择你要使用的功能
     1.查看指定用户信息
     2.查看全部用户信息
'''

function_3 = '''
    欢迎使用,当前功能是删除用户
     请选择你要使用的功能
     1.删除指定用户信息
     2.删除全部用户信息
'''

function_4 = '''
    欢迎使用,当前功能是退出系统
     请选择你要使用的功能
     1.返回功能界面
     2.完全退出系统
'''
# 创建数据库,存储用户名及密码
# OS模块  -  创建文件夹存储数据
import os

# 声明数据库存储位置
file_name = 'InfoDetailes'
if not os.path.exists(file_name):
    os.mkdir(file_name)


# 功能分部一之写入数据
# 存储用户名和密码
def write_username_password():
    # 声明数据库路径
    file_path = file_name + '\\' + 'up.text'
    # 输入用户信息和密码
    username = input('Enter username:>>>>')
    password = input('Enter password:>>>>')
    # 用户数据存储格式 ----> dream#521
    data = f'{username}#{password}\n'
    # 打开文件进行存储
    with open(file_path, 'a') as f:
        # 写入数据
        f.write(data)
        print(f'{username}:>>>>用户注册成功!')


# 功能分部一之读取数据
def get_username_password():
    # 声明数据库路径
    file_path = file_name + '\\' + 'up.text'
    # 将读取出来的全部用户信息暂时存在列表里,返回调用

    username_lists = []
    us_details_lists = []

    with open(file_path, 'r') as info:
        for line in info.readlines():
            line = line.rstrip().split('#')
            username = line[0]
            password = line[1]
            data = {
                'username': username,
                'password': password
            }
            username_lists.append(username)
            us_details_lists.append(data)
    return [username_lists, us_details_lists]


# 功能部分二之存储用户信息
def write_user_infos(username, data_info):
    '''

    :param data: 写入的 data_info:a|b|c|d
    data_info = f'{username}|{age}|{salary}|{hobbies}\n'
    :return: 返回写入成功
    '''
    # 指定 用户详细信息文件路径
    file_path = file_name + '\\' + 'infodetails.text'
    with open(file_path, 'a') as info:
        info.write(data_info)
        print(f'{username}::>>录入信息成功!')


# 功能部分三之读取用户信息
def get_user_details():
    '''

     :return: 返回用户信息暂存列表
     [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
     '''
    file_path = file_name + '\\' + 'infodetails.text'
    # 将读取出来的全部用户信息暂时存在列表里,等下一步调用
    username_lists = []
    user_info = []
    with open(file_path, 'r') as info:
        for line in info.readlines():
            line = line.rstrip().split('|')
            username = line[0]
            username_lists.append(username)
            age = line[1]
            salary = line[2]
            hobbies = line[3]
            data = {
                'username': username,
                'age': age,
                'salary': salary,
                'hobbies': hobbies,
            }
            user_info.append(data)
    return [username_lists, user_info]


def check_info_exist(input_username):
    # 从数据库中获取到用户名和密码的详细列表
    username_lists = get_username_password()[0]
    if input_username in username_lists:
        return True
    else:
        return False


def login(input_username):
    # 从数据库中获取到用户名和密码的详细列表
    # [{'username': '33', 'password': '22'}, {'username': '22', 'password': '22'}]
    us_details_lists = get_username_password()[1]
    print('请输入用户名和密码进行登陆,谢谢!')
    input_username_check = input('请输入用户名::>>')
    # input_username_check = input_username
    # 校验是否是同一个用户
    if input_username_check == f'{input_username}':
        i = -1
        a = 0
        # 在详细信息列表里遍历用户名和密码
        for info in us_details_lists:
            i += 1
            if input_username_check == info['username']:
                # 将找到 username 的 索引值
                a = i
        # 找到索引所在的信息
        info_details = us_details_lists[a]
        username = info_details['username']
        password = info_details['password']
        input_password = input('请输入密码::>>')
        # 如果用户名和密码正确
        if username == input_username and password == input_password:
            # 打印欢迎登陆,并进入登陆后的功能
            print('Welcome to our system!')
            login_after()
        else:
            print('请核对你的信息!,是否继续尝试(y/n):>>')
            cmd_imput = input('请输入指令!:>>')
            if cmd_imput == 'y':
                login(input_username)
            else:
                print(f'退出到校验登陆界面!')
                # 信息错误,自调用函数进行再次校对
                login_befroe()
    else:
        print(f'请重新确认你的用户名是否正确?')
        login(input_username)


# 员工注册校验系统
def login_befroe():
    # 输入用户名,进行信息校验
    # 输入用户名
    input_username = input('请输入用户名!')
    # 调用校验函数,在数据库中调出数据,进行比对,校验用户姓名是否已经存在
    if check_info_exist(input_username):
        # 用户名存在,进行登陆操作
        login(input_username)
    else:
        # 用户名不存在,进行注册操作
        print(f'当前用户{input_username}不存在,请先注册!谢谢!')
        write_username_password()


# 判断指令ID是否合法
def judge_function_id():
    '''

    :param function_id: 指令ID判断
    :return: 错误值 或者 指令ID
    '''
    function_id = input(f'请再次确认你的指令ID(可选项<1,2,3,4>):>>>>')
    if function_id.isdigit() and function_id in ['1', '2', '3', '4']:
        function_id = int(function_id)
        return function_id
    else:
        print(f'请确认你的指令ID是否合法:>>>>{function_id}')
        judge_function_id()


def login_after():
    # 登录系统成功 :打印功能菜单
    print(function_menus)
    # 输入指令ID
    function_id = judge_function_id()
    # 得到指令ID(强转后的ID)进行登录后的各种操作
    # 进入到添加用户信息功能
    if function_id == 1:
        function_id_1()
    # 进入到查看用户信息功能
    elif function_id == 2:
        function_id_2()
    elif function_id == 3:
        function_id_3()
    elif function_id == 4:
        function_id_4()
    else:
        print(f'请重新校验指令')
        login_after()


def check_isnumber(num):
    if num.isdigit():
        return int(num)
    else:
        # 不是数字的话就重新输入
        print('请确认输入的信息!')
        check_isnumber(num)


# 添加用户信息功能函数
def function_id_1():
    print('欢迎使用,当前是添加用户信息功能! (≖ᴗ≖)✧')
    username = input('请输入用户名:>>>>')
    age = input('请输入年龄(必须是数字):>>>>')
    age = check_isnumber(age)
    salary = input('请输入薪资(必须是数字):>>>>')
    salary = check_isnumber(salary)
    hobbies = input('请输入爱好:>>>>')
    # 存储的数据格式
    data_info = f'{username}|{age}|{salary}|{hobbies}\n'
    # 调用写入信息函数进行写入信息
    write_user_infos(username, data_info)
    chose = input('是否确认录入信息?(Y/N):>>>')
    if chose == 'Y':
        function_id_1()
    else:
        # 返回主菜单
        print('感谢你的使用!')
        login_after()


def function_id_2():
    # 校验数字,否则重新输入
    # 先打印功能菜单
    print('你好,当前是查看用户信息功能,请根据提示选择功能ID')
    print(function_2)
    function_id_2_num = input('请输入指令ID:>>>>')
    function_id_2_num = check_isnumber(function_id_2_num)
    # 指令ID输入完成进行指令ID的校验(是否是数字)
    # 进行菜单选择 --- 1 为查询指定用户信息
    if function_id_2_num == 1:
        # 进入查询指定用户信息的功能,进行人员校验(是否存在个人信息)
        function_id_2_1_username = input('请输入你要查询的个人信息的用户姓名:>>>>')
        # 进入到查验用户名
        result = check_info_details_exist(function_id_2_1_username)
        if result:
            # 存在用户信息 进入查询并打印用户信息功能
            # 传入用户姓名列表 和 用户详细信息列表
            # search_user_info(function_id_2_1_username)
            search_user_info(function_id_2_1_username)
        else:

            print(f'查无此人,请确认输入的信息是否正确:::>>>>{function_id_2_1_username}')
            #  调回功能2进行功能复选
            function_id_2()
    # 进行菜单选择 --- 2 为查询全部用户信息
    elif function_id_2_num == 2:
        # search_user_info_all()
        search_user_info_all()


# 校验用户信息是否存在
def check_info_details_exist(inout_username_2):
    username_lists = get_user_details()[0]
    if inout_username_2 in username_lists:
        return True
    # 不存在 : 返回报错信息 查无此人
    else:
        return False


def back_function(function_id_i):
    # 请选择是否继续使用
    chose = input('请输入是否继续使用(Y/N)')
    if chose == 'Y':
        function_id_i()
    elif chose == 'N':
        login_after()
    else:
        back_function(function_id_i)
        print(f'请正确输入指令(Y/N):>>>')


# 查询并打印指定用户信息功能
def search_user_info(function_id_2_1_username):
    # 拿到用户名列表 和 用户详细信息列表
    user_info = get_user_details()[1]

    # 到数据库中查询用户信息
    # 校验用户信息是否存在,存在则打印指定用户信息
    # check_info_details_exist(inout_username_2)  # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 定义初始变量
    # i 为列表循环次数(即每个用户所在的索引值) - 取到索引再去拿值
    # a 为替换后的索引值,因为每一次循环 i 都在发生变化
    i = -1
    a = 0
    for info in user_info:
        i += 1
        if function_id_2_1_username == info['username']:
            # 将找到 username 的 索引值
            a = i
    # 找到索引所在的信息
    info_details = user_info[a]
    username = info_details['username']
    age = info_details['age']
    salary = info_details['salary']
    hobbies = info_details['hobbies']
    print(f'用户详细信息为::姓名>{username},年龄>{age},薪资{salary},爱好>{hobbies}')
    print('感谢你的使用')
    # 是否再次查询或退出
    back_function(function_id_2)


def search_user_info_all():
    # 拿到用户名列表 和 用户详细信息列表
    user_info = get_user_details()[1]
    for info_details in user_info:
        username = info_details['username']
        age = info_details['age']
        salary = info_details['salary']
        hobbies = info_details['hobbies']
        print(f'用户详细信息为::姓名>{username},年龄>{age},薪资{salary},爱好>{hobbies}')

    print('感谢你的使用')
    back_function(function_id_2)


def function_id_3():
    # 打印欢迎语
    print('欢迎使用,当前是删除用户信息系统!')
    # 打印欢迎菜单
    print(function_3)
    function_id_3_1 = input('请输入指令ID:>>>>')
    # 进行功能ID的选择校验
    result = check_isnumber(function_id_3_1)
    # 进入修改指定用户信息指令
    if result == 1:
        delete_one_info()
    else:
        delete_all_info()


def delete_all_info():
    # 去数据库读取信息
    user_info = get_user_details()[1]
    print('这里是删除全部信息功能')
    file_path = file_name + '\\' + 'infodetails.text'
    os.remove(file_path)
    with open(file_path, 'w') as f:
        f.write('')
    print('感谢你的使用')
    back_function(function_id_3)


def delete_one_info():
    # 修改信息首先要校验用户信息是否存在
    print('欢迎使用,当前是删除用户信息功能! (≖ᴗ≖)✧')
    inout_username_delete = input(f'请先输入信息校验用户信息是否存在:>>>>')
    result = check_info_details_exist(inout_username_delete)
    if result:
        # 校验到用户信息已经存在 进行修改指定用户信息功能
        delete_info_for_ones(inout_username_delete)
    else:
        print(f'查无此人:>>>>')
        function_id_3()


def delete_info_for_ones(username_input):
    # 去数据库读取信息
    user_info = get_user_details()[1]
    print('这里是删除个人信息功能')
    # 到数据库中查询用户信息
    # 校验用户信息是否存在,存在则打印指定用户信息
    # check_info_details_exist(inout_username_2)  # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 定义初始变量
    # i 为列表循环次数(即每个用户所在的索引值) - 取到索引再去拿值
    # a 为替换后的索引值,因为每一次循环 i 都在发生变化
    i = -1
    a = 0
    for info in user_info:
        i += 1
        if username_input == info['username']:
            # 将找到 username 的 索引值
            a = i
    # 找到索引所在的信息
    print(f'这是找到的用户信息:>>>{user_info[a]}')
    user_info.pop(a)
    print(f'这是删除后的信息{user_info}')
    # 存储的数据格式
    # 调用写入信息函数进行写入信息
    # user_info : [{'username': 'a', 'age': 'b', 'salary': 'c', 'hobbies': 'd'}]
    # 将原来的信息表删除,重新创建新的信息表进行信息的写入
    file_path = file_name + '\\' + 'infodetails.text'
    os.remove(file_path)
    for data in user_info:
        username = data['username']
        age = data['age']
        salary = data['salary']
        hobbies = data['hobbies']
        data_info = f'{username}|{age}|{salary}|{hobbies}\n'

        write_user_infos(username, data_info)
    print('感谢你的使用')
    back_function(function_id_3)


def function_id_4():
    cmd = input('确认是否退出系统?(y/n)>>>>>')
    if cmd == 'y':
        pass
    else:
        # 返回功能菜单
        login_after()


def main():
    login_befroe()

    # write_username_password()


if __name__ == '__main__':
    main()