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

基本要求


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

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

主体代码


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 第四章 绩效管理 第一节 绩效管理系统的设计 【知识要求】 一 绩效管理系统设计的基本内容 包括 绩效管理制度的设...
    马甲吃茶阅读 1,275评论 0 3
  • 这是记忆中聚会最多的一个春节假期 Due-day 腊月二十九,晚上12:30 From 北京 to 家 Day...
    高岸岸阅读 159评论 0 0
  • 作者:叔本华 每做一件事,我们首先想到的就是别人会怎样看,人生中几乎有一半的麻烦与困扰就是来自于我们对行动结果的焦...
    a紅霞Li阅读 339评论 0 0
  • 这是一个简单的SwipeLayout的实现,主要用到了ViewDragHelper对拖动进行控制。第一次写这样的文...
    马志炜阅读 1,950评论 0 2
  • 今天妈妈早早的回到了家,给我们做馄饨吃。我和我的朋友聪聪一起到家里吃馄饨。聪是我幼儿园时的玩伴,现在是我在码头小学...
    zxlh阅读 248评论 0 0