一、设计要求
该代码设计了一个员工管理系统,包含以下主要功能点:
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() 方法计算和显示其薪水。
通过这些功能点,代码实现了一个灵活且高效的员工管理系统,能够根据不同类型的员工显示特定的信息和计算薪水,同时具备良好的扩展性和可维护性。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
二、设计思路
该代码设计了一个员工管理系统,包括不同类型的员工:经理、技术员、销售员和销售经理。每种员工类型都有自己的属性和计算工资的方法。使用了继承和多态的概念,使得代码结构清晰、扩展性强。
类的设计
- 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) {} // 略 //👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈 // 略 };
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 汽车租赁 ” 获取。👈👈👈
- 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方法,实现了多态性。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈
三、运行结果
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人事 ” 获取。👈👈👈