Problem Q: 计算公司员工的工资

116 篇文章 2 订阅
74 篇文章 14 订阅
该程序设计实例展示了如何使用面向对象编程中的虚函数来计算不同类型的员工(老板、雇员、小时工和营销人员)的薪酬。每个类继承自基类Person,实现了各自的薪金计算方法getPay()和特定信息打印函数print()。程序通过实例化这些类并调用相应方法,展示了不同类型的员工薪酬计算及详细信息的输出。
摘要由CSDN通过智能技术生成
Problem Description

某公司有老板Boss、雇员Employee、小时工HourlyWorker和营销人员CommWorker,他们的薪金计算方法如下:

老板实行年薪制,如一年15万;雇员按月计酬,方法是基本工资+奖金;小时工按工作时间计算报酬,方法是工作小时*每小时单价;营销人员按月计酬,方法是基本工资+销售利润*5%。
每类人员都有姓名、职工编号、年龄、性别、工资等数据。设计计算各类人员报酬的程序,用虚函数getPay()计算各类人员的应得报酬,用虚函数print()打印输出各位工作人员的基本数据。
#include <iostream>
using namespace std;
class Person{
private:
string name;//姓名
string no;//职工编号
int age;//年龄
string sex;//性别
float salary;//工资
public:
Person(string s1,string s2,int Age,string Sex,float Salary=0);
virtual double getPay()=0;
virtual void print();
};
Person::Person(string s1,string s2,int Age,string Sex,float Salary){
name=s1;no=s2;age=Age;sex=Sex;salary=Salary;}
void Person::print(){
cout<<"姓名:"<<name<<"\n职工编号:"<<no<<"\n年龄:"<<age<<"\n性别:"<<sex;}
//你的代码将被嵌在这里
int main(){    
    Boss b("张华","N001",30,"男");
    b.print();
    Employee e("李明","N002",40,"男");
    e.setBWage(900);
    e.setBonus(1000);
    e.print();
    HourlyWorker hw("向力","N003",38,"男");
    hw.settime_Hours(30);
    hw.setUHPrice(60);
    hw.print();
    CommWorker cw("刘晓云","N004",28,"女");
    cw.setBWage(1600);
    cw.setinterest(10000);
    cw.print();
    return 0;
}

Sample Output
********************老板********************
姓名:张华
职工编号:N001
年龄:30
性别:男
年薪:15万元
********************雇员********************
姓名:李明
职工编号:N002
年龄:40
性别:男
基本工资:900
奖金:1000
月薪:1900元
********************小时工********************
姓名:向力
职工编号:N003
年龄:38
性别:男
每小时单价:60元
工作时间:30小时
报酬:1800元
********************营销人员********************
姓名:刘晓云
职工编号:N004
年龄:28
性别:女
基本工资:1600元
销售利润:10000元
月酬:2100元
Hint

1、将各类人员都有的共有的属性和行为抽象在类Person中,包括姓名、职工编号、年龄、性别等,以及函数getPay()和print()。

2、getPay()设计为纯虚函数,将print()设计成一般虚函数,其余类从Person类派生,各类再定义getPay()的实现方法,并重定义函数print()输出具体数据。

3、每个类还需要根据实际情况定义相应的成员函数,获取诸如工作时间、基本工资、销售利润之类的基础数据。

 

class Boss : public Person
{
public:
    Boss(string s1, string s2, int Age, string Sex) :Person(s1, s2, Age, Sex) {}
    double getPay()
    {
        return 15;
    }
    void print()
    {
        cout << "********************老板********************" << endl;
        Person::print();
        cout << "\n年薪:15万元" << endl;
    }
};
class Employee : public Person
{
public:
    int BWage;
    int Bonus;
    Employee(string s1, string s2, int Age, string Sex) : Person(s1, s2, Age, Sex){}
    double getPay()
    {
        return BWage + Bonus;
    }
    void setBWage(int wage)
    {
        BWage = wage;
    }
    void setBonus(int bonus)
    {
        Bonus = bonus;
    }
    void print()
    {
        cout << "********************雇员********************" << endl;
        Person::print();
        cout << "\n基本工资:" << BWage
            << "\n奖金:" << Bonus
            << "\n月薪:" << getPay() << endl;
    }
};
class HourlyWorker : public Person
{
public:
    int Hours;
    int UHP;
    HourlyWorker(string s1, string s2, int Age, string Sex) : Person(s1, s2, Age, Sex) {}
    double getPay()
    {
        return Hours * UHP;
    }
    void settime_Hours(int hours)
    {
        Hours = hours;
    }
    void setUHPrice(int uhp)
    {
        UHP = uhp;
    }
    void print()
    {
        cout << "********************小时工********************" << endl;
        Person::print();
        cout << "\n每小时单价:" << UHP << "元" << endl;
        cout << "工作时间:" << Hours << "小时" << endl;
        cout << "报酬:" << getPay() << "元" << endl;
    }
};
class CommWorker : public Person
{
public:
    int BWage;
    int I;
    CommWorker(string s1, string s2, int Age, string Sex) : Person(s1, s2, Age, Sex) {}
    double getPay()
    {
        return BWage + (I * 0.05);
    }
    void setBWage(int bwage)
    {
        BWage = bwage;
    }
    void setinterest(int i)
    {
        I = i;
    }
    void print()
    {
        cout << "********************营销人员********************" << endl;
        Person::print();
        cout << "\n基本工资:" << BWage << "元" << endl;
        cout << "销售利润:" << I << "元" << endl;
        cout << "月酬:" << getPay() << endl;
     }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小木苓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值