c++设计某公司财务部需要开发一个计算雇员工资的程序,该公司有3类员工,员工工资计算方法如下:(1)工人工资:每小时工资额(通过成员函数设定)乘以当月工作时数(通过成员函数设定),再加上工龄工资。(2)销售员工资:每小时工资额(通过成员函数设定)乘以当月工作时数(通过成员函数设定),加上销售额提成,再加上工龄工资,其中销售额提成等于该销售员当月售出的商品金额(通过成员函数设定)的1%。(3)管理人员工资:基本工资1000元,再加上工龄工资。 其中,工龄工资指雇员在该公司工作,工龄每满一年,月工资就增加35元,请用面向对象方法分析计设计这个程序。(使用继承与派生原则)
时间: 2024-01-12 14:02:21 浏览: 84
这个程序可以使用面向对象方法进行设计,使用继承与派生原则可以实现代码的复用,提高代码的可维护性和可扩展性。具体实现如下:
首先,定义一个基类 Employee,该类包含以下成员变量和成员函数:
```c++
class Employee {
protected:
string name; // 姓名
int age; // 年龄
int yearsOfWork; // 在公司工作的年数
double hourlyWage; // 每小时工资额
double monthlyHours; // 当月工作时数
public:
Employee(string name, int age, double hourlyWage, double monthlyHours, int yearsOfWork);
virtual double calculateSalary() = 0; // 计算工资的纯虚函数
};
```
其中,构造函数用于初始化成员变量,calculateSalary() 是一个纯虚函数,用于在派生类中实现计算工资的具体方法。
然后,定义三个派生类:Worker、Salesman 和 Manager,分别对应三种不同的员工类型。
Worker 类的定义如下:
```c++
class Worker : public Employee {
private:
double workingAgeWage; // 工龄工资
public:
Worker(string name, int age, double hourlyWage, double monthlyHours, int yearsOfWork);
virtual double calculateSalary();
};
```
其中,workingAgeWage 是工龄工资,calculateSalary() 函数的实现如下:
```c++
double Worker::calculateSalary() {
return hourlyWage * monthlyHours + workingAgeWage;
}
```
Salesman 类的定义如下:
```c++
class Salesman : public Employee {
private:
double salesAmount; // 销售额
double workingAgeWage; // 工龄工资
public:
Salesman(string name, int age, double hourlyWage, double monthlyHours, int yearsOfWork, double salesAmount);
virtual double calculateSalary();
};
```
其中,salesAmount 是销售额,calculateSalary() 函数的实现如下:
```c++
double Salesman::calculateSalary() {
return hourlyWage * monthlyHours + salesAmount * 0.01 + workingAgeWage;
}
```
Manager 类的定义如下:
```c++
class Manager : public Employee {
public:
Manager(string name, int age, int yearsOfWork);
virtual double calculateSalary();
};
```
其中,Manager 类没有 hourlyWage 和 monthlyHours 这两个成员变量,因为它的工资是由基本工资和工龄工资组成的。calculateSalary() 函数的实现如下:
```c++
double Manager::calculateSalary() {
return 1000 + yearsOfWork * 35;
}
```
最后,我们需要在程序中创建对象并调用 calculateSalary() 函数来计算工资。例如:
```c++
int main() {
Employee* employee1 = new Worker("张三", 30, 20, 160, 2);
Employee* employee2 = new Salesman("李四", 25, 15, 160, 1, 10000);
Employee* employee3 = new Manager("王五", 40, 10);
cout << employee1->calculateSalary() << endl;
cout << employee2->calculateSalary() << endl;
cout << employee3->calculateSalary() << endl;
delete employee1;
delete employee2;
delete employee3;
return 0;
}
```
上述代码中,我们创建了三个不同类型的 Employee 对象,分别调用它们的 calculateSalary() 函数来计算工资。注意,由于 Employee 类中的 calculateSalary() 函数是一个纯虚函数,因此不能创建 Employee 类的对象,只能创建它的派生类的对象。同时,由于使用了动态内存分配,需要在程序结束前将对象释放掉。
阅读全文