栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 47.基于多态的职工管理系统(3)——添加职工(功能描述、功能分析、功能实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 47.基于多态的职工管理系统(3)——添加职工(功能描述、功能分析、功能实现)

功能描述:

批量添加职工,并且保存到文件中

功能分析:

1. 用户在批量创建时,可能会创建不同种类的职工
2. 如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组里
3. 如果想在程序中维护这个不定长度的数组,可以将数组创建到堆区,并利用Worker**的指针维护

功能实现:

1. 在WorkerManager.h头文件中添加成员属性

//记录文件中的人数个数
int m_EmpNum;
//员工数组的指针
Worker ** m_EmpArray;

2. 在WorkerManager构造函数中初始化属性

WorkerManager::WorkerManager()
{
    //初始化人数
    this->m_EmpNum = 0;
    //初始化数组指针
    this->m_EmpArray = NULL;
}

3. 在workerManager.h中添加成员函数

//增加职工
void Add_Emp();

4. 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_EmpAaary[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");
}

5. 在职工管理系统.cpp中添加测试函数,并且运行能够产生多态

void test()
{
	Worker * worker = NULL;
	worker = new Employee(1, "张三",1);
	worker->showInfo();
	delete worker;

	worker = new Manager(2, "李四", 2);
	worker->showInfo();
	delete worker;

	worker = new Boss(3, "王五", 3);
	worker->showInfo();
	delete worker;
}
	case 1:  //添加员工
			wm.Add_Emp();
			break;

6.堆区释放数据

WorkerManager::~WorkerManager()
{
	if (this->m_EmpArray != NULL)//将堆取数据释放掉
	{
		delete[] this->m_EmpArray;
		this->m_EmpArray = NULL;
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号