某公司有四种类型的员工:经理、兼职技术人员、推销员和销售经理。各员工的月薪计算如下:经理拿固定月薪28000元;兼职技术人员按200/每小时领取月薪;推销员的月薪按固定月薪3000元和当月推销额的4%提成;销售经理拿固定月薪和销售提成,固定月薪为7000元,销售提成为所管辖部门当月销售额总额的5‰。根据上述要求,设计一个人员信息管理系统。此管理系统要求如下: 1.设计一个基类Employee,派生出其他的类,每个类有构造函数和析构函数; 2.每个类的成员变量至少包括:姓名、员工编号和月薪总额; 3.在主函数中,使用各派生类分别定义一个对象,需要从键盘输入: 1)这四类员工的姓名; 2)兼职技术人员本月的工作小时数; 3)推销员本月的销售额; 4)销售经理所管辖部门本月的销售总额。 4.分别输出这四类员工本月工资; 5.至少使用虚基类、抽象类和虚函数中的两种技术。
时间: 2024-03-12 11:47:14 浏览: 154
好的,我知道了你的要求。以下是一个基于C++的人员信息管理系统的设计方案:
首先,我们定义一个虚基类Employee,用于派生其他员工类:
```cpp
class Employee {
protected:
string name; // 姓名
string id; // 员工编号
double salary; // 月薪总额
public:
Employee(string n, string i);
virtual ~Employee();
virtual void calcSalary() = 0; // 计算月薪总额
virtual void printSalary() = 0; // 输出月薪总额
};
```
在Employee类中,我们定义了员工的基本信息:姓名、员工编号和月薪总额,并且通过纯虚函数calcSalary()和printSalary()分别用于计算月薪总额和输出月薪总额。这里Employee类是一个虚基类,它没有实际的对象,只是用于派生其他员工类。
接下来,我们可以通过派生Employee类来定义具体的员工类,如Manager、PartTimeWorker、Salesman和SalesManager:
```cpp
class Manager : virtual public Employee {
public:
Manager(string n, string i);
virtual ~Manager();
virtual void calcSalary();
virtual void printSalary();
};
class PartTimeWorker : virtual public Employee {
private:
double hours; // 工作小时数
public:
PartTimeWorker(string n, string i);
virtual ~PartTimeWorker();
virtual void calcSalary();
virtual void printSalary();
};
class Salesman : virtual public Employee {
private:
double sales; // 销售额
public:
Salesman(string n, string i);
virtual ~Salesman();
virtual void calcSalary();
virtual void printSalary();
};
class SalesManager : public Salesman {
private:
double totalSales; // 管辖部门本月销售总额
public:
SalesManager(string n, string i);
virtual ~SalesManager();
virtual void calcSalary();
virtual void printSalary();
};
```
在具体的员工类中,我们可以定义一些特有的属性,例如PartTimeWorker类中的工作小时数和Salesman类中的销售额。另外,我们需要实现calcSalary()和printSalary()函数,以便计算和输出月薪总额。
对于Manager、PartTimeWorker和Salesman类,它们都是直接继承自Employee类的,因此需要使用虚继承。而对于SalesManager类,它需要同时继承自Salesman和Employee类,因此需要使用虚基类。
下面是具体的实现代码,包括各个类的构造函数、析构函数和calcSalary()、printSalary()函数的实现:
```cpp
// Employee类的实现
Employee::Employee(string n, string i) {
name = n;
id = i;
salary = 0;
}
Employee::~Employee() {}
// Manager类的实现
Manager::Manager(string n, string i) : Employee(n, i) {}
Manager::~Manager() {}
void Manager::calcSalary() {
salary = 28000;
}
void Manager::printSalary() {
cout << name << "的月薪总额为:" << salary << "元" << endl;
}
// PartTimeWorker类的实现
PartTimeWorker::PartTimeWorker(string n, string i) : Employee(n, i) {
hours = 0;
}
PartTimeWorker::~PartTimeWorker() {}
void PartTimeWorker::calcSalary() {
salary = hours * 200;
}
void PartTimeWorker::printSalary() {
cout << name << "的月薪总额为:" << salary << "元" << endl;
}
// Salesman类的实现
Salesman::Salesman(string n, string i) : Employee(n, i) {
sales = 0;
}
Salesman::~Salesman() {}
void Salesman::calcSalary() {
salary = 3000 + sales * 0.04;
}
void Salesman::printSalary() {
cout << name << "的月薪总额为:" << salary << "元" << endl;
}
// SalesManager类的实现
SalesManager::SalesManager(string n, string i) : Employee(n, i), Salesman(n, i) {
totalSales = 0;
}
SalesManager::~SalesManager() {}
void SalesManager::calcSalary() {
salary = 7000 + totalSales * 0.005 + sales * 0.04;
}
void SalesManager::printSalary() {
cout << name << "的月薪总额为:" << salary << "元" << endl;
}
```
最后,在主函数中,我们可以使用各个派生类定义一个对象,并且从键盘输入员工的信息,然后计算并输出月薪总额:
```cpp
int main() {
Manager m("Tom", "M001");
PartTimeWorker p("Jerry", "P001");
Salesman s("Lucy", "S001");
SalesManager sm("Bob", "SM001");
double hours, sales, totalSales;
cout << "请输入" << p.name << "本月的工作小时数:" << endl;
cin >> hours;
p.calcSalary();
p.printSalary();
cout << "请输入" << s.name << "本月的销售额:" << endl;
cin >> sales;
s.calcSalary();
s.printSalary();
cout << "请输入" << sm.name << "所管辖部门本月的销售总额:" << endl;
cin >> totalSales;
sm.calcSalary();
sm.printSalary();
return 0;
}
```
这样,我们就实现了一个基于虚基类、抽象类和虚函数的人员信息管理系统。
阅读全文