定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleMana

定义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();
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某公司雇员(Employee)包括经理(Manager),技术人员(Technician)和销售员(Salesman)。开发部经理(DeveloperManger),既是经理也是技术人员。销售部经理(SalesManager),既是经理也是销售员。 以Employee为虚基派生Manager,Technician和Salesman;再进一步派生Developermanager和Salesmanager。 Employee的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得实发基本工资。 Technician派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Salesman派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Manager派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。 而DeveloperManager,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。 SalesManager,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。 编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值