C++之职工管理系统(细节Q)

指针初始化类 && 普通变量初始化类 

抽象基类worker,只需编写 .h ,无需 .cpp 底层实现

类 记得声明权限public!!!不然默认private,主函数访问不了

记得继承父类

 

Worker * worker:指向Worker类型对象的指针 = 地址

Worker ** worker_Array:(动态) 指针数组,即数组每一个元素都是指向Worker类型对象的指针=地址

 

初始化动态数组(数组首地址指针+人数)

批量添加成员功能实现


1.需添加人数addNum是否大于0

addNum > 0

2.求新动态数组的空间大小newSize 

 newSize=this->EmpNum+addNum

3.生成新动态数组去的地址newSpace(注意格式) 

 Worker ** newSpace=new worker * [newSize]

4.将原来数组内容复制到新数组里面

for循环:newSpace[i] = this->EmpArray[i];

5.将人员信息打包封装,new分配空间(指针)

 wok = new Employee(id, name, 1);

6.将打包好的对象加入新数组

newSpace[this->EmpNum + i] = wok;

7.释放原数组空间(已废弃)

delete[ ] this->EmpArray;

8.更新指向,指向新数组

this->EmpArray = newSpace;

9.更新成员个数,为新数组个数

this->EmpNum = newSize;

void workerManager::Add_EMP()
{cout << "请输入添加的人数" << endl;int addNum = 0;cin >> addNum;if (addNum > 0) {//添加新的数组空间大小int newSize = this->EmpNum + addNum;//开辟新空间,新数组的地址worker** newSpace = new  worker * [newSize];//将原空间地址的内容存放到新空间下(复制)if (this->EmpArray != NULL){for (int i = 0; i < this->EmpNum; i++){newSpace[i] = this->EmpArray[i];}}//输入新数据(批量添加)for (int i = 0; i < addNum; i++){int id;string name;int dSelect; //职位cout << "请输入第" << i + 1 << "个职工的id" << endl;cin >> id;cout << "请输入第" << i + 1 << "个职工的name" << endl;cin >> name;cout << "亲选择岗位:1.员工 2.经理 3.总裁" << endl;cin >> dSelect;//注意:此时体现多态的重要性//初始化为基类worker,初始化为NULLworker* wok = NULL;//选择岗位,switch实现switch (dSelect){case 1://给指针分配空间wok = new Employee(id, name, 1);break;case 2:wok = new manager(id, name, 1);break;case 3:wok = new Boss(id, name, 1);break;default:break;}//将刚创建的对象加入数组中newSpace[this->EmpNum + i] = wok;}//释放原有空间delete[] this->EmpArray;//更新新空间的指向,更新地址this->EmpArray = newSpace;//更新数组成员个数this->EmpNum = newSize;//提示信息cout << "添加成功!" << endl;}else{cout << "输入错误" << endl;}//按任意键system("pause");//清屏操作system("cls");}

针对三种文件情况,构造初始化 

文件不存在 创建文件


初始化构造(读文件)

workerManager::workerManager()
{//文件不存在ifstream ifs;ifs.open("test", ios::in);//读文件if (!ifs.is_open())//文件为空{cout << "文件不存在" << endl;//构造初始化this->EmpNum = 0;this->EmpArray = NULL;//初始化文件标志,默认为空this->FileEmpty = true;//关闭文件ifs.close();return;}}

 文件存在 数据为空


文件结尾为 eof,用于判断是否为空(读文件)

//文件存在,但数据为空char ch;ifs >> ch;if (ifs.eof()){cout << "文件为空" << endl;//构造初始化this->EmpNum = 0;this->EmpArray = NULL;//初始化文件标志,默认为空this->FileEmpty = true;//关闭文件ifs.close();return;}

 显示职工信息功能

void workerManager:: Show_Emp()
{if (this->FileEmpty){cout << "文件不存在or记录为空" << endl;}else{for (int i = 0; i < EmpNum; i++){//多态调用接口,数组成员均为workerthis->EmpArray[i]->showInfo();}}
}

 查找目标职工在数组中的位置


主要思路:

遍历数组查找需删除对象在数组中的位置 index,不存在则返回-1

int workerManager::IsExist(int id)
{int index = -1;for (int i = 0; i < this->EmpNum; i++){if (this->EmpArray[i]->ID == id){index = i;  //找到职工break;}}return index;
}

 删除职工信息


数组成员 前移

void workerManager::Del_Emp()
{if (this->FileEmpty){cout<< "文件不存在" << endl;}else{cout << "请输入需删除职工编号" << endl;int id = 0;cin >> id;int index = this->IsExist(id);if (index != -1){for (int i = index; i < this->EmpNum - 1; i++){//数据前移this->EmpArray[i] = this->EmpArray[i + 1];}this->EmpNum--; //人数--this->save(); //数据同步更新到文件中cout << "删除成功" << endl;}else{cout << "未找到该职工" << endl;}system("pause");system("cls");}
}

修改职员信息


1.是否存在

2.删除该职工

3.重写职工信息

void workerManager::Mod_Emp()
{int id;cin >> id;int ret = this->IsExist(id);if (ret != -1){delete this->EmpArray[ret];int newId = 0;  string newName = "";int dSelect = 0;  //岗位cin >> newId;cin >> newName;cin >> dSelect;//多态创建人员,初始化空指针worker* wok = NULL;switch (dSelect){case 1://给指针分配空间wok = new Employee(newId, newName, dSelect);break;case 2:wok = new manager(newId, newName, dSelect);break;case 3:wok = new Boss(newId, newName, dSelect);break;default:break;}//写入数组this->EmpArray[ret] = wok;}else { cout << "未找到需修改职工" << endl; }
}

 选择排序

 

清空

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

山东潍坊戴尔存储服务器维修 md3800f raid恢复

山东戴尔存储故障维修 存储型号&#xff1a;DELL PowerVault md3800f 故障问题&#xff1a;存储除尘后通电开机&#xff0c;发现有物理硬盘没有插到位&#xff0c;用户带电拔插了多块物理盘&#xff0c;导致关连的磁盘阵列掉线&#xff0c;卷失败&#xff1b; 处理方式&#xf…

RK3588/RK3588s运行yolov8达到27ms

前言 Hello&#xff0c;小伙伴们~~我最近做了一个比较有意思的东西&#xff0c;想起来也好久没有写博客了&#xff0c;就记录一下吧。希望和大家一起学习&#xff0c;一起进步&#xff01; 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决&#xff1a; 响应乱码问题 向客户端响应数据&#xff1a; package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

对 Python 中 GIL 的理解

一.Python 中的 GIL Python 中的全局解释器锁&#xff08;Global Interpreter Lock&#xff0c;GIL&#xff09;是 CPython 解释器的一个机制&#xff0c;用来确保在多线程环境下&#xff0c;只有一个线程可以执行 Python 字节码&#xff0c;任何时刻只能有一个线程在执行 Pyt…

低代码可视化工具-uniapp页面跳转传参-代码生成器

uniapp页面跳转传参 在uni-app中&#xff0c;页面间的跳转和传参是一个常见的需求。uni-app提供了多种页面跳转方式&#xff0c;如uni.navigateTo、uni.redirectTo、uni.reLaunch、uni.switchTab、uni.navigateBack等&#xff0c;每种方式适用于不同的场景。以 页面跳转并传参…

win7自带壁纸丢失主题丢失

有时候盗版破解或者其他美化工具会导致win7自带的壁纸丢失&#xff0c;从个性化管理里面无法恢复原始的壁纸&#xff08;如下图&#xff09;&#xff0c;但是由于工作原因公司的电脑又不方便设置第三方的壁纸&#xff0c;所以找了一下解决方案。 经典问题&#xff0c;百度找到的…

软考中级软设背诵内容

冯诺依曼结构、哈佛结构 冯诺依曼结构: 程序指令和数据都采用二进制表示 程序指令和数据在同一个存储器中混合 程序的功能都由中央处理器&#xff08;CPU&#xff09;执行指令来实现 程序的执行工作由指令进行自动控制 SRAM、DRAM 与DRAM相比&#xff0c;SRAM集成率低、功…

详细剖析RocketMQ消息消费原理

本文参考转载至《RocketMQ技术内幕 第2版》 一. 消息消费概述 消息消费以组的模式开展&#xff0c;一个消费组可以包含多个消费者&#xff0c;每个消费组可以订阅多个主题&#xff0c;消费组之间有集群模式和广播模式两种消费模式。集群模式是当前主题下的同一条消息只允许被其…

hutool 解压缩读取源文件和压缩文件大小失败导致报错

前言 最近处理老项目中的问题&#xff0c;升级安全jar&#xff0c;发现hutool的jar在解压缩的时候报错了&#xff0c;实际上是很简单的防御zip炸弹攻击的手段&#xff0c;但是却因为hutool的工具包取文件大小有bug&#xff0c;造成了解压缩不能用&#xff0c;报错&#xff1a;…

2024年华为杯数学建模研赛(F题) 建模解析| 卫星轨道 | 小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

代码随想录Day 51|题目:99.岛屿数量、100.岛屿的最大面积

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 题目一&#xff1a;99. 岛屿数量思路深度优先搜索DFS广度优先搜索BFS 题目二&#xff1a;100. 岛屿的最大面积DFSBFS 总结 题目一&#xff1a;99. 岛屿数量 99. 岛屿数量 (kamacoder.com) 思路 …

Java高级Day48-JDBC-API和JDBC-Utils

127.JDBC API 128.JDBC-Utils public class JDBCUtils {//这是一个工具类&#xff0c;完成mysql的连接和关闭资源//顶柜相关的属性&#xff08;4个&#xff09;&#xff0c;因为只需要一份&#xff0c;因此做成staticprivate static String user;//用户名private static Stri…

Vision Transformer (ViT)、Swin Transformer 和 Focal Transformer

1. Vision Transformer (ViT) Vision Transformer详解-CSDN博客https://blog.csdn.net/qq_37541097/article/details/118242600?ops_request_misc%257B%2522request%255Fid%2522%253A%2522F8BBAFBF-A4A1-4D38-9C0F-9A43B56AF6DB%2522%252C%2522scm%2522%253A%252220140713.13…

如何把python(.py或.ipynb)文件打包成可运行的.exe文件?

将 Python 程序打包成可执行的 .exe 文件&#xff0c;通常使用工具如 PyInstaller。这是一个常用的 Python 打包工具&#xff0c;可以将 Python 程序打包成独立的可执行文件&#xff0c;即使没有安装 Python 也能运行。 步骤&#xff1a; 1. 安装 PyInstaller 使用 conda 安…

如何在Linux Centos7系统中挂载群晖共享文件夹

前景&#xff1a;企业信息化各种系统需要上传很多的图片或者是文件&#xff0c;文件如何在群晖中显示&#xff0c;当文件或者图片上传到linux指定文件夹内&#xff0c;而文件夹又与群晖共享文件夹进行挂载&#xff0c;就能保证上传的文件或者图片出现在群晖并在群晖里进行管理。…

Java之继承1

1. 继承 1.1 为什么要继承 在Java中我们定义猫类和狗类&#xff0c;如下 public class Cat {public String name;public int age;public String color;public void eat(){System.out.println(name "正在吃饭");}public void sleep(){System.out.println(name &qu…

网页聊天——测试报告——Selenium自动化测试

一&#xff0c;项目概括 1.1 项目名称 网页聊天 1.2 测试时间 2024.9 1.3 编写目的 对编写的网页聊天项目进行软件测试活动&#xff0c;揭示潜在问题&#xff0c;总结测试经验 二&#xff0c;测试计划 2.1 测试环境与配置 服务器&#xff1a;云服务器 ubuntu_22 PC机&am…

国庆电影扎堆来袭,AI智能体帮你推荐必看佳片!(附制作教程)

大家好&#xff0c;我是凡人。 今天看到新闻&#xff0c;发现国庆有10部影片要扎堆儿上映&#xff0c;对于选择困难症的我属实有点难选&#xff0c;同时也想避开一些坑省的浪费金钱和时间。 本着不知道就问AI的习惯&#xff0c;想问问大模型怎么看&#xff0c;但做了简单的交…

Go语言基础学习02-命令源码文件;库源码文件;类型推断;变量重声明

命令源码文件 GOPATH指向的一个或者多个工作区&#xff0c;每个工作区都会有以代码包为基本组织形式的源码文件。 Go语言中源码文件可以分为三类&#xff1a;命令源码文件、库源码文件、测试源码文件。 命令源码文件&#xff1a; 命令源码文件是程序的运行入口&#xff0c;是每…

descrTable常用方法

descrTable 为 R 包 compareGroups 的重要函数&#xff0c;有关该函数以及 compareGroups 包的详细内容见&#xff1a;R包compareGroups详细用法 加载包和数据 library(compareGroups)# 加载 REGICOR 数据&#xff08;横断面&#xff0c;从不同年份纳入&#xff0c;每个变量有…