C++基础强化项目-职工管理系统

news/2025/1/13 9:24:35/

通过本项目练习c++的基础知识

    • 项目界面
    • 头文件
      • workermanager.h(管理类)
      • worker.h(职工抽象类)
      • manager.h(经理类)
      • employee.h(普通职工类)
      • boss.h(老板类)
    • 源文件
      • employee.cpp
      • boss.cpp
      • manager.cpp
      • workermanager.cpp
      • main.cpp

项目界面

在这里插入图片描述
通过界面能了解本项目的基础功能

头文件

workermanager.h(管理类)

//管理类
#pragma once
#include <iostream>
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
#include <fstream> //文件操作头文件
#define FILENAME "empFile.txt"class WorkerManager
{
public:static int MyFlag;int m_EmpNum; //记录职工人数Worker ** m_EmpArray;//职工数组指针bool IsFile_Empty;//判断文件是否为空WorkerManager();~WorkerManager();void ShowMenu();//显示界面void exitSystem();//退出系统void Add_Emp();//增加职工void Save_File();//存储文件int Get_EmpNum();//统计人数void Init_Emp(); //初始化员工操作void Show_Emp(); //显示职工int IsExist(int id);//想要删除职工得先判断职工是否存在void Del_Emp();  //删除职工void Mod_Emp(); //修改职工void Find_Emp();//查找函数void Sort_Emp();//排序职工(按照编号)void Clean_File(); //清空文件
};

worker.h(职工抽象类)

//抽象类
#pragma once
#include <iostream>
#include <string>using namespace std;
class Worker
{
public:int m_id;string m_name;int m_deptid;virtual void showInfo()=0;virtual string getDeptName()=0;
};

manager.h(经理类)

//经理类
#pragma once
#include "worker.h"
#include <iostream>
#include <string>class Manager:public Worker
{
private:
public:Manager(int id,string name,int tid);~Manager();virtual void showInfo();virtual string getDeptName();
};

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);virtual void showInfo();//获取个人信息virtual string getDeptName();//获取岗位名称};

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 tid);virtual void showInfo();//获取个人信息virtual string getDeptName();//获取岗位名称
};

源文件

employee.cpp

#include "employee.h"Employee::Employee(int id,string name,int tid){this->m_id=id;this->m_name=name;this->m_deptid=tid;}
void Employee::showInfo(){cout<<"编号"<<this->m_id<<"\t姓名:"<<this->m_name<<"\t岗位:"<<this->getDeptName()<<"\t职责:打工仔"<<endl;
}
string Employee::getDeptName(){string temp="普通员工";return temp;
}

boss.cpp

#include "boss.h"Boss::Boss(int id,string name,int tid){this->m_id=id;this->m_name=name;this->m_deptid=tid;
}
void Boss::showInfo(){cout<<"编号"<<this->m_id<<"\t姓名:"<<this->m_name<<"\t岗位:"<<this->getDeptName()<<"\t职责:当老板"<<endl;
}
string Boss::getDeptName(){string temp="老板";return temp;
}

manager.cpp

#include "manager.h"Manager::Manager(int id,string name,int tid)
{this->m_id=id;this->m_name=name;this->m_deptid=tid;
}Manager::~Manager()
{}void Manager::showInfo()
{    cout<<"编号"<<this->m_id<<"\t姓名:"<<this->m_name<<"\t岗位:"<<this->getDeptName()<<"\t职责:管理普通员工"<<endl;}
string Manager::getDeptName()
{string temp="经理";return temp;
}

workermanager.cpp

#include "workermanager.h"
#include <iostream>using namespace std;
WorkerManager::WorkerManager()
{//分情况讨论初始化ifstream ifs;ifs.open(FILENAME,ios::in);//读文件//>>1.文件不存在if(!ifs.is_open()){//cout<<"文件不存在"<<endl;this->m_EmpNum=0; //初始化人数为0this->m_EmpArray=NULL;//数组为空this->IsFile_Empty= true;ifs.close();return;}//>>2.文件空char ch;ifs>>ch;//读1个字符if(ifs.eof()){//cout<<"文件空"<<endl;this->m_EmpNum=0; //初始化人数为0this->m_EmpArray=NULL;//数组为空this->IsFile_Empty= true;ifs.close();return;}//>>3.文件存在this->IsFile_Empty=false;int num=this->Get_EmpNum();//cout<<"职工人数为"<<num<<"人"<<endl;this->m_EmpNum=num;//开辟空间this->m_EmpArray=new Worker*[this->m_EmpNum];// 存放到空间this->Init_Emp();/******************下面是测试代码****************************///    for (int var = 0; var < this->m_EmpNum; ++var) {//        cout<<this->m_EmpArray[var]->m_name<<endl;//    }
}WorkerManager::~WorkerManager()
{if(this->m_EmpArray!=NULL){for(int i=0;i<this->m_EmpNum;i++){if(this->m_EmpArray[i] != NULL){delete this->m_EmpArray[i];}}delete [] this->m_EmpArray;this->m_EmpArray=NULL;}
}
//清空文件
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->m_EmpArray!=NULL){//删除职工对象for(int i=0;i<m_EmpNum;i++){delete this->m_EmpArray[i];this->m_EmpArray[i]=NULL;}delete [] this->m_EmpArray;this->m_EmpArray=NULL;this->m_EmpNum=0;this->IsFile_Empty=true;}cout<<"清空成功"<<endl;}system("pause");system("cls");
}//排序职工,选用的方法是选择排序
void WorkerManager::Sort_Emp()
{if(this->IsFile_Empty){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<m_EmpNum;i++){int MinOrMax=i;//声明最小值或者最大值for(int j=i+1;j<this->m_EmpNum;j++){if(select == 1){if(this->m_EmpArray[MinOrMax]->m_id > this->m_EmpArray[j]->m_id){MinOrMax=j;}}else { //降序if(this->m_EmpArray[MinOrMax]->m_id < this->m_EmpArray[j]->m_id){MinOrMax=j;}}}if(i!=MinOrMax){//交换元素值Worker*temp=this->m_EmpArray[i];this->m_EmpArray[i]=this->m_EmpArray[MinOrMax];this->m_EmpArray[MinOrMax]=temp;}}cout<<"排序成功!其结果为:"<<endl;this->Save_File();//存储结果this->Show_Emp();}
}//查找员工函数
void WorkerManager::Find_Emp()
{int val=0;if(this->IsFile_Empty){cout<<"文件不存在或记录为空!"<<endl;}else{bool flage = false;//通过姓名查找的标志位//用来判断员工是否存在cout<<"请输入查找方式:"<<endl;//提供两种查找方式cout<<"1.按照职工编号查找"<<endl;cout<<"2.按照职工姓名查找"<<endl;cin>>val;if(val == 1){int id=0;cout<<"请输入职工编号"<<endl;cin>>id;int ret=IsExist(id);if(ret!= -1){cout<<"通过编号查找到了员工"<<endl;this->m_EmpArray[ret]->showInfo();//忘了this,使用多态打印信息flage =true;}}else if(val == 2){//按照姓名查询string name;cout<<"请输入要查找的姓名"<<endl;cin>>name;for(int i=0; i<m_EmpNum;i++ )//遍历查找员工是否存在{if(this->m_EmpArray[i]->m_name==name){cout<<"通过姓名查找到了员工"<<endl;this->m_EmpArray[i]->showInfo();flage =true;}}}else{cout<<"输入选项有误"<<endl;}if(flage == false){cout<<"未查找到对应的员工"<<endl;}}system("pause");system("cls");
}//修改职工
void WorkerManager::Mod_Emp()
{if(this->IsFile_Empty){cout<<"文件不存在"<<endl;}else {cout<<"请输入修改职工编号"<<endl;int id;cin >>id;int ret=this->IsExist(id);if(ret!=-1){//找到职工//将职工从数组中删掉delete this->m_EmpArray[ret];int newid=0;string newname="";int deselect=0;//新部门编号cout<<"查找到:"<<id<<"号职工"<<endl;while (1) {cout<<"请输入新职工号:"<<endl;cin>>newid;if(this->IsExist(newid)!=-1){cout<<"职工编号已存在,请重新输入"<<endl;}else{break;}}cout<<"请输入新姓名"<<endl;cin>>newname;cout<<"请输入岗位"<<endl;cout<<"1.普通职工"<<endl;cout<<"2.经理"<<endl;cout<<"3.老板"<<endl;cin>>deselect;//输入岗位Worker *worker=NULL;switch (deselect) {case 1:worker=new Employee(newid,newname,deselect);break;case 2:worker=new Manager(newid,newname,deselect);break;case 3:worker=new Boss(newid,newname,deselect);break;default:break;}//更新数组this->m_EmpArray[ret]=worker;cout<<"修改成功"<<endl;//保存到文件中this->Save_File();}else{cout<<"修改失败,查无此人"<<endl;}}//按任意键清屏system("pause");system("cls");
}//删除员工
void WorkerManager::Del_Emp()
{if(this->IsFile_Empty){cout<<"公司还没招聘员工,删除失败"<<endl;}else {cout<<"输入要删除的职工编号"<<endl;int id=0;cin>>id;int index=this->IsExist(id);if(index == -1){cout<<"未查询到员工,请确认员工编号"<<endl;}else {for (int var = index; var < this->m_EmpNum-1; ++var) {this->m_EmpArray[var]=this->m_EmpArray[var+1];}this->m_EmpNum--;//同步到文件中this->Save_File();cout<<"删除成功"<<endl;}}system("pause");system("cls");
}//判断职工是否存在
int WorkerManager::IsExist(int id)
{int index =-1;for (int var = 0; var < this->m_EmpNum; ++var) {if(this->m_EmpArray[var]->m_id==id){index = var; //返回其所在数组中位置break;}}return index;
}//显示职工
void WorkerManager::Show_Emp()
{//判断人数if(this->IsFile_Empty){cout<<"无员工"<<endl;}else{   //使用多态完成显示职工功能for (int var = 0; var < m_EmpNum; ++var) {this->m_EmpArray[var]->showInfo();}}//按下任意键清屏system("pause");system("cls");
}
//初始化员工
void WorkerManager::Init_Emp()
{ifstream ifs;ifs.open(FILENAME,ios::in);int id; //员工idstring 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->m_EmpArray[index] =worker;index++;}ifs.close(); //关闭文件
}
//获取员工人数
int WorkerManager::Get_EmpNum()
{int id; //员工idstring name; //员工姓名int Did;//部门编号int num=0;ifstream ifs;ifs.open(FILENAME,ios::in); //打开文件 读while(ifs>>id &&ifs>>name&&ifs>>Did) //当三个全部成功后,让num++{num++;}return num;}//写文件函数
void WorkerManager::Save_File()
{ofstream ofs;//想要使用写文件得使用ofstream对文件进行写操作ofs.open(FILENAME,ios::out);//ios::下的输出方式打开 -- 写文件for(int i=0;i<this->m_EmpNum;i++) //m_EmpNum职工人数{ofs<<this->m_EmpArray[i]->m_id<<" "<<this->m_EmpArray[i]->m_name<<" "<<this->m_EmpArray[i]->m_deptid<<endl;//部门编号写入}ofs.close();
}
int WorkerManager::MyFlag=0;
//添加职工
void WorkerManager::Add_Emp()
{int addNum=0;cout<<"输入添加职工数:"<<endl;cin>>addNum;if (addNum>0){//新空间大小是原本空间大小加上增加空间大小int newSize=this->m_EmpNum+addNum;//开辟新空间,存储人数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 < addNum; i++){int id;//   职工编号string name;//  职工姓名int tid;while (1) {cout<<"请输入第"<<i+1<<"位员工编号"<<endl;cin>>id;//有点问题if( ((id == WorkerManager::MyFlag)||this->IsExist(id)+1 == id)){cout<<"员工编号已经存在"<<endl;}else{WorkerManager::MyFlag=id;break;}}cout<<"请输入第"<<i+1<<"位员工姓名"<<endl;cin>>name;cout<<"请输入职工岗位:"<<endl;cout<<"1.普通员工"<<endl;cout<<"2.经理"<<endl;cout<<"3.老板"<<endl;cin>>tid;Worker*temp=NULL;switch (tid){case 1:temp=new Employee(id,name,1);break;case 2:temp=new Manager(id,name,2);break;case 3:temp=new Boss(id,name,3);break;default:cout<<"error"<<endl;}//将员工保存到数组中newSpace[this->m_EmpNum+i]=temp;}//释放原有空间,并更新新空间指向delete [] this->m_EmpArray;//释放数组加[]this->m_EmpArray=newSpace;//更新职工人数this->m_EmpNum=newSize;cout<<"添加成功"<<addNum<<"名员工"<<endl;this->IsFile_Empty=false;//修改判空标志位//保存添加的员工this->Save_File();}else{cout<<"输入错误"<<endl;}system("pause");system("cls");}
//退出系统
void WorkerManager::exitSystem()
{cout<<"已退出系统"<<endl;system("pause");exit(0);
}
//显示菜单
void WorkerManager::ShowMenu()
{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;
}

main.cpp

#include <iostream>
#include "workermanager.h"
using namespace std;
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"int main()
{// //测试代码// Worker *test=NULL;// test=new Employee(1,"张三",1);// test->showInfo();// delete test;// test = new Manager(2,"李四",3);// test->showInfo();// delete test;// test = new Boss(3,"王五",4);// test->showInfo();
#if 1  WorkerManager wm;int chose;while (1){wm.ShowMenu();cin>>chose;switch (chose){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("clr");break;}}
#endifsystem("pause");return 0;
}

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

相关文章

【正点原子STM32连载】第三十八章 CAN通讯实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第三…

Java读.xlsx表格

Java读.xlsx表格 https://www.bilibili.com/video/BV1aV411z7ey?p4 视频中有详解。

xlsx表格怎么制作

首先打开excel表格软件&#xff0c;如图所示。 选中G-L列的一行&#xff0c;然后点击顶部栏的【合并后居中】。 然后再选中9-14行的一列&#xff0c;点击【合并后居中】。 选中范围内的单元格&#xff0c;鼠标右键&#xff0c;然后选择【设置单元格格式】 然后点击【边框】。…

表格文件返回给浏览器下载时不是.xlsx表格格式

项目场景&#xff1a; 使用POI组件创建表格返回给浏览器进行下载 问题描述 表格文件返回给浏览器下载时不是.xlsx表格格式 解决方案&#xff1a; response.setHeader("Content-disposition", "attachment; filenameyearPlan.xlsx");在Header中设置文件名…

python xlsx表格最大行最大列

xlsx表格最大行最大列 其实就是.max_row和.max_column 直接上代码,一眼就看懂! import openpyxl def run():file 曲某某_MedicalRecord.xlsxwb openpyxl.load_workbook(filenamefile) # 打开文件sheet1 wb.activerow sheet1.max_rowprint(row)print ("row num:&qu…

Linux下操作Excel表格,xlsx表格

最近Linux下用到表格处理&#xff0c;但是libxl库收费&#xff0c;因为版权的问题不能用&#xff0c;所有在git上重新找&#xff0c;最后发现了一个qt版本的&#xff1a; https://github.com/dbzhang800/QtXlsxWriter 案例代码&#xff1a; http://qtxlsx.debao.me/qtxlsx-exa…

MATLAB中mat转换为xlsx表格数据

如果我们的数据位如下图的mat二维数据&#xff0c;想要转化为表格文件。 在此之前&#xff0c;我在网上找了很多办法。 比如下图这种办法&#xff0c;然而亲测并没有用&#xff0c;只是会把那一串字幕写入表格里。 xlswrite(训练_42.xlsx,sounds_y2);% 或者 xlswrite(训练_4…

node实现将xlsx表格转为json格式文件

node实现将xlsx表格转为json格式文件 使用nodejs的插件node-xlsx将excel转换为json&#xff0c;另外也用到了node的fs文件读写模块。 1. 安装node-xlsx npm install node-xlsx cnpm install node-xlsx2. 创建main.js&#xff0c;创建文件夹xlsx用于存放需要转换的xlsx格式的…