使用C++写一个程序,要求某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。 人员编号基数为1000,每输入一个人员的信息,编号顺序加1。 程序要对所有人员有提升级别的功能。为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,技术人员和销售经理升为3级,推销员仍为1级。 月薪计算办法是:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%
时间: 2023-11-04 08:04:11 浏览: 188
公司人员工资管理系统
以下是使用 C++ 实现的代码:
```c++
#include <iostream>
#include <string>
using namespace std;
const int BASE_ID = 1000; // 基础编号
const double TECH_SALARY_PER_HOUR = 100; // 技术人员每小时工资
const double SALESMAN_COMMISSION_RATE = 0.04; // 推销员销售提成率
const double SALES_MANAGER_FIXED_SALARY = 5000; // 销售经理固定月薪
const double SALES_MANAGER_COMMISSION_RATE = 0.05; // 销售经理销售提成率
// 人员类
class Person {
public:
Person(string name, int level) : name(name), level(level) {}
virtual double getSalary() const = 0; // 获取月薪
virtual void upgrade() = 0; // 提升级别
void printInfo() const; // 输出人员信息
protected:
string name; // 姓名
int id; // 编号
int level; // 级别
};
// 经理类
class Manager : public Person {
public:
Manager(string name) : Person(name, 1) {
id = BASE_ID + count++;
}
double getSalary() const override {
return 8000;
}
void upgrade() override {
level = 4;
}
private:
static int count; // 用于计数编号
};
int Manager::count = 0;
// 技术人员类
class Technician : public Person {
public:
Technician(string name, double hours) : Person(name, 1), hours(hours) {
id = BASE_ID + count++;
}
double getSalary() const override {
return hours * TECH_SALARY_PER_HOUR;
}
void upgrade() override {
level = 3;
}
private:
static int count; // 用于计数编号
double hours; // 工作小时数
};
int Technician::count = 0;
// 销售经理类
class SalesManager : public Person {
public:
SalesManager(string name) : Person(name, 1) {
id = BASE_ID + count++;
}
double getSalary() const override {
return SALES_MANAGER_FIXED_SALARY + sales * SALES_MANAGER_COMMISSION_RATE;
}
void upgrade() override {
level = 3;
}
void addSales(double amount) { // 添加销售额
sales += amount;
}
private:
static int count; // 用于计数编号
double sales = 0; // 当月销售额
};
int SalesManager::count = 0;
// 推销员类
class Salesman : public Person {
public:
Salesman(string name, double sales) : Person(name, 1), sales(sales) {
id = BASE_ID + count++;
}
double getSalary() const override {
return sales * SALESMAN_COMMISSION_RATE;
}
void upgrade() override {
// 不升级
}
private:
static int count; // 用于计数编号
double sales; // 当月销售额
};
int Salesman::count = 0;
void Person::printInfo() const {
cout << "姓名:" << name << ",编号:" << id << ",级别:" << level << ",月薪:" << getSalary() << endl;
}
int main() {
Person *people[100]; // 最多存储100个人员
int count = 0; // 存储当前人员数量
char choice;
do {
cout << "请选择人员类型:(M-经理,T-技术人员,S-销售经理,A-推销员)" << endl;
cin >> choice;
string name;
switch (choice) {
case 'M':
cout << "请输入经理姓名:" << endl;
cin >> name;
people[count++] = new Manager(name);
break;
case 'T':
cout << "请输入技术人员姓名和工作小时数:" << endl;
cin >> name;
double hours;
cin >> hours;
people[count++] = new Technician(name, hours);
break;
case 'S':
cout << "请输入销售经理姓名:" << endl;
cin >> name;
people[count++] = new SalesManager(name);
break;
case 'A':
cout << "请输入推销员姓名和当月销售额:" << endl;
cin >> name;
double sales;
cin >> sales;
people[count++] = new Salesman(name, sales);
break;
default:
cout << "输入无效,请重新输入!" << endl;
break;
}
} while (count < 100 && (choice == 'M' || choice == 'T' || choice == 'S' || choice == 'A'));
// 输出人员信息
double totalSalary = 0; // 计算月薪总额
for (int i = 0; i < count; i++) {
people[i]->printInfo();
totalSalary += people[i]->getSalary();
}
cout << "月薪总额:" << totalSalary << endl;
// 提升级别
for (int i = 0; i < count; i++) {
people[i]->upgrade();
}
// 输出人员信息
totalSalary = 0;
for (int i = 0; i < count; i++) {
people[i]->printInfo();
totalSalary += people[i]->getSalary();
}
cout << "月薪总额:" << totalSalary << endl;
// 释放内存
for (int i = 0; i < count; i++) {
delete people[i];
}
return 0;
}
```
程序流程如下:
1. 定义了一个 `Person` 类作为基类,派生出 `Manager`、`Technician`、`SalesManager` 和 `Salesman` 类。
2. 每个类都重写了 `getSalary()` 和 `upgrade()` 函数,用于计算月薪和提升级别。
3. 在主函数中,通过循环读取用户输入,创建不同类型的人员对象,并存储在一个数组中。
4. 遍历数组,输出每个人员的信息,并计算月薪总额。
5. 再次遍历数组,调用 `upgrade()` 函数,提升每个人员的级别。
6. 再次遍历数组,输出每个人员的信息,并计算月薪总额。
7. 释放内存。
阅读全文