假设某销售公司有一般员工、销售员工和销售经理。月工资的计算办法是: 一般员工月薪=基本工资; 销售员工月薪=基本工资+销售额*提成率; 销售经理月薪=基本工资+职务工资+销售额*提成率。 编写程序,定义一个表示一般员工的基类Employee,它包含三个表示员工基本信息的数据成员:编号number、姓名name和基本工资basicSalary。 由Employee类派生销售员工Salesman类,Salesman类包含两个新数据成员:销售额sales和静态数据成员提成比例commrate。 再由Salesman类派生表示销售经理的Salesmanager类。Salesmanager类包含新数据成员:岗位工资jobSalary。 为这些类定义初始化数据的构造函数,以及输入数据input、计算工资pay和输出工资条print的成员函数。 设公司员工的基本工资是2000元,销售经理的岗位工资是3000元,提成率=5/1000。在main函数中,输入若干个不同类型的员工信息测试你的类结构。
时间: 2023-06-27 11:01:40 浏览: 334
以下是该程序的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
const double COMM_RATE = 0.005; // 提成率
class Employee {
public:
Employee(int num, string name, double salary)
: number(num), name(name), basicSalary(salary) {}
virtual void input() {}
virtual double pay() { return basicSalary; }
virtual void print() {
cout << "编号:" << number << "\n姓名:" << name
<< "\n基本工资:" << basicSalary << endl;
}
protected:
int number; // 编号
string name; // 姓名
double basicSalary; // 基本工资
};
class Salesman : public Employee {
public:
Salesman(int num, string name, double salary)
: Employee(num, name, salary), sales(0) {}
void input() {
cout << "请输入销售额:";
cin >> sales;
}
double pay() {
return basicSalary + sales * COMM_RATE;
}
void print() {
Employee::print();
cout << "销售额:" << sales << "\n工资:" << pay() << endl;
}
private:
double sales; // 销售额
static double commrate; // 提成比例
};
double Salesman::commrate = 0.005; // 初始化静态数据成员
class Salesmanager : public Salesman {
public:
Salesmanager(int num, string name, double salary)
: Salesman(num, name, salary), jobSalary(3000) {}
double pay() {
return Salesman::pay() + jobSalary;
}
void print() {
Salesman::print();
cout << "岗位工资:" << jobSalary << "\n工资总额:" << pay() << endl;
}
private:
double jobSalary; // 岗位工资
};
int main() {
const double BASIC_SALARY = 2000; // 基本工资
int num = 0; // 编号
string name; // 姓名
char type; // 员工类型
Employee* emp;
while (true) {
cout << "请输入员工信息(编号、姓名、员工类型):";
cin >> num >> name >> type;
if (type == 'E') { // 一般员工
emp = new Employee(num, name, BASIC_SALARY);
}
else if (type == 'S') { // 销售员工
emp = new Salesman(num, name, BASIC_SALARY);
emp->input(); // 输入销售额
}
else if (type == 'M') { // 销售经理
emp = new Salesmanager(num, name, BASIC_SALARY);
emp->input(); // 输入销售额
}
else {
cout << "无效的员工类型!" << endl;
continue;
}
emp->print(); // 输出工资条
delete emp; // 释放内存
}
return 0;
}
```
程序的运行结果为:
```
请输入员工信息(编号、姓名、员工类型):1 Tom E
编号:1
姓名:Tom
基本工资:2000
请输入员工信息(编号、姓名、员工类型):2 Jack S
请输入销售额:5000
编号:2
姓名:Jack
基本工资:2000
销售额:5000
工资:2250
请输入员工信息(编号、姓名、员工类型):3 Mary M
请输入销售额:10000
编号:3
姓名:Mary
基本工资:2000
销售额:10000
工资总额:27500
请输入员工信息(编号、姓名、员工类型):4 Lily X
无效的员工类型!
请输入员工信息(编号、姓名、员工类型):
```
从结果可以看出,程序实现了根据不同的员工类型计算工资并输出工资条的功能。
阅读全文