简单的项目构成

头文件

职工抽象类

#pragma once
#include<iostream>
#include<string>
using namespace std;
class Worker {
public://显示个人信息virtual void showInfo() = 0;//显示岗位名称virtual string getDName() = 0;int m_id;string m_name;int m_dId;
};

Boss类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Boss :public Worker {
public:Boss(int id, string name, int dId);void showInfo();string getDName();
};

经理类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Manger :public Worker {
public:Manger(int id, string name, int dId);void showInfo();string getDName();
};

普通员工类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Employee :public Worker {
public:Employee(int id, string name, int dId);void showInfo();string getDName();
};

管理系统类(实现信息的增删查改,排序等等)

#pragma once //防止头文件重复包含
#include<iostream>
#include"Worker.h"
using namespace std;
//只做声明, 不做实现
class WorkerManger {
public:WorkerManger();//展示菜单的函数void showMenu();//退出系统函数void exitSystem();//添加新员工void addEmp();//保存到txt文本中void save();//统计人数int getEmNum();//初始化员工void initEmp();//显示员工信息void showWorker();//删除职工void delEmp();//判断编号员工是否存在int isExist(int num);//修改员工信息void modEmp();//查找员工void findEmp();//排序void sortEmp();//清空文件void cleanFile();~WorkerManger();//判断文件是否为空的标志,后面删除时需要用到bool m_isEmpty;int m_emNum;Worker** m_emArray;};

源文件

职工抽象类

#include"Worker.h"void Worker::showInfo() {}string Worker::getDName() {return string("None");
}

Boss类(继承自职工抽象类)

#include"Boss.h"Boss::Boss(int id, string name, int dId) {m_id = id;m_name = name;m_dId = dId;
}
void Boss::showInfo() {cout << "职工编号:" << m_id;cout << "\n职工姓名:" << m_name;cout << "\n岗位:" << getDName();cout << "\n岗位职责:啥也不用干,诶!就是玩儿" << endl;cout << endl;}
string Boss::getDName() {return string("公司老板");
}

经理类(继承自职工抽象类)

#include"Manger.h"
Manger::Manger(int id, string name, int dId) {m_id = id;m_name = name;m_dId = dId;
}
void Manger::showInfo() {cout << "职工编号:" << m_id;cout << "\n职工姓名:" << m_name;cout << "\n岗位:" << getDName();cout << "\n岗位职责:压榨底层打工人,帮老板端茶倒水" << endl;cout << endl;
}
string Manger::getDName() {return string("部门经理");
}

普通员工类(继承自职工抽象类)

#include"Employee.h"Employee::Employee(int id, string name, int dId ) {m_id = id;m_name = name;m_dId = dId;
}
void Employee::showInfo() {cout << "职工编号:" << m_id;cout << "\n职工姓名:" << m_name;cout << "\n岗位:" << getDName();cout << "\n岗位职责:帮经理端茶倒水" << endl;cout << endl;}
string Employee::getDName() {return string("底层打工人");
}

管理系统类(实现信息的增删查改,排序等等)

#include<fstream>
#include"WorkManger.h"
#include"Worker.h"
#include"Employee.h"
#include"Manger.h"
#include"Boss.h"#define FILENAME "empFile.txt"
WorkerManger::WorkerManger() {ifstream ifs;ifs.open(FILENAME, ios::in);//如果文件不存在则初始化各个参数(第一次使用系统)if (!ifs.is_open()) {cout << "文件不存在" << endl;this->m_emNum = 0;this->m_emArray = NULL;this->m_isEmpty = true;ifs.close();return;}//如果文件存在,但是数据被清理过char ch;ifs >> ch;if (ifs.eof()) {cout << "数据被清理了" << endl;this->m_emNum = 0;this->m_emArray = NULL;this->m_isEmpty = true;ifs.close();return;}//获取文件中的员工数量getEmNum();this->m_emArray = new Worker * [this->m_emNum];initEmp();this->m_isEmpty = false;}
WorkerManger::~WorkerManger() {if (m_emArray != NULL) {delete[] m_emArray;m_emArray = NULL;}}void WorkerManger::save() {ofstream ofs;ofs.open(FILENAME, ios::out);for (int i = 0; i < m_emNum; ++i) {ofs << m_emArray[i]->m_id << " "<< m_emArray[i]->m_name << " "<< m_emArray[i]->m_dId << " ";}
}int WorkerManger::getEmNum() {ifstream ifs;ifs.open(FILENAME, ios::in);int id;string name;int dId;//统计分数int num = 0;//逐行读取while (ifs >> id && ifs >> name && ifs >> dId) {num++;}ifs.close();this->m_emNum = num;return num;
}//如果文件存在且有数据的初始化函数
void WorkerManger::initEmp() {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;if (dId == 1)worker = new Employee(id, name, dId);else if (dId == 2)worker = new Manger(id, name, dId);elseworker = new Boss(id, name, dId);this->m_emArray[index] = worker;index++;}}
//显示员工信息
void WorkerManger::showWorker() {//如果不为空system("cls");if (!m_isEmpty) {string dName;cout << "员工信息如下:" << endl;for (int i = 0; i < this->m_emNum; ++i) {this->m_emArray[i]->showInfo();}}else {cout << "还未录入员工信息!!!" << endl;}system("pause");}int WorkerManger::isExist(int num) {for (int i = 0; i < this->m_emNum; ++i) {//找到了员工if (this->m_emArray[i]->m_id == num)return i;}//否则返回-1return -1;
}//删除员工
void WorkerManger::delEmp() {int index = -1;int id;if (getEmNum() == 0) {cout << "还未录入员工信息!!!" << endl;system("pause");return;}cout << "请输入要删除员工的编号:";cin >> id;system("cls");index = isExist(id);if (index == -1) {cout << "未找到该员工!!!" << endl;}else {for (int i = index; i < this->m_emNum - 1; ++i) {this->m_emArray[i] = this->m_emArray[i + 1];}this->m_emNum--;this->save();cout << "删除成功!!!" << endl;}system("pause");
}
void WorkerManger::modEmp() {if (getEmNum() == 0){cout << "还未录入员工信息!!" << endl;system("pause");return;}else {int index = -1;int id;cout << "请输入要修改信息的员工的编号:" << endl;cin >> id;index = isExist(id);if (index == -1) {cout << "未找到该员工,请输入有效编号" << endl;}else {int newId;string newName;int newDid;Worker* newEm = NULL;cout << "请输入员工的新编号:" << endl;cin >> newId;cout << "请输入员工的新姓名:" << endl;cin >> newName;cout << "1、底层打工人   2、部门经理   3、老板" << endl;cout << "请输入员工的新职位(输入编号):" << endl;cin >> newDid;delete this->m_emArray[index];if (newDid == 1) {newEm = new Employee(newId, newName, newDid);}else if (newDid == 2) {newEm = new Manger(newId, newName, newDid);}else {newEm = new Boss(newId, newName, newDid);}this->m_emArray[index] = newEm;this->save();cout << "员工信息修改完成!!!" << endl;}system("pause");;}
}void WorkerManger::findEmp() {if (getEmNum() == 0){cout << "还未录入员工信息!!!" << endl;system("pause");return;}int id;int doId;int index = -1;string name;cout << "请输入查找方式(1、编号  2、姓名):" << endl;cin >> doId;if (doId == 1) {cout << "请输入员工编号:" << endl;cin >> id;index = this->isExist(id);if (index == -1) {cout << "输入编号有误" << endl;}else{this->m_emArray[index]->showInfo();}}else if (doId == 2) {cout << "请输入员工姓名:" << endl;cin >> name;int flag = 1;for (int i = 0; i < m_emNum; ++i) {if (name == m_emArray[i]->m_name) {flag = 0;this->m_emArray[i]->showInfo();cout << endl;}}if (flag)cout << "未找到该员工!!!!" << endl;}else {cout << "输入有误!!!!" << endl;return;}system("pause");
}//按编号排序
void WorkerManger::sortEmp() {if (getEmNum() == 0) {cout << "还未录入员工信息" << endl;system("pause");return;}int opt = 1;cout << "请输入排序方式(1、升序  2、降序):";cin >> opt;if (opt == 1) {for (int i = 0; i < this->m_emNum - 1; ++i) {for (int j = i + 1; j < this->m_emNum - 1; ++j) {if (m_emArray[i]->m_id > m_emArray[j]->m_id) {Worker* t = m_emArray[i];m_emArray[i] = m_emArray[j];m_emArray[j] = t;}}}}else {for (int i = 0; i < this->m_emNum - 1; ++i) {for (int j = i + 1; j < this->m_emNum; ++j) {if (m_emArray[i]->m_id < m_emArray[j]->m_id) {Worker* t = m_emArray[i];m_emArray[i] = m_emArray[j];m_emArray[j] = t;}}}}this->save();cout << "排序完毕" << endl;system("pause");
}void WorkerManger::cleanFile() {int opt = 2;cout << "确认清空文件!!!!" << endl;cout << "1、确认" << endl;cout << "2、返回" << endl;cin >> opt;if (opt == 2)return;//ios::trunc如果文件存在,则删除重新创建ofstream ofs(FILENAME, ios::trunc);ofs.close();if (this->m_emArray != NULL) {for (int i = 0; i < this->m_emNum; ++i) {if (this->m_emArray[i] != NULL)delete this->m_emArray[i];}this->m_emNum = 0;delete[] this->m_emArray;this->m_emArray = NULL;}cout << "清除成功!!!" << endl;system("pause");
}void WorkerManger::showMenu() {cout << "****************************************************" << endl;cout << "****************************************************" << endl;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;cout << endl;
}void WorkerManger::exitSystem() {cout << "欢迎您下次使用!!!" << endl;system("pause");exit(0);
}//添加新员工
void WorkerManger::addEmp() {int addNum = 0;cout << "请输入要添加的员工的数量:" << endl;cin >> addNum;if(addNum > 0){int newSize = addNum + m_emNum;Worker** newArray = new Worker * [newSize];if (m_emNum != 0) {//先将原本的数据存入newArray里for (int j = 0; j < m_emNum; ++j) {newArray[j] = m_emArray[j];}//释放之前的空间//      delete[] this->m_emArray;}//输入员工信息for (int i = 0; i < addNum; ++i) {int t_id;string t_name;int t_dId;Worker* t_emp = NULL;cout << "请输入第" << i + 1 << "位员工的信息!!" << endl;cout << "请输入编号:";cin >> t_id;cout << "请输入姓名:";cin >> t_name;cout << "1、底层打工人  2、经理  3、老板" << endl;cout << "请选择岗位(输入数字):";cin >> t_dId;if (isExist(t_id) != -1) {cout << "该员工编号重复,请重新录入" << endl;system("pause");--i;continue;}//根据岗位new不同的worker类,if (t_dId == 1)t_emp = new Employee(t_id, t_name, t_dId);else if (t_dId == 2)t_emp = new Manger(t_id, t_name, t_dId);else if (t_dId == 3)t_emp = new Boss(t_id, t_name, t_dId);else {cout << "非法输入!!!" << endl;break;}//暂时存入newArray里newArray[i + this->m_emNum] = t_emp;}delete[] this->m_emArray;//得到新的指向m_emArray = newArray;//更新员工数量m_emNum = newSize;m_isEmpty = false;cout << "员工信息录入完成!!!" << endl;save();system("pause");}else {cout << "输入有误!!!" << endl;system("pause");}
}

主程序

#include<iostream>
#include"WorkManger.h"#include"Worker.h"
#include"Manger.h"
#include"Employee.h"
#include"Boss.h"using namespace std;int main() {//实例化管理者对象WorkerManger wm;int choice = 0;while (true) {//调用展示菜单的成员函数system("cls");wm.showMenu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 0: //退出系统wm.exitSystem();break;case 1: //增加职工wm.addEmp();break;case 2: //显示职工wm.showWorker();break;case 3: //删除职工wm.delEmp();break;case 4: //修改职工wm.modEmp();break;case 5: //查找职工wm.findEmp();break;case 6: //编号排序wm.sortEmp();break;case 7: //清空数据wm.cleanFile();break;default:system("cls");break;}}system("pause");return 0;
}

C++(九)——职工信息管理系统相关推荐

  1. C语言 课程设计——职工信息管理系统

    C语言 课程设计--职工信息管理系统 提示:该课程设计是本人第一次制作,有诸多不足之处,希望王对你有些许帮助!!! 文章目录 C语言 课程设计--职工信息管理系统 前言 一.首先定义一个结构体数组 二 ...

  2. 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx

    C语言程序设计职工信息管理系统.docx 1 数信学院数信学院 课程设计报告课程设计报告 课程名称课程名称C C 语言程序设计语言程序设计_ _ 题目名称题目名称职工信息管理系统职工信息管理系统 学生 ...

  3. python课题设计职工信息管理系统_用Python实现职工信息管理系统

    想要实现一个职工管理系统 首先我们看一下想要实现什么功能 最基础的增删改查肯定要实现的 然后增加一下数据显示.数据排序.数据统计功能 下面直接上代码 增加职工数据 # 接收用户收入 id = inpu ...

  4. c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

    <c语言程序设计>课程设计报告-职工信息管理系统.doc 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环 ...

  5. 员工任务管理系统c语言,C语言职工信息管理系统课程设计任务书.docx

    C语言课程设计任务书 一.题目:职工信息管理系统 二.目的和要求 目的:要求熟练掌握C语言的基本知识和编辑技能: 基本掌握结构化程序设计的基本思路和方法. 要求:设计一个职工信息管理系统,使之能提供以 ...

  6. c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...

  7. 职工系统c语言链表,C语言职工信息管理系统(链表)..doc

    <程序设计综合训练> 设 计 报 告 专 业: 数字媒体技术 班 级: 11媒体Z 学 号: 姓 名: 朱毅 指导教师: 陈湘军 陈明霞 成 绩: 计算机工程学院 2012年10月 第一部 ...

  8. 数据结构课程设计报告-职工信息管理系统

    "数据结构"课程设计报告 系 (院):           信息工程学院 设计题目:           员工管理系统 专业班级:          计算机科学与技术1401B 小 ...

  9. C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统

    C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统 程序之美 用C语言,职工信息管理系统具体要求 1.基本信息:如工号.姓名.性别.年龄.学历.住址.电话号码.工资等. 2.各职工信息用结构 ...

最新文章

  1. tf.get_default_graph().get_name_scope()
  2. python网课一般多少钱-学习python的时候观看网课学习还是买书学习效率高?
  3. [XSY] 分割(dfs树)
  4. 运营管理整改报告范文_整改报告怎么写(安全检查整改报告范文)
  5. 百家号 python高手养成_python高手养成记04:python的所有数据类型,一篇足矣
  6. 星型模型 3nf的区别_数据库和数据仓库的区别和联系
  7. Savage(扩展欧几里得)
  8. html在网页中图片打不开,网页图片不显示,教您网页图片不显示如何解决
  9. bscroll 滚动位置_BScroll左右联动导航
  10. 浪曦struts2学习笔记2
  11. Cox与KM生存分析及结果解读 不同的生存分析方法 单因素和多因素生存分析的比较km cox回归分析差异 生存分析结果详解 结果解读 参数详细解释 全因死亡率
  12. 将文件打成压缩包下载(OSS或FASTDFS)
  13. C++实现X11桌面录屏为H264文件
  14. 让你的桌面起飞吧(OpenSolaris2008.05 VirtualBox WinXP)
  15. 春风拂过希壤,能否成为元宇宙创作的起点?
  16. 无法将类 XXX中的构造器 XXX应用到给定类型
  17. Arcgis 栅格计算器小操作【转】
  18. 二叉树输入与存储的问题
  19. 桃李教育 高中计算机教师,一名信息技术老师的立德树人情怀~
  20. 唐骏:当年我为啥要讽刺微软的产品经理[转]

热门文章

  1. java中使用json以及所导入的包
  2. android 截长图 方法,Android实现截屏与截长图功能
  3. python add argument list_python模块介绍- argparse:命令行选项及参数解析
  4. 医院计算机网络安全宣教,医院网络安全及解决方案
  5. openresty完全开发指南_送给你,PBA商业分析指南(全书下载)
  6. linux 运行多个docker,Docker 中如何连接多个 Container 协同工作
  7. SLAM:SLAM之VSLAM的简介
  8. ML之xgboost:利用xgboost算法(sklearn+3Split)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  9. ​​​​​​​CV:利用cv2(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5、性别hdf5)并标注
  10. AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算