某公司有四种类型的员工:经理、兼职技术人员、推销员和销售经理。各员工的月薪计算如下:经理拿固定月薪28000元;兼职技术人员按200/每小时领取月薪;推销员的月薪按固定月薪3000元和当月推销额的4%提成;销售经理拿固定月薪和销售提成,固定月薪为7000元,销售提成为所管辖部门当月销售额总额的5‰。根据上述要求,设计一个人员信息管理系统。此管理系统要求如下: 1.设计一个基类Employee,派生出其他的类,每个类有构造函数和析构函数; 2.每个类的成员变量至少包括:姓名、员工编号和月薪总额; 3.在主函数中,使用各派生类分别定义一个对象,需要从键盘输入: 1)这四类员工的姓名; 2)兼职技术人员本月的工作小时数; 3)推销员本月的销售额; 4)销售经理所管辖部门本月的销售总额。 4.分别输出这四类员工本月工资; 5.至少使用虚基类、抽象类和虚函数中的两种技术。
时间: 2024-03-14 14:43:59 浏览: 17
好的,这是一个很好的问题。我可以帮您解决这个问题。以下是实现这个人员信息管理系统的示例代码。
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义一个虚基类Employee
class Employee {
protected:
string name; // 姓名
int id; // 员工编号
double salary; // 月薪总额
public:
Employee(string n, int i) : name(n), id(i), salary(0) {}
virtual ~Employee() {} // 虚析构函数
virtual void calculateSalary() = 0; // 纯虚函数
virtual void display() = 0; // 纯虚函数
};
// 定义派生类Manager
class Manager : virtual public Employee {
public:
Manager(string n, int i) : Employee(n, i) {}
virtual ~Manager() {}
virtual void calculateSalary() {
salary = 28000; // 经理的月薪为固定月薪28000元
}
virtual void display() {
cout << "姓名:" << name << endl;
cout << "员工编号:" << id << endl;
cout << "月薪总额:" << salary << endl;
}
};
// 定义派生类PartTimeTechnician
class PartTimeTechnician : virtual public Employee {
protected:
double workHours; // 本月工作小时数
public:
PartTimeTechnician(string n, int i) : Employee(n, i), workHours(0) {}
virtual ~PartTimeTechnician() {}
virtual void calculateSalary() {
salary = workHours * 200; // 兼职技术人员的月薪按200/每小时领取
}
virtual void display() {
cout << "姓名:" << name << endl;
cout << "员工编号:" << id << endl;
cout << "月薪总额:" << salary << endl;
}
void setWorkHours(double wh) {
workHours = wh;
}
};
// 定义派生类Salesman
class Salesman : virtual public Employee {
protected:
double sales; // 本月销售额
public:
Salesman(string n, int i) : Employee(n, i), sales(0) {}
virtual ~Salesman() {}
virtual void calculateSalary() {
salary = 3000 + sales * 0.04; // 推销员的月薪按固定月薪3000元和当月推销额的4%提成
}
virtual void display() {
cout << "姓名:" << name << endl;
cout << "员工编号:" << id << endl;
cout << "月薪总额:" << salary << endl;
}
void setSales(double s) {
sales = s;
}
};
// 定义派生类SalesManager
class SalesManager : public Salesman {
protected:
double salesTotal; // 所管辖部门本月的销售总额
public:
SalesManager(string n, int i) : Employee(n, i), Salesman(n, i), salesTotal(0) {}
virtual ~SalesManager() {}
virtual void calculateSalary() {
salary = 7000 + salesTotal * 0.005 + sales * 0.04; // 销售经理的月薪为固定月薪7000元和销售提成,销售提成为所管辖部门当月销售额总额的5‰
}
virtual void display() {
cout << "姓名:" << name << endl;
cout << "员工编号:" << id << endl;
cout << "月薪总额:" << salary << endl;
}
void setSalesTotal(double st) {
salesTotal = st;
}
};
int main() {
// 创建对象并设置参数
Manager m("张三", 1001);
PartTimeTechnician pt("李四", 1002);
Salesman s("王五", 1003);
SalesManager sm("赵六", 1004);
pt.setWorkHours(80);
s.setSales(100000);
sm.setSales(120000);
sm.setSalesTotal(1000000);
// 计算月薪总额并输出结果
m.calculateSalary();
m.display();
cout << endl;
pt.calculateSalary();
pt.display();
cout << endl;
s.calculateSalary();
s.display();
cout << endl;
sm.calculateSalary();
sm.display();
cout << endl;
return 0;
}
```
注释中已经解释了每个类和函数的作用,这里不再赘述。需要注意的是,虚基类和虚函数都是为了实现多态性,其中虚基类用于解决多继承时的冲突问题,而虚函数用于实现动态绑定,使程序可以在运行时动态地选择调用哪个函数。抽象类则是指含有纯虚函数的类,不能被实例化,只能作为基类被其他类继承并实现纯虚函数。在本例中,Employee类就是一个抽象类,因为它包含了一个纯虚函数calculateSalary()。