用 C++ 编写一个程序来实现小型公司的工资管理系统。公司有四类人员:经理(manager)、技术人员(technician)、销售员(salesman)、销售经理(salesmanager),每类人员的工资计算方式不同。
✅ 需求分析:
- 所有员工都有编号、姓名、月工资信息。
- 工资计算方法:
- 经理:固定月薪 8000 元
- 技术人员:每小时 100 元 → 需要输入工作小时数
- 销售员:当月销售额的 4% 提成 → 需要输入销售额
- 销售经理:固定月薪 5000 + 所管辖部门当月销售额的 5% → 需要输入销售额
- 要求:计算并显示所有职员的月工资和全部信息。
✅ 设计思路:
- 使用面向对象编程(OOP):
- 定义基类
Employee,包含公共属性:编号、姓名、月工资。 - 派生出四个子类:
Manager,Technician,Salesman,SalesManager。 - 每个子类重写
calculateSalary()方法,实现各自的工资计算逻辑。 - 使用虚函数支持多态,便于统一处理不同类型员工。
- 定义基类
- 主程序中创建多个员工对象,调用其
calculateSalary()和displayInfo()方法。
✅ C++ 代码实现:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 基类:员工
class Employee {
protected:
int id;
string name;
double salary;
public:
Employee(int i, string n) : id(i), name(n), salary(0) {}
virtual ~Employee() = default;
virtual void calculateSalary() = 0; // 纯虚函数,由子类实现
virtual void displayInfo() const {
cout << "编号: " << id << ", 姓名: " << name << ", 月工资: " << salary << " 元" << endl;
}
double getSalary() const { return salary; }
};
// 经理类
class Manager : public Employee {
public:
Manager(int i, string n) : Employee(i, n) {}
void calculateSalary() override {
salary = 8000.0;
}
};
// 技术人员类
class Technician : public Employee {
private:
int hours;
public:
Technician(int i, string n, int h) : Employee(i, n), hours(h) {}
void calculateSalary() override {
salary = hours * 100.0;
}
void displayInfo() const override {
cout << "编号: " << id << ", 姓名: " << name
<< ", 工作小时: " << hours << ", 月工资: " << salary << " 元" << endl;
}
};
// 销售员类
class Salesman : public Employee {
private:
double sales;
public:
Salesman(int i, string n, double s) : Employee(i, n), sales(s) {}
void calculateSalary() override {
salary = sales * 0.04;
}
void displayInfo() const override {
cout << "编号: " << id << ", 姓名: " << name
<< ", 销售额: " << sales << ", 月工资: " << salary << " 元" << endl;
}
};
// 销售经理类
class SalesManager : public Employee {
private:
double departmentSales;
public:
SalesManager(int i, string n, double ds) : Employee(i, n), departmentSales(ds) {}
void calculateSalary() override {
salary = 5000.0 + departmentSales * 0.05;
}
void displayInfo() const override {
cout << "编号: " << id << ", 姓名: " << name
<< ", 部门销售额: " << departmentSales << ", 月工资: " << salary << " 元" << endl;
}
};
int main() {
vector<Employee*> employees;
// 创建员工对象(示例数据)
employees.push_back(new Manager(1, "张三"));
employees.push_back(new Technician(2, "李四", 160)); // 160小时
employees.push_back(new Salesman(3, "王五", 50000)); // 销售额5万
employees.push_back(new SalesManager(4, "赵六", 80000)); // 部门销售额8万
// 计算工资并显示信息
cout << "=== 公司员工工资信息 ===" << endl;
for (auto emp : employees) {
emp->calculateSalary();
emp->displayInfo();
}
// 清理内存
for (auto emp : employees) {
delete emp;
}
return 0;
}
✅ 运行效果示例:
=== 公司员工工资信息 ===
编号: 1, 姓名: 张三, 月工资: 8000 元
编号: 2, 姓名: 李四, 工作小时: 160, 月工资: 16000 元
编号: 3, 姓名: 王五, 销售额: 50000, 月工资: 2000 元
编号: 4, 姓名: 赵六, 部门销售额: 80000, 月工资: 9000 元
✅ 说明:
- 使用了继承与多态,符合面向对象设计原则。
- 可根据实际需要扩展更多员工类型或添加输入功能(如从键盘读取数据)。
- 内存管理使用
delete释放动态分配的对象,避免泄漏。
📌 提示: 如果希望交互式输入员工数据,可以在 main() 中添加循环让用户输入每种员工的参数。
如需扩展功能(如保存到文件、按类型筛选等),可在此基础上继续开发。
✅ 此代码完全满足题目要求,结构清晰,易于维护和扩展。

1万+

被折叠的 条评论
为什么被折叠?



