职工管理系统

news/2024/11/6 13:33:38/

文章目录

  • 一、管理系统概述
  • 二、功能简述
  • 三、代码实现


一、管理系统概述

职工管理系统可以用来管理公司内所有员工的信息

本节主要利用C++来实现一个基于多态的职工管理系统

公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责

普通员工职责:完成经理交给的任务
经理职责:完成老板交给的任务,并下发任务给员工
老板职责:管理公司所有事务

二、功能简述

管理系统中需要实现的功能如下:
●退出管理程序:退出当前管理系统
●增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、
部门编号
●显示职工信息:显示公司内部所有职工的信息
●删除离职职工:按照编号删除指定的职工
●修改职工信息:按照编号修改职工个人信息
●查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
●按照编号排序:按照职工编号,进行排序,排序规则由用户指定
●清空所有文档:清空文件中记录的所有职工信息(清空前需要再次确认,防止误删)

初始化界面:
在这里插入图片描述

三、代码实现

main.cpp

#include<iostream>
#include<string>
#include"WorkerManager.h"
#include"worker.h"
#include"employee.h"
#include"manager.h"
#include"boss.h"
using namespace std;int main()
{WorkerManager wm;int chice=0;while(true){wm.Show_Menu();	   //显示菜单cout<<"请输入您的选择:"<<endl;cin>>chice;switch(chice){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.Mod_Emp();break; case 5:   //查找职工 wm.Find_Emp();break; case 6:   //排序职工 wm.Sort_Emp();break; case 7:   //清空文件 wm.Clean_File();break; default:system("cls");    //清屏 break; } }system("pause");return 0;
}

WorkerManager.h

#ifndef __WORKMANAGER_H_
#define __WORKMANAGER_H_#include<iostream>
#include<string>
#include"worker.h"
#include"employee.h"
#include"manager.h"
#include"boss.h"
#include<fstream>
#define FILENAME "empFile.txt"using namespace std;
class WorkerManager
{public:WorkerManager();~WorkerManager();void Show_Menu();     //展示菜单 void ExitSystem();    //退出系统 void Add_Emp();       //添加职工 void save();         //保存文件 void init_Emp();     //初始化员工 void Show_Emp();     //显示职工void Del_Emp();      //删除职工int IsExist(int id);  //按照职工编号判断职工是否存在,若存在返回职工在数组中的位置,不存在返回-1 void Mod_Emp();      //修改职工 void Find_Emp();     //查找职工 void Sort_Emp();     //排序职工 void Clean_File();   //清空文件 int EmpNum;          //记录职工人数 Worker **EmpArray;   //职工数组指针 bool FileIsEmpty;    //判断文件是否为空 标志int get_EmpNum();    //统计文件中人数 };#endif

WorkerManager.cpp

#include"WorkerManager.h"WorkerManager::WorkerManager()
{ifstream ifs;ifs.open(FILENAME,ios::in);    //读文件//  1、文件不存在情况 if(!ifs.is_open()) {
//		cout<<"文件不存在"<<endl;this->EmpNum=0;         //初始化记录人数 this->EmpArray=NULL;    //初始化数组指针this->FileIsEmpty=true;  //初始化文件是否位空 ifs.close();            //关闭文件 return;}// 2、文件存在,但数据为空char ch;ifs>>ch;if(ifs.eof()) {
//		cout<<"文件为空!"<<endl;this->EmpNum=0;         //初始化记录人数 this->EmpArray=NULL;    //初始化数组指针this->FileIsEmpty=true;  //初始化文件是否位空 ifs.close();            //关闭文件 return;}   // 3、文件存在,并且记录数据int num=this->get_EmpNum();
//	cout<<"职工人数为:"<<num<<endl;this->EmpNum=num; this->EmpArray=new Worker*[this->EmpNum]; //开辟空间this->init_Emp();      //将文件中的数据 存到数组中 、//测试 
//	for(int i=0;i<this->EmpNum;i++)
//	{
//		cout<<"职工编号:"<<this->EmpArray[i]->Id<<"\t姓名:"<<this->EmpArray[i]->Name<<"\t部门编号:"<<this->EmpArray[i]->DeptId<<endl;
//	} }WorkerManager::~WorkerManager()
{if(this->EmpArray!=NULL){for(int i=0;i<this->EmpNum;i++){if(this->EmpArray[i]!=NULL){delete this->EmpArray[i];}}delete[] this->EmpArray;this->EmpArray=NULL;}	
}//菜单 
void WorkerManager:: Show_Menu()
{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;
}//退出系统
void WorkerManager::ExitSystem()
{cout<<"欢迎下次使用!"<<endl;system("pause");exit(0);
} //添加职工
void WorkerManager::Add_Emp()
{cout<<"请输入添加职工数量:"<<endl;int addNum=0;     //保存用户的输入数量cin>>addNum;if(addNum>0){//添加int newSize=this->EmpNum+addNum;    //新空间人数=原来记录人数 + 新增人数Worker **newSpace=new Worker *[newSize];   //开辟新空间if(this->EmpArray!=NULL){for(int i=0;i<this->EmpNum;i++){newSpace[i]=this->EmpArray[i];}}//批量添加新数据for(int i=0;i<addNum;i++){int id;        //职工编号string name;   //职工姓名int dSelect;   //部门选择cout<<"请输入第 "<<i+1<<" 个新职工编号:"<<endl; cin>>id;cout<<"请输入第 "<<i+1<<" 个新职工姓名:"<<endl; cin>>name;cout<<"请选择该职工岗位:"<<endl; cout<<"1、普通职工"<<endl;cout<<"2、经理"<<endl;cout<<"3、老板"<<endl;cin>>dSelect; Worker *worker=NULL;switch(dSelect){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->EmpNum+i]=worker; }delete[] this->EmpArray;     //释放原有空间 this->EmpArray=newSpace;     //更新新空间指向 this->EmpNum=newSize;        //更新新的职工人数cout<<"成功添加"<<addNum<<"名新职工!"<<endl;    //提示添加成功 this->save();    //保存数据到文件中 }else{cout<<"输入数据有误"<<endl; }system("pause");system("cls");
}//保存文件
void WorkerManager::save()
{ofstream ofs;ofs.open(FILENAME,ios::out);    //用输出的方式打开文件 ---写文件//将每个人数据写入到文件中for(int i=0;i<this->EmpNum;i++){ofs<<this->EmpArray[i]->Id<<"  "<<this->EmpArray[i]->Name<<"  "<<this->EmpArray[i]->DeptId<<endl;} ofs.close();   //关闭文件 
} //统计文件中人数
int WorkerManager::get_EmpNum()
{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::init_Emp()
{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 Manager(id,name,did);}else     //老板 {worker=new Boss(id,name,did);}this->EmpArray[index]=worker;index++; } ifs.close();   //关闭文件 
} //显示职工
void WorkerManager::Show_Emp()
{if(this->FileIsEmpty){cout<<"文件不存在或记录为空!"<<endl;}else{for(int i=0;i<EmpNum;i++){this->EmpArray[i]->showInfo();    //利用多态调用接口 }}system("pause");system("cls");
} //删除职工
void WorkerManager:: Del_Emp()
{if(this->FileIsEmpty){cout<<"文件不存在或记录为空!"<<endl;} else{cout<<"请输入想要删除职工编号:"<<endl;int id=0;cin>>id;int index=this->IsExist(id);if(index!=-1)  //说明职工存在,并且要删除掉index位置上的职工{//数据前移for(int i=index;i<this->get_EmpNum()-1;i++){this->EmpArray[i]=this->EmpArray[i+1];}this->EmpNum--;   //更新数组中记录人员个数this->save();     //数据同步更新到文件中cout<<"删除成功!"<<endl; }else{cout<<"删除失败,未找到该职工"<<endl;} }system("pause");system("cls");
}  //按照职工编号判断职工是否存在,若存在返回职工在数组中的位置,不存在返回-1  
int WorkerManager:: IsExist(int id)
{int index=-1;for(int i=0;i<this->EmpNum;i++){if(this->EmpArray[i]->Id==id){index=i;break;}} return index;
}//修改职工
void WorkerManager:: Mod_Emp()
{if(this->FileIsEmpty){cout<<"文件不存在或记录为空!"<<endl;}else{cout<<"请输入修改职工的编号:"<<endl;int id;cin>>id;int ret=this->IsExist(id);if(ret!=-1)     //查找到编号的职工 {delete this->EmpArray[ret];int newId=0;string newName=" ";int dSelect=0;cout<<"查到 "<<id<<" 号职工,请输入新职工编号:"<<endl;cin>>newId;cout<<"请输入新姓名:"<<endl;cin>>newName;cout<<"请输入岗位:"<<endl;cout<<"1、普通职工"<<endl;cout<<"2、经理"<<endl;cout<<"3、老板"<<endl;cin>>dSelect;Worker *worker=NULL;switch(dSelect){case 1:worker=new Employee(newId,newName,dSelect);break;case 2:worker=new Manager(newId,newName,dSelect);break;case 3:worker=new Boss(newId,newName,dSelect);break;default:break;}this->EmpArray[ret]=worker;    //更新数据 到数组中cout<<"修改成功!"<<endl;this->save();     //保存到文件中 }else  {cout<<"修改失败,查无此人!"<<endl;} }system("pause");system("cls");
} //查找职工
void WorkerManager::Find_Emp()
{if(this->FileIsEmpty){cout<<"文件不存在或记录为空!"<<endl;}else{cout<<"请输入查找的方式:"<<endl;cout<<"1、按职工编号查找"<<endl;cout<<"2、按姓名查找"<<endl;int select=0;cin>>select;if(select==1){int id;cout<<"请输入查找职工的编号:"<<endl;cin>>id;int ret=IsExist(id);if(ret!=-1){cout<<"查找成功!该职工信息如下:"<<endl;this->EmpArray[ret]->showInfo();}else{cout<<"查找失败,查无此人!"<<endl;}}else if(select==2)   //按姓名查找{string name;cout<<"请输入要查找的姓名:"<<endl;cin>>name;bool flag=false;   //查找到的标志for(int i=0;i<EmpNum;i++){if(EmpArray[i]->Name==name){cout<<"查找成功,职工编号:"<<EmpArray[i]->Id<<"号的信息如下:"<<endl;flag=true;this->EmpArray[i]->showInfo();}}if(flag==false){cout<<"查找失败,查无此人"<<endl;} }else{cout<<"输入选项有误!"<<endl;}		}system("pause");system("cls");
}//排序职工 
void WorkerManager::Sort_Emp()
{if(this->FileIsEmpty){cout<<"文件不存在或记录为空!"<<endl;system("pause");system("cls");}else{cout<<"请输入排序的方式:"<<endl;cout<<"1、按职工编号进行升序"<<endl;cout<<"2、按职工编号进行降序"<<endl;int select=0;cin>>select;for(int i=0;i<EmpNum;i++){int minOrMax=i;for(int j=i+1;j<EmpNum;j++){if(select==1)   //升序{if(EmpArray[minOrMax]->Id > EmpArray[j]->Id){minOrMax=j;}}else        //降序 {if(EmpArray[minOrMax]->Id < EmpArray[j]->Id){minOrMax=j;}} }if(i!=minOrMax){Worker *temp=EmpArray[i];EmpArray[i]=EmpArray[minOrMax];EmpArray[minOrMax]=temp;}}cout<<"排序成功,排序后的结果为:"<<endl;this->save();this->Show_Emp(); }
}//清空文件
void WorkerManager::Clean_File()
{cout<<"确认清空?"<<endl;cout<<"1、确认"<<endl;cout<<"2、返回"<<endl;int select=0;cin>>select;if(select==1){ofstream ofs(FILENAME,ios::trunc);ofs.close();if(this->EmpArray!=NULL){for(int i=0;i<this->EmpNum;i++){if(this->EmpArray[i]!=NULL){delete this->EmpArray[i];}}this->EmpNum=0;delete[] this->EmpArray;this->EmpArray=NULL;this->FileIsEmpty=true;}cout<<"清空成功!"<<endl;}system("pause");system("cls");
}

http://www.ppmy.cn/news/389245.html

相关文章

java基于ssm框架的企业人事管理系统企业工资考勤系统

简介 Java基于ssm开发的企业人事考勤工资系统&#xff0c;员工可以打卡、请假。系统根据员工的打卡情况自动计算工资&#xff08;全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资&#xff09;&#xff0c;员工还可以查看自己的考勤记录工资具体组成等。升级版加了部长…

职工工资管理系统

职工工资管理系统 暑假学校实习&#xff0c;要求做个工资管理系统。写这篇博客来记录下过程&#xff0c;以及在做的过程中的一些总结&#xff01;提前说下这是基于C语言写的管理系统&#xff01; 话不多说&#xff0c;先上图介绍下有哪些功能&#xff01; 1.首先来开下数据结…

基于SSM员工工资管理系统 人事管理系统【附远程调试+讲解+文档报告】

&#x1f525;作者主页&#xff1a;雨晨源码&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; &#x1f496;文末获取源码&#x1f496; 精彩专栏…

公司人事管理系统

一、程序设计题目 公司人事管理系统。能够实现对公司人员的基本档案的存储、编辑、查看&#xff0c;删除、统计、排序以及对该程序的保密等功能。 二、设计原理框图 三、程序源代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include &l…

在线人事管理系统

开发工具(eclipse/idea/vscode等)&#xff1a;idea 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;本系统按功能分为以下几个模块: “简易云”是这个系统的名字 &#xff08;1&#xff09;登录页面&#xff1a;实…

【Java】人事管理系统

这下面是我的MySQL的设计&#xff1a; 这是我的Java界面设计&#xff08;毫无美感&#xff0c;将就着看吧&#xff09; 注意&#xff1a;最好分管理员和非管理员。 注&#xff1a;我的表显示是另开了一个界面&#xff0c;本来是打算同一界面解决的&#xff0c;但是遇到了刷新不…

面试被问到:测试计划和测试方案有什么区别?

面试的时候&#xff0c;很多小伙伴都被面试官问过这个问题 “测试计划和测试方案有什么区别”&#xff1f; 到底有什么区别呢&#xff1f;我们先好好了解下这两个文档。 一、测试计划 1、测试计划是什么&#xff1f; 测试计划是组织管理层面的文件&#xff0c;从组织管理的…

企业人事管理系统

企业人事管理系统 完成一个企业人事管理系统&#xff0c;该系统中包含两个实体类:员工(Emp)&#xff0c;部门(Dept)&#xff0c;两个类中分别包含以下属性: 员工(工号&#xff0c;姓名&#xff0c;性别&#xff0c;职位&#xff0c;年龄&#xff0c;月薪&#xff0c;部门&#…