人力资源管理系统——面向对象基础知识练习

基本要求

面向对象人力资源管理系统:

  • 能存多个员工信息
    (每个员工的信息有:姓名、年龄、工号、薪资、职位、部门)
  • 新员工入职(添加员工)
  • 员工离职(删除员工)
  • 查看某个员工的信息
  • 查询薪资最高的员工
  • 查询指定部门中所有员工的平均薪资
  • 求整个公司的员工的平均年龄
    (可以根据能力改善和添加功能,做到尽量贴近生活)

主体代码

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

    原文作者:GHope
    原文地址: https://www.jianshu.com/p/32024598f3a2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞