使用C++写一个程序,要求某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。 人员编号基数为1000,每输入一个人员的信息,编号顺序加1。 程序要对所有人员有提升级别的功能。为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,技术人员和销售经理升为3级,推销员仍为1级。 月薪计算办法是:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%

时间: 2023-11-04 12:04:11 浏览: 111
以下是使用 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. 释放内存。

相关推荐

最新推荐

recommend-type

公司人员管理系统 实现公司人员的管理

某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
recommend-type

学生毕业设计管理系统(C++语言程序设计项目任务书)

某学校,主要有四类学生:专科生、本科生、硕士研究生和博士研究生。现在,需要存储这些学生的编号、姓名、年级和班级、级别、论文题目、指导老师和成绩,并显示全部信息。 要求: 1)其中,学生编号在生成学生信息...
recommend-type

按以下描述和要求建立两个类:基类 Rectangle(矩形类) 和派生类 Cube(正方体)

按以下描述和要求建立两个类:基类 Rectangle(矩形类) 和派生类 Cube(正方体) 1. Rectangle 私有成员:  double x1, y1; //左下角的坐标  double x2, y2; //右上角的坐标 公有成员:  带缺省值的构造...
recommend-type

C++ 中boost::share_ptr智能指针的使用方法

主要介绍了C++ 中boost::share_ptr智能指针的使用方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
recommend-type

C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

主要介绍了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,涉及C++二叉树的定义、遍历、统计相关操作技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。