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