【C++】C++公司人事管理系统(源码)【独一无二】

简介: 【C++】C++公司人事管理系统(源码)【独一无二】

一、设计要求

该代码设计了一个员工管理系统,包含以下主要功能点:


1.员工基本信息管理:


  • 定义了一个 Date 类,用于表示员工的出生日期,包括年、月、日三个属性。
  • Employee 抽象基类包含员工的基本信息:编号、姓名、性别、出生日期、职位和薪水。

2.经理类:


  • 定义了一个 Manager 类,继承自 Employee 基类,表示经理角色。
  • 实现了 pay() 方法,返回经理的薪水。
  • 重写了 display() 方法,显示经理的详细信息。


3.技术员类:


  • 定义了一个 Technician 类,继承自 Employee 基类,表示技术员角色。
  • 技术员的薪水按工作小时数计算,每小时25元。
  • 实现了 pay() 方法,根据工作小时数计算技术员的薪水。
  • 重写了 display() 方法,显示技术员的详细信息,包括工作小时数。


4.销售员类:


  • 定义了一个 Salesman 类,继承自 Employee 基类,表示销售员角色。
  • 销售员的薪水按销售额的4%计算。
  • 实现了 pay() 方法,根据销售额计算销售员的薪水。
  • 重写了 display() 方法,显示销售员的详细信息,包括销售额。


5.销售经理类:


  • 定义了一个 Salesmanager 类,继承自 Manager 和 Salesman 类,表示销售经理角色。
  • 销售经理的基本薪水为5000元,外加销售额的0.5%。
  • 实现了 pay() 方法,根据基本薪水和销售额计算销售经理的薪水。
  • 重写了 display() 方法,显示销售经理的详细信息,包括销售额。


👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


6.多态性和虚函数:


  • Employee 基类中的 pay() 方法是一个纯虚函数,使得 Employee 成为抽象类。
  • 各派生类(Manager、Technician、Salesman、Salesmanager)都实现了 pay() 方法,用于计算各自的薪水。
  • 使用虚函数机制,通过基类指针调用派生类的 display() 和 pay() 方法,实现多态性。


7.主函数:


  • 创建 Date 对象,用于表示员工的出生日期。
  • 创建不同类型的员工对象,包括 Manager 对象 m、Technician 对象 t、Salesman 对象 s 和 Salesmanager 对象 sm。
  • 使用指向 Employee 基类的指针数组,存储各员工对象的地址。
  • 遍历指针数组,调用每个员工对象的 display() 方法显示其详细信息,并调用 pay() 方法计算和显示其薪水。


通过这些功能点,代码实现了一个灵活且高效的员工管理系统,能够根据不同类型的员工显示特定的信息和计算薪水,同时具备良好的扩展性和可维护性。


👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


二、设计思路

该代码设计了一个员工管理系统,包括不同类型的员工:经理、技术员、销售员和销售经理。每种员工类型都有自己的属性和计算工资的方法。使用了继承和多态的概念,使得代码结构清晰、扩展性强。

类的设计
  1. Date类:用于表示员工的出生日期,包含年、月、日三个属性。
class Date {
public:
    int year;
    int month;
    int day;
    Date(int y = 0, int m = 0, int d = 0) : year(y), month(m), day(d) {}
};


2.Employee类:这是一个抽象基类,包含员工的基本信息和一个纯虚函数pay(),表示计算工资的方法。

class Employee {
protected:
    int id;
    std::string name;
    std::string gender;
    Date birthdate;
    std::string position;
    double salary;
public:
    Employee(int i, std::string n, std::string g, Date b, std::string p, double s)
        : id(i), name(n), gender(g), birthdate(b), position(p), salary(s) {}

  // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略

    virtual double pay() const = 0; // 纯虚函数
};


3.Manager类:继承自Employee类,表示经理,固定工资为8000。

class Manager : virtual public Employee {
public:
    Manager(int i, std::string n, std::string g, Date b, std::string p)
        : Employee(i, n, g, b, p, 8000) {}

  // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略
};

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 汽车租赁 ” 获取。👈👈👈


  1. Technician类:继承自Employee类,表示技术员,工资按工作小时数计算(每小时25元)。
class Technician : public Employee {
protected:
    int workHours;
public:
    Technician(int i, std::string n, std::string g, Date b, std::string p, int h)
        : Employee(i, n, g, b, p, h * 25), workHours(h) {}

  // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略

    void display() const override {
        Employee::display();
        std::cout << "工作时间: " << workHours << " 小时" << std::endl;
    }
};


5.Salesman类:继承自Employee类,表示销售员,工资按销售额的4%计算。

class Salesman : virtual public Employee {
protected:
    double salesAmount;
public:
    Salesman(int i, std::string n, std::string g, Date b, std::string p, double s)
        : Employee(i, n, g, b, p, s * 0.04), salesAmount(s) {}

  // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略    // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略
};


6.Salesmanager类:继承自Manager和Salesman类,表示销售经理,基本工资为5000,外加销售额的0.5%。

class Salesmanager : public Manager, public Salesman {
public:
    Salesmanager(int i, std::string n, std::string g, Date b, std::string p, double s)
        : Employee(i, n, g, b, p, 5000 + s * 0.005), Manager(i, n, g, b, p), Salesman(i, n, g, b, p, s) {}

        // 略        
  
  //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

  // 略
};

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


main函数

在主函数中,创建不同类型的员工对象,并通过指向Employee基类的指针数组来遍历和展示每个员工的信息及其工资。

int main() {
    Date birthdate(1985, 5, 15);
        // 略        
    
    //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

    // 略
    // 略
        // 略
            // 略
                // 略
                
    Employee* employees[] = { &m, &t, &s, &sm };

    for (Employee* e : employees) {
        e->display();
        std::cout << "月薪: " << e->pay() << " 元\n" << std::endl;
    }

    return 0;
}


这个设计思路通过面向对象编程的方式,使用继承和多态来管理不同类型的员工。各个类的职责分明,使得代码具有良好的可读性和可维护性。通过基类指针数组来调用派生类的display和pay方法,实现了多态性。


👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈


三、运行结果



👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈

相关文章
|
3月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
79 0
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
53 2
|
2月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
42 3
|
3月前
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
61 1
|
3月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
3月前
|
存储 数据可视化 C++
【C++】C++ 职工信息管理系统(源码)【独一无二】
【C++】C++ 职工信息管理系统(源码)【独一无二】
|
3月前
|
存储 数据可视化 C++
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
|
3月前
|
数据可视化 C++
【C++】C++商店销售管理系统(源码+论文)【独一无二】
【C++】C++商店销售管理系统(源码+论文)【独一无二】
|
3月前
|
C++
【C++】C++书店管理系统(源码+论文)【独一无二】
【C++】C++书店管理系统(源码+论文)【独一无二】
|
3月前
|
存储 C++ 索引
【C++ 】C++ 停车场收费系统(源码)【独一无二】
【C++ 】C++ 停车场收费系统(源码)【独一无二】