这个项目分为头文件和CPP文件和一个.txt文件

实现功能如图所示

我一一列出来(头文件,cpp文件,txt文件)
按着这三个复制粘贴就可以用

boss.h

#pragma once
//普通员工头文件子类继承父类
#include"worker.h"
#include<iostream>
#include<string>
using namespace std;
class boss :public worker {public://构造函数boss(int id, string name, int did);//显示个人信息virtual void showinfo() ;//获取岗位名称virtual string getdepainfo() ;
};

employee.h

#pragma once
//普通员工头文件子类继承父类
#include"worker.h"
#include<iostream>
#include<string>
using namespace std;
class Employee:public worker
{public://构造函数Employee(int id, string name,int did);//显示个人信息void showinfo();//虚函数关键字可删可不删//获取岗位名称string getdepainfo();};

manager.h

#pragma once
#include<iostream>
#include<string>
#include"worker.h"
using namespace std;
class manager :public worker {public://构造函数manager(int id, string name, int did);//显示个人信息void showinfo() ;//获取岗位名称string getdepainfo() ;
};

worker.h

#pragma once
#include<iostream>
#include<string>
using namespace std;
//抽象员工子类
class worker {public://显示个人信息virtual void showinfo() = 0;//获取岗位名称virtual string getdepainfo() = 0;int m_id;//职工编号string m_name;//职工姓名int m_depaid;//职工所在部门编号
};

workerManager.h

#pragma once//防止头文件重复包含
#include<iostream>//包含输入输出流头文件#include"worker.h"
using namespace std;//使用标准命名空间
class workermanager {public:workermanager();//构造函数void showmenu();//菜单函数void exitsystem();//退出系统函数//增加职工信息,员工,经理,老板//职工的属性有:职工编号。,姓名,所在部门编号//职工行为有:岗位职责信息描述,获取岗位名称int m_empnum;//记录文件中的人数worker ** m_emparray;//职工数组指针//添加员工void addemp();//保存文件void save();void show();//打印职工信息bool m_fileisemp;//判断文件是否为空//统计文件中人数int getnum();void init();void delemp();//删除职工信息int isexist(int id);void modify();void search();void sort();void clean();~workermanager();//析构函数};

接下来是.cpp文件

boss.h

#pragma once
//普通员工头文件子类继承父类
#include"worker.h"
#include<iostream>
#include<string>
using namespace std;
#include"boss.h"
boss::boss(int id, string name, int did)
{this->m_id = id;this->m_name = name;this->m_depaid = did;
}
void boss::showinfo()
{ cout << "职工编号为:" << this->m_id<< "\t职工姓名:" << this->m_name<< "\t职工岗位为:" << this->getdepainfo()<< "\t岗位职责:管理公司" << endl;
}
string boss::getdepainfo()
{return "老板";
}

employee.cpp

#pragma once;
#include<iostream>
#include<string>
using namespace std;
#include"employee.h"
//构造函数
Employee::Employee(int id, string name,int did)
{this->m_id = id;this->m_name = name;this->m_depaid = did;
}//显示个人信息
void Employee::showinfo()
{cout << "职工编号为:" << this->m_id<< "\t职工姓名:" << this->m_name<< "\t职工岗位为:" << this->getdepainfo()<< "\t岗位职责:完成经理分配的任务" << endl;}//获取岗位名称
string Employee::getdepainfo()
{return "员工";}

manager.cpp

#include<iostream>
#pragma once
#include<string>
#include"worker.h"
#include"manager.h"manager::manager(int id,string name,int did)
{this->m_id = id;this->m_name = name;this->m_depaid = did;}void manager::showinfo(){cout << "职工编号为:" << this->m_id<< "\t职工姓名:" << this->m_name<< "\t职工岗位为:" << this->getdepainfo()<< "\t岗位职责:完成老板分配的任务" << endl;}string manager::getdepainfo(){return "经理";}

workerManager.cpp

#include"workerManger.h"
#include"boss.h"
#include"employee.h"
#include"manager.h"
#include<fstream>
#define FILENAME "EMPFILE.txt"
workermanager::workermanager()//构造函数类外实现
{//文件不存在ifstream ifs;ifs.open(FILENAME, ios::in);if (!ifs.is_open()){cout << "文件不存在" << endl;this->m_empnum = 0;this->m_emparray = NULL;this->m_fileisemp = true;ifs.close();return;}//文件存在,但是没有信息char ch;ifs >> ch;if (ifs.eof()){cout << "文件夹为空" << endl;this->m_empnum = 0;this->m_emparray = NULL;this->m_fileisemp = true;ifs.close();return;}//当文件存在并且有数据int num = this->getnum();cout << "职工人数为:" << num << endl;this->m_empnum = num;this->m_emparray = new worker * [this->m_empnum];this->init();//先开辟空间将文件中的数据存到数组中for (int i = 0; i < this->m_empnum; i++){cout << "职工编号为" << this->m_emparray[i]->m_id<< "姓名为:" << this->m_emparray[i]->m_name<< "部门编号:" << this->m_emparray[i]->m_depaid << endl;}}void workermanager::delemp(){if (this->m_fileisemp){cout << "文件不存在或者为空" << endl;}else {cout << "请输入要删除的职工编号" << endl;int id = 0;cin >> id;int index = this->isexist(id);if (index != -1){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;}elsecout << "未找到该职工" << endl;}system("pause");system("cls");}void workermanager::modify(){if (this->m_fileisemp){cout << "文件不存在或者为空" << endl;}cout << "请输入要修改职工的编号" << endl;int id;cin >> id;int t = this->isexist(id);if (t != -1){delete this->m_emparray[t];int newid = 0;string newname = "";int ds = 0;cout << "查询到id为" << t << "号职工,请输入新职工号:" << endl;cin >> newid;cout << "请输入新姓名" << endl;cin >> newname;cout << "请输入岗位:" << endl << "1,普通员工\n2.经理\n3.老板\n";cin >> ds;worker* worker = NULL;switch (ds){case 1:worker = new Employee(newid, newname, ds);break;case 2:worker = new manager(newid, newname, ds);break;case 3:worker = new boss(newid, newname, ds);break;default:break;}this->m_emparray[t] = worker;cout << "修改成功" << endl;this->save();}elsecout << "查无此人" << endl;system("pause");system("cls");}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;}
void  workermanager::show()
{if (this->m_fileisemp){cout << "文件不存在或者记录为空" << endl;}else{for (int i = 0; i < m_empnum; i++){//利用多态调用接口this->m_emparray[i]->showinfo();}}system("pause");system("cls");}
int workermanager::getnum()
{ifstream ifs;ifs.open(FILENAME, ios::in);int id;string name;int did;int num = 0;while (ifs >> id && ifs >> name && ifs >> did){num++;}return num;
}
void workermanager::showmenu()//菜单函数类外实现
{cout << "******** 欢迎使用职工管理系统!********" << endl;cout << "********0:退出职工管理系统 ***********" << endl;cout << "********1.增加职工个信息 **************" << endl;cout << "********2.打印职工信息 ****************" << endl;cout << "********3.删除离职职工 ****************" << endl;cout << "********4.修改职工信息 ****************" << endl;cout << "********5.查找职工信息 ****************" << endl;cout << "********6.按照职工号排序 **************" << endl;cout << "********7.清空所有文档 ****************" << endl;cout << "***************************************" << endl;cout << endl;}
void workermanager::exitsystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}
void workermanager::addemp()
{cout << "请输入添加职工人数:\n";int num;cin >> num;if (num > 0){//计算添加新空间大小int newsize = this->m_empnum + num;//原来的加上新的//开辟新空间worker **newspace= new worker* [newsize];//原来空间中的内容拷贝到新空间if (this->m_emparray != NULL){for (int i = 0; i < this->m_empnum; i++){newspace[i] = this->m_emparray[i];}}//批量添加新数据for (int i = 0; i < num; i++){int id;string  name;int ds;cout << "请输入第" << i + 1 << "个新职工编号:\n";cin >> id;cout << "请输入第" << i + 1 << "个新职工姓名:\n";cin >> name;cout << "请选择该职工岗位:\n";cout << "1,普通员工" << endl;cout << "2,经理" << endl;cout << "3,老板" << endl;cin >> ds;worker* worker = NULL;switch (ds){case 1:worker = new Employee(id, name, 1);break;case 2:worker = new manager(id, name, 2);break;case 3:worker = new boss(id, name, 3);break;default:break;}//将创建的职工职责,保存到数组中newspace[this->m_empnum + i] = worker;//释放原有空间delete[]this->m_emparray;//更改新空间指向this->m_emparray = newspace;//更新新的职工人数this->m_empnum = newsize;//更新职工不为空的标志this->m_fileisemp = false;//提示成功添加cout << "成功添加" << num << "个新职工" << endl;this->save();}}elsecout << "输入数据有误\n";system("pause");system("cls");
}
void workermanager::search()
{if (this->m_fileisemp)cout << "文件为空或者不存在" << endl;int id;int did;cout << "请输入查询者的职工号\n";cin >> id;int t = this->isexist(id);if (t != -1){cout << "职工号为" << id << "的信息\n";cout << "职工号为:" << this->m_emparray[t]->m_id << "职工名为:" << this->m_emparray[t]->m_name << "部门编号为:" << this->m_emparray[t]->m_depaid << endl;}elsecout << "查无此人\n";}
void workermanager::save()
{ofstream ofs;ofs.open(FILENAME, ios::out);//用写方式打开文件for (int i = 0; i < this->m_empnum; i++){ofs << this->m_emparray[i]->m_id << " "<< this->m_emparray[i]->m_name << " "<< this->m_emparray[i]->m_depaid << endl;}//关闭文件ofs.close();
}
void workermanager::sort()
{if (this->m_fileisemp){     cout << "文件不存在或者为空,无法排序" << endl;system("pause");system("cls");}int id;string name;int did;for (int i = 0; i < this->m_empnum; i++){for (int j = 0; j < i; j++){if (this->m_emparray[i]->m_id > this->m_emparray[j]->m_id){id = this->m_emparray[j]->m_id;name = this->m_emparray[j]->m_name;did = this->m_emparray[j]->m_depaid;this->m_emparray[j]->m_id = this->m_emparray[i]->m_id;this->m_emparray[j]->m_name = this->m_emparray[i]->m_name;this->m_emparray[j]->m_depaid = this->m_emparray[i]->m_depaid;this->m_emparray[i]->m_id = id;this->m_emparray[i]->m_name = name;this->m_emparray[i]->m_depaid =did;}}}system("pause");system("cls");
}void workermanager::clean()
{ofstream ofs(FILENAME, ios::trunc);ofs.close();if (this->m_emparray != NULL){for (int i = 0; i < this->m_empnum; i++){delete this->m_emparray[i];this->m_emparray[i] = NULL;}//删除堆区数组指针delete[]this->m_emparray;this->m_empnum = 0;this->m_fileisemp = 1;}cout << "清空成功\n";system("pause");system("cls");
}
void workermanager::init()
{ifstream ifs;ifs.open(FILENAME, ios::in);int id;string name;int did;int index = 0;while (ifs >> id && ifs >> name && ifs >> did){worker* worker = NULL;switch (did){case 1:worker = new Employee(id, name, did);break;case 2:worker = new manager(id, name, did);break;case 3:worker = new boss(id, name, did);break;default:break;}this->m_emparray[index] = worker;index++;}ifs.close();
}workermanager::~workermanager()    //析构函数
{if (this->m_emparray != NULL){delete[] this->m_emparray;this->m_emparray = NULL;}//堆区数据手动开辟,手动释放
}

职工管理系统.cpp

#pragma once
#include<iostream>
#include"workerManger.h"
#include"worker.h"
#include"employee.h"
#include"manager.h"
#include"boss.h"
#include<string>
#include<fstream>
#define FILENAME "EMPFILE.txt"
using namespace std;
int main()
{   //实例化管理者对象workermanager wss;//管理员王顺顺int choice = 0;while (true){wss.showmenu();cout << "请输入您的选择" << endl;cin >> choice;switch (choice){case 0:wss.exitsystem();//推出系统break;case 1://添加职工wss.addemp();break;case 2://打印职工信息wss.show();break;case 3://删除职工信息wss.delemp();break;case 4:wss.modify();//修改职工信息break;case 5:wss.search();//查找职工信息break;case 6:wss.sort();//排序职工信息break;case 7:wss.clean();//清空文件break;default:system("cls");break;}}system("pause");return 0;}

.txt文件:

1 张三 2
2 李四 3
4 王五 1
把这三行数据复制粘贴到一个txt文件中(保存这个文件的时候用ANSI编码格式)
以上的文件都粘贴到一个项目中,就可以运行了。

C++结课大作业——职工管理系统相关推荐

  1. 基于 Python 的开源Web开发框架django/哈工大学生成绩管理系统html实现/python结课大作业

    python结课大作业 (一)django安装 (1)django是什么 (2)基于django的网站 (3)django的设计理念 (4)django安装 (二)数据库安装 (1)数据库(DataB ...

  2. HTML网页设计结课大作业~仿凡客服装商城主页纯HTML模板源码(HTML+CSS+JS)

    HTML网页设计结课作业~服装商城主页纯HTML模板源码(HTML+CSS+JS) 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多 ...

  3. 最优解matlab机械大作业,最速下降法求最优解西安电子科技大学matlab结课大作业...

    07112016.最速下降法求最优解 六. 结果评价 本次测试分别从两组不同的初始搜索位置,两组不同 a,b,c,d 值出发, 两两比较可得结论:测试用例 abcd 为某些特定值时,不同初始搜索位置可 ...

  4. matlab选修结课作业,MATLAB结课大作业.doc

    雏蓄列旧愤环员凉箕毫陆一拥梧犯圆缴战倍奇濒倔晒窿必峙蚜逢骋斩吴郭潍韵巩恭烈甲政售翔少灰浸巩感焕拙嗜匆菌王爵挚辟血铱窿曹啥析躬斟烯琵砸噎猴版骨脾州棘甥育海熙问梯周打膝司规槽捉糠疏仲响愁刚条吸款得乌烩滚筑 ...

  5. 【web结课大作业】创建一个注册页面并引用正则表达式,点击注册按钮后可以弹窗显示刚刚注册输入的信息(表单传值)

    这个代码有借鉴其它博主的部分,借鉴了别的博主的css样式和框架(嘻嘻算是站在巨人的肩膀上),内容自己改了七七八八.参考博文如下(这个原博文只能实现正则判断,没有表单传值功能): HTML--登录.注册 ...

  6. 《 Python程序设计项目案例》— 人脸识别考勤可视化分析系统签到打卡记录到Excel表格项目参考代码(课程设计、期末结课大作业、毕业设计)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107348867 Python课程设计(程 ...

  7. 【计算机图形学】结课大作业——光照模型(3D场景)

    效果 >_< 技术栈 [前端]HTML / CSS / JavaScript [图形学]WebGL / Three.js 思路 three.js开发一般是比较套路的--init() + a ...

  8. Python仿真及应用结课大作业—基于CNN的手写数字识别与涂鸦识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.结课文档目录 二.涂鸦识别(篇幅问题只展示其一) 涂鸦识别 引入必要的库函数 导入数据 为各个数据文件添加标签 数 ...

  9. 求一份网页设计结课大作业,要求用到html,css,javascript,的知识

最新文章

  1. 2022-2028年成都餐饮业投资分析及前景预测报告
  2. 08 - JavaSE之IO流
  3. Python学习(四)列表与列表操作
  4. 在学习django的时候
  5. 使用Prometheus+grafana打造高逼格监控平台
  6. JAVA常用的快捷键
  7. Android手机网页字体异常,移动端html5手机网站的中文字体使用
  8. 初中计算机会考是什么时候,初中信息技术会考复习资料
  9. 微信小程序之实现加载动画的旋转方块案例效果(前端学习收藏夹必备)
  10. java连接wamp_eclipse php wamp配置教程
  11. Axure chrome插件安装
  12. 安阳工学院计算机学院考研,2019年考研,机械工程学院的同学们交出了这份成绩单……...
  13. OpenLayers6 裁切地图(Layer Clipping)
  14. 2021-3-22科研进展
  15. springboot计算机专业毕业设计优秀级别最新题目
  16. RabbitMQ高可用集群搭建
  17. win10 安装并配置docker
  18. 美团专家:35岁是程序员工作的终点?
  19. 简单修改令迅雷下载速度比别人快4倍
  20. Nuxt3接入51la等网站统计

热门文章

  1. tensorflow:自定义op
  2. Storyboard References
  3. 计算机网络--自顶向下方法学习笔记
  4. 深度思考故事2:出租司机的经济学
  5. python计算召回率_分词结果准确率、召回率计算-python
  6. Spring Boot集成Mybatis-Plus多租户架构实战
  7. python 判断矩阵是否正交
  8. echart 人物关系图添加照片
  9. 家庭生活指南杂志家庭生活指南杂志社家庭生活指南编辑部2022年第6期目录
  10. Linux 设置多指触控手势,以 Manjaro 为例