C ++実験---給与計算

給与計算

説明

会社には、
マネージャー、従業員、HourlyWorker、CommWorkerの4種類の従業員(人)がいます。給与の計算方法は異なります。マネージャー
年俸制を採用し、従業員は月額で支払われます。はい:月額基本給+ボーナス、ボーナスは給与の数ヶ月に報いるを指し;
HourlyWorkerが勤務時間に応じて支払われ、方法は次のとおりです。作業時間は、時間単位の給与を*;
CommWorkerは毎月支払われ、方法は次のとおりです。毎月の基本給+年間売上高は2%;
ので従業員(人)ごとに給与入力(入力機能)、給与計算方法(給与機能)、表示情報(表示機能)が異なり、多態性で実現しています。
append.ccコードを注意深く読み、この従業員クラスの派生システムを設計および実装して、main()関数を実行して正しい出力を取得できるようにしてください。

入力

入力された最初の整数nは、nセットのテストサンプルを使用することを意味します。
テストサンプルの各グループは、従業員の役職、従業員名、基本給ベース、および追加の項目k(マネージャーにはこの項目はありません)の1行を占めます。
従業員の役職は、年俸を基準とし、単位が1,000元であるマネージャー、従業員の役職は、月給を基準とし、単位が1,000元である
従業員であり、追加項目はkか月の報酬です。給与の;
従業員の位置はHourlyWorkerであり、基本は時給です。単位は元であり、追加項目は年間k時間の労働です。
従業員の位置はCommWorkerであり、基本は月給であり、単位は1,000元です。 、追加項目は年俸k * 20元です。

出力

形式に従って、各人の名前、役職、および最終的に計算された年俸を出力します。詳細な形式については、サンプルを参照してください。

サンプル入力

6
Manager Zhang3 200
Employee Li4 8 5
Employee Wang5 10 3
HourlyWorker Zhao6 45 650
CommWorker Liu7 5 300
CommWorker Sun8 6 180

サンプル出力

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.

タイトル指定コード

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;
    }
}

コード:

#include<iostream>

using namespace std;

class Person{
    
    
protected:
	int base;
	int k;
	string name;
public:
	virtual void input()=0;
	virtual int pay()=0;
	virtual void show()=0;
	Person(){
    
    
		
	}
};

class Manager:public Person{
    
    
public:
	Manager(string n){
    
    
		name=n;
	}
	
	void input(){
    
    
		cin>>base;
		k=0;
	}
	
	int pay(){
    
    
		return base*1000;
	}
	
	void show(){
    
    
		cout<<name<<" "<<"(Manager)";
	}
};

class Employee:public Person{
    
    
public:
	Employee(string n){
    
    
		name=n;
	}
	
	void input(){
    
    
		cin>>base>>k;
	}
	
	int pay(){
    
    
		return base*(k+12)*1000;
	}
	
	void show(){
    
    
		cout<<name<<" "<<"(Employee)";
	}
};

class HourlyWorker:public Person{
    
    
public:
	HourlyWorker(string n){
    
    
		name=n;
	}
	
	void input(){
    
    
		cin>>base>>k;
	}
	
	int pay(){
    
    
		return base*k;
	}
	
	void show(){
    
    
		cout<<name<<" "<<"(HourlyWorker)";
	}
};

class CommWorker:public Person{
    
    
public:
	CommWorker(string n){
    
    
		name=n;
	}
	
	void input(){
    
    
		cin>>base>>k;
	}
	
	int pay(){
    
    
		return base*1000*12+k*20;//此处原题中叙述有误,注意!
	}
	
	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;
    }
}

おすすめ

転載: blog.csdn.net/timelessx_x/article/details/115142617