int count = -1;
for (int i = 0; i < this->m_EmpNum; i++)
{
if (this->m_EmpArray[i]->m_Id == id)
{
count = i;
break;
}
}
return count;
}
10.4 删除职工函数实现
在 workerManager.cpp
中实现成员函数 void Del_Emp();
void WorkerManager::del_Emp()
{
if (this->m_FileIsEmpty)
{
std::cout << "文件不存在或记录为空" << std::endl;
}
else
{
int id = -1;
std::cout << "请输入你要删除的职工编号: ";
std::cin >> id;
int result = isExist(id);
if (result != -1)
{
for (int i = result; i < this->m_EmpNum - 1; i++)
{
this->m_EmpArray[i] = this->m_EmpArray[i + 1];
}
this->m_EmpNum--;
this->save();
std::cout << "删除成功" << std::endl;
}
else
{
std::cout << "没有找到职工编号为[" << id << "]的员工" << std::endl;
}
}
system("pause");
system("cls");
}
11. 修改职工
功能描述:能够按照职工的编号对职工信息进行修改并保存
11.1 修改职工函数声明
在 workerManager.h
中添加成员函数 void mod_Emp();
//修改职工
void mod_Emp();
11.2 修改职工函数实现
在 workerManager.cpp
中实现成员函数 void_mod_Emp();
void WorkerManager::mod_Emp()
{
if (this->m_FileIsEmpty)
{
std::cout << "文件不存在或记录为空" << std::endl;
return;
}
int id = -1;
std::cout << "请输入你要修改的职工编号: ";
std::cin >> id;
int result = isExist(id);
if (result != -1)
{
this->m_EmpArray[result]->showInfo();
int id;
std::string name;
int deptId;
std::cout << "请输入修改的职工编号: ";
std::cin >> id;
std::cout << "请输入修改的职工姓名: ";
std::cin >> name;
std::cout << "请选择该职工的岗位" << std::endl;
std::cout << "1.普通员工" << std::endl;
std::cout << "2.经理" << std::endl;
std::cout << "3.老板" << std::endl;
std::cin >> deptId;
Worker* modWorker = NULL;
switch (deptId)
{
case 1:
modWorker = new Employee(id, name, 1);
break;
case 2:
modWorker = new Manager(id, name, 2);
break;
case 3:
modWorker = new Boss(id, name, 3);
break;
default:
break;
}
this->m_EmpArray[result] = modWorker;
this->save();
std::cout << "修改成功,修改后的信息如下" << std::endl;
this->m_EmpArray[result]->showInfo();
}
else
{
std::cout << "没有找到职工编号为[" << id << "]的员工" << std::endl;
}
system("pause");
system("cls");
}
为什么不能直接覆盖?
没有真正改变子类对象,假如数组中是这样的
//直接操纵数组中存放的值
this->m_EmpArray[result].m_Id;
this->m_EmpArray[result].m_Name;
this->m_EmpArray[result].m_deptId;
类型没有变化,那么你就拥有了这个类型的所有函数。试想一下,假如一位普通员工升职成为经理了,但是它的类型仍然是Employee,而Manager中所有的权限他都没有,所以直接覆盖值是不对的
12. 查找职工
功能描述:提供两种查找职工方式,一种按照职工编号,一种按照职工姓名
12.1 查找职工函数声明
在 workerManager.h
中添加成员函数 void find_Emp();
//查找职工
void find_Emp();
12.2 查找职工函数实现
在 workerManager.cpp
中实现成员函数 void find_Emp();
void WorkerManager::find_Emp()
{
std::cout << "请输入查找的方式:" << std::endl;
std::cout << "1.按员工编号查找" << std::endl;
std::cout << "2.按员工姓名查找" << std::endl;
int choise = 0;
std::cin >> choise;
if (chois