工资管理程序。将雇员类作为基类,它是抽象类,有计算工资的虚函数。 由它派生产生经理、销售员、计件工类。经理的收入是固定月薪;销售员的收入是一小部分工资加销售额的提成,计件工的收入完全取决于其生产的工件数量。 按用户的选择生成对应的人员,并实现其工资的计算。
时间: 2024-10-28 10:12:10 浏览: 21
工资管理程序可以基于面向对象的设计模式,尤其是使用抽象类和继承结构来实现。首先,我们定义一个名为 `Employee` 的抽象基类,它包含了所有员工共有的属性(如姓名、职位等)以及一个虚函数 `calculateSalary()` 来表示计算工资的行为:
```cpp
class Employee {
protected:
string name;
string position;
public:
Employee(const string& n, const string& p) : name(n), position(p) {}
virtual float calculateSalary() const = 0; // 纯虚函数,声明但不实现
// 其他成员函数,如显示员工信息等...
void displayInfo() const { /* ... */ }
};
```
接下来,我们为经理(Manager)、销售员(Salesman)和计件工人(Worker)分别创建子类,实现 `calculateSalary()` 方法:
```cpp
class Manager : public Employee {
private:
const float monthlySalary;
public:
Manager(const string& n, const string& p, float salary) : Employee(n, p), monthlySalary(salary) {}
float calculateSalary() const override {
return monthlySalary;
}
};
class Salesman : public Employee {
private:
const float baseSalary;
const float commissionRate;
public:
Salesman(const string& n, const string& p, float base, float rate) : Employee(n, p), baseSalary(base), commissionRate(rate) {}
float calculateSalary() const override {
// 假设销售额已存储在变量sales
float sales = getSales(); // 获取实际销售额
return baseSalary + (commissionRate * sales);
}
// 提供获取销售额的方法
float getSales() const { /* ... */ }
};
class Worker : public Employee {
private:
const float hourlyRate;
int workedHours;
public:
Worker(const string& n, const string& p, float rate, int hours) : Employee(n, p), hourlyRate(rate), workedHours(hours) {}
float calculateSalary() const override {
return hourlyRate * workedHours;
}
};
```
在主函数中,用户可以选择不同类型的员工,然后调用相应的 `calculateSalary()` 方法:
```cpp
int main() {
int employeeType;
std::cout << "Enter the employee type (1: Manager, 2: Salesman, 3: Worker): ";
std::cin >> employeeType;
switch (employeeType) {
case 1:
Employee* manager = new Manager("John Doe", "Manager", 6000.0f);
delete manager;
break;
case 2:
Employee* salesman = new Salesman("Jane Smith", "Salesperson", 2000.0f, 0.1f);
delete salesman;
break;
case 3:
Employee* worker = new Worker("Alice Johnson", "Worker", 15.0f, 400);
delete worker;
break;
default:
std::cerr << "Invalid choice!" << std::endl;
return 1;
}
return 0;
}
```
以上代码实现了基本的工资管理功能,根据用户输入的员工类型,计算并显示其工资。
阅读全文