基本要求
面向对象人力资源管理系统:
- 能存多个员工信息
(每个员工的信息有:姓名、年龄、工号、薪资、职位、部门) - 新员工入职(添加员工)
- 员工离职(删除员工)
- 查看某个员工的信息
- 查询薪资最高的员工
- 查询指定部门中所有员工的平均薪资
- 求整个公司的员工的平均年龄
(可以根据能力改善和添加功能,做到尽量贴近生活)
主体代码
# -*- coding: utf-8 -*-
# @Time : 2018/8/1 16:49
# @Author : G.Hope
# @Email : 1638327522@qq.com
# @File : homework.py
# @Software: PyCharm
"""
面向对象人力资源管理系统:
- 能存多个员工信息
(每个员工的信息有:姓名、年龄、工号、薪资、职位、部门)
- 新员工入职(添加员工)
- 员工离职(删除员工)
- 查看某个员工的信息
- 查询薪资最高的员工
- 查询指定部门中所有员工的平均薪资
- 求整个公司的员工的平均年龄
(可以根据能力改善和添加功能,做到尽量贴近生活)
"""
"""
基本数据结构分析与设置:
初始员工数量为66
有一个leader
下设四个部门及一位后勤负责人
四个部门分别为:财务、人事、开发、市场,每一个部门有一位主管
员工年龄要求在18--65
新加入员工除加入四个部门之外也可以做leader助理
"""
class Staff:
"""职员"""
number = 66
def __init__(self, name='', age=0, post='职员', section='', working_age=0):
self.name = name # 姓名
self.age = age # 年龄
self.job_number = 0 # 工号
self.pay = 0 # 薪水
self.post = post # 职位
self.section = section # 部门
self.working_age = working_age # 工龄
def __str__(self):
return '部门:%s \t 职位:%s \t 姓名:%s' % (self.section, self.post, self.name)
class Company:
"""公司"""
def __init__(self):
self.staff = [] # 职工
self.the_financial_status = 0 # 财务状况
self.change_of_personnel = False # 人事变动
def add_staff(self):
name = input('name:') # 姓名
age = input('age:') # 年龄
job_number = input('job_number:') # 工号
pay = input('pay:') # 薪水
post = input('post:') # 职位
section = input('section:') # 部门
new_staff = Staff(name, age, post, section)
new_staff.job_number = job_number
new_staff.pay = pay
self.staff.append(new_staff)
def show_staff(self):
for staff in self.staff:
print(staff)
def find_staff(self, name):
for staff in self.staff:
if staff.name == name:
print(staff.name, staff.age, staff.job_number, staff.pay, staff.post, staff.section)
def find_longest_working_age(self):
longest = self.staff[0]
for staff in self.staff:
if staff.working_age > longest.working_age:
longest = staff
return '工龄:%s\t%s' % (longest.working_age, longest)
def get_avg_working_age(self, section):
sum = 0
count = 0
for staff in self.staff:
if staff.section == section:
count += 1
sum += staff.working_age
avg = sum / count
print('%s的平均工龄为%f' % (section, avg))
def get_avg_age(self):
avg_age = 0
for staff in self.staff:
avg_age += int(staff.age)
avg_age /= len(self.staff)
print(avg_age)
if __name__ == '__main__':
staff = Staff('GHope', 38, 'leader')
staff1 = Staff('Lucy', 22, 'governor', '财务', 3)
staff2 = Staff('Tom', 55, 'governor', '人事', 6)
staff3 = Staff('Emma', 36, '职员', '开发', 1)
staff4 = Staff('James', 44, 'governor', '市场', 9)
staff5 = Staff('Aleno', 26, '职员', '开发', 2)
staff6 = Staff('Steve', 48, '职员', '市场', 4)
staff7 = Staff('David', 36, '职员', '开发', 1)
staff8 = Staff('John', 39, '职员', '市场', 7)
staff9 = Staff('Amy', 36, '职员', '开发', 2)
staff10 = Staff('Judy', 34, '职员', '市场', 1)
# 模拟功能(ps:具体数据不足)
V = Company()
V.staff.append(staff)
V.staff.append(staff1)
V.staff.append(staff2)
V.staff.append(staff3)
V.staff.append(staff4)
V.staff.append(staff5)
V.staff.append(staff6)
V.staff.append(staff7)
V.staff.append(staff8)
V.staff.append(staff9)
V.staff.append(staff10)
# 添加新员工:可以通过创建职员类的新对象(如上)或调用公司类的添加职工类实现
# 查看当前系统录入员工基本信息
V.show_staff()
# 添加一个信息比较详细的新员工
V.add_staff()
# 查看之前添加员工信息
V.find_staff('李白')
# 查询工龄最长的员工(。。。在此更改下题目要求,因为之前录入的是工龄。不过实现该功能的逻辑是一样的。)
longestStaff = V.find_longest_working_age()
print(longestStaff)
# 查询指定部门员工的平均工龄
V.get_avg_working_age('开发')
# 求整个公司的员工的平均年龄
V.get_avg_age()
系统测试效果
部门: 职位:leader 姓名:GHope
部门:财务 职位:governor 姓名:Lucy
部门:人事 职位:governor 姓名:Tom
部门:开发 职位:职员 姓名:Emma
部门:市场 职位:governor 姓名:James
部门:开发 职位:职员 姓名:Aleno
部门:市场 职位:职员 姓名:Steve
部门:开发 职位:职员 姓名:David
部门:市场 职位:职员 姓名:John
部门:开发 职位:职员 姓名:Amy
部门:市场 职位:职员 姓名:Judy
name:李白
age:28
job_number:1234
pay:10000
post:职员
section:市场
李白 28 1234 10000 职员 市场
工龄:9 部门:市场 职位:governor 姓名:James
开发的平均工龄为1.500000
36.833333333333336
# -*- coding: utf-8 -*-
# @Time : 2018/8/2 15:52
# @Author : G.Hope
# @Email : 1638327522@qq.com
# @File : ht.py
# @Software: PyCharm
"""
遇到问题考虑:类or对象 -- 属性(数据) -- 方法(功能)
"""
class Staff:
# 每个员工的具体信息
def __init__(self, name, age, salary, job, department):
self.name = name
self.age = age
self.id = ''
self.salary = salary
self.job = job
self.department = department
def show_info(self):
print('姓名:%s,\t工号:%s,\t部门:%s,\t职位:%s' % (self.name, self.id, self.department, self.job))
class HrManager:
"""人力资源管理系统"""
# 若该系统只适用于一个公司,用类的字段储存员工;否则用对象的属性储存
all_staff = [] # 整个公司的所有的员工
# 目前公司已经入职的人数
__number = 0
__all_department = ['财务部', '行政部', '研发部', '总经办', '后勤']
@classmethod
def add_staff(cls):
"""添加员工"""
name = input('name:')
age = int(input('age:'))
salary = int(input('salary'))
while True:
print('公司部门:', *cls.__all_department)
department = input('department:')
if department in cls.__all_department:
break
else:
print('部门输入有误!!!\n请重新输入')
job = input('job:')
# 生成工号
cls.__number += 1
id = str(cls.__number).rjust(4, '0')
# 创建员工对象
staff = Staff(name, age, salary, job, department)
staff.id = id
# 添加员工
cls.all_staff.append(staff)
@classmethod
def del_staff(cls):
"""删除员工"""
name = input('请输入要删除的员工姓名:')
flag = False
for staff in cls.all_staff[:]:
if staff.name == name:
flag = True
staff.show_info()
value = input('是否删除?(Y/N)')
if value == 'Y':
cls.all_staff.remove(staff)
print('删除成功!!!')
if not flag:
print('公司没有该员工!')
@classmethod
def find_staff(cls):
name = input('请输入要查找的员工姓名:')
flag = False
for staff in cls.all_staff:
if staff.name == name:
flag = True
staff.show_info
if not flag:
print('公司没有该员工')
@classmethod
def get_most_rich(cls):
if len(cls.all_staff) == 0:
print('公司还没有员工!')
return
max_staff = cls.all_staff[0]
for staff in cls.all_staff:
if staff.salary > max_staff.salary:
max_staff = staff
print('薪资最高是:%s %d' % (max_staff, max_staff.salary))
@classmethod
def avg_age(cls):
if len(cls.all_staff) == 0:
print('公司还没有员工!')
return
sum1 = 0
for staff in cls.all_staff:
sum1 += staff.age
return sum1 / len(cls.all_staff)
if __name__ == '__main__':
HrManager.add_staff()
HrManager.add_staff()
HrManager.add_staff()
HrManager.del_staff()
HrManager.avg_age()