首页 > 编程语言 >Python项目之员工管理系统-函数版

Python项目之员工管理系统-函数版

时间:2023-12-12 21:12:25浏览次数:48  
标签:username 管理系统 Python 员工 flag user login data id

员工管理系统

# 完成以下功能
 '''
--------------- 员工系统 --------------- 
                1:注册
                2:登陆
                3:添加员工信息
                4:查看指定员工信息
                5:查看所有员工信息
                6:删除指定员工信息
                7:删除所有员工信息
                8:修改指定员工信息
                9:退出系统
'''
from datetime import datetime

# 部分文件内容声明
# 共存在三份文本文件,负责存储用户登录信息,用户个人信息,操作流水
# user_info : 编号|用户名|年龄|性别|爱好
# user_login : 用户名|密码|权限
# user_flow : 用户>>>>{操作}>>>>{流水时间}
# files_list = ['user_info.txt','user_login.txt','user_flow.txt']

time = f'时间为 :>>>> {datetime.now().strftime("%Y年%m月%d日 %H时%M分%S秒")}'

login_data = {'username': '', 'pwd': '', 'is_admin': False}


def check_login(tag):  # 验证登录信息
    if login_data.get('username') != '':
        if tag == 'admin':
            if login_data.get('username') == 'lea4ning':
                login_data['is_admin'] = True
                return True, None
            else:
                return False, f"当前功能只有管理员可以使用!"
        elif tag == 'user':
            pass
    else:
        return False, f"请先登录!"


def user_input():  # 输入信息   # 返回信息字典
    username = input("请输入用户名:").strip()
    user_pwd = input("请输入密码:").strip()
    return username, user_pwd


def register():  # 注册功能   # user_login
    # 函数块主题需要传回 flag和msg
    # 如果是进行注册就返回一个字典{用户名:{pwd,limit}}
    username, user_pwd = user_input()
    data = read_data('user_login.txt', 'login')
    login_dict = {}
    if username == 'lea4ning' and user_pwd == '12345':
        user_limit = 'admin'
    elif username in data.keys():
        return False, "用户已注册,请登录"
    else:
        user_limit = 'user'
    login_dict[username] = {'pwd': user_pwd, 'limit': user_limit}
    save_data(tag="register", data=login_dict)
    str_data = f"{username}:>>>>>注册成功>>>{time}"
    print(str_data)
    flag, msg = save_file(path='user_log.txt', str_data=str_data)
    return flag, msg


def add_user():
    flag, msg = check_login('admin')
    if flag:
        flag, msg = add_info('add_user')
    return flag, msg


def add_info(tag):  # 添加用户信息 user_info
    data = read_data('user_info.txt', 'info')
    username = ''
    user_pwd = ''
    user_sex = ''
    user_id = ''
    user_age = ''
    hobby_list = []
    if tag == 'renew':
        renew_name = list_id('renew')
        username = renew_name
    else:
        username, user_pwd = user_input()
    while True:
        print("信息提交".center(30, '-'))
        if tag == 'renew':
            user_id = data[username]['id']
        else:
            user_id = input("请输入编号(编号不可重复):").strip()
            if user_id in [key['id'] for key in data.values()]:
                print("此编号已存在,请重试!")
                continue
        # 编号不可以重复
        user_age = input("请输入年龄(请输入纯数字):").strip()
        if not user_age.isdigit():
            print("请输入纯数字!")
            continue
        # 年龄为纯数字
        user_sex = input("请输入性别(请在男或女中选择:").strip()
        # 性别限定选项
        if user_sex not in ['男', '女']:
            print(f"输入有误,错误内容{user_sex},请重新输入")
            continue
        while True:
            hobby_input = input("请输入爱好(q结束添加):").strip()
            if tag == 'renew':
                hobby_list = data[username]['hobby']
            if hobby_input.upper() == 'Q':
                break
            elif hobby_input in hobby_list:
                print(f"请不要重复添加,{hobby_input}已经存在!")
                continue
            else:
                hobby_list.append(hobby_input)  # 爱好通过上述筛选后,添加到hobby_list中
        break  # 退出信息输入的循环
    info_dict = {username: {'id': user_id, 'name': username, 'age': user_age, 'sex': user_sex, 'hobby': hobby_list}}
    flag, msg = save_data(tag=tag, data=info_dict)
    return flag, msg


def save_data(tag, data):  # 做切分,返回路径和字符串内容
    str_data = ''
    path = ''
    if tag == 'register':
        path = 'user_login.txt'
        for key, value in data.items():
            str_data = f"{key}|{value.get('pwd')}|{value.get('limit')}"
    elif tag == 'add_user':
        path = 'user_info.txt'
        for key, value in data.items():
            str_hobby = '-'.join(value.get('hobby'))
            str_data = f"{value.get('id')}|{key}|{value.get('age')}|{value.get('sex')}|{str_hobby}"
    elif tag == 'del_one':
        path = 'user_info.txt'
        del_name = data
        str_data = f"None|{del_name}|None|None|None"
    elif tag == 'renew':
        path = 'user_info.txt'
        for key, value in data.items():
            str_hobby = '-'.join(value.get('hobby'))
            str_data = f"{value.get('id')}|{key}|{value.get('age')}|{value.get('sex')}|{str_hobby}"
    flag, msg = save_file(path=path, str_data=str_data)
    return flag, msg


def save_file(path, str_data):  # 将数据写入至文件中,保存到本地文本文档
    print(str_data)
    try:
        with open(path, 'a', encoding='utf-8') as fp:
            fp.write(str_data + '\n')
            return True, f"文件更改成功,可在{path}中查看!"
    except Exception as e:
        return False, f"文件写入失败{e}!"


def read_data(path, tag):
    try:
        data = {}
        with open(path, 'r', encoding='utf8') as fp:
            list_data = fp.read().split('\n')
            if tag == 'login':
                for login in list_data:
                    # print(len(login))
                    if len(login) == 0:
                        continue
                    # print(login)
                    username, user_pwd, limit = login.split('|')
                    data[username] = {'pwd': user_pwd, 'limit': limit}
            elif tag == 'info':
                for info in list_data:  # 编号|用户名|年龄|性别|爱好
                    if info == '':
                        continue
                    elif 'None' in info:
                        continue
                    user_id, username, user_age, user_sex, hobby_list = info.split('|')
                    hobby = hobby_list.split('-')
                    data[username] = {'id': user_id, 'age': user_age, 'sex': user_sex, 'hobby': hobby}
        return data
    except Exception as e:
        return f"文件读取失败!错误信息为:{e}"


def login():  # 登录功能
    # 函数块主题需要传回 flag和msg
    username, user_pwd = user_input()
    data = read_data(path='user_login.txt', tag='login')
    if username not in data.keys():
        return False, f"{username}尚未注册,请先注册!"
    true_pwd = data[username].get('pwd')
    if user_pwd == true_pwd:
        str_data = f"{username}:>>>>>登录成功>>>{time}"
        login_data['username'] = username
        login_data['pwd'] = user_pwd
        save_file(path='user_log.txt', str_data=str_data)
        return True, f"登录成功!欢迎{username}!"
    else:
        return False, "登录失败!"


def list_id(tag):
    data = read_data(path='user_info.txt', tag='info')
    list_id = [data[key].get('id') for key in data.keys()]
    # dict_id = {key: keys for key in list_id for keys in data.keys() for value in data.values() if value['id'] == key}
    dict_id = {key: keys for key in list_id for keys, value in data.items() if value['id'] == key}
    print(f"当前所有id如下:\n{dict_id}")
    choice = ''
    if tag == 'check':
        choice = input("请输入需要查看的用户id:")
    elif tag == 'del':
        choice = input("请输入需要删除的用户id:")
    elif tag == 'renew':
        choice = input("请输入需要修改的用户id:")
    for check_id in dict_id:
        if check_id == choice:
            check_name = dict_id[choice]
            return check_name
        else:
            return "输入编号有误,请重新输入!"


def check_one():  # 查看指定用户信息
    # 函数块主题需要传回 flag和msg
    data = read_data(path='user_info.txt', tag='info')
    check_name = list_id('check')
    txt = data[check_name]
    return True, txt


def check_all():  # 查看所有用户信息
    # 函数块主题需要传回 flag和msg
    data = read_data(path='user_info.txt', tag='info')
    return True, data


def del_one():  # 删除指定用户信息
    # 函数块主题需要传回 flag和msg
    check_login('admin')
    del_name = list_id('del')  # 编号:姓名
    print(f"已将信息删除")
    flag, msg = save_data(tag='del_one', data=del_name)
    return flag, msg


def del_all():  # 删除所有用户信息
    check_login('admin')
    # 函数块主题需要传回 flag和msg
    try:
        with open('user_info.txt', 'w', encoding='utf8') as fp:
            fp.write('')
            return True, "信息库已清空!"
    except Exception as e:
        return False, f"删除失败!错误信息:{e}"


def renew_info():  # 修改指定用户信息
    flag, msg = check_login('admin')
    # 函数块主题需要传回 flag和msg
    if flag:
        flag, msg = add_info('renew')
    return flag, msg


def back_system():  # 退出系统
    # 函数块主题需要传回 flag和msg
    return False, 'break'


# 功能菜单
func_menu = '''
--------------- 欢迎来到员工管理系统 --------------- 
                1:注册
                2:登陆
                3:添加员工信息
                4:查看指定员工信息
                5:查看所有员工信息
                6:删除指定员工信息
                7:删除所有员工信息
                8:修改指定员工信息
                9:退出系统
'''
func_dict = {
    1: register,
    2: login,
    3: add_user,
    4: check_one,
    5: check_all,
    6: del_one,
    7: del_all,
    8: renew_info,
    9: back_system
}


def main_system():  # 主系统操作
    while True:
        print(func_menu)  # 打印系统菜单
        func_id = input("请输入功能ID :>>>> ").strip()  # 收集用户输入信息
        if not func_id.isdigit():  # 如果输入除数字外的内容,报错并要求用户重新选择
            print(f'{func_id} :>>>> 非法字符')
            continue
        func_id = int(func_id)  # 如果输入的全是数字,强转成数字类型
        if func_id not in func_dict.keys():  # 如果输入的数字并不在功能列表中,输出功能不存在并返回菜单页面
            print(f"{func_id} :>>>> 不存在该功能!")
            continue
        # 以上用户输入信息经过筛选,只剩下在功能表格中的数字,通过字典取值,取到相应的功能
        # func作为变量名接收功能的变量名
        # func() 作为运行的函数
        # 举例:选择6,对应在功能字典中的值就是del_one,func = del_one
        # flag,msg = del_one()
        func = func_dict.get(func_id)
        flag, msg = func()
        if flag:
            print(msg)
        elif not flag and msg == 'break':
            print(f"欢迎下次使用!再见!")
            break
        else:
            print(msg)
            continue


if __name__ == '__main__':
    main_system()

标签:username,管理系统,Python,员工,flag,user,login,data,id
From: https://www.cnblogs.com/Lea4ning/p/17897820.html

相关文章

  • i-MES生产制造管理系统-SMT物料防错与追溯
    说起SMT,相信大家或多或少都有一些了解,主要是用来贴片的,简单点说就是给空白的PCB板贴上一些元器件,比如二极管、IC、电阻等等各种电子元器件,以前客户对这些元器件物料的追溯管控的并不严格,只要按照电路图贴上去即可,但是随着客户的要求越来越高,这些元器件的管控也就变得越来越严格......
  • 侯哥的Python分享--系列教程
    合集-mysql(26) 1.侯哥的Python分享2019-04-162.MySQL基础1-关系型数据库与非关系型数据库2022-03-173.MySQL基础2-数据库及表的操作2022-03-174.MySQL基础3-数据库增删改操作2022-03-175.MySQL基础4-数据查询07-176.MySQL基础5-用户及权限管理07-187.MySQL基础6-常用数......
  • Python办公自动化(一)对比execl内容
    Python办公自动化(一)对比execl内容安装依赖需要安装的库:openpyxl,pandas如何安装:打开命令行(win+R输入cmd/powershell),输入以下命令pipinstallopenpyxlpipinstallpandas代码新建一个文件夹,新建一个文件,文件名为compare.py,输入以下代码,保存。#使用说明#1.将df1.xlsx......
  • 【Python爬虫】爬虫框架Scrapy初使用_爬取4399游戏页面数据
    Scrapy简介Scrapy是一个用于爬取和提取数据的开源web抓取框架。它提供了一个强大的机制,让开发者可以轻松地创建和管理爬虫程序,以从网站上自动提取结构化的数据。以下是Scrapy的一些主要特点和优势:强大灵活的爬取能力:Scrapy具有高度可配置的请求处理和数据提取功能。它可以轻......
  • Python——第五章:json模块
    什么是json:json模块是用于处理JSON(JavaScriptObjectNotation)数据的模块,翻译过来叫js对象简谱。JSON是一种轻量级的数据交换格式,常用于将数据在不同语言之间进行传递。我们先来看一段json代码:wf={"name":"汪峰","age":18,"hobby":"上头条","wife"......
  • 02-python基础学习
    Python简介:python是一个解释型语言,主要理念就是优雅和简单。目前市面上存在两个版本的python,2版本现在已经停止更新。因此使用3.x版本编写的python代码无法使用2.xpython解释器进行处理。python源文件以.py结尾,其中的代码,通过使用python解释器解释执行。可以通过使用......
  • Python实现单例模式的五种写法
    单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。在Python中,可以使用多种方法实现单例模式。本文将介绍五种常见的Python单例模式实现方式,包括使用模块、装饰器、基类、元类和线程安全机制。单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供全局......
  • Python爬取网站内容时,出现返回200和403状态码的原因解析
    在使用Python进行网页爬取时,我们有时会遇到返回200状态码表示成功,而有时会遇到返回403状态码表示访问被拒绝的情况。本文将解析造成这种情况的可能原因,并提供一些解决方法,以确保爬取网站内容的顺利进行。在使用Python进行网页爬取时,经常会遇到一种情况:有时成功返回200状态码,表示请......
  • 解决Python爬虫中Header报错的方法
    在使用Python编写爬虫时,有时会遇到Header报错的情况。本文将介绍常见的Header报错类型,并提供解决方法,帮助您顺利处理Python爬虫中的Header报错问题。当我们使用Python进行爬虫开发时,经常需要设置请求头(Header)来模拟浏览器发送请求。然而,有时可能会遇到一些与Header相关的报错。以下......
  • Python办公自动化在Mac和Linux平台上的兼容性限制
    Python是一种强大的编程语言,被广泛应用于办公自动化领域。然而,有关Python办公自动化在Mac和Linux平台上的兼容性问题需要进行一定的探讨。本文将对Python办公自动化在Mac和Linux平台上的兼容性限制进行分析,并提供一些解决方案。Python是一种流行的编程语言,在办公自动化领域有着广泛......