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

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

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

项目界面

C++基础强化项目-职工管理系统_第1张图片
通过界面能了解本项目的基础功能

头文件

workermanager.h(管理类)

//管理类
#pragma once
#include 
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
#include  //文件操作头文件
#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 
#include 

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 
#include 

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 
#include 
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 
#include 
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<<"编号"<m_id
        <<"\t姓名:"<m_name
        <<"\t岗位:"<getDeptName()
        <<"\t职责:打工仔"<

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<<"编号"<m_id
        <<"\t姓名:"<m_name
        <<"\t岗位:"<getDeptName()
        <<"\t职责:当老板"<

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<<"编号"<m_id
        <<"\t姓名:"<m_name
        <<"\t岗位:"<getDeptName()
        <<"\t职责:管理普通员工"<

workermanager.cpp

#include "workermanager.h"
#include 

using namespace std;
WorkerManager::WorkerManager()
{
    //分情况讨论初始化
    ifstream ifs;
    ifs.open(FILENAME,ios::in);//读文件
    //>>1.文件不存在
    if(!ifs.is_open())
    {
        //cout<<"文件不存在"<m_EmpNum=0; //初始化人数为0
        this->m_EmpArray=NULL;//数组为空
        this->IsFile_Empty= true;
        ifs.close();
        return;
    }
    //>>2.文件空
    char ch;
    ifs>>ch;//读1个字符
    if(ifs.eof())
    {
        //cout<<"文件空"<m_EmpNum=0; //初始化人数为0
        this->m_EmpArray=NULL;//数组为空
        this->IsFile_Empty= true;
        ifs.close();
        return;
    }

    //>>3.文件存在
    this->IsFile_Empty=false;
    int num=this->Get_EmpNum();
    //cout<<"职工人数为"<m_EmpNum=num;
    //开辟空间
    this->m_EmpArray=new Worker*[this->m_EmpNum];
    // 存放到空间
    this->Init_Emp();

    /******************下面是测试代码****************************/
    //    for (int var = 0; var < this->m_EmpNum; ++var) {
    //        cout<m_EmpArray[var]->m_name<m_EmpArray!=NULL)
    {
        for(int i=0;im_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<<"确定清空?"<>select;
        if(select == 1)
    {
        ofstream ofs(FILENAME,ios::trunc);//删除并重新创建
        ofs.close();
        if(this->m_EmpArray!=NULL)
        {
            //删除职工对象
            for(int i=0;im_EmpArray[i];
                this->m_EmpArray[i]=NULL;
            }
            delete [] this->m_EmpArray;
            this->m_EmpArray=NULL;
            this->m_EmpNum=0;
            this->IsFile_Empty=true;
        }
        cout<<"清空成功"<IsFile_Empty)
    {
        cout<<"文件是不存在的,或者记录为空"<>select;
        //开始实现排序功能
        for(int i=0;im_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<<"排序成功!其结果为:"<Save_File();//存储结果
        this->Show_Emp();
    }
}

//查找员工函数
void WorkerManager::Find_Emp()
{
    int val=0;
    if(this->IsFile_Empty)
    {
        cout<<"文件不存在或记录为空!"<>val;
        if(val == 1)
        {
            int id=0;
            cout<<"请输入职工编号"<>id;
            int ret=IsExist(id);
            if(ret!= -1)
            {
                cout<<"通过编号查找到了员工"<m_EmpArray[ret]->showInfo();//忘了this,使用多态打印信息
                flage =true;
            }
        }else if(val == 2)
        {
            //按照姓名查询
            string name;
            cout<<"请输入要查找的姓名"<>name;
            for(int i=0; im_EmpArray[i]->m_name==name)
                {
                    cout<<"通过姓名查找到了员工"<m_EmpArray[i]->showInfo();
                     flage =true;
                }
            }
        }else
        {
            cout<<"输入选项有误"<IsFile_Empty)
    {
        cout<<"文件不存在"<>id;
        int ret=this->IsExist(id);
        if(ret!=-1)
        {
            //找到职工
            //将职工从数组中删掉
            delete this->m_EmpArray[ret];
            int newid=0;
            string newname="";
            int deselect=0;//新部门编号
            cout<<"查找到:"<>newid;
                if(this->IsExist(newid)!=-1)
                {
                    cout<<"职工编号已存在,请重新输入"<>newname;
            cout<<"请输入岗位"<>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<<"修改成功"<Save_File();
        }else
        {
            cout<<"修改失败,查无此人"<IsFile_Empty)
    {
        cout<<"公司还没招聘员工,删除失败"<>id;
        int index=this->IsExist(id);
        if(index == -1)
        {
            cout<<"未查询到员工,请确认员工编号"<m_EmpNum-1; ++var) {
                this->m_EmpArray[var]=this->m_EmpArray[var+1];
            }
            this->m_EmpNum--;
            //同步到文件中
            this->Save_File();
            cout<<"删除成功"<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<<"无员工"<m_EmpArray[var]->showInfo();
        }
    }
    //按下任意键清屏
    system("pause");
    system("cls");
}
//初始化员工
void WorkerManager::Init_Emp()
{
    ifstream ifs;
    ifs.open(FILENAME,ios::in);
    int id; //员工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->m_EmpArray[index] =worker;
        index++;
    }
    ifs.close(); //关闭文件
}
//获取员工人数
int WorkerManager::Get_EmpNum()
{
    int id; //员工id
    string 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;im_EmpNum;i++) //m_EmpNum职工人数
    {
        ofs<m_EmpArray[i]->m_id<<" "
            <m_EmpArray[i]->m_name<<" "
            <m_EmpArray[i]->m_deptid<>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<<"请输入第"<>id;
               //有点问题
               if( ((id == WorkerManager::MyFlag)||this->IsExist(id)+1 == id))
               {
                    cout<<"员工编号已经存在"<>name;
            cout<<"请输入职工岗位:"<>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"<m_EmpNum+i]=temp;
        }
        //释放原有空间,并更新新空间指向
        delete [] this->m_EmpArray;//释放数组加[]
        this->m_EmpArray=newSpace;
        //更新职工人数
        this->m_EmpNum=newSize;
        cout<<"添加成功"<IsFile_Empty=false;//修改判空标志位
        //保存添加的员工
        this->Save_File();
    }else
    {
        cout<<"输入错误"<

main.cpp

#include 
#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;
        }
        
    }
#endif
    system("pause");
    return 0;
}

你可能感兴趣的:(c++,c++,开发语言,学习)