用C++设计一个小型企业工资管理系统。 设计说明:该小型企业的员工主要有 4 类:经理、技术员、销售员和计时工。要求存储员工的工号、姓名、岗位、月工资等基本信息。 工资计算方法: 1经理:领取固定月薪 8800 元 2技术员:分高级、中级、初级三类,其中高级固定每月 7700 元,中级 固定每月 6600 元,初级固定每月 5500 元 3销售员:底薪 2500+销售额*2%提成 4计时工:工作时间*每小时 66 元 该企业员工的类层次结构为:员工包含经理,技术员,销售员,计时工 要有一个菜单,用于选择各项功能: 1数据录入:输入各种数据(其中每类员工不能少于 3 人) 2数据查询:能根据工号或姓名查询工资信息 3职工信息的删除、修改 4工资计算:能对各类员工进行工资计算 5数据输出:能按类别输出员工信息及工资信息(包括计算工资时所用到 的相关数据,例如:销售员的销售额) 6设置登录本系统的用户名和密码,通过用户名和密码登录

时间: 2023-06-27 21:06:42 浏览: 52
这是一个比较复杂的问题,需要设计多个类和函数,我将给出一个基本的框架,你可以在此基础上进行修改和扩展。 首先,我们需要一个基类 Employee,包含员工的基本信息,如工号、姓名、岗位和月工资。其中,工号和姓名是必须的,而岗位和月工资可以在派生类中进行重载。代码如下: ```cpp class Employee { public: Employee(string id, string name) : id_(id), name_(name) {} virtual ~Employee() {} string getId() const { return id_; } string getName() const { return name_; } virtual string getPost() const { return ""; } virtual double getSalary() const { return 0; } protected: string id_; string name_; }; ``` 接下来,我们可以派生出经理、技术员、销售员和计时工类,分别实现它们的工资计算方法。代码如下: ```cpp class Manager : public Employee { public: Manager(string id, string name) : Employee(id, name) {} virtual string getPost() const { return "经理"; } virtual double getSalary() const { return 8800; } }; class Technician : public Employee { public: enum Level { Junior, Intermediate, Senior }; Technician(string id, string name, Level level) : Employee(id, name), level_(level) {} virtual string getPost() const { return "技术员"; } virtual double getSalary() const { switch (level_) { case Junior: return 5500; case Intermediate: return 6600; case Senior: return 7700; default: return 0; } } private: Level level_; }; class Salesman : public Employee { public: Salesman(string id, string name, double sales) : Employee(id, name), sales_(sales) {} virtual string getPost() const { return "销售员"; } virtual double getSalary() const { return 2500 + sales_ * 0.02; } private: double sales_; }; class HourlyWorker : public Employee { public: HourlyWorker(string id, string name, int hours) : Employee(id, name), hours_(hours) {} virtual string getPost() const { return "计时工"; } virtual double getSalary() const { return hours_ * 66; } private: int hours_; }; ``` 接下来,我们需要一个管理员类,用于录入、查询、删除、修改和输出员工信息。代码如下: ```cpp class Administrator { public: Administrator() {} void addEmployee(Employee* emp) { employees_.push_back(emp); } Employee* findEmployeeById(string id) { for (Employee* emp : employees_) { if (emp->getId() == id) { return emp; } } return nullptr; } vector<Employee*> findEmployeesByName(string name) { vector<Employee*> results; for (Employee* emp : employees_) { if (emp->getName() == name) { results.push_back(emp); } } return results; } bool deleteEmployee(string id) { for (auto it = employees_.begin(); it != employees_.end(); ++it) { if ((*it)->getId() == id) { delete *it; employees_.erase(it); return true; } } return false; } bool modifyEmployee(string id, string name) { Employee* emp = findEmployeeById(id); if (emp) { emp->name_ = name; return true; } return false; } void calculateSalaries() { for (Employee* emp : employees_) { cout << emp->getName() << " " << emp->getPost() << " 月工资为 " << emp->getSalary() << " 元" << endl; } } void outputEmployeesByPost() { map<string, vector<Employee*>> postToEmployees; for (Employee* emp : employees_) { postToEmployees[emp->getPost()].push_back(emp); } for (auto& pair : postToEmployees) { cout << pair.first << ":" << endl; for (Employee* emp : pair.second) { cout << " 工号:" << emp->getId() << ",姓名:" << emp->getName() << ",月工资:" << emp->getSalary() << " 元" << endl; } } } private: vector<Employee*> employees_; }; ``` 最后,我们需要一个用户类,用于设置用户名和密码,以及登录系统。代码如下: ```cpp class User { public: User(string username, string password) : username_(username), password_(password) {} bool login(string username, string password) const { return username == username_ && password == password_; } void setUsername(string username) { username_ = username; } void setPassword(string password) { password_ = password; } private: string username_; string password_; }; ``` 在主函数中,我们可以使用以上类来实现菜单功能。代码如下: ```cpp int main() { Administrator admin; User user("admin", "123456"); while (true) { cout << "请选择功能:" << endl; cout << "1.数据录入" << endl; cout << "2.数据查询" << endl; cout << "3.职工信息的删除、修改" << endl; cout << "4.工资计算" << endl; cout << "5.数据输出" << endl; cout << "6.设置用户名和密码" << endl; cout << "0.退出系统" << endl; int choice; cin >> choice; if (choice == 0) { break; } if (choice == 1) { cout << "请输入员工信息:" << endl; while (true) { cout << "工号(输入0结束):"; string id; cin >> id; if (id == "0") { break; } cout << "姓名:"; string name; cin >> name; cout << "岗位(1.经理 2.技术员 3.销售员 4.计时工):"; int post; cin >> post; if (post == 1) { admin.addEmployee(new Manager(id, name)); } else if (post == 2) { cout << "级别(1.初级 2.中级 3.高级):"; int level; cin >> level; admin.addEmployee(new Technician(id, name, static_cast<Technician::Level>(level - 1))); } else if (post == 3) { cout << "销售额:"; double sales; cin >> sales; admin.addEmployee(new Salesman(id, name, sales)); } else if (post == 4) { cout << "工作时间(小时):"; int hours; cin >> hours; admin.addEmployee(new HourlyWorker(id, name, hours)); } } } if (choice == 2) { cout << "请输入员工工号或姓名:"; string keyword; cin >> keyword; Employee* emp = admin.findEmployeeById(keyword); if (emp) { cout << "工号:" << emp->getId() << ",姓名:" << emp->getName() << ",岗位:" << emp->getPost() << ",月工资:" << emp->getSalary() << " 元" << endl; } else { vector<Employee*> results = admin.findEmployeesByName(keyword); if (results.empty()) { cout << "未找到员工信息" << endl; } else { cout << "共找到 " << results.size() << " 条记录:" << endl; for (Employee* emp : results) { cout << " 工号:" << emp->getId() << ",姓名:" << emp->getName() << ",岗位:" << emp->getPost() << ",月工资:" << emp->getSalary() << " 元" << endl; } } } } if (choice == 3) { cout << "请输入员工工号:"; string id; cin >> id; cout << "请选择要进行的操作(1.删除 2.修改):"; int operation; cin >> operation; if (operation == 1) { if (admin.deleteEmployee(id)) { cout << "删除成功" << endl; } else { cout << "未找到该员工" << endl; } } else if (operation == 2) { cout << "请输入员工姓名:"; string name; cin >> name; if (admin.modifyEmployee(id, name)) { cout << "修改成功" << endl; } else { cout << "未找到该员工" << endl; } } } if (choice == 4) { admin.calculateSalaries(); } if (choice == 5) { admin.outputEmployeesByPost(); } if (choice == 6) { string username, password; cout << "请输入用户名:"; cin >> username; cout << "请输入密码:"; cin >> password; user.setUsername(username); user.setPassword(password); } } return 0; } ``` 注意:以上代码中并没有对用户名和密码进行验证,你需要自己添加验证功能。此外,还可以添加一些其他的功能,例如修改岗位和月工资等。

相关推荐

最新推荐

recommend-type

C++ 学生成绩管理系统设计报告书

内含4个类,各自具有其属性和行为。 基本实现了: (1)学生基本信息、考试科目及成绩的信息录入。 (2)已有学生信息的显示。 (3)学生基本信息的读取和保存输入数据等功能 (4)学生基本信息的查询与修改。可以对已有的...
recommend-type

操作系统课程设计:司机与售票员源代码.docx

操作系统课程设计之司机与售票员源代码解析 本文将对操作系统课程设计的司机与售票员源代码进行详细解析,涵盖了相关知识点的详细说明。...该源代码展示了操作系统课程设计的实践应用,并提供了一个有价值的学习资源。
recommend-type

C++学校人员信息管理系统课程设计.doc

该课程设计是一个使用C++语言开发的学校人员信息管理系统,旨在为大一大二学生提供一个实践性强的课程设计项目。该系统的开发使用到了C++语言的基本语法操作,如链表、文件读写等。 知识点1:链表的应用 在该系统中...
recommend-type

诊所信息管理系统C++课程设计报告.doc

模拟诊所信息管理系统就是对存储患者信息以及医生信息在个人PC上的编程实现。本系统采用了用户身份的注册、登陆、增加信息、查询信息、帐单信息以及统计所有患者的总费用等功能。并分析在现实生活中遇到的问题并得到...
recommend-type

个人通讯录管理系统课程设计-C++.docx

【个人通讯录管理系统课程设计】是计算机科学领域中常见的实践项目,主要目的是让学生掌握软件开发的基本流程和技术。在这个课程设计中,使用C++编程语言和MySQL数据库进行开发,旨在实现一个具备基本通讯录管理功能...
recommend-type

基于单片机的瓦斯监控系统硬件设计.doc

"基于单片机的瓦斯监控系统硬件设计" 在煤矿安全生产中,瓦斯监控系统扮演着至关重要的角色,因为瓦斯是煤矿井下常见的有害气体,高浓度的瓦斯不仅会降低氧气含量,还可能引发爆炸事故。基于单片机的瓦斯监控系统是一种现代化的监测手段,它能够实时监测瓦斯浓度并及时发出预警,保障井下作业人员的生命安全。 本设计主要围绕以下几个关键知识点展开: 1. **单片机技术**:单片机(Microcontroller Unit,MCU)是系统的核心,它集成了CPU、内存、定时器/计数器、I/O接口等多种功能,通过编程实现对整个系统的控制。在瓦斯监控器中,单片机用于采集数据、处理信息、控制报警系统以及与其他模块通信。 2. **瓦斯气体检测**:系统采用了气敏传感器来检测瓦斯气体的浓度。气敏传感器是一种对特定气体敏感的元件,它可以将气体浓度转换为电信号,供单片机处理。在本设计中,选择合适的气敏传感器至关重要,因为它直接影响到检测的精度和响应速度。 3. **模块化设计**:为了便于系统维护和升级,单片机被设计成模块化结构。每个功能模块(如传感器接口、报警系统、电源管理等)都独立运行,通过单片机进行协调。这种设计使得系统更具有灵活性和扩展性。 4. **报警系统**:当瓦斯浓度达到预设的危险值时,系统会自动触发报警装置,通常包括声音和灯光信号,以提醒井下工作人员迅速撤离。报警阈值可根据实际需求进行设置,并且系统应具有一定的防误报能力。 5. **便携性和安全性**:考虑到井下环境,系统设计需要注重便携性,体积小巧,易于携带。同时,系统的外壳和内部电路设计必须符合矿井的安全标准,能抵抗井下潮湿、高温和电磁干扰。 6. **用户交互**:系统提供了灵敏度调节和检测强度调节功能,使得操作员可以根据井下环境变化进行参数调整,确保监控的准确性和可靠性。 7. **电源管理**:由于井下电源条件有限,瓦斯监控系统需具备高效的电源管理,可能包括电池供电和节能模式,确保系统长时间稳定工作。 通过以上设计,基于单片机的瓦斯监控系统实现了对井下瓦斯浓度的实时监测和智能报警,提升了煤矿安全生产的自动化水平。在实际应用中,还需要结合软件部分,例如数据采集、存储和传输,以实现远程监控和数据分析,进一步提高系统的综合性能。
recommend-type

管理建模和仿真的文件

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

:Python环境变量配置从入门到精通:Win10系统下Python环境变量配置完全手册

![:Python环境变量配置从入门到精通:Win10系统下Python环境变量配置完全手册](https://img-blog.csdnimg.cn/20190105170857127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3Mjc2OTUx,size_16,color_FFFFFF,t_70) # 1. Python环境变量简介** Python环境变量是存储在操作系统中的特殊变量,用于配置Python解释器和
recommend-type

electron桌面壁纸功能

Electron是一个开源框架,用于构建跨平台的桌面应用程序,它基于Chromium浏览器引擎和Node.js运行时。在Electron中,你可以很容易地处理桌面环境的各个方面,包括设置壁纸。为了实现桌面壁纸的功能,你可以利用Electron提供的API,如`BrowserWindow` API,它允许你在窗口上设置背景图片。 以下是一个简单的步骤概述: 1. 导入必要的模块: ```javascript const { app, BrowserWindow } = require('electron'); ``` 2. 在窗口初始化时设置壁纸: ```javas
recommend-type

基于单片机的流量检测系统的设计_机电一体化毕业设计.doc

"基于单片机的流量检测系统设计文档主要涵盖了从系统设计背景、硬件电路设计、软件设计到实际的焊接与调试等全过程。该系统利用单片机技术,结合流量传感器,实现对流体流量的精确测量,尤其适用于工业过程控制中的气体流量检测。" 1. **流量检测系统背景** 流量是指单位时间内流过某一截面的流体体积或质量,分为瞬时流量(体积流量或质量流量)和累积流量。流量测量在热电、石化、食品等多个领域至关重要,是过程控制四大参数之一,对确保生产效率和安全性起到关键作用。自托里拆利的差压式流量计以来,流量测量技术不断发展,18、19世纪出现了多种流量测量仪表的初步形态。 2. **硬件电路设计** - **总体方案设计**:系统以单片机为核心,配合流量传感器,设计显示单元和报警单元,构建一个完整的流量检测与监控系统。 - **工作原理**:单片机接收来自流量传感器的脉冲信号,处理后转化为流体流量数据,同时监测气体的压力和温度等参数。 - **单元电路设计** - **单片机最小系统**:提供系统运行所需的电源、时钟和复位电路。 - **显示单元**:负责将处理后的数据以可视化方式展示,可能采用液晶显示屏或七段数码管等。 - **流量传感器**:如涡街流量传感器或电磁流量传感器,用于捕捉流量变化并转换为电信号。 - **总体电路**:整合所有单元电路,形成完整的硬件设计方案。 3. **软件设计** - **软件端口定义**:分配单片机的输入/输出端口,用于与硬件交互。 - **程序流程**:包括主程序、显示程序和报警程序,通过流程图详细描述了每个程序的执行逻辑。 - **软件调试**:通过调试工具和方法确保程序的正确性和稳定性。 4. **硬件电路焊接与调试** - **焊接方法与注意事项**:强调焊接技巧和安全事项,确保电路连接的可靠性。 - **电路焊接与装配**:详细步骤指导如何组装电路板和连接各个部件。 - **电路调试**:使用仪器设备检查电路性能,排除故障,验证系统功能。 5. **系统应用与意义** 随着技术进步,单片机技术、传感器技术和微电子技术的结合使得流量检测系统具备更高的精度和可靠性,对于优化工业生产过程、节约资源和提升经济效益有着显著作用。 6. **结论与致谢** 文档结尾部分总结了设计成果,对参与项目的人表示感谢,并可能列出参考文献以供进一步研究。 7. **附录** 包含程序清单和电路总图,提供了具体实现细节和设计蓝图。 此设计文档为一个完整的机电一体化毕业设计项目,详细介绍了基于单片机的流量检测系统从概念到实施的全过程,对于学习单片机应用和流量测量技术的读者具有很高的参考价值。