基于多态的职工管理系统(7)------ 添加职工
7.1 功能分析
分析:
用户在批量创建时,可能会创建不同种类的职工
如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组里
//记录文件中的人数个数 int m_EmpNum; //员工数组的指针 Worker ** m_EmpArray;
在WorkerManager构造函数中初始化属性
WorkerManager::WorkerManager() { //初始化人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; }
在workerManager.h中添加成员函数
//增加职工 void Add_Emp();
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"); }
在WorkerManager.cpp的析构函数中,释放堆区数据
WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; } }
在main函数分支 1 选项中,调用添加职工接口

效果如图:



浙公网安备 33010602011771号