C++实现简单职工管理系统攻略
功能需求
我们需要实现一个简单的职工管理系统,其具有以下功能:
- 增加职工:可以手动输入职工信息,包括职工编号、职工姓名、职工岗位,职工编号不可重复。
- 显示所有职工:可以显示所有职工的信息。
- 删除职工:可以根据职工编号删除职工。
- 修改职工:可以根据职工编号修改职工信息。
- 查找职工:可以根据职工编号或者职工姓名查找职工信息。
- 排序职工:可以按照职工编号进行升序排序。
程序架构
程序主要分为三个模块:职工类模板、职工管理类和程序主函数。其中,职工类模板用于存储职工的基本信息;职工管理类用于完成对职工的增删改查等操作;程序主函数则负责接收用户的选择,进行相应的操作。
首先,我们创建一个职工类模板Worker
,其中包含职工的基本信息。具体实现代码如下:
#ifndef WORKER_H
#define WORKER_H
#include <iostream>
#include <string>
using namespace std;
class Worker{
public:
int m_Id; //职工编号
string m_Name; //职工姓名
int m_DepartmentId; //部门编号
Worker(int id, string name, int dId);
virtual void showInfo(); //显示个人信息
virtual string getDeptName() = 0; //获取岗位名称
};
#endif // !WORKER_H
接下来,我们创建职工管理类WorkerManager
,其中主要实现了职工的增删改查等操作。具体实现代码如下:
#ifndef WORKERMANAGER_H
#define WORKERMANAGER_H
#include <iostream>
#include <fstream>
#include <string>
#include "Worker.h"
#include "Employee.h"
#include "Manager.h"
#include "Boss.h"
#define FILENAME "empFile.txt"
using namespace std;
class WorkerManager{
public:
int m_EmpNum; //职工人数
Worker ** m_EmpArray; //职工数组的指针
WorkerManager();
//显示菜单
void Show_Menu();
//退出系统
void ExitSystem();
//添加职工
void Add_Emp();
//保存文件
void save();
//统计职工人数
int get_EmpNum();
//初始化员工
void init_Emp();
//显示职工
void Show_Emp();
//删除职工
void Del_Emp();
//修改职工
void Modify_Emp();
//查找职工
void find_Emp();
//根据编号查找职工,返回下标,找不到返回-1
int IsExist(int id);
};
#endif // !WORKERMANAGER_H
最后,我们在程序主函数中,用一个循环结构来实现用户的选择和相应操作的执行。具体实现代码如下:
#include "WorkerManager.h"
#include <iostream>
using namespace std;
int main()
{
//实例化职工管理类
WorkerManager wm;
int choice = 0;
while (true)
{
wm.Show_Menu();
cout << "请输入您的选择:";
cin >> choice;
switch (choice)
{
case 0: //退出系统
wm.ExitSystem();
break;
case 1: //添加职工
wm.Add_Emp();
break;
case 2: //显示职工
wm.Show_Emp();
break;
case 3: //删除职工
wm.Del_Emp();
break;
case 4: //修改职工
wm.Modify_Emp();
break;
case 5: //查找职工
wm.find_Emp();
break;
case 6: //按照编号排序
break;
case 7: //清空所有文档
break;
default:
system("cls");
break;
}
}
system("pause");
return 0;
}
示例说明
示例一
下面我们来看一个添加职工的示例。当用户选择添加职工时,会调用职工管理类中的Add_Emp
函数。具体实现代码如下:
void WorkerManager::Add_Emp()
{
cout << "请输入添加职工的数量:";
int addNum = 0;
cin >> addNum;
if (addNum > 0)
{
//添加
int newSize = m_EmpNum + addNum; //新空间大小
//开辟新空间
Worker ** newSpace = new Worker*[newSize];
//把原来空间下的数据,拷贝到新的空间下
if (m_EmpArray != NULL)
{
for (int i = 0; i < m_EmpNum; i++)
{
newSpace[i] = m_EmpArray[i];
}
}
//添加新数据
for (int i = 0; i < addNum; i++)
{
//输入职工信息
int id;
string name;
int deptCode;
cout << "请输入第" << i + 1 << "个新职工的编号:";
cin >> id;
cout << "请输入第" << i + 1 << "个新职工的姓名:";
cin >> name;
cout << "请输入第" << i + 1 << "个新职工的岗位:(1.普通员工 2.经理 3.老板)";
cin >> deptCode;
Worker * worker = NULL;
switch (deptCode)
{
case 1: //员工
worker = new Employee(id, name, deptCode);
break;
case 2: //经理
worker = new Manager(id, name, deptCode);
break;
case 3: //老板
worker = new Boss(id, name, deptCode);
break;
default:
break;
}
//将新添加的数据添加到数组中
newSpace[m_EmpNum + i] = worker;
}
//释放原来的空间
delete[] m_EmpArray;
//更改新空间的地址
m_EmpArray = newSpace;
//更新新的职工人数
m_EmpNum = newSize;
//提示添加成功
cout << "添加成功!" << endl;
//保存到文件中
save();
}
else{
cout << "输入有误,请重新操作!" << endl;
}
//按任意键后,清屏回到主菜单界面
system("pause");
system("cls");
}
当用户选择添加职工时,首先会询问用户要添加的职工数量。如果添加数量大于0,则需要输入新职工的职工编号、职工姓名和职工岗位。此时还需要根据岗位的不同,创建对应类型的职工实例并添加到职工数组中。最后将新的职工数组指针赋值给原来的指针,并更新职工人数和保存到文件中。
示例二
接下来我们来看一个查找职工的示例。当用户选择查找职工时,会调用职工管理类中的find_Emp
函数。具体实现代码如下:
void WorkerManager::find_Emp()
{
if (m_EmpNum == 0)
{
cout << "当前记录为空!" << endl;
//按任意键后,回到主菜单
system("pause");
system("cls");
return;
}
cout << "请输入查找的方式:(1.按职工编号查找 2.按职工姓名查找)";
int select = 0;
cin >> select;
if (select == 1)
{
cout << "请输入职工编号:";
int id;
cin >> id;
int ret = IsExist(id);
if (ret != -1)
{
cout << "查找成功!职工编号为" << id << "的员工信息如下:" << endl;
m_EmpArray[ret]->showInfo();
}
else{
cout << "查找失败!不存在该职工编号!" << endl;
}
}
else if (select == 2)
{
cout << "请输入职工姓名:";
string name;
cin >> name;
bool flag = false; //标志是否找到过
for (int i = 0; i < m_EmpNum; i++)
{
if (m_EmpArray[i]->m_Name == name)
{
cout << "查找成功!职工姓名为" << name << "的员工信息如下:" << endl;
m_EmpArray[i]->showInfo();
flag = true; //找到过
}
}
if (flag == false) //未找到
{
cout << "查找失败!不存在该职工姓名!" << endl;
}
}
else{
cout << "输入有误,请重新操作!" << endl;
}
//按任意键后,清屏回到主菜单界面
system("pause");
system("cls");
}
当用户选择查找职工且按照职工编号查找时,需要用户输入职工编号,然后根据编号在职工数组中查找是否存在该职工。如果存在,则输出该职工的基本信息。当用户选择查找职工且按照职工姓名查找时,需要用户输入职工姓名,然后在职工数组中查找是否存在该姓名的职工。如果存在,则输出该职工的基本信息。如果未找到,则输出查找失败的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现简单职工管理系统 - Python技术站