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

简介: 笔记

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数据库期末项目 图书馆管理系统
329 0
|
3月前
|
存储 数据可视化 C++
【C++】C++ 职工信息管理系统(源码)【独一无二】
【C++】C++ 职工信息管理系统(源码)【独一无二】
|
6月前
|
小程序 JavaScript Java
图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)
图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)
71 0
|
SQL 数据管理 Java
C#宿舍管理系统(C#课程设计含源码)
C#宿舍管理系统(C#课程设计含源码)
159 0
C#宿舍管理系统(C#课程设计含源码)
|
存储 C++
C++职工管理系统(课程设计报告(三)
C++职工管理系统(课程设计报告(三)
|
存储 关系型数据库 MySQL
MySQL数据库期末项目 图书馆管理系统(下)
MySQL数据库期末项目 图书馆管理系统(下)
119 0
|
6月前
|
设计模式
03——驾校科目一考试系统——登录界面(2)
运行项目——成功添加背景图 缺点:背景图片盖住了登录界面。
105 2
|
6月前
|
设计模式 数据安全/隐私保护
03——驾校科目一考试系统——登录界面(1)
双击ui文件进入设计模式。 想要把我们的登录窗口做成什么样的效果呢?理想效果图如下所示:用户需要一个账号和密码输入。最后还需要给用户两个按钮:一个登录按钮,一个取消按钮。
140 2
|
6月前
11驾校科目一考试系统——发布项目
发布项目   当我们编写完项目之后就需要发布项目 。就需要发布项目了。一般发布项目的话我们会把所有需要的文件都放在一个文件夹里面,这样的话就更方便。有时候文件过多的话,有可能会有很多的子文件夹,我们先把功能工作目录设置一下,因为当前的工作目录是debug或者release,导致咱们在读取数据文件的时候需要相对路径的话还需要上一级目录去寻找。如下图所示。
42 1
|
6月前
|
设计模式 编译器 C语言