为某公司设计雇员工资发放系统。 每个雇员的基本信息包括:姓名(name),工号(id)。 雇员的收入取决于雇员的类型。写出主函数测试各类。在雇员基本信息中增加雇员的生日(birthDate),并设计日期类(Date)来表示生日。在主函数中创建一个容器用来管理公司各种雇员对象,多态地计算并输出每个雇员的工资。如果雇员的生日在本月,就奖给该雇员100元。同时,在本次工资发放阶段,公司决定奖励带薪佣金雇员,把他们的基本工资提高10%。
时间: 2023-06-16 22:02:19 浏览: 151
以下是代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
class Date{
private:
int year;
int month;
int day;
public:
Date(int year, int month, int day){
this->year = year;
this->month = month;
this->day = day;
}
int getYear(){
return year;
}
int getMonth(){
return month;
}
int getDay(){
return day;
}
};
class Employee{
protected:
string name;
int id;
Date birthDate;
public:
Employee(string name, int id, Date birthDate){
this->name = name;
this->id = id;
this->birthDate = birthDate;
}
virtual double calcSalary() = 0;
virtual void printInfo(){
cout << "Name: " << name << endl;
cout << "ID: " << id << endl;
cout << "Birth Date: " << birthDate.getYear() << "-" << birthDate.getMonth() << "-" << birthDate.getDay() << endl;
}
};
class SalariedEmployee : public Employee{
private:
double salary;
public:
SalariedEmployee(string name, int id, Date birthDate, double salary) : Employee(name, id, birthDate){
this->salary = salary;
}
double calcSalary(){
return salary;
}
void printInfo(){
Employee::printInfo();
cout << "Salary: " << salary << endl;
}
};
class HourlyEmployee : public Employee{
private:
double wage;
double hours;
public:
HourlyEmployee(string name, int id, Date birthDate, double wage, double hours) : Employee(name, id, birthDate){
this->wage = wage;
this->hours = hours;
}
double calcSalary(){
return wage * hours;
}
void printInfo(){
Employee::printInfo();
cout << "Wage: " << wage << endl;
cout << "Hours: " << hours << endl;
}
};
class CommissionEmployee : public Employee{
private:
double sales;
double rate;
public:
CommissionEmployee(string name, int id, Date birthDate, double sales, double rate) : Employee(name, id, birthDate){
this->sales = sales;
this->rate = rate;
}
double calcSalary(){
return sales * rate;
}
void printInfo(){
Employee::printInfo();
cout << "Sales: " << sales << endl;
cout << "Rate: " << rate << endl;
}
};
class BasePlusCommissionEmployee : public CommissionEmployee{
private:
double baseSalary;
public:
BasePlusCommissionEmployee(string name, int id, Date birthDate, double sales, double rate, double baseSalary) : CommissionEmployee(name, id, birthDate, sales, rate){
this->baseSalary = baseSalary;
}
double calcSalary(){
return baseSalary + CommissionEmployee::calcSalary();
}
void printInfo(){
CommissionEmployee::printInfo();
cout << "Base Salary: " << baseSalary << endl;
}
};
int main(){
vector<Employee*> employees;
Date d1(1990, 10, 15);
employees.push_back(new SalariedEmployee("John", 1, d1, 5000));
Date d2(1985, 5, 20);
employees.push_back(new HourlyEmployee("Mike", 2, d2, 20, 160));
Date d3(1992, 11, 30);
employees.push_back(new CommissionEmployee("Lucy", 3, d3, 10000, 0.05));
Date d4(1988, 7, 25);
employees.push_back(new BasePlusCommissionEmployee("Mary", 4, d4, 15000, 0.03, 5000));
int currentMonth = 11;
for(int i=0; i<employees.size(); i++){
employees[i]->printInfo();
double salary = employees[i]->calcSalary();
if(employees[i]->birthDate.getMonth() == currentMonth){
salary += 100;
}
if(dynamic_cast<BasePlusCommissionEmployee*>(employees[i]) != nullptr){
salary *= 1.1;
}
cout << "Salary: " << salary << endl;
cout << endl;
}
return 0;
}
```
其中,我们定义了一个日期类 Date,表示员工的生日。然后我们定义了一个 Employee 类作为父类,包含了姓名、工号、生日等基本信息,并定义了一个纯虚函数 calcSalary() 用于计算工资。然后我们分别定义了四个派生类 SalariedEmployee、HourlyEmployee、CommissionEmployee 和 BasePlusCommissionEmployee,分别表示计时工、计件工、带薪佣金工和带底薪佣金工,它们分别实现了 calcSalary() 函数,计算各自对应的工资。在主函数中,我们创建了一个容器来管理各种雇员对象,并多态地计算并输出每个雇员的工资。如果雇员的生日在本月,就奖给该雇员100元。同时,在本次工资发放阶段,公司决定奖励带薪佣金雇员,把他们的基本工资提高10%。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)