C++某公司有四种类型的员工:经理、兼职技术人员、推销员和销售经理。各员工的月薪计算如下:经理拿固定月薪28000元;兼职技术人员按200/每小时领取月薪;推销员的月薪按固定月薪3000元和当月推销额的4%提成;销售经理拿固定月薪和销售提成,固定月薪为7000元,销售提成为所管辖部门当月销售额总额的5‰。根据上述要求,设计一个人员信息管理系统。此管理系统要求如下: 1.设计一个基类Employee,派生出其他的类,每个类有构造函数和析构函数; 2.每个类的成员变量至少包括:姓名、员工编号和月薪总额; 3.在主函数中,使用各派生类分别定义一个对象,需要从键盘输入: 1)这四类员工的姓名; 2)兼职技术人员本月的工作小时数; 3)推销员本月的销售额; 4)销售经理所管辖部门本月的销售总额。 4.分别输出这四类员工本月工资;
时间: 2024-03-07 16:49:18 浏览: 141
好的,这是一个很好的面向对象的题目,让我们来一步一步实现这个人员信息管理系统。
首先,我们需要设计一个基类 `Employee`,它包含姓名、员工编号和月薪总额这三个成员变量,以及一个纯虚函数 `calcSalary()` 用于计算月薪总额。
```cpp
class Employee {
protected:
string name;
int id;
double salary;
public:
Employee(string name, int id) : name(name), id(id), salary(0) {}
virtual ~Employee() {}
virtual void calcSalary() = 0;
void printInfo() {
cout << "姓名:" << name << endl;
cout << "员工编号:" << id << endl;
cout << "月薪总额:" << salary << endl;
}
};
```
接着,我们派生出其他的类,分别是经理、兼职技术人员、推销员和销售经理。这些类都需要实现 `calcSalary()` 函数,根据不同的计算方法计算出月薪总额。
```cpp
class Manager : public Employee {
public:
Manager(string name, int id) : Employee(name, id) {}
void calcSalary() {
salary = 28000;
}
};
class PartTimeEmployee : public Employee {
private:
double hours;
public:
PartTimeEmployee(string name, int id) : Employee(name, id), hours(0) {
cout << "请输入兼职技术人员的工作小时数:";
cin >> hours;
}
void calcSalary() {
salary = 200 * hours;
}
};
class Salesman : public Employee {
private:
double sales;
public:
Salesman(string name, int id) : Employee(name, id), sales(0) {
cout << "请输入推销员本月的销售额:";
cin >> sales;
}
void calcSalary() {
salary = 3000 + 0.04 * sales;
}
};
class SalesManager : public Employee {
private:
double sales;
public:
SalesManager(string name, int id) : Employee(name, id), sales(0) {
cout << "请输入销售经理所管辖部门本月的销售总额:";
cin >> sales;
}
void calcSalary() {
salary = 7000 + 0.005 * sales;
}
};
```
最后,在主函数中分别定义一个对象,并调用其 `calcSalary()` 函数计算月薪总额,再输出员工信息和月薪总额即可。
```cpp
int main() {
Employee* emp;
emp = new Manager("张三", 1001);
emp->calcSalary();
emp->printInfo();
emp = new PartTimeEmployee("李四", 1002);
emp->calcSalary();
emp->printInfo();
emp = new Salesman("王五", 1003);
emp->calcSalary();
emp->printInfo();
emp = new SalesManager("赵六", 1004);
emp->calcSalary();
emp->printInfo();
return 0;
}
```
运行程序,输入兼职技术人员的工作小时数、推销员本月的销售额和销售经理所管辖部门本月的销售总额,可以得到以下输出:
```
请输入销售经理所管辖部门本月的销售总额:100000
姓名:张三
员工编号:1001
月薪总额:28000
请输入兼职技术人员的工作小时数:80
姓名:李四
员工编号:1002
月薪总额:16000
请输入推销员本月的销售额:50000
姓名:王五
员工编号:1003
月薪总额:5000
请输入销售经理所管辖部门本月的销售总额:100000
姓名:赵六
员工编号:1004
月薪总额:7500
```
以上就是这个人员信息管理系统的完整代码。
阅读全文