定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类
要求:
(1)在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其它数据成员。
(2)各类人员的实发工资公式如下:
员工实发工资 = 基本工资 + 奖金 * 出勤率
销售员实发工资 = 基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例
经理实发工资 = 基本工资 + 奖金 * 出勤率 + 总销售额 * 经理提成比例
销售经理实发工资 =基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例+ 总销售额 * 经理提成比例
(3)每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputWage)。
#include <iostream>
using namespace std;
class staff {
public:
staff(string na, int nu, float rateofatten, int basis, int pri) {
name = na;
num = nu;
rateofattend= rateofatten;
basicsal = basis;
prize = pri;
}
void output() {
cout << "员工姓名:" <<name<< endl;
cout << "编号:" << num << endl;
cout << "出勤率:" << rateofattend << endl;
cout << "基本工资:" << basicsal << endl;
cout << "奖金:" << prize << endl;
}
void outputwage(){
cout << "员工实发工资为:" << basicsal + prize * rateofattend << endl<<endl;
}
protected:
int num;
string name;
float rateofattend;
int basicsal, prize;
};
class saleman : public staff {
protected:
float deductrate;
int personamount;
public:
saleman(string na, int nu, float rateofatten, int basis, int pri,int personm,float dedu) :staff(na, nu, rateofatten, basis, pri){
personamount = personm;
deductrate = dedu;
}
void output() {
staff::output();
cout << "销售员的个人销售额:" << personamount << endl;
cout << "销售员的提成比例:" << deductrate << endl;
}
void outputwage() {
cout << "销售员实发工资为:" << basicsal + prize * rateofattend + personamount * deductrate<< endl<<endl;
}
};
class manager :public staff {
protected:
float totaldeductrate;
int totalamout;
public:
manager(string na, int nu, float rateofatten, int basis, int pri, int to,float tot ) :staff(na, nu, rateofatten, basis, pri) {
totalamout = to;
totaldeductrate = tot;
}
void output() {
staff::output();
cout << "经理的个人销售额:" << totaldeductrate << endl;
cout << "经理的提成比例:" <<totalamout << endl;
}
void outputwage() {
cout << "经理实发工资为:" << basicsal + prize * rateofattend + totalamout * totaldeductrate << endl << endl;
}
};
class SaleManager :public saleman, public manager {
public:
SaleManager(string na, int nu, float rateofatten, int basis, int pri, int personm, float dedu, int to, float tot) :saleman(na, nu, rateofatten, basis,pri, personm, dedu),manager(na, nu, rateofatten, basis, pri, to, tot) {
}
void output() {
staff::output();
cout << "销售员的个人销售额:" << personamount << endl;
cout << "销售员的提成比例:" << deductrate << endl;
cout << "经理的销售额:" << totaldeductrate << endl;
cout << "经理的提成比例:" << totalamout << endl;
}
void outputwage() {
cout << "销售经理实发工资为:" << manager::basicsal + manager::prize * manager::rateofattend + totalamout * totaldeductrate +personamount*deductrate<< endl << endl;
}
};
int main()
{
staff obj("zhang",101,0.9, 2000,3000);
obj.output();
obj.outputwage();
saleman obj1("sun", 201, 0.9, 3000, 4000, 10000, 0.1);
obj1.output();
obj1.outputwage();
manager obj2("li", 301, 0.9, 4000, 5000, 20000, 0.1);
obj2.output();
obj2.outputwage();
SaleManager obj3("wu", 401, 1, 5000, 6000, 10000, 0.1, 40000, 0.05);
obj3.output();
obj3.outputwage();
}