zoukankan      html  css  js  c++  java
  • day13 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}
    ")
    
    
    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()
    

      

  • 相关阅读:
    学习进度笔记
    学习进度笔记
    学习进度笔记
    《一级架构师》阅读笔记
    学习进度笔记
    学习进度笔记
    学习进度笔记
    mysql
    error: 'wblog/' does not have a commit checked out
    有用的网页
  • 原文地址:https://www.cnblogs.com/fanghongbo/p/9899627.html
Copyright © 2011-2022 走看看