公司人事管理系统

1.问题描述

一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:固定月薪(8000);技术人员:月薪按技术等级(1~8)(1600+等级*300); 销售人员:按提成(4%*销售额);销售经理:底薪+提成(1500+0.2%*总销售额);设计一个管理程序,实现对各类人员的信息输入,修改和显示。

2.需求分析  

共有6个类,SalesManager,Manager,Technician,Sales这四个类继承于Person类PersonManager类调用这些类内函数。

在菜单界面可以输入1,2,3,4,0来控制该程序,如果输入其他数字会显示输入错误请重新输入。

输入1:打开员工信息添加功能,此时需要输入员工姓名,员工身份证号码(便于查找员工),用数字1,2,3,4分别表示员工等级经理,技术人员,销售经理和销售人员,如果输入其他数字会显示输入错误请重新输入。最后如果是经理输入任意值;如果是技术人员输入技术等级(1~8);如果是销售经理输入销售额;如果是销售人员输入总销售额。功能完成。

输入2:打开人员修改功能,输入需要修改的员工身份证号方便查找,如果找到则重复1的功能对员工进行修改。如果未找到则显示未能找到该员工。

输入3:打开显示员工功能。

输入4:打开保存信息功能。

输入0:退出程序。

输入其他值:显示输入错误请重新输入。


3.详细设计

主函数:

#include"PersonManager.h"
int main() {PersonManager manager;manager.run();return 0;
}

员工类:

在员工类中,有员工的姓名,身份证号,职位属性,可以计算工资。

父类:
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Person {
public:// 构造函数Person(string n, int a, string i,int y) {name = n;num = a;id = i;nu = y;getsalary(y);}// 打印人员信息virtual void print() {cout << "姓名:" << name << endl;cout << "身份证号码:" << id << endl;cout << "工资:" << salary << endl;}// 获取人员类型virtual string getType() {return "";}// 获取人员信息字符串virtual string getInfoString() {return "";}void getsalary(int ch){switch (ch){case 1:salary = 8000;break;case 2:salary = 1600 + this->num * 300;break;case 3:salary = this->num * 0.04;break;case 4:salary = 2000 + 1500 + 0.002 * this->num;break;default:cout << "无效选项" << endl;}}string name; // 姓名int num;string id;double salary = 0; // 工资int nu;};
销售经理类:
#pragma once
#include"Person.h"
#include <iostream>
using namespace std;
class SalesManager : public Person {
public:// 构造函数SalesManager(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout << "职位:销售经理" << endl;Person::print();}// 获取人员类型string getType() {return "SalesManager";}// 获取人员信息字符串string getInfoString() {return getType() + "," + name + "," + id + "," + to_string(salary);}
private:string name; // 姓名int num;string id;double salary = 0; // 工资int nu;
};
经理类:
#pragma once
#include"Person.h"
#include <iostream>
using namespace std;
class Manager : public Person {
public:// 构造函数Manager(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout << "职位:经理" << endl;Person::print();}// 获取人员类型string getType() {return "Manager";}// 获取人员信息字符串string getInfoString() {return getType() + "," + name  + "," + id + "," + to_string(salary);}
private:string name; // 姓名int num;string id;double salary = 0; // 工资int nu;
};
技术人员类:
#pragma once
#include"Person.h"
#include <iostream>
using namespace std;
// 定义技术人员类
class Technician : public Person {
public:// 构造函数Technician(string n, int a, string i,int y) : Person(n, a, i,y) {}// 打印人员信息void print() {cout << "职位:技术人员" << endl;Person::print();}// 获取人员类型string getType() {return "Technician";}// 获取人员信息字符串string getInfoString() {return getType() + "," + name  + "," + id + "," + to_string(salary);}
private:string name; // 姓名int num;string id;double salary = 0; // 工资int nu;
};
销售人员类:
#pragma once
#include"Person.h"
#include <iostream>
using namespace std;
class Sales : public Person {
public:// 构造函数Sales(string n, int a, string i,int y) : Person(n, a, i ,y)   { }// 打印人员信息void print() {cout << "职位:销售人员" << endl;Person::print();}// 获取人员类型string getType() {return "Sales";}// 获取人员信息字符串string getInfoString() {return getType() + "," + name +"," + id + "," + to_string(salary);}
private:string name; // 姓名int num;string id;double salary = 0; // 工资int nu;
};

员工管理类:

在员工管理类中,可以添加、删除、修改员工信息,查询特定员工的信息。

#pragma once
#include <string>
#include <vector>
#include"Person.h"
using namespace std;
class PersonManager {
private:vector<Person*> persons; // 人员数组
public:// 析构函数~PersonManager();// 添加人员信息
void addPerson();// 修改人员信息
void modifyPerson();// 显示所有人员信息
void showAllPersons();// 保存人员信息到文件
void saveToFile(string filename);// 从文件中加载人员信息
void loadFromFile(string filename);// 显示菜单
void showMenu();// 运行人员管理系统
void run();
};
具体实现:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include"Person.h"
#include"Manager.h"
#include"Technician.h"
#include"SalesManager.h"
#include "PersonManager.h"
#include"Sales.h"
using namespace std;PersonManager::~PersonManager() {for (int i = 0; i < persons.size(); i++) {delete persons[i];}}// 添加人员信息void PersonManager::addPerson() {string name, id;int age, choice;//double salary;cout << "请输入姓名:";cin >> name; cout << "请输入身份证号码:";cin >> id;cout << "请选择职位(1. 经理 2. 技术人员 3. 销售经理 4.销售人员):";cin >> choice;cout << "如果是经理 请输入:任意值   "<<endl<< "如果是技术人员 请输入技术等级" << endl << "如果是销售经理 请输入销售额" << endl << "如果是销售人员请输入总销售额"<<endl;cin >> age;switch (choice) {case 1:  persons.push_back(new Manager(name, age,id, choice));break;case 2:persons.push_back(new Technician(name, age, id, choice));break;case 3:persons.push_back(new SalesManager(name, age, id, choice));break;case 4:persons.push_back(new SalesManager(name, age, id, choice));break;default:cout << "无效选项,请重新输入!" << endl;}cout << "添加成功!" << endl;system("pause");system("cls");}// 修改人员信息void PersonManager::modifyPerson() {string id;cout << "请输入要修改的身份证号码:";cin >> id;for (int i = 0; i < persons.size(); i++) {if (persons[i]->id == id) {string name;int num, choice;//double salary;cout << "请输入新的姓名:";cin >> name;cout << "请选择新的职位(1. 经理 2. 技术人员 3. 销售经理 4.销售人员):";cin >> choice;cout << "如果是经理 请输入:任意值 "<<endl<<   "如果是技术人员 请输入技术等级 "<<endl << "如果是销售经理 请输入销售额" << endl<<"如果是销售人员请输入总销售额";cin >> num;switch (choice) {case 1:delete persons[i];persons[i] = new Manager(name, num, id, choice);break;case 2:delete persons[i];persons[i] = new Technician(name, num, id, choice);break;case 3:delete persons[i];persons[i] = new SalesManager(name, num, id, choice);break;case 4:delete persons[i];persons[i] = new Sales(name, num, id, choice);break;default:cout << "无效选项,请重新输入!" << endl;}cout << "修改成功!" << endl;return;system("pause");system("cls");}}cout << "未找到该人员信息!" << endl;system("pause");system("cls");}// 显示所有人员信息void PersonManager::showAllPersons() {for (int i = 0; i < persons.size(); i++) {persons[i]->print();cout << endl;}system("pause");system("cls");}// 保存人员信息到文件void PersonManager::saveToFile(string filename) {ofstream ofs(filename);if (!ofs) {cout << "打开文件失败!" << endl;return;}for (int i = 0; i < persons.size(); i++) {ofs << persons[i]->getInfoString() << endl;}ofs.close();cout << "保存成功!" << endl;system("pause");system("cls");}// 从文件中加载人员信息void PersonManager::loadFromFile(string filename) {ifstream ifs(filename);if (!ifs) {cout << "打开文件失败!" << endl;return;system("pause");system("cls");}string line;while (getline(ifs, line)) {int pos1 = line.find(",");string type = line.substr(0, pos1);int pos2 = line.find(",", pos1 + 1);string name = line.substr(pos1 + 1, pos2 - pos1 - 1);int pos3 = line.find(",", pos2 + 1);int age = stoi(line.substr(pos2 + 1, pos3 - pos2 - 1));int pos4 = line.find(",", pos3 + 1);string id = line.substr(pos3 + 1, pos4 - pos3 - 1);int nu = stod(line.substr(pos4 + 1));if (type == "Manager") {persons.push_back(new Manager(name, age, id,nu));}else if (type == "Technician") {persons.push_back(new Technician(name, age, id,nu));}else if (type == "SalesManager") {persons.push_back(new SalesManager(name, age, id,nu));}}ifs.close();cout << "加载成功!" << endl;system("pause");system("cls");}// 显示菜单void PersonManager::showMenu() {cout << "1. 添加人员信息" << endl;cout << "2. 修改人员信息" << endl;cout << "3. 显示所有人员信息" << endl;cout << "4. 保存人员信息到文件" << endl;cout << "0. 退出" << endl;}// 运行人员管理系统void PersonManager::run() {int choice;while (true) {showMenu();cout << "请输入选项:";cin >> choice;switch (choice) {case 1:addPerson();break;case 2:modifyPerson();break;case 3:showAllPersons();break;case 4:saveToFile("persons.txt");break;case 0:cout << "谢谢使用!" << endl;return;default:cout << "无效选项,请重新输入!" << endl;}}};

4.运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类与对象——(1)初识对象——C++中的string

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 或许不安或许迷惑&#xff0c;但…

Factory 工厂模式-C语言实现

说明&#xff1a; 均由 chatgpt生成&#xff0c;实例可以看出无法运行&#xff0c;仅供参考~ UML图&#xff1a; ‘ 表示public, - 表示private,“# 表示protected.” 一文掌握14种UML图-腾讯云开发者社区-腾讯云 (tencent.com) 五分钟带你读懂UML类图 - 知乎 (zhihu.com)…

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制&#xff08;必备&#xff09;2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验&#xff08;本文使用&#xff09; 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…

U-boot(五):启动内核

本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知&#xff0c;我们在使用定时器的时候会添加一个任务timerTask类&#xff0c;而timer类则是我们行使任务的类&#xff0c;因此可…

【Apache Doris】Manager极致丝滑地运维管理

【Apache Doris】Manager极致丝滑地运维管理 1.标准VS可视化运维管理2. 环境信息2.1.硬件信息2.2.软件信息 3.前置准备3.1.安装包准备3.2.文档手册准备 4.集群初始化4.1.系统参数预设4.2.Manager部署4.3.新集群部署4.4 监控告警4.4.1 监控4.4.2 告警 5. 集群升级5.1 新包准备5.…

人力资源管理后台 === 登陆+主页鉴权

目录 1. 分析登录流程 2. Vuex中用户模块的实现 3.Vue-cli代理解决跨域 4.axios封装 5.环境区分 6. 登录联调 7.主页权限验证-鉴权 1. 分析登录流程 传统思路都是登录校验通过之后&#xff0c;直接调用接口&#xff0c;获取token之后&#xff0c;跳转到主页。 vue-elemen…

【数据库基础】

目录&#xff1a; 前言什么是数据库主流数据库服务器&#xff0c;数据库&#xff0c;表关系MySQL架构SQL分类存储引擎 前言 剑指offer&#xff1a;一年又1天 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a;…

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异

最近有客户在使用 Elasticsearch 搜索服务时发现集群有掉节点&#xff0c;并且有 master 收集节点信息超时的日志&#xff0c;节点的负载也很高&#xff0c;不只是 data 节点&#xff0c;master 和协调节点的 cpu 使用率都很高&#xff0c;看现象集群似乎遇到了性能瓶颈。 查看…

算法设计与分析(贪心法)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

中国一年有457万人确诊癌症!医生提示:这4种食物,再爱吃也要管住嘴

癌症是威胁人类生命健康的重大疾病&#xff0c;癌症的发生因素一直以来都是专家学者重点探索的课题。据世卫组织最新公布的数据显示&#xff0c;食物或与癌症发生之间存在着密切的联系&#xff0c;某些食物的摄入过多可能会增加患癌症的风险&#xff0c;所以我们应该警惕&#…

IDEA中JDK21控制台打印的中文乱码

IDEA中&#xff0c;使用的JDK21&#xff0c;控制台打印中文乱码&#xff0c;解决办法是重装了一下JDK。 我之前安装的版本是“jdk-21_windows-x64_bin.exe”&#xff0c;我配置了多个JDK环境&#xff0c;所以使用的是安装文件进行安装的。这次解决乱码问题&#xff0c;我重新安…

代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

LeetCode 121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 直觉告诉我要贪心算法&#xff0c;章节告诉我得用DP来做&#xff0c;行&#xff0c;都做一下&#xff01; 贪心&#xff1a;只能买一次&#xff0c;所…

Vatee万腾的科技冒险:Vatee独特探索力量的数字化征程

在数字化时代的激流中&#xff0c;Vatee万腾以其独特的科技冒险精神&#xff0c;引领着一场前所未有的数字化征程。这不仅仅是一次冒险&#xff0c;更是对未知的深度探索&#xff0c;将科技的力量推向新的高度。 Vatee万腾在科技领域敢于挑战传统&#xff0c;积极探索未知的可能…

快速解决Navicat连接数据库报错:10061

目录 问题原因&#xff1a; 错误提示&#xff1a; 解决方案&#xff1a; 问题1&#xff1a;如何进入指定目录&#xff1f; 问题2&#xff1a;若出现&#xff1a;“服务名无效” 将MySQL注册到win服务中 问题原因&#xff1a; mysql服务没有开启&#xff08;可能会在更新windows…

C#,《小白学程序》第三课:类class,类的数组及类数组的排序

类class把数值与功能巧妙的进行了结合&#xff0c;是编程技术的主要进步。 下面的程序你可以确立 分数 与 姓名 之间关系&#xff0c;并排序。 1 文本格式 /// <summary> /// 同学信息类 /// </summary> public class Classmate { /// <summary> /…

前端实现埋点

前端实现埋点 如何去了解用户呢&#xff1f;最直接有效的方式就是了解用户的行为&#xff0c;了解用户在网站中做了什么&#xff0c;呆了多久。而如何去实现这一操作&#xff0c;这就涉及到我们前端的埋点了。 埋点方式 什么是埋点&#xff1f; 所谓埋点是数据采集领域&…

【python】--文件/文件夹读写及操作

目录 一、文件读写1、文件读写代码示例 二、文件/文件夹操作1、代码示例 一、文件读写 读写文件就是请求操作系统打开一个文件对象&#xff08;通常称为文件描述符&#xff09;&#xff0c;然后通过操作系统提供的接口从这个文件对象中读取数据&#xff08;读文件&#xff09;…

机器人规划算法——movebase导航框架源码分析

这里对MoveBase类的类成员进行了声明&#xff0c;以下为比较重要的几个类成员函数。 构造函数 MoveBase::MoveBase | 初始化Action 控制主体 MoveBase::executeCb收到目标&#xff0c;触发全局规划线程&#xff0c;循环执行局部规划 全局规划线程 void MoveBase::planThread |…

学习笔记:如何分析财务报表

其实财务报表分析最核心的东西&#xff0c;是通过财务报表这个结果&#xff0c;由果推因&#xff0c;找出造成这个结果的原因。 会计是商业的语言 首先第一个问题是——会计是商业的语言&#xff0c;这是会计的根本。 什么叫“语言”&#xff0c;就是可以通过它进行交流。比如…