【带你敲】职工管理系统(下)

简介: 笔记

11、删除职工

功能描述:按照职工的编号进行删除职工操作


11.1 删除职工函数声明


在workerManager.h中添加成员函数 void Del_Emp();

//删除职工
  void Del_Emp();

11.2 职工是否存在函数声明


很多功能都需要用到根据职工是否存在来进行操作如:删除职工、修改职工、查找职工


因此添加该公告函数,以便后续调用


在workerManager.h中添加成员函数 int IsExist(int id);

//按照职工编号判断职工是否存在,若存在返回职工在数组中位置,不存在返回-1
  int IsExist(int id);

11.3 职工是否存在函数实现


在workerManager.cpp中实现成员函数 int IsExist(int id);


int WorkerManager::IsExist(int id)
{
  int index = -1;
  for (int i = 0; i < this->m_EmpNum; i++)
  {
  if (this->m_EmpArray[i]->m_Id == id)
  {
    index = i;
    break;
  }
  }
  return index;
}


11.4 删除职工函数实现


在workerManager.cpp中实现成员函数 void Del_Emp();

//删除职工
void WorkerManager::Del_Emp()
{
  if (this->m_FileIsEmpty)
  {
  cout << "文件不存在或记录为空!" << endl;
  }
  else
  {
  //按职工编号删除
  cout << "请输入想要删除的职工号:" << endl;
  int id = 0;
  cin >> id;
  int index = this->IsExist(id);
  if (index != -1)  //说明index上位置数据需要删除
  {
    for (int i = index; i < this->m_EmpNum - 1; i++)
    {
    this->m_EmpArray[i] = this->m_EmpArray[i + 1];
    }
    this->m_EmpNum--;
    this->save(); //删除后数据同步到文件中
    cout << "删除成功!" << endl;
  }
  else
  {
    cout << "删除失败,未找到该职工" << endl;
  }
  }
  system("pause");
  system("cls");
}


11.5 测试删除职工


在main函数分支 3 选项中,调用删除职工接口

1.png

测试1 - 删除不存在职工情况


2.png

测试2 - 删除存在的职工情况


删除成功提示图:

3.png

再次显示所有职工信息,确保已经删除

4.png


查看文件中信息,再次核实员工已被完全删除

5.png


至此,删除职工功能实现完毕!


12、修改职工


功能描述:能够按照职工的编号对职工信息进行修改并保存


12.1 修改职工函数声明


在workerManager.h中添加成员函数 void Mod_Emp();


//修改职工
  void Mod_Emp();

12.2 修改职工函数实现


在workerManager.cpp中实现成员函数 void Mod_Emp();


//修改职工
void WorkerManager::Mod_Emp()
{
  if (this->m_FileIsEmpty)
  {
  cout << "文件不存在或记录为空!" << endl;
  }
  else
  {
  cout << "请输入修改职工的编号:" << endl;
  int id;
  cin >> id;
  int ret = this->IsExist(id);
  if (ret != -1)
  { 
    //查找到编号的职工
    delete this->m_EmpArray[ret];
    int newId = 0;
    string newName = "";
    int dSelect = 0;
    cout << "查到: " << id << "号职工,请输入新职工号: " << endl;
    cin >> newId;
    cout << "请输入新姓名: " << endl;
    cin >> newName;
    cout << "请输入岗位: " << endl;
    cout << "1、普通职工" << endl;
    cout << "2、经理" << endl;
    cout << "3、老板" << endl;
    cin >> dSelect;
    Worker * worker = NULL;
    switch (dSelect)
    {
    case1:
    worker = new Employee(newId, newName, dSelect);
    break;
    case2:
    worker = new Manager(newId, newName, dSelect);
    break;
    case 3:
    worker = new Boss(newId, newName, dSelect);
    break;
    default:
    break;
    }
    //更改数据 到数组中
    this->m_EmpArray[ret]= worker;
    cout << "修改成功!" << endl;
    //保存到文件中
    this->save();
  }
  else
  {
    cout << "修改失败,查无此人" << endl;
  }
  }
  //按任意键 清屏
  system("pause");
  system("cls");
}


12.3 测试修改职工


在main函数分支 4 选项中,调用修改职工接口

6.png

测试1 - 修改不存在职工情况

7.png

测试2 - 修改存在职工情况,例如将职工 “李四” 改为 “赵四”

8.png


修改后再次查看所有职工信息,并确认修改成功

9.png

再次确认文件中信息也同步更新

10.png


至此,修改职工功能已实现!


13、查找职工


功能描述:提供两种查找职工方式,一种按照职工编号,一种按照职工姓名


13.1 查找职工函数声明


在workerManager.h中添加成员函数 void Find_Emp();


//查找职工
  void Find_Emp();

13.2 查找职工函数实现


在workerManager.cpp中实现成员函数 void Find_Emp();


//查找职工
void WorkerManager::Find_Emp()
{
  if (this->m_FileIsEmpty)
  {
  cout << "文件不存在或记录为空!" << endl;
  }
  else
  {
  cout << "请输入查找的方式:" << endl;
  cout << "1、按职工编号查找" << endl;
  cout << "2、按姓名查找" << endl;
  int select = 0;
  cin >> select;
  if (select == 1) //按职工号查找
  {
    int id;
    cout << "请输入查找的职工编号:" << endl;
    cin >> id;
    int ret = IsExist(id);
    if (ret != -1)
    {
    cout << "查找成功!该职工信息如下:" << endl;
    this->m_EmpArray[ret]->showInfo();
    }
    else
    {
    cout << "查找失败,查无此人" << endl;
    }
  }
  else if(select == 2) //按姓名查找
  {
    string name;
    cout << "请输入查找的姓名:" << endl;
    cin >> name;
    bool flag = false;  //查找到的标志
    for (int i = 0; i < m_EmpNum; i++)
    {
    if (m_EmpArray[i]->m_Name == name)
    {
      cout << "查找成功,职工编号为:"
                           << m_EmpArray[i]->m_Id
                           << " 号的信息如下:" << endl;
      flag = true;
      this->m_EmpArray[i]->showInfo();
    }
    }
    if (flag == false)
    {
    //查无此人
    cout << "查找失败,查无此人" << endl;
    }
  }
  else
  {
    cout << "输入选项有误" << endl;
  }
  }
  system("pause");
  system("cls");
}

13.3 测试查找职工


在main函数分支 5 选项中,调用查找职工接口

11.png

测试1 - 按照职工编号查找 - 查找不存在职工

12.png


测试2 - 按照职工编号查找 - 查找存在职工


13.png

测试3 - 按照职工姓名查找 - 查找不存在职工14.png

测试4 - 按照职工姓名查找 - 查找存在职工(如果出现重名,也一并显示,在文件中可以添加重名职工)


例如 添加两个王五的职工,然后按照姓名查找王五

15.png16.png

至此,查找职工功能实现完毕!


14、排序


功能描述:按照职工编号进行排序,排序的顺序由用户指定


14.1 排序函数声明


在workerManager.h中添加成员函数 void Sort_Emp();

//排序职工
  void Sort_Emp();

14.2 排序函数实现


在workerManager.cpp中实现成员函数 void Sort_Emp();


//排序职工
void WorkerManager::Sort_Emp()
{
  if (this->m_FileIsEmpty)
  {
  cout << "文件不存在或记录为空!" << endl;
  system("pause");
  system("cls");
  }
  else
  {
  cout << "请选择排序方式: " << endl;
  cout << "1、按职工号进行升序" << endl;
  cout << "2、按职工号进行降序" << endl;
  int select = 0;
  cin >> select;
  for (int i = 0; i < m_EmpNum; i++)
  {
    int minOrMax = i;
    for (int j = i + 1; j < m_EmpNum; j++)
    {
    if (select == 1) //升序
    {
      if (m_EmpArray[minOrMax]->m_Id > m_EmpArray[j]->m_Id)
      {
      minOrMax = j;
      }
    }
    else  //降序
    {
      if (m_EmpArray[minOrMax]->m_Id < m_EmpArray[j]->m_Id)
      {
      minOrMax = j;
      }
    }
    }
    if (i != minOrMax)
    {
    Worker * temp = m_EmpArray[i];
    m_EmpArray[i] = m_EmpArray[minOrMax];
    m_EmpArray[minOrMax] = temp;
    }
  }
  cout << "排序成功,排序后结果为:" << endl;
  this->save();
  this->Show_Emp();
  }
}  


14.3 测试排序功能


在main函数分支 6 选项中,调用排序职工接口

17.png

测试:


首先我们添加一些职工,序号是无序的,例如:18.png


测试 - 升序排序

19.png


文件同步更新

20.png


测试 - 降序排序

21.png

文件同步更新


22.png

至此,职工按照编号排序的功能实现完毕!


15、清空文件


功能描述:将文件中记录数据清空


15.1 清空函数声明


在workerManager.h中添加成员函数 void Clean_File();

//清空文件
  void Clean_File();

15.2 清空函数实现


在workerManager.cpp中实现员函数 void Clean_File();


//清空文件
void WorkerManager::Clean_File()
{
  cout << "确认清空?" << endl;
  cout << "1、确认" << endl;
  cout << "2、返回" << endl;
  int select = 0;
  cin >> select;
  if (select == 1)
  {
  //打开模式 ios::trunc 如果存在删除文件并重新创建
  ofstream ofs(FILENAME, ios::trunc);
  ofs.close();
  if (this->m_EmpArray != NULL)
  {
            for (int i = 0; i < this->m_EmpNum; i++)
    {
    if (this->m_EmpArray[i] != NULL)
    {
      delete this->m_EmpArray[i];
    }
    }
    this->m_EmpNum = 0;
    delete[] this->m_EmpArray;
    this->m_EmpArray = NULL;
    this->m_FileIsEmpty = true;
  }
  cout << "清空成功!" << endl;
  }
  system("pause");
  system("cls");
}


15.3 测试清空文件


在main函数分支 7 选项中,调用清空文件接口

23.png

测试:确认清空文件

24.png

再次查看文件中数据,记录已为空

25.png

打开文件,里面数据已确保清空,该功能需要慎用!

26.png


随着清空文件功能实现,本案例制作完毕 ^ _ ^


相关文章
|
关系型数据库 MySQL 数据库
MySQL数据库期末项目 图书馆管理系统(上)
MySQL数据库期末项目 图书馆管理系统
241 0
|
1月前
|
存储 数据可视化 C++
【C++】C++ 职工信息管理系统(源码)【独一无二】
【C++】C++ 职工信息管理系统(源码)【独一无二】
|
4月前
|
小程序 JavaScript Java
宿舍报修|宿舍报修小程序|基于微信小程序的宿舍报修系统的设计与实现(源码+数据库+文档)
宿舍报修|宿舍报修小程序|基于微信小程序的宿舍报修系统的设计与实现(源码+数据库+文档)
33 0
|
SQL 数据管理 Java
C#宿舍管理系统(C#课程设计含源码)
C#宿舍管理系统(C#课程设计含源码)
134 0
C#宿舍管理系统(C#课程设计含源码)
|
存储 C++
C++职工管理系统(课程设计报告(三)
C++职工管理系统(课程设计报告(三)
|
4月前
|
设计模式 数据安全/隐私保护
03——驾校科目一考试系统——登录界面(1)
双击ui文件进入设计模式。 想要把我们的登录窗口做成什么样的效果呢?理想效果图如下所示:用户需要一个账号和密码输入。最后还需要给用户两个按钮:一个登录按钮,一个取消按钮。
96 2
|
4月前
|
设计模式
03——驾校科目一考试系统——登录界面(2)
运行项目——成功添加背景图 缺点:背景图片盖住了登录界面。
92 2
|
存储 关系型数据库 MySQL
MySQL数据库期末项目 图书馆管理系统(下)
MySQL数据库期末项目 图书馆管理系统(下)
94 0
|
4月前
|
设计模式 编译器 C语言
|
10月前
|
C++
【C++初级项目】职工管理系统 v1.0
【C++初级项目】职工管理系统 v1.0
30 0