C++ 核心编程篇综合练习:职工管理系统

目录

1、管理系统需求

2、创建项目

2.1 创建新项目

2.2 添加文件 

3、创建管理类

3.1 创建文件

3.2 头文件实现

3.3 源文件实现

4、菜单功能

4.1 添加成员函数

4.2  菜单功能实现

4.3 测试菜单功能

5、退出功能

5.1 提供功能接口

5.2 实现退出功能

5.3 测试功能

 6、创建职工类

6.1 创建职工抽象类

6.2 创建普通员工类

6.3 创建经理类

6.4 创建老板类

7、添加职工

7.1 功能分析

7.2 功能实现

7.3 测试结果

​编辑 8、文件交互——写文件

8.1 设定文件路径

8.2 成员函数声明

8.3 保存文件功能实现

9、文件交互——读文件

9.1 文件未创建

9.2 文件存在,数据为空

9.3 文件存在,记录数据

 10、显示职工

10.1 显示职工函数声明

10.2  显示职工函数实现

11、删除职工

11.1 删除职工函数声明

11.2 职工是否存在声明

11.3 职工是否存在函数实现

12 修改职工

12.1 修改职工函数声明

12.2 职工修改函数实现

13、查找职工

13.1 查找职工函数声明

13.2 查找职工函数实现

14、排序

14.1 排序函数声明

14.2 排序函数实现

15、清空文件

15.1 清空函数声明

15.2 清空函数实现


1、管理系统需求

职工管理系统可以用来管理公司内所有员工的信息

本练习主要利用C++来实现一个基于多态的职工管理系统

公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号,职工姓名,职工岗位,以及职责

普通员工职责:完成经理交给的任务

经理职责:完成老板交给的任务,并下发任务给员工

老板职责:管理公司所有事物

管理系统中需要实现的功能如下:

1. 退出管理程序:退出当前管理系统

2. 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号

3. 显示职工信息:显示公司内部所有职工的信息

4. 删除离职员工:按照编号删除指定的职工

5. 修改职工信息:按照编号修改职工个人信息

6. 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息

7. 按照编号排序:按照职工编号,进行排序,按照规则由用户指定

8. 清空所有文档:清空文件中记录的所有职工信息(清空前需要再次确认,防止误删)

2、创建项目

1. 创建新项目

2. 添加文件

2.1 创建新项目

(1)打开VS2022

(2)点击——创建新项目——Visual C++——空项目——输入项目名称——选择项目路径——确定保存

2.2 添加文件 

点击源文件——创建职工管理系统.cpp文件

3、创建管理类

管理类负责的内容如下:

1. 与用户的沟通菜单界面

2. 对职工增删改查的操作

3.与文件的读写交互

3.1 创建文件

在头文件和源文件的文件夹下分别创建workerManager.h和workerManager.cpp文件

3.2 头文件实现

在workerManager.h中设计管理类

#pragma once
#include<iostream>
using namespace std;

class WorkerManager
{
public:
	// 构造函数
	WorkerManager();

	// 析构函数
	~WorkerManager();
};

3.3 源文件实现

在WorkerMaager.cpp中将构造和析构函数空实现补全

#include "workerManager.h"

WorkerManager::WorkerManager()
{
	
}

WorkerManager::~WorkerManager()
{

}

4、菜单功能

功能描述:与用户的沟通界面

4.1 添加成员函数

在管理类workerManager.h中添加成员函数 void Show_Menu();

#pragma once
#include<iostream>
using namespace std;

class WorkerManager
{
public:
	// 构造函数
	WorkerManager();

	// 展示菜单
	void Show_Menu();

	// 析构函数
	~WorkerManager();
};

4.2  菜单功能实现

在管理类workerManager.cpp中实现 Show_Menu()函数

// 展示菜单
void WorkerManager::Show_Menu()
{
	cout << "***************************************" << endl;
	cout << "*******  欢迎使用职工管理系统! *******" << endl;
	cout << "**********  0.退出管理程序  ***********" << endl;
	cout << "**********  1.增加职工信息  ***********" << endl;
	cout << "**********  2.显示职工信息  ***********" << endl;
	cout << "**********  3.删除离职员工  ***********" << endl;
	cout << "**********  4.修改职工信息  ***********" << endl;
	cout << "**********  5.查找职工信息  ***********" << endl;
	cout << "**********  6.按照编号排序  ***********" << endl;
	cout << "**********  7.清空所有文档  ***********" << endl;
	cout << "***************************************" << endl;
	cout << endl;
}

4.3 测试菜单功能

在职工管理系统.cpp中测试菜单功能

#include<iostream>
using namespace std;
#include "workerManager.h"

int main()
{
	// 实例化管理者对象
	WorkerManager wm;
	
	// 调用展示菜单成员函数
	wm.Show_Menu();
	
	system("pause"); 

	return 0;
}

测试成功示例图:

5、退出功能

5.1 提供功能接口

在man函数中提供分支选择,提供每个功能接口

#include<iostream>
using namespace std;
#include "workerManager.h"

int main()
{
	// 实例化管理者对象
	WorkerManager wm;
	
	int choice = 0; // 用来存储用户的选项
	while (true)
	{
		// 调用展示菜单成员函数
		wm.Show_Menu();

		cout << "请输入您的选择:" << endl;
		cin >> choice; // 接受用户的选项

		switch (choice)
		{
		case 0:   // 退出系统
			wm.ExitSystem();
			break;
		case 1:   // 增加职工
			break;
		case 2:   // 显示职工
			break;
		case 3:   // 删除职工
			break;
		case 4:   // 修改职工
			break;
		case 5:   // 查找职工
			break;
		case 6:   // 排序职工
			break;
		case 7:   // 清空文档
			break;  
		default:
			system("cls");  // 清屏
			break;
		}
	}
	

	
	system("pause"); 

	return 0;
}

5.2 实现退出功能

在workerManager.h中提供退出系统的成员函数 void exitSystem();

在workerManager.cpp中提供具体的功能实现

void WorkerManager::ExitSystem()
{
	cout << "欢迎下次使用" << endl;
	system("pause");
	exit(0); // 退出程序
}

5.3 测试功能

在main函数分支0选项中,调用退出程序的接口

 6、创建职工类

6.1 创建职工抽象类

职工的分类:普通员工、经理、老板

将三种职工抽象到一个类(worker)中,利用多态管理不同职工种类

职工的属性为:职工编号、职工姓名、职工所在部门编号

职工的行为为:岗位职责信息描述、获取岗位名称

头文件文件夹下 创建文件worker.h文件并添加如下代码:

#pragma once
#include<iostream>
using namespace std;
#include<string>

// 职工抽象类
class Worker
{
public:
	// 显示个人信息
	virtual void showInfo() = 0;
	// 获取岗位名称
	virtual string getDeptName() = 0;
	// 职工编号
	int m_Id;
	// 职工姓名
	string m_Name;
	// 部门编号
	int m_DeptId;

};

6.2 创建普通员工类

普通员工类继承职工抽象类,并重写父类中纯虚函数

在头文件和源文件的文件夹下分别创建employee.h和employee.cpp文件 

employee.h中代码如下:

#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

class Employee :public Worker
{
public:

	// 构造函数
	Employee(int id,string name,int dId);

	// 显示个人信息
	virtual void showInfo();
	// 获取岗位名称
	virtual string getDeptName();
	// 职工编号
	int m_Id;
	// 职工姓名
	string m_Name;
	// 部门编号
	int m_DeptId;
};

employee.cpp中代码如下:

#include "employee.h"

// 构造函数
Employee::Employee(int id, string name, int dId)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = dId;
}

// 显示个人信息
void Employee::showInfo()
{
	cout << "职工编号:" << this->m_Id
		<< "\t职工姓名:" << this->m_Name
		<< "\t岗位:" << this->getDeptName()
		<< "\t岗位职责:完成经理交给的任务" << endl;
}

// 获取岗位名称
string Employee::getDeptName()
{
	return string("员工");
}

6.3 创建经理类

经理类继承职工抽象类,并重写父类中纯虚函数,和普通员工类似

在头文件和源文件的文件夹下分别创建manager.h和manager.cpp文件

manager.h中代码如下:

#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

// 经理类
class Manager:public Worker
{
public:

	// 构造函数
	Manager(int id, string name, int dId);

	// 显示个人信息
	virtual void showInfo();

	// 获取岗位名称
	virtual string getDeptName();

};

manager.cpp中代码如下:

#include "manager.h"

// 构造函数
Manager::Manager(int id, string name, int dId)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = dId;
}

// 显示个人信息
void Manager::showInfo()
{
	cout << "职工编号:" << this->m_Id
		<< "\t职工姓名:" << this->m_Name
		<< "\t岗位:" << this->getDeptName()
		<< "\t岗位职责:完成老板交给的任务,并下发任务给员工" << endl;
}

// 获取岗位名称                                                                                                                                                                                                                       
string Manager::getDeptName()
{
	return string("经理");
}

6.4 创建老板类

老板类继承职工抽象类,并重写父类中纯虚函数

在头文件和源文件的文件夹下分别创建boss.h和boss.cpp文件

boss.h中代码如下:

#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

// 老板类
class Boss :public Worker
{
public:

	// 构造函数
	Boss(int id, string name, int dId);

	// 显示个人信息
	virtual void showInfo();
	// 获取岗位名称
	virtual string getDeptName();
	// 职工编号
	int m_Id;
	// 职工姓名
	string m_Name;
	// 部门编号
	int m_DeptId;
};

boss.cpp中代码如下:

#include "Boss.h"

// 构造函数
Boss::Boss(int id, string name, int dId)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = dId;
}

// 显示个人信息
void Boss::showInfo()
{
	cout << "职工编号:" << this->m_Id
		<< "\t职工姓名:" << this->m_Name
		<< "\t岗位:" << this->getDeptName()
		<< "\t岗位职责:管理公司所有事务" << endl;
}

// 获取岗位名称                                                                                                                                                                                                                       
string Boss::getDeptName()
{
	return string("总裁");
}

测试结果如下:

7、添加职工

功能描述:批量添加员工,并且保存到文件中

7.1 功能分析

分析:

用户在批量创建时,可能会创建不同种类的职工

如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组

如果想在纯虚中维护这个不定长度的数组,可以将数组创建到堆区,并利用Worker**的指针维护

7.2 功能实现

在workerManager.h添加void Add_Emp()函数

#pragma once  // 防止头文件重复包含
#include<iostream>  // 包含输入输出流文件
using namespace std; // 使用标准命名空间
#include"worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"

class WorkerManager
{
public:
	// 构造函数
	WorkerManager();

	// 展示菜单
	void Show_Menu();

	// 退出系统
	void ExitSystem();

	// 记录职工人数
	int m_EmpNum;

	// 职工数组指针
	Worker** m_EmpArray;

	// 添加职工
	void Add_Emp();

	// 析构函数
	~WorkerManager();
};

在workerManager.cpp中实现该函数

// 添加职工
void WorkerManager::Add_Emp()
{
	cout << "请输入添加职工数量:" << endl;

	int addNum = 0; // 保存用户的输入数量
	cin >> addNum;

	if (addNum > 0)
	{
		// 添加
		// 计算添加新空间大小
		int newSize = this->m_EmpNum + addNum; // 新空间人数 = 原来记录人数 +新增人数

		// 开辟新空间
		Worker** newSpace = new Worker * [newSize];

		// 将原来空间下数据,拷贝到新空间
		if (this->m_EmpArray != NULL)
		{
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				newSpace[i] = this->m_EmpArray[i];
			}
		}

		// 批量添加新数据
		for (int i = 0; i < addNum; i++)
		{
			int id; // 职工编号
			string name; // 职工姓名
			int dSelect; //部门选择

			cout << "请输入第 " << i + 1 << " 个新职工编号:" << endl;
			cin >> id;

			cout << "请输入第 " << i + 1 << " 个新职工姓名:" << endl;
			cin >> name;

			cout << "请选择该职工岗位:" << endl;
			cout << "1、普通员工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;
			cin >> dSelect;

			Worker* worker = NULL;
			switch (dSelect)
			{
			case 1:
				worker = new Employee(id, name, 1);
				break;
			case 2:
				worker = new Manager(id, name, 2);
				break;
			case 3:
				worker = new Boss(id, name, 3);
				break;

			default:
				break;
			}
			// 将创建职工职责,保存到数组中
			newSpace[this->m_EmpNum + i] = worker;

		}

		// 释放原有空间
		delete[]this->m_EmpArray;

		// 更改新空间的指向
		this->m_EmpArray = newSpace;

		// 更新新的职工人数
		this->m_EmpNum = newSize;

		// 成功添加后 保存到文件中


		// 提示添加成功
		cout << "成功添加" << addNum << "名新职工" << endl;


	}
	else
	{
		cout << "输入数据有误" << endl;
	}

	//按任意键后 清屏 回到上级目录
	system("pause");
	system("cls");
}

7.3 测试结果

 8、文件交互——写文件

功能描述:对文件进行读写

在上一个添加功能中,我们只是将所有数据添加到内存中,一旦程序结束就无法保存了

因此文件管理类需要一个与文件进行交互的功能,对于文件进行读写操作

8.1 设定文件路径

首先我们将文件路径,在workerManager.h中添加宏常量,并且包含头文件fstream

#include<fstream>
#define FILENAME "empFile.txt"

8.2 成员函数声明

在workerManager.h中类里添加成员函数void save()

	// 保存文件
	void save();

8.3 保存文件功能实现

// 保存文件
void WorkerManager::save()
{
	ofstream ofs;
	ofs.open(FILENAME, ios::out); // 用输出的方式来打开文件 —— 写文件

	// 将每个人的数据写到文件中
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		ofs << this->m_EmpArray[i]->m_Id << " "
			<< this->m_EmpArray[i]->m_Name << " "
			<< this->m_EmpArray[i]->m_DeptId << endl;
	}

	// 关闭文件
	ofs.close();
}

9、文件交互——读文件

功能描述:将文件中的内容读取到程序中

虽然我们实现了添加职工后保存到文件的操作,但是每次开始运行程序,并没有将文件中数据读取到程序中,而我们的程序功能还有清空文件的需求,因此构造函数初始化数据的情况分为三种

1. 第一次使用,文件未创建

2. 文件存在,但是数据被用户清空

3. 文件存在,并且保存职工的所有数据

9.1 文件未创建

	// 1、文件不存在
	ifstream ifs;
	ifs.open(FILENAME, ios::in); // 读文件

	if (!ifs.is_open())
	{
		cout << "文件不存在" << endl;
		// 初始化属性
		// 初始化记录人数
		this->m_EmpNum = 0;
		// 初始化数组指针
		this->m_EmpArray = NULL;
		// 初始化文件是否为空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

9.2 文件存在,数据为空

//2、文件存在,但数据为空
	char ch;
	ifs >> ch;
	if (ifs.eof())
	{
		//文件为空
		cout << "文件为空" << endl;
		// 初始化记录人数
		this->m_EmpNum = 0;
		// 初始化数组指针
		this->m_EmpArray = NULL;
		// 初始化文件是否为空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

9.3 文件存在,记录数据

	// 3、文件存在,并且记录数据
	int num = this->get_EmpNum();
	cout << "职工人数为:" << num << endl;
	this->m_EmpNum = num;
	
	// 开辟空间
	this->m_EmpArray = new Worker * [this->m_EmpNum];
	// 将文件中的数据,存到数组中
	this->init_Emp();

	for (int i = 0; i < this->m_EmpNum; i++)
	{
		cout << "职工编号:" << this->m_EmpArray[i]->m_Id
			<< "姓名:" << this->m_EmpArray[i]->m_Name
			<< "部门编号:" << this->m_EmpArray[i]->m_DeptId << endl;
	}

 10、显示职工

功能描述:显示当前所有职工信息

10.1 显示职工函数声明

头文件中workerManager.h文件并添加如下代码:

	// 显示职工
	void Show_Emp();

10.2  显示职工函数实现

在workerManager.cpp中实现成员函数void Show_Emp();

// 显示职工
void WorkerManager::Show_Emp()
{
	// 判断文件是否为空
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
	}
	else
	{
		for (int i = 0; i < m_EmpNum; i++)
		{
			// 利用多态调用程序接口
			this->m_EmpArray[i]->showInfo(); 
		}
	}
	// 按任意键清屏
	system("pause");
	system("cls");
}

11、删除职工

功能描述:按照职工编号进行删除职工操作

11.1 删除职工函数声明

在workerManager.h中添加成员函数 void Del_Emp();

	// 删除职工
	void Del_Emp();

11.2 职工是否存在声明

	// 判断职工是否存在 如果存在返回职工所在数组位置,不存在返回-1
	int IsExist(int id);

11.3 职工是否存在函数实现

// 判断职工是否存在 如果存在返回职工所在数组位置,不存在返回-1
int WorkerManager::IsExist(int id)
{
	int index = -1;

	for (int i = 0; i < this->m_EmpNum; i++)
	{
		if (this->m_EmpArray[i]->m_Id == id)
		{
			// 找到职工
			index = i;

			break;
		}
	}
	return index;
}

11.4 删除职工函数实现

// 删除职工
void WorkerManager::Del_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空" << endl;
	}
	else
	{
		// 按照职工编号清除
		cout << "请输入想要删除职工编号:" << endl;
		int id = 0;
		cin >> id;

		int index = this->IsExist(id);

		if (index != -1) //说明职工存在,并且要删除掉index位置上的职工
		{
			// 数据前移
			for (int i = index; i < this->m_EmpNum - 1; i++)
			{
				// 数据前移
				this->m_EmpArray[i] = this->m_EmpArray[i + 1];
			}
			this->m_EmpNum--; // 更新数组中记录人员个数
			// 数据同步更新到文件中
			this->save();

			cout << "删除成功!" << endl;
		}
		else
		{
			cout << "删除失败,未找到职工" << endl;
		}
	}
	// 按任意键 清屏
	system("pause");
	system("clc");
}

12 修改职工

功能描述:能够按照职工的编号对职工信息进行修改并保存

12.1 修改职工函数声明

    // 修改职工
	void Mod_Emp();

12.2 职工修改函数实现

// 修改职工
void WorkerManager::Mod_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空" << endl;
	}
	else
	{
		cout << "请输入修改职工的编号:" << endl;
		int id;
		cin >> id;

		int ret = this->IsExist(id);
		if (ret != -1)
		{
			// 查找到编号的职工
			delete this->m_EmpArray[ret];

			int newId = 0;
			string newName = "";
			int dSelect = 0;

			cout << "查到:" << id << "号职工,请输入新职工号:" << endl;
			cin >> newId;

			cout << "请输入新姓名:" << endl;
			cin >> newName;

			cout << "请输入新的岗位:" << endl;
			cout << "1、普通职工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;

			cin >> dSelect;
			Worker* worker = NULL;
			switch (dSelect)
			{
			case 1:
				worker = new Employee(newId, newName, dSelect);
				break;
			case 2:
				worker = new Manager(newId, newName, dSelect);
				break;
			case 3:
				worker = new Boss(newId, newName, dSelect);
				break;
			default:
				break;
			}

			// 更新数据 到数组中
			this->m_EmpArray[ret] = worker;

			cout << "修改成功!" << endl;

			// 保存到文件中
			this->save();

		}
		else
		{
			cout << "修改失败,查无此人!" << endl;
		}
	}
	// 按任意键清屏
	system("pause");
	system("cls");
}

13、查找职工

13.1 查找职工函数声明

	// 查找职工
	void Find_Emp();

13.2 查找职工函数实现

// 查找职工
void WorkerManager::Find_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
	}
	else
	{
		cout << "请输入查找的方式" << endl;
		cout << "1、按职工编号查找" << endl;
		cout << "2、按职工姓名查找" << endl;

		int select = 0;
		cin >> select;

		if (select == 1)
		{
			// 按编号查
			int id;
			cout << "请输入查找的职工编号:" << endl;
			cin >> id;

			int ret = IsExist(id);
			if (ret != -1)
			{
				// 找到职工
				cout << "查找成功!该职工信息如下:" << endl;
				this->m_EmpArray[ret]->showInfo();
			}
			else
			{
				cout << "查找失败,查无此人" << endl;
			}
		}
		else if (select == 2)
		{
			// 按照姓名查
			string name;
			cout << "请输入查找的姓名:" << endl;
			cin >> name;
			
			// 加入判断是否查找的标志
			bool flag = false; // 默认未找到职工

			for (int i = 0; i < m_EmpNum; i++)
			{
				if (this->m_EmpArray[i]->m_Name == name)
				{
					cout << "查找成功,职工编号为:"
						<< this->m_EmpArray[i]->m_Id
						<< "号职工信息如下:" << endl;

					flag = true;

					// 调用显示信息接口
					this->m_EmpArray[i]->showInfo();
				}
			}
			if (flag == false)
			{
				cout << "查找失败,查无此人!" << endl;
			}
		}

		else
		{
			cout << "输入选项有误!" << endl;
		}
	}

	// 按任意键清屏
	system("pause");
	system("cls");
}

14、排序

功能描述:按照职工编号进行排序,排序的顺序由用户指定

14.1 排序函数声明

	// 按照编号排序
	void Sort_Emp();

14.2 排序函数实现

// 按照编号排序
void WorkerManager::Sort_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "请选择排序方式:" << endl;
		cout << "1、按照职工号进行升序" << endl;
		cout << "2、按照职工号进行降序" << endl;
		
		int select = 0;
		cin >> select;
		for (int i = 0; i < m_EmpNum; i++)
		{
			int minOrMax = i; // 声明最小值 或 最大值下标
			for (int j = i + 1; j < this->m_EmpNum; j++)
			{
				if (select == 1) //升序
				{
					if (this->m_EmpArray[minOrMax]->m_Id > this->m_EmpArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}
				else  // 降序
				{
					if (this->m_EmpArray[minOrMax]->m_Id < this->m_EmpArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}
			}
			
			// 判断一开始认定 最小值或最大值 是不是 计算的最小值或最大值,如果不是,交换数据
			if (i != minOrMax)
			{
				Worker* temp = this->m_EmpArray[i];
				this->m_EmpArray[i] = this->m_EmpArray[minOrMax];
				this->m_EmpArray[minOrMax] = temp;
			}

		}
		
		cout << "排序成功!排序后的结果为:" << endl;
		this->save();  // 排序后的结果保存到文件中
		this->Show_Emp(); // 展示所有职工
	}
}

15、清空文件

功能描述:将文件中记录数据清空

15.1 清空函数声明

	// 清空函数实现
	void Clean_File();

15.2 清空函数实现

// 清空函数实现
void WorkerManager::Clean_File()
{
	cout << "确定清空?" << endl;
	cout << "1、确定" << endl;
	cout << "2、返回" << endl;

	int select = 0;
	cin >> select;

	if (select == 1)
	{
		// 清空文件
		ofstream ofs(FILENAME, ios::trunc); //删除文件后重新创建
		ofs.close();

		if (this->m_EmpArray != NULL)
		{
			// 删除堆区的每个职工对象
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				delete this->m_EmpArray[i];
				this->m_EmpArray[i] = NULL;
			}
			// 删除堆区数组指针
			delete[] this->m_EmpArray;
			this->m_EmpArray = NULL;
			this->m_EmpNum = 0;
			this->m_FileIsEmpty = true;
		}
		cout << "清空成功!" << endl;
	}
	system("pause");
	system("cls");
}

WorkerManager::~WorkerManager()
{
	if (this->m_EmpArray != NULL)
	{
		for (int i = 0; i < this->m_EmpNum; i++)
		{
			if (this->m_EmpArray[i] != NULL)
			{
				delete this->m_EmpArray[i];
			}
		}
		delete[]this->m_EmpArray;
		this->m_EmpArray = NULL;
	}
}

总结:职工管理系统案例代码打包

C++核心编程篇-职工管理系统案例打包资源-CSDN文库

  • 76
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万喵字节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值