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");
}

结语

下列的功能放在下一篇的随笔进行记录

  • 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
  • 按照编号排序:按照职工编号,进行排序,排序规则由用户指定(升序与降序)
  • 清空所有文档:清空文件中记录的所有职工信息 (清空前需要再次确认,防止误删)

到访的小伙伴们有什么建议可以在评论区留言,大家一起学习一起进步,加油呀!

C++实现职工管理系统(中)的更多相关文章

  1. 基于Struts2开发公司职工管理系统 Java源码

    开发环境: Windows操作系统 开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果. 运行效果 ...

  2. C++ 基于多态的职工管理系统

    职工管理系统 1.管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C++来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工.经理.老板,显示信息时,需要显示职工编 ...

  3. C++实现职工管理系统(下)

    C++实现职工管理系统(下) 大家好,今天是在博客园的第十五天,博主今天给大家带来的是职工管理系统(C++)(下) 这次的随笔记录是实现(中)结语处说的几个功能,另外新增一个修改功能 此次要实现的功能 ...

  4. C++实现职工管理系统(上)

    C++实现职工管理系统(上) 大家好呀,时间过得真快,在博客园已经第七天了,博主今天给大家带来的是职工管理系统(C++)(上) 这次的随笔记录的是实现职工管理系统所需要的类 目录 C++实现职工管理系 ...

  5. C++职工管理系统

    目录 职工管理系统 一. 需求 二. 创建管理类 1.创建文件 2. 头文件实现 3. 源文件实现 三. 菜单功能 1. 添加成员函数 2. 功能实现 3. 测试菜单功能 四. 退出功能 1. 提供功 ...

  6. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...

  7. PDA无线数据采集器在仓库管理系统中的应用

    条码数据采集器在仓库管理系统中的应用,条码数据采集器,顾名思义就是通过扫描货物条码,对货物进行数量分类采集,方便仓库正规化管理.条码数据采集器是现代化条码仓库管理系统中不可缺少的一部分,能提升企业的整 ...

  8. 在后台业务管理系统中使用Autofac实现微信接口的处理

    在后台业务管理系统中使用Autofac实现微信接口的处理,我们只需要把相关使用到的DLL放到BIN目录里面即可,通过IOC控制反转方式实现对接口的调用.在实现在业务系统里面,我们本身程序可能已经依赖了 ...

  9. C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发. 在 ...

随机推荐

  1. python连接mysql中报错1064修改方法

    Python是编程语言,MySQL是数据库,它们是两种不同的技术:要想使Python操作MySQL数据库需要使用驱动.这里选用PyMySQL驱动.下载地址: https://pypi.python.o ...

  2. 通过DatabaseMetaData数据库元信息类,获取特定数据库的元信息

    数据库版本:mysql8.0.18 ide:idea 2019.3 可以看到代码中连接的数据库为course_select,是一个学生的选课系统的数据库 然后通过DatabaseMetaData的ge ...

  3. ZERO:从搜索用户来看SEO

    http://www.wocaoseo.com/thread-63-1-1.html SEO是个奇怪的东西,一方面因为SEO流量往往占到网站流量几十个百分点,而且看上去它是免费的,因此许多人认为SEO ...

  4. Java中解析wav音频文件信息:音频声道数,采样频率,采样位数、声音尺寸

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 音频解析方法: public static int toInt(byte[] b) { return ((b[3] << 2 ...

  5. 要不是真的喜欢学技术,谁会来用Python爬小姐姐啊

    养成习惯,先赞后看!!!不用于任何商业价值,只是自己娱乐.否则 爬虫爬的好,牢饭吃到饱.这是我们这次爬取的网址:https://www.vmgirls.com/ 很多人学习python,不知道从何学起 ...

  6. layaair

    LayaAir之设置反向遮罩镂空遮罩挖洞模式 https://blog.csdn.net/qq_20342915/article/details/100690786 Sprite--新手引导 http ...

  7. java初探(1)之秒杀的业务简单实现

    前言 秒杀的业务场景广泛存在于电商当中,即有一个倒计时的时间限制,当倒计时为0时,秒杀开始,秒杀之后持续很小的一段时间,而且秒杀的商品很少,因此会有大量的顾客进行购买,会产生很大的并发量,从而创造技术 ...

  8. 01_Python基础知识梳理

    1.计算机知识基础 1.计算机组成 计算机底层: 点子电路,计算机只能识别两个数 0 1         硬件: 处理器(CPU), 运行内存(RAM), 主板(总线设备), 外部存储设备(硬盘U盘等 ...

  9. Mysql批量导入

    这应该是我写Mysql技术的最后一章了吧,短时间内应该不会再写Mysql的文章了,当然疑难杂症除外 insert语句优化 因为之前我也遇到过这样的问题,是我在做数据库适配的时候碰见的,那是我的数据还是 ...

  10. 20190917-02Linux网络配置 000 003

    重启网络 最后reboot重启系统 继续ping 自己的window电脑的ip ctrl+C结束 继续在windows电脑上ping虚拟机上的linux系统