人员信息管理(Ⅳ)

//employee.h 类的定义

class employee

{

protected:

    char name[20];

    int individualEmpNo; //个人编号

    int grade;    //级别

    float accumPay;  //月薪

    static int employeeNo; //本公司职员编号目前最大值

public:

    employee();

    ~employee();

    void pay();   //计算月薪函数

    void SetName(char *);  //设置姓名函数

    char * GetName();   //提取姓名函数

    void promote(int);  //升级函数

    int GetindividualEmpNo(); //提取编号函数

    int Getgrade();  //提取级别函数

    float GetaccumPay();  //提取月薪函数

};

 

class technician:public employee //兼职技术人员

{

private:

   float hourlyRate;  //每小时酬金

   int workHours;   //当月工作时数

public:

   technician(); 

   void SetworkHours(int wh); //设置工作时数

   void pay();   //计算月薪函数

};

 

class salesman:virtual public employee //兼职推销员类

{

protected:

   float CommonRate;  //按销售额提取酬金的百分比

   float sales;   //当月销售额

public:

   salesman();

   void Setsales(float);   //设置销售额

   void pay();   //计算月薪函数

};

class manager:virtual public employee  //经理类

{

protected:

    float monthlyPay;  //固定月薪数

public:

    manager();

    void pay();  //计算月薪函数

};

 

class salesmanager:public manager,public salesman

{

public:

    salesmanager();

    void pay();

};

 

//employee.cpp 类的实现

int employee::employeeNo=1000;  //员工编号级数为1000

 

employee::employee()

{

  individualEmpNo=employeeNo++;  //员工编号目前最大编号为1000

  grade=1;          //级别初值为1

  accumPay=0.0;  //月薪总额初值为0

}

 

employee::~employee()

{}

 

void employee::pay()

{}

 

void employee::SetName(char * names) //设置姓名

{

   strcpy(name,names);

}

char* employee::GetName()   //提取姓名

{

   return name;

}

 

void employee::promote(int increment)

{

   grade+=increment;  //升级,提升的级数由increment指定

}

 

int employee::GetindividualEmpNo()

{

   return individualEmpNo;  //获取成员编号

}

int employee::Getgrade()

{

   return grade;  //获取级别

}

float employee::GetaccumPay()

{

   return accumPay;  //获取月薪

}

 

technician::technician()

{

   hourlyRate=1000;

}

void technician::SetworkHours(int wh)

{

   workHours=wh;

}

void technician::pay()

{

   accumPay=hourlyRate*workHours;

}

 

salesman::salesman()

{

  CommonRate=0.04;

}

void salesman::Setsales(float sl)

{

   sales=sl;

}

void salesman::pay()

{

   accumPay=sales*CommonRate;

}

 

manager::manager()

{

   monthlyPay=8000;

}

void manager::pay()

{

   accumPay=monthlyPay;

}

 

salesmanager::salesmanager()

{

   monthlyPay=5000;

   CommonRate=0.005;

}

void salesmanager::pay()

{

   accumPay=monthlyPay+CommonRate*sales;

}

 

//main

#include<iostream>

#include<cstring>

using namespace std;

 

int main()

{

     manager m1;

     technician t1;

     salesmanager sm1;

     salesman ss1;

     char namestr[20];

 

     cout<<"请输入下一个雇员姓名:";

     cin>>namestr;

     m1.SetName(namestr);

      

     cout<<"请输入下一个雇员姓名:";

     cin>>namestr;

     t1.SetName(namestr);

        

        cout<<"请输入下一个雇员姓名:";

     cin>>namestr;

     sm1.SetName(namestr);

    

     cout<<"请输入下一个雇员姓名:";

     cin>>namestr;

     ss1.SetName(namestr);

    

     m1.promote(3);

        m1.pay();

        

     cout<<"请输入兼职技术人员"<<t1.GetName()<<"本月的工作时数:";

     int ww;

        cin>>ww;

        t1.SetworkHours(ww);

        t1.promote(2);

        t1.pay();

        

        cout<<"请输入销售经理"<<sm1.GetName()<<"所管辖部门本月的销售总额:";

        float s1;

        cin>>s1;

        sm1.Setsales(s1);

        sm1.pay();

        sm1.promote(2);

        

        cout<<"请输入推销员"<<ss1.GetName()<<"本月的销售额:";

        cin>>s1;

        ss1.Setsales(s1);

        ss1.pay();     

      

    //显示m1信息

    cout<<m1.GetName()<<"编号"<<m1.GetindividualEmpNo()<<"级别为"<<m1.Getgrade()

        <<"级,本月工资"<<m1.GetaccumPay()<<endl;

   

       //显示t1信息

       cout<<t1.GetName()<<"编号"<<t1.GetindividualEmpNo()<<"级别为"<<t1.Getgrade()

        <<"级,本月工资"<<t1.GetaccumPay()<<endl;

       

    //显示sm1信息

       cout<<sm1.GetName()<<"编号"<<sm1.GetindividualEmpNo()<<"级别为"<<sm1.Getgrade()

        <<"级,本月工资"<<sm1.GetaccumPay()<<endl;  

       

    //显示s1信息

       cout<<ss1.GetName()<<"编号"<<ss1.GetindividualEmpNo()<<"级别为"<<ss1.Getgrade()

        <<"级,本月工资"<<ss1.GetaccumPay()<<endl;  

 

   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值