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

news2024/9/22 1:46:20

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

抽象基类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,初始化为NULL
			worker* 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++)
		{
			//多态调用接口,数组成员均为worker
			this->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.coloradmin.cn/o/2153846.html

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

相关文章

source insight学习笔记

目录 目的 基础配置 1、护眼的保护色 2、行号显示 基础操作 目的 记录一下使用source insight中遇到的问题。比如常见好用的基础配置&#xff0c;常用的基础操作等。主要是为了自己以后忘记了好找。自己写的东西总归看起来更舒服。 PS&#xff1a;目前是第一个版本&#…

Linux相关概念和重要知识点(5)(权限的修改、时间属性)

1.权限的修改 &#xff08;1&#xff09;提权行为 普通用户是会受到权限的限制&#xff0c;但root账户无视一切权限限制&#xff0c;因此当我们要获取更高的权限&#xff0c;有一种办法就是将自己变成root或者短暂拥有和root一样的权力。 普通用户 -> root &#xff1a;s…

NoSql数据库Redis知识点

数据库的分类 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 &#xff0c;全称为 Not Only SQL &a…

网络丢包定位记录(二)

网卡驱动丢包 查看&#xff1a;ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量&#xff0c;还包括too-long-frames错误&#xff0c;Ring Buffer 溢出错误&#xff0c;crc 校验错误&#xff0c;帧同步错误&#xff0c;fifo overruns 以及 missed pkg 等等。 …

K8S介绍+集群部署

Kubernetes介绍 官网&#xff1a;https://kubernetes.io/ 一、应用部署方式演变 1、传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其他技术的参与 缺点&#xff1a;不能为应用程序定义资源使用边界&a…

WAN广域网技术--PPP和PPPoE

广域网基础概述 广域网&#xff08;Wide Area Network&#xff0c;WAN&#xff09;是一种覆盖广泛地区的计算机网络&#xff0c;它连接不同地理位置的计算机、服务器和设备。广域网通常用于连接不同城市、州或国家之间的网络&#xff0c;它通过互联网服务提供商&#xff08;ISP…

九芯电子革新健康检测!语音播报血压计ic芯片解决方案

血压计&#xff0c;可测量血压并将读数显示在屏幕上。为了提高老年人和视障人士的可用性&#xff0c;现代电子语音血压计已经开发出来&#xff0c;可提供当前血压读数的听觉反馈。这是通过集成语音芯片来实现的&#xff0c;该芯片将测量结果发声给用户。 &#xff08;一&#x…

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterrise JavaBeans&#xff09;的全面支持&#xff0c;java servlet AI&#xff0c;JS&#xff08;java server ages&#xff09…

《使用 LangChain 进行大模型应用开发》学习笔记(四)

前言 本文是 Harrison Chase &#xff08;LangChain 创建者&#xff09;和吴恩达&#xff08;Andrew Ng&#xff09;的视频课程《LangChain for LLM Application Development》&#xff08;使用 LangChain 进行大模型应用开发&#xff09;的学习笔记。由于原课程为全英文视频课…

银河麒麟桌面操作系统V10(SP1)离线升级SSH(OpenSSH)服务

目录 前言 准备工作 准备与目标服务器相同版本的操作系统 准备编译依赖包 下载OpenSSL源码包 下载OpenSSH源码包 升级OpenSSH服务 查看当前版本信息 安装编译依赖包 安装OpenSSL 安装OpenSSH 前言 OpenSSH是一个广泛使用的开源SSH(安全壳)协议的实现,它提供了安…

01-ZYNQ linux开发环境安装,基于Petalinux2023.2和Vitis2023.2

TFTP 服务器配置 安装安装 tftp-hpa 和 tftpd-hpa &#xff1b;tftp-hpa 客户端&#xff0c;tftpd-hpa 为服务端 #安装 tftp-hpa 和 tftpd-hpa sudo apt-get install tftp-hpa tftpd-hpa配置服务器 #创建路径 mkdir -p ~/workspace/tftp-boot chmod 777 ~/workspace/tftp-b…

开放式耳机什么品牌好?2024年开放式蓝牙耳机排行榜推荐

​开放式耳机绝对是个不错的选择&#xff0c;它们长时间佩戴耳朵也不会感到疲劳&#xff0c;对耳朵的健康也很友好。虽然过去存在一些漏音的问题&#xff0c;但与它们带来的便利相比&#xff0c;这点儿小瑕疵几乎可以忽略不计。漏音可能会对他人造成干扰&#xff0c;也可能影响…

vue3(整合版)

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端&#xff0c;配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 输入如下命令创建第一个Vue项目 3.下载依赖&#xff0c;启动项目 访问5173端口 …

年度巨献 | OpenCSG开源最大中文合成数据集Chinese Cosmopedia

01 背景 近年来&#xff0c;生成式语言模型&#xff08;GLM&#xff09;的飞速发展正在重塑人工智能领域&#xff0c;尤其是在自然语言处理、内容创作和智能客服等领域展现出巨大潜力。然而&#xff0c;大多数领先的语言模型主要依赖于英文数据集进行训练&#xff0c;中文数据…

python:给1个整数,你怎么判断是否等于2的幂次方?

最近在csdn上刷到一个比较简单的题目&#xff0c;题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方&#xff0c;题目如下&#xff1a; 题目的答案如下&#xff1a; def isPowerofTwo(n):z bin(n)[2:]print(bin(n))if z[0] ! 1:return Falsefor i in z[1:]:if i !…

NXP官方或正点原子mfgtool下载系统报错initialize the library falied error code:29

这是因为mfgtool版本或者源文件被破坏了&#xff0c;你可以重新下载一个被改过的mfgtool程序&#xff0c;我就是去原子官网重新在linux包里找了新的更迭过的mfgtool

VMware虚拟机因磁盘空间不足黑屏无法登录

在虚拟机里存储了一些文件之后&#xff0c;再打开发现进不去了&#xff0c;只有光标一直在左上角&#xff0c;登录的框都是黑的&#xff0c;具体如下&#xff1a; 明明知道登录框的存在却怎么也触碰不到它T_T &#xff0c;先说解决方法&#xff1a; 产生这个问题的原因是因为磁…

yolov5/8/9模型在COCO分割数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 1.COCO数据集介绍 COCO数据集&#xff0c;全称为Microsoft Common Objects in Context&#xff0c;是微软于2014年出资标注的…

多态与绑定例题

答案&#xff1a; B D C 知识点&#xff1a; 多态是相同方法不同的表现&#xff0c;分为重写和重载 重写体现在父类与子类不同表现&#xff0c;主要表现为子类重现父类的方法 重载体现在同一个类中的不同表现 绑定分为动态绑定和静态绑定 动态绑定是在运行时 静态绑定是…

动态规划算法:09.路径问题_最小路径和_C++

目录 题目链接&#xff1a;LCR 099. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 一、题目解析 题目&#xff1a; 解析&#xff1a; 二、算法原理 1、状态表示 2、状态转移方程 3、初始化 dp表初始化: 特殊位置初始化&#xff1a; 4、填表顺序 5、返回值 …