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