批量添加职工,并且保存到文件中
功能分析: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;
}
}


