薪酬计算

Description
某公司有经理(Manager)、雇员(Employee)、小时工(HourlyWorker)和营销人员(CommWorker)四类员工(Person),他们的薪酬计算方法各不一样:
Manager采用年薪制;
Employee按月计酬,方法是:月基本工资+奖金,奖金是指奖励几个月工资;
HourlyWorker是按工作时间计酬,方法是:工作小时*每小时工资;
CommWorker按月计酬,方法是:月基本工资+年销售额的2%;
由于每类员工(Person)的工资输入(input函数)、工资计算办法(pay函数)、显示信息(show函数)均不一样,因此使用多态来实现。


请仔细阅读append.cc代码,并设计并实现这个员工类的派生体系,使main()函数能够运行并得到正确的输出。

Input
输入的第一个整数n,表示用n组测试样例。
每组测试样例占一行,分别为员工职位、员工姓名、基础工资base、附加项k(Manager无此项)。
员工职位为Manager,其base为年薪,单位为千元;
员工职位为Employee,其base为月薪,单位为千元,附加项为奖励k个月的工资;
员工职位为HourlyWorker,其base为时薪,单位为元,附加项为年工作k个小时;
员工职位为CommWorker,其base为月薪,单位为千元,附加项是年销售额k千元;

Output
按格式输出每个人的姓名、职位和最终计算的年薪,详细格式见sample。

Sample Input
6
Manager Zhang3 200
Employee Li4 8 5
Employee Wang5 10 3
HourlyWorker Zhao6 45 650
CommWorker Liu7 5 300
CommWorker Sun8 6 180
Sample Output
Zhang3 (Manager) Annual Salary is 200000.
Li4 (Employee) Annual Salary is 136000.
Wang5 (Employee) Annual Salary is 150000.
Zhao6 (HourlyWorker) Annual Salary is 29250.
Liu7 (CommWorker) Annual Salary is 66000.
Sun8 (CommWorker) Annual Salary is 75600.
HINT

Append Code
append.c, append.cc,

int main()
{
    Person *person;
    string name, job;
    int cases;
    cin >> cases;
    for(int i = 1; i <= cases; ++i)
    {
        cin >> job >> name;
        if(job == "Manager")
            person = new Manager(name);
        if(job == "Employee")
            person = new Employee(name);
        if(job == "HourlyWorker")
            person = new HourlyWorker(name);
        if(job == "CommWorker")
            person = new CommWorker(name);
        person->input();
        person->show();
        cout << " Annual Salary is " << person->pay() << "." << endl;
    }

}

AC代码

#include <iostream>
#include <stdio.h>
using namespace std;
class Person
{
protected:
    string _name;
    double base;
public:
    Person(string name):_name(name){}
    virtual void input()=0;
    virtual void show()=0;
    virtual double pay()=0;
    virtual ~Person(){}
};
class Manager:public Person
{
public:
    Manager(string name):Person(name){}
    void input(){cin>>base;}
    double pay(){return base*1000;}
    void show(){cout<<_name<<" (Manager)";}
};
class Employee:public Person
{
protected:
    int k;
public:
    Employee(string name):Person(name){}
    void input(){cin>>base>>k;}
    double pay(){return base*1000*(k+12);}
    void show(){cout<<_name<<" (Employee)";}
};
class HourlyWorker:public Person
{
protected:
    int k;
public:
    HourlyWorker(string name):Person(name){}
    void input(){cin>>base>>k;}
    double pay(){return base*k;}
    void show(){cout<<_name<<" (HourlyWorker)";}
};
class CommWorker:public Person
{
protected:
    int k;
public:
    CommWorker(string name):Person(name){}
    void input(){cin>>base>>k;}
    double pay() {return base*1000*12+k*0.02*1000;}
    void show(){cout<<_name<<" (CommWorker)";}
};
int main()
{
    Person *person;
    string name, job;
    int cases;
    cin >> cases;
    for(int i = 1; i <= cases; ++i)
    {
        cin >> job >> name;
        if(job == "Manager")
            person = new Manager(name);
        if(job == "Employee")
            person = new Employee(name);
        if(job == "HourlyWorker")
            person = new HourlyWorker(name);
        if(job == "CommWorker")
            person = new CommWorker(name);
        person->input();
        person->show();
        cout << " Annual Salary is " << person->pay() << "." << endl;
    }

}

1、注意读题
2、注意上下结合
3、main函数中person = new Manager(name);这里会显示子类中需要放入哪些元素,做题的时候可以根据这一点来判断。

React 是一个用于构建用户界面的 JavaScript 库,它本身并不涉及薪酬计算公式的设计。但是,我们可以利用 React 来构建一个简单的薪酬计算器应用程序,该应用程序可以接收用户输入的数据并根据特定的公式计算薪酬。 以下是一个简单的示例公式,用于计算员工的月薪: 月薪 = 基本工资 + 绩效奖金 + 加班费 基本工资:员工的基本薪资,由公司决定。 绩效奖金:根据员工的绩效评估结果计算,可以是一个固定数值或一个百分比。 加班费:如果员工有加班,根据加班时长和每小时的加班费率计算。 在 React 中,我们可以通过以下方式实现这个公式: 1. 创建一个表单组件,用于接收员工的基本薪资、绩效评估结果和加班时长等数据。 2. 在表单组件中添加一个“计算”按钮,用于触发计算薪酬的操作。 3. 在表单组件中添加一个状态变量,用于存储计算结果。 4. 在表单组件的计算方法中,根据用户输入的数据和上述公式计算薪酬,并将结果存储到状态变量中。 5. 在表单组件中添加一个结果显示区域,用于显示计算结果。 6. 将表单组件和结果显示区域组合在一起,形成一个完整的薪酬计算器应用程序。 总之,React 并不是一个专门用于设计薪酬计算公式的工具,但我们可以利用 React 来构建一个简单的薪酬计算器应用程序,用于计算员工的薪酬
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值