C++实现职工管理系统(中)
C++实现职工管理系统(中)
大家好,今天是在博客园的第九天,博主今天给大家带来的是职工管理系统(C++)(中)
这次的随笔记录是实现(上)结语处说的几个功能
此次要实现的功能
- 退出管理程序:退出当前管理系统
- 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号
- 显示职工信息:显示公司内部所有职工的信息
- 删除离职职工:按照编号删除指定的职工
1.先创建一个函数的类
为了方便管理相关功能的函数,创建一个
WorkerInformation的类
class WorkerInformation
{
public:
WorkerInformation() //利用构造函数进行相关的初始化操作
{
//文件不存在的情况
ifstream ifs1;
ifs1.open(FILENAME, ios::in);
if (!ifs1.is_open())
{
//cout << "文件不存在" << endl;
this->PersonNum = 0;
this->m_PersonArr = NULL;
this->m_FileIsEmpty = true;
ifs1.close();
return;
}
ifs1.close();
//文件存在,要检查下里面有无数据,可用下方已经注释的代码进行验证
ifstream ifs2;
ifs2.open(FILENAME, ios::in);
char ch;
ifs2 >> ch;
if (ifs2.eof())
{
//cout << "文件存在且文件内无数据" << endl;
this->PersonNum = 0;
this->m_PersonArr = NULL;
this->m_FileIsEmpty = true;
ifs2.close();
return;
}
ifs2.close();
//文件存在了,并且里面有数据,我们需要知道里面的有多少人,可用下方已经注释的代码进行验证
ifstream ifs3;
ifs3.open(FILENAME, ios::in);
int num = this->get_Num();
//cout << "文件里有" << num << "名职工" << endl;
this->PersonNum = num;
ifs3.close();
//根据人数创建一个数组
this->m_PersonArr = new Worker * [this->PersonNum];
//初始化数组
init_PArr();
}
~WorkerInformation() //释放内存
{
if (this->m_PersonArr != NULL)
{
delete[] this->m_PersonArr;
this->m_PersonArr = NULL;
}
}
void menu(); //菜单
void ExitSystem(); //退出
void AddPerson(); //添加职工
void save(); //保存数据进文件
int PersonNum; //需要添加的职工人数
Worker** m_PersonArr; //指向数组的指针 创建进堆区进行相关的存储操作
bool m_FileIsEmpty; //检测文件是否为空
int get_Num(); //用来获取文件内的人数
void init_PArr(); //初始化数组
void show_Person(); //显示职工
int IsExist(int id); //通过编号判断职工是否存在
void Del_Person(); //删除员工的操作
}
2.菜单的建立
做一个美化的菜单,可以学习下
EaxyX进行美化 (目前博主还在学)
void WorkerInformation::menu()
{
cout << "\t**********************************" << endl
<< "\t* 欢迎来到职工管理系统 *" << endl
<< "\t**********************************" << endl
<< "\t**** 1.增加职工信息 ****" << endl
<< "\t**** 2.显示职工信息 ****" << endl
<< "\t**** 3.删除职工信息 ****" << endl
<< "\t**** 0.退出 ****" << endl
<< "\t**********************************" << endl << endl;
}
3.实现退出功能
void WorkerInformation::ExitSystem()
{
cout << "欢迎下次使用" << endl;
exit(0);
}
3.实现增加功能
首先将写出增加的函数
void WorkerInformation::AddPerson()
{
cout << "请输入需要添加的人数:" << endl;
int AddNum = 0;
cin >> AddNum;
if (AddNum > 0)
{
int newsize = this->PersonNum + AddNum;
Worker** newspace = new Worker * [newsize];
if (this->m_PersonArr != NULL)
{
for (int i = 0; i < this->PersonNum; i++)
{
newspace[i] = this->m_PersonArr[i];
}
}
for (int i = 0; i < AddNum; i++)
{
int id;
string name;
int did;
cout << "请输入第" << i + 1 << "个新职工的编号:";
cin >> id;
cout << "请输入第" << i + 1 << "个新职工的名字:";
cin >> name;
cout << "请选择该职工的岗位:" << endl;
cout << "1、普通员工" << endl;
cout << "2、经理" << endl;
cout << "3、老板" << endl;
cin >> did;
Worker* worker = NULL;
switch (did)
{
case 1:
worker = new GeneralWorker(id, name, did);
break;
case 2:
worker = new Manage(id, name, did);
break;
case 3:
worker = new Boss(id, name, did);
break;
default:
break;
}
newspace[this->PersonNum + i] = worker;
}
delete[] this->m_PersonArr;
this->m_PersonArr = newspace;
this->PersonNum = newsize;
cout << "成功添加" << AddNum << "名新职工!" << endl;
}
else
{
cout << "输入有误" << endl;
}
save();
cout << endl;
cout << "添加成功,稍等请按任意键进行清屏操作!" << endl;
system("pause");
system("cls");
}
接下来是保存到文件的函数
void WorkerInformation::save()
{
ofstream ofs;
ofs.open(FILENAME, ios::out);
for (int i = 0; i < this->PersonNum; i++)
{
ofs << this->m_PersonArr[i]->m_Id << " "
<< this->m_PersonArr[i]->m_Name << " "
<< this->m_PersonArr[i]->m_DeptId << " " << endl;
}
ofs.close();
cout << "保存成功!" << endl;
}
4.实现显示功能
假设我们文件里面已经有人了,我们需要知道文件里面的人数,并将其放进数组里,再一一展示出来
首先查询文件里面是否为空,否则返回人数,方便下面的功能进行相关的操作,在
WorkerInformation构造函数里进行确认
bool m_FileIsEmpty; //检测文件是否为空
确定人数
int WorkerInformation::get_Num()
{
ifstream ifs;
ifs.open(FILENAME, ios::in);
int num = 0;
int id;
string name;
int did;
while (ifs >> id && ifs >> name && ifs >> did)
{
num++;
}
ifs.close();
return num;
}
初始化数组
void WorkerInformation::init_PArr()
{
ifstream ifs;
ifs.open(FILENAME, ios::in);
int index = 0;
int id;
string name;
int did;
while (ifs >> id && ifs >> name && ifs >> did)
{
Worker* worker = NULL;
if (did == 1)
{
worker = new GeneralWorker(id, name, did);
}
else if (did == 2)
{
worker = new Manage(id, name, did);
}
else
{
worker = new Boss(id, name, did);
}
this->m_PersonArr[index] = worker;
index++;
}
ifs.close();
}
显示信息
void WorkerInformation::show_Person()
{
if (this->m_FileIsEmpty)
{
cout << "该文件为空或记录为空" << endl;
}
else
{
for (int i = 0; i < this->PersonNum; i++)
{
this->m_PersonArr[i]->Show_WI();
}
cout << "显示成功!" << endl;
}
cout << endl;
cout << "稍等请按任意键进行清屏操作!" << endl;
system("pause");
system("cls");
}
5.实现删除功能
通过编号删除指定信息,先确定文件里是否存在需要删除的编号,再决定是否进行删除操作
检查文件是否有指定人
int WorkerInformation::IsExist(int id)
{
int num = -1;
for (int i = 0; i < this->PersonNum; i++)
{
if (this->m_PersonArr[i]->m_Id == id)
{
num = i;
break;
}
}
return num;
}
执行删除操作(找到指定位置,将后一位的信息进行前移)
void WorkerInformation::Del_Person()
{
if (this->m_FileIsEmpty)
{
cout << "该文件为空或记录为空" << endl;
}
else
{
cout << "请输入想要删除员工的职工编号:";
int a;
cin >> a;
int ret = this->IsExist(a);
if (ret != -1)
{
for (int i = ret; i < this->PersonNum - 1; i++)
{
this->m_PersonArr[i] = this->m_PersonArr[i+1];
}
this->PersonNum--;
this->save();
cout << "删除成功!" << endl;
}
else
{
cout << "删除失败" << endl;
}
}
cout << endl;
cout << "稍等请按任意键进行清屏操作!" << endl;
system("pause");
system("cls");
}
结语
下列的功能放在下一篇的随笔进行记录
- 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
- 按照编号排序:按照职工编号,进行排序,排序规则由用户指定(升序与降序)
- 清空所有文档:清空文件中记录的所有职工信息 (清空前需要再次确认,防止误删)
到访的小伙伴们有什么建议可以在评论区留言,大家一起学习一起进步,加油呀!


浙公网安备 33010602011771号