Python 实现HR人⼒资源管理作业

HR人⼒资源管理.
1. 菜单: ("查看员工信息","添加员工信息", "修改员工信息", "删除员工信息", "退出")

2. 添加员⼯信息:
用户输入员工的基本信息(id, name, birthday, salary, time), 将员工信息写入到文件

emp.db⽂件内
3. 修改员工信息:

显⽰所有员工信息. 然后让⽤户选择要修改的员工的id. 然后让⽤户输入员工的工资, 将员⼯的工资修改为⽤户输入的工资. 其余内容不做改动

4. 删除员⼯信息:
显示所有员⼯信息. 然后⽤户选择要删除的员工id, 根据⽤户输入的id删除该员工的

全部信息
5. 查看员工信息:

显示出所有员工的基本信息. 以上操作都需要围绕着emp.db来完成.

扩展(升级题): ⽤用户的每一次操作成功都要将用户执⾏的操作记录在emp.log文件中(查看员工信息除外). 例如:

⽤户选择"添加员工信息". 当添加动作执行完毕, 在emp.log中记录⼀句话: 管理理员在

xxxx-xx-xx hh:mm:ss时间执⾏了了添加员工信息操作. 添加的员工信息为: xxxxxxxxxxxxx 以此类推. 每次操作成功后都要记录信息. (查看员⼯信息除外)

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: fhb
# @Date  : 2018/11/2
# @Desc  :

import pickle
import os
import datetime


def bar():
    """
    打印菜单,
    :return: 返回一个字典来保存菜单信息
    """

    menu_list = ("查看员工信息", "添加员工信息", "修改员工信息", "删除员工信息", "退出")
    return {str(i): j for i, j in enumerate(menu_list, 1)}


def show():
    """
    查看员工信息
    :return: 无
    """

    if database_record:
        for i in database_record:
            print("ID:%s,Name:%s,Birthday:%s,Salary:%s,Time:%s" % (
                i, database_record[i]["name"], database_record[i]["birthday"], database_record[i]["salary"],
                database_record[i]["time"]))
    else:
        print("数据库中没有员工信息,请先添加员工!")


def add():
    """
    实现员工增加操作,用户id实现自增
    :return: 无
    """

    if database_record:
        uid = str(max([int(x) for x in database_record.keys()]) + 1)
    else:
        uid = "1"

    name = input("请输入员工姓名: ")
    birthday = input("请输入员工生日: ")
    salary = input("请输入员工工资: ")
    time = input("请输入员工入职时间: ")

    database_record.setdefault(uid, {})["name"] = name
    database_record.setdefault(uid, {})["birthday"] = birthday
    database_record.setdefault(uid, {})["salary"] = salary
    database_record.setdefault(uid, {})["time"] = time

    message = f"工号: {uid},姓名: {name}"
    action = "新增"
    log(message, action)


def delete():
    """
    实现输入用户id来删除数据库中的用户
    :return: 无
    """

    show()

    id = input("请输入要删除的员工工号[q for quit]: ")

    is_exist = database_record.get(id)

    if id.upper() == "Q":
        return

    elif is_exist:
        database_record.pop(id)
        message = f"工号: {id}"
        action = "删除"
        log(message, action)
        print(f"删除用户工号{id}成功!")
    else:
        print(f"要删除的用户工号{id}不存在!")


def modify():
    """
    实现输入用户id来修改数据中的salary
    :return: 无
    """

    show()

    id = input("请输入要修改员工的用户工号[q for quit]: ")

    is_exist = database_record.get(id)

    if id.upper() == "Q":
        return

    elif is_exist:

        is_ack = False

        while not is_ack:
            salary = input("请输入你要修改的员工工资[q for quit]: ")

            if salary.upper() == "Q":
                return
            elif salary.isdigit():
                is_ack = True
                database_record[id]["salary"] = salary
                message = f"salary 修改为: {salary}"
                action = "修改"
                log(message, action)

            else:
                print("输入的工资有误,请重新输入")
    else:
        print("输入用户id有误!")


def history():
    """
    实现加载数据文件,读取历史数据
    :return: 如果有数据则返回history_record,否则返回一个空字典
    """

    if os.path.exists(database_name):
        with open(database_name, 'rb') as f:
            history_record = pickle.load(f)
            return history_record
    else:
        return {}


def save():
    """
    将数据库操作刷到数据中
    :return: 无
    """
    with open(database_name, "wb") as f:
        pickle.dump(database_record, f)


def log(message, action):
    """
    日志模块,用户操作记录到日志中
    :param message: 操作的数据信息,如用户id等
    :param action: 操作的方法,如增,删,查,改
    :return: 无
    """
    time_stamp = datetime.datetime.now()
    with open(access_log, "a", encoding="utf-8") as f:
        f.write(f"管理理员在{time_stamp}时间执⾏了{action}员⼯信息操作. {action}的员工信息为:{message}\n")


if __name__ == '__main__':

    database_name = "emp.db"
    access_log = "emp.log"

    while True:

        menu = bar()

        for k, v in menu.items():
            print(k, v)

        content = input("请输入操作编号: ")

        database_record = history()
        operation_list = {"1": show, "2": add, "3": modify, "4": delete}
        is_operation = operation_list.get(content)

        if content == "5":
            break
        elif is_operation:
            operation_list[content]()
        else:
            print("输入有误,请重新输入!")

        save()