项目场景:黑马程序员C++课程中的企业职工管理系统项目
问题描述
在“添加职工函数”中增加“编号去重功能”后,访问m_EmpArray数组时出现异常
对于职工对象而言,职工编号应当具有唯一性,换言之,职工编号不可重复。
因此,在设计“添加新职工”这一成员函数时,若添加的职工编号与已有的职工编号相同,则需要进行去重操作,提醒用户重新输入职工编号。
但对此该教程没有考虑,因此笔者在设计该函数时,自行添加了该功能:
以下是新旧代码对比:
旧代码:
//添加职工
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 >> dId;
Worker * worker = NULL;
switch (dId)
{
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;
}