国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用c++實(shí)現(xiàn)職工管理系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了用c++實(shí)現(xiàn)職工管理系統(tǒng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

首先帶大家看看文件的結(jié)構(gòu)以及樹狀圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)用c++實(shí)現(xiàn)職工管理系統(tǒng)

以下是具體的思路:

1、管理系統(tǒng)需求

職工管理系統(tǒng)可以用來管理公司內(nèi)所有員工信息

本教程主要利用c++來實(shí)現(xiàn)一個(gè)基于多態(tài)的職工管理系統(tǒng)

公司中職工分為三類:普通員工、經(jīng)理、老板、顯示信息時(shí),需要顯示職工編號(hào)、職工姓名、職工崗位、以及職責(zé)

普通員工職責(zé):完成經(jīng)理交給的任務(wù)

經(jīng)理的職責(zé):完成老板交給的任務(wù),并下發(fā)給任務(wù)給員工

老板職責(zé):管理公司所有事物

管理系統(tǒng)中需要實(shí)現(xiàn)的功能如下

  • 推出管理程序: 退出當(dāng)前管理系統(tǒng)

  • 增加職工信息: 實(shí)現(xiàn)批量添加職工功能,將信息錄入到文件中,職工信息為:職工編號(hào)、姓名、部門編號(hào)

  • 顯示職工信息: 顯示公司內(nèi)部所有職工的信息

  • 刪除離職職工:按照編號(hào)刪除指定的職工

  • 修改職工信息: 按照編號(hào)修改職工個(gè)人信息

  • 查找職工信息: 按照職工的編號(hào)或者職工的姓名進(jìn)行查找相關(guān)的人員信息

  • 按照編號(hào)排序:按照職工編號(hào)、進(jìn)行排序,排序規(guī)則由用戶指定

  • 清空所有文檔:清空文件中記錄的所有職工信息(清空前需要在此取人,防止誤刪)

系統(tǒng)界面效果如圖:

2、創(chuàng)建項(xiàng)目

創(chuàng)建項(xiàng)目步驟如下:

  • 創(chuàng)建新項(xiàng)目

  • 添加文件

2.1創(chuàng)建項(xiàng)目

打開vs2017后,點(diǎn)擊創(chuàng)建項(xiàng)目,創(chuàng)建新的C++項(xiàng)目

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

填寫項(xiàng)目名稱以及項(xiàng)目路徑,點(diǎn)擊確認(rèn)

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

2.2添加文件

右鍵源文件,進(jìn)行添加文件操作

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

至此項(xiàng)目已經(jīng)創(chuàng)建完畢

3、創(chuàng)建管理類

管理類負(fù)責(zé)的內(nèi)容如下:

  • 與用戶的溝通菜單界面

  • 對(duì)職工增刪改查的操作

  • 與文件的讀寫交互

3.1創(chuàng)建文件

在頭文件和源文件的文件下分別創(chuàng)建workerManager.h和workManager.cpp文件

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

3.2頭文件實(shí)現(xiàn)

在workManager.h中設(shè)計(jì)管理類

代碼如下:

#pragma  once//防止頭文件重復(fù)包含
#include <iostream>//包含輸入輸出流頭文件
using namespace std;//使用標(biāo)準(zhǔn)命名空間
class WorkerManager
{
public:
    //構(gòu)造函數(shù)
    WorkerManager();
    //析構(gòu)函數(shù)
    ~WorkerManager();
};

在workerManager.cpp中設(shè)計(jì)管理類

代碼如下:

#include "workerManager.h"
?
WorkerManager::WorkerManager()
{
?
}
WorkerManager::~WorkerManager()
{
?
?
}

4、菜單功能

功能描述:與用戶的溝通界面

4.1 添加成員函數(shù)

在管理類workerManager.h中添加成員函數(shù) void Show_Menu():

#pragma  once//防止頭文件重復(fù)包含
#include <iostream>//包含輸入輸出流頭文件
using namespace std;//使用標(biāo)準(zhǔn)命名空間
class WorkerManager
{
public:
    //構(gòu)造函數(shù)
    WorkerManager();
?
    //展示菜單
    void Show_Menu();
?
    //析構(gòu)函數(shù)
    ~WorkerManager();
};

4.2 菜單功能實(shí)現(xiàn)

在管理類workerManager.cpp中實(shí)現(xiàn)Show_Menu()函數(shù)

#include "workerManager.h"
?
WorkerManager::WorkerManager()
{
?
}
//展示菜單
void WorkerManager::Show_Menu()
{
    cout << "************************************" << endl;
    cout << "********* 歡迎使用職工管理系統(tǒng) *****" << endl;
    cout << "********** 0.退出管理程序! ********" << endl;
    cout << "********** 1.增加職工信息 **********" << endl;
    cout << "********** 2.顯示職工信息 **********" << endl;
    cout << "********** 3.刪除職工信息 **********" << endl;
    cout << "********** 4.修改職工信息 **********" << endl;
    cout << "********** 5.查找職工信息 **********" << endl;
    cout << "********** 6.按照編號(hào)排序 **********" << endl;
    cout << "********** 7.清空所有文檔 **********" << endl;
    cout << "**********************************" << endl;
}
WorkerManager::~WorkerManager()
{
    if (this->m_EmArray != NULL)
    {
        delete[] this->m_EmArray;
        this->m_EmArray = NULL;
    }
?
}

4.3 測試菜單功能

在職工管理系統(tǒng).cpp中測試菜單功能

代碼:

#include<iostream>
using namespace std;
#include "workerManager.h"
?
int main()
{
    //實(shí)例化管理者對(duì)象
    WorkerManager wm;
    //調(diào)用展示菜單成員函數(shù)
    wm.Show_Menu();
    system("pause");
    return 0;
}

運(yùn)行效果如圖:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

5、退出功能

5.1提供功能接口

在main函數(shù)中提供分支選擇,提供每個(gè)功能接口

代碼:

#include<iostream>
using namespace std;
#include "workerManager.h"
?
int main()
{
    //實(shí)例化管理者對(duì)象
    WorkManager wm;
?
    int choice = 0;//用來存儲(chǔ)用戶的選項(xiàng)
    while(true)
    {
 ? //調(diào)用展示菜單成員函數(shù)
    wm.Show_Menu();
    cout << "請(qǐng)輸入您的選擇" << endl;
    cin >> choice;//接受用戶的選項(xiàng)
    switch (choice)
    {
    case 0://退出系統(tǒng)
        wm.ExitSystem();
        break;
    case 1://增加職工
        break;
    case 2://顯示職工
        break;
    case 3://刪除職工
        break;
    case 4://修改職工
        break;
    case 5://查找職工
        break;
    case 6://排序職工
        break;
    case 7://清空文檔
        break;
    default://清屏
        break;
    }
    }
    
    system("pause");
    return 0;
}

5.2實(shí)現(xiàn)退出功能

在workerManager.h中退出系統(tǒng)的成員函數(shù) void exitSystem();

void ExitSystem();

在workerManager.cpp中提供具體的功能實(shí)現(xiàn)

代碼:

void WorkerManager::ExitSystem()
{
    cout << "歡飲下次再使用" << endl;
    system("pause");
    exit(0);//退出程序
}

5.3測試功能

在main函數(shù)分支0選項(xiàng)中,調(diào)用退出程序的接口

運(yùn)行測試截圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

6、創(chuàng)建職工類

6.1創(chuàng)建職工抽象類

職工的分類為: 普通員工、經(jīng)理、老板

將三種職工抽象到一個(gè)類(worker)中,利用多態(tài)管理不同職工種類

職工的屬性為:職工編號(hào)、職工姓名、職工所在部門編號(hào)

職工的行為:崗位指責(zé)信息描述、獲取崗位名稱

頭文件文件夾下 創(chuàng)建文件worker.h 文件并且添加如下代碼:

#pragma once
#include<iostream>
using namespace std;
#include<string>
?
//職工抽象類
class Worker
{
public:
    //顯示個(gè)人信息
    virtual void showInfo() = 0;
    //獲取崗位名稱
    virtual string getDeptName() = 0;
    //職工編號(hào)
    int m_Id;
    //職工姓名
    string m_Name;
    //部門編號(hào)
    int m_DeptId;
};
?

6.2創(chuàng)建普通員工類

普通員工類繼承職工抽象類,并重寫父類中的純虛函數(shù)

在頭文件和源文件的文件夾下分別船艦employee.h和employee.cpp文件

employee.h中代碼如下:

//普通員工文件
#pragma once
#include <iostream>
using namespace std;
#include "worker.h"
class Employee :public Worker 
{
public:
    //構(gòu)造函數(shù)
    Employee(int id,string name,int dId);
    //顯示個(gè)人信息
    virtual void showInfo();
    //獲取崗位名稱
    virtual string getDeptName();
?
};

employee.cpp中代碼如下P:

#include "employee.h"
//構(gòu)造函數(shù)
Employee::Employee(int id, string name, int dId)
{
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
?
}
//顯示個(gè)人信息
void Employee::showInfo()
{
    cout << "職工編號(hào):" << this->m_Id
        << "\t職工姓名" << this->m_Name
        << "\t崗位:" << this->getDeptName()
        << "\t崗位職責(zé):完成經(jīng)理交給的任務(wù)" << endl;
}
//獲取崗位名稱
string Employee::getDeptName()
{
    return string("員工");
}
?

測試代碼:

#include<iostream>
using namespace std;
#include "workerManager.h"
#include "worker.h"
#include "employee.h"
int main()
{
    //測試代碼
    Worker *worker = NULL;
    worker = new Employee(1,"張三",1);
    worker->showInfo();
 ? ?//  實(shí)例化管理者對(duì)象
//  WorkManager wm;
// 
//  int choice = 0;//用來存儲(chǔ)用戶的選項(xiàng)
//  while(true)
//  {
// ?  //調(diào)用展示菜單成員函數(shù)
//  wm.Show_Menu();
//  cout << "請(qǐng)輸入您的選擇" << endl;
//  cin >> choice;//接受用戶的選項(xiàng)
//  switch (choice)
//  {
//  case 0://退出系統(tǒng)
//      wm.ExitSystem();
//      break;
//  case 1://增加職工
//      break;
//  case 2://顯示職工
//      break;
//  case 3://刪除職工
//      break;
//  case 4://修改職工
//      break;
//  case 5://查找職工
//      break;
//  case 6://排序職工
//      break;
//  case 7://清空文檔
//      break;
//  default://清屏
        break;
//  }
//  }
//  
    system("pause");
 ? ?return 0;
}
?

運(yùn)行效果截圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

6.3創(chuàng)建經(jīng)理類

經(jīng)理類繼承職工抽象類,并重寫父類中純虛函數(shù),和普通員工類似

在頭文件和源文件的文件夾下分別創(chuàng)建manager.h和manager.cpp文件

manager.h中代碼如下:

#pragma  once
#include <iostream>
using namespace std;
#include "worker.h"
//經(jīng)理類
class Manager :public Worker
{
public:
    //構(gòu)造函數(shù)
    Manager(int id, string name, int dId);
    //顯示個(gè)人信息
    virtual void showInfo();
    //獲取崗位名稱
    virtual string getDeptName();
};

manager.cpp中代碼如下:

#include "manager.h"
//構(gòu)造函數(shù)
Manager::Manager(int id, string name, int dId)
{
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}
//顯示個(gè)人信息
void Manager::showInfo()
{
    cout << "職工編號(hào):" << this->m_Id
        << "\t職工姓名" << this->m_Name
        << "\t崗位:" << this->getDeptName()
        << "\t崗位職責(zé):完成老板交給的任務(wù),并且下發(fā)任務(wù)給員工" << endl;
}
//獲取崗位名稱
string Manager::getDeptName()
{
    return string("經(jīng)理");
}

6.4創(chuàng)建老板類

老板類繼承職工抽象類,并重寫父類中的純虛函數(shù),和普通員工類似

在頭文件和源文件的文件夾下分別創(chuàng)建boss.h和boss.cpp文件

boss.h中代碼如下:

#pragma  once
#include <iostream>
using namespace std;
#include "worker.h"
//老板類
class Boss :public Worker
{
public:
    //構(gòu)造函數(shù)
 ? Boss(int id, string name, int dId);
    //顯示個(gè)人信息
    virtual void showInfo();
    //獲取崗位名稱
    virtual string getDeptName();
};

boss.cpp中代碼如下:

#include "boss.h"
//構(gòu)造函數(shù)
Boss::Boss(int id, string name, int dId)
{
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}
//顯示個(gè)人信息
void Boss::showInfo()
{
    cout << "職工編號(hào):" << this->m_Id
        << "\t職工姓名" << this->m_Name
        << "\t崗位:" << this->getDeptName()
        << "\t崗位職責(zé):管理公司所有事務(wù)" << endl;
}
//獲取崗位名稱
string Boss::getDeptName()
{
    return string("總裁");
}

6.5測試多態(tài)

在職工管理系統(tǒng).cpp中添加測試函數(shù),并且運(yùn)行能夠產(chǎn)生多態(tài)

測試代碼如下:

#include<iostream>
using namespace std;
#include "workerManager.h"
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
int main()
{
//測試代碼
    Worker *worker = NULL;
    worker = new Employee(1,"張三",1);
    worker->showInfo();
    delete worker;
?
    worker = new Manager(2, "李四", 2);
    worker->showInfo();
    delete worker;
?
    worker = new Boss(2, "王五", 2);
    worker->showInfo();
    delete worker;
 ? ?system("pause");
    return 0;
}

運(yùn)行效果截圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

7、添加職工

功能描述: 批量添加職工,并且保存到文件中

7.1功能分析

分析:

用戶在批量創(chuàng)建時(shí),可能會(huì)創(chuàng)建不同種類的職工

如果向?qū)⑺胁煌N類的員工都放入到一個(gè)數(shù)組中,可以將所有員工的指針維護(hù)到同一個(gè)數(shù)組里

如果想在程序中維護(hù)這個(gè)不定長度的數(shù)組,可以將數(shù)組創(chuàng)建到堆區(qū),并利用Worker**的指針維護(hù)

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

7.2功能實(shí)現(xiàn)

在WorkerManager.h頭文件中添加成員屬性 代碼:

#pragma  once//防止頭文件重復(fù)包含
#include <iostream>//包含輸入輸出流頭文件
using namespace std;//使用標(biāo)準(zhǔn)命名空間
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
class WorkerManager
{
public:
    
    //記錄職工人數(shù)
    int m_EmpNum;
?
    //職工數(shù)組指針
    Worker ** m_EmArray;
?
    //添加職工
    void Add_Emp();
    
};

在WorkerManager構(gòu)造函數(shù)中初始化屬性

?
WorkerManager::WorkerManager()
{
    //初始化屬性
    this->m_EmpNum = 0;
?
    this->m_EmArray = NULL;
}
//析構(gòu)函數(shù)
WorkerManager::~WorkerManager()
{
    if (this->m_EmArray != NULL)
    {
        delete[] this->m_EmArray;
        this->m_EmArray = NULL;
    }
?
}

workManager.cpp中實(shí)現(xiàn)該函數(shù)

//添加職工
void WorkerManager::Add_Emp()
{
	cout << "請(qǐng)輸入添加職工數(shù)量:" << endl;
	int addNum=0;//保存用戶的輸入數(shù)量
	cin >> addNum;
	if (addNum > 0)
	{
		//添加
		//計(jì)算添加空間大小
		int newSize = this->m_EmpNum + addNum;//新空間=原來記錄人數(shù)+新增人數(shù)
	//開辟新空間
		Worker ** newSpace =new Worker*[newSize];
	//將原來空間下數(shù)據(jù),拷貝到新空間下
		if (this->m_EmArray != NULL)
		{
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				newSpace[i] = this->m_EmArray[i];
			}
		}
		//批量添加新數(shù)據(jù)
		for (int i=0;i<addNum;i++)
		{
			int id;//職工編號(hào)
			string name;//職工姓名
			int dSelect;//部門選擇
			cout << "請(qǐng)輸入第" << i + 1 << "個(gè)新職工編號(hào):" << endl;
			cin>>id;
			cout << "請(qǐng)輸入第" << i + 1 << "個(gè)新職工姓名:" << endl;
			cin >> name;
			cout << "請(qǐng)選擇該職工崗位:" << endl;
			cout << "1、普通職工" << endl;
			cout << "2、經(jīng)理" << 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);
			default:
				break;
			}
			//將創(chuàng)建職工職責(zé),保存到數(shù)組中
			newSpace[this->m_EmpNum + i] = worker;

		}
		//釋放原有空間
		delete[] this->m_EmArray;

		//更改新空間指向
		this->m_EmArray = newSpace;
		//更新新的職工人數(shù)
		this->m_EmpNum = newSize;

		//成功添加后,保存到文件中
		//提示添加成功
		cout << "成功添加" << addNum << "名新職工" << endl;
	}
	else
	{
		//輸入有誤
		cout << "輸入數(shù)據(jù)有誤" << endl;
	}
	//按任意鍵后,清屏回到上級(jí)目錄
	system("pause");
	system("cls");
}

7.3測試添加

運(yùn)行效果:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

8、文件交互-寫文件

功能描述:對(duì)文件進(jìn)行讀寫

在上一個(gè)添加功能中,我們只是將所有的數(shù)據(jù)臺(tái)南佳到了內(nèi)存中,一旦程序結(jié)束就無法保存了,因此文件管理類中需要一個(gè)與文件進(jìn)行交互的功能,對(duì)于文件進(jìn)行讀寫操作

8.1設(shè)計(jì)文件路徑

首先我們將文件路徑,在workerManager.h中添加宏常量,并且包含頭文件fstream

#include <fstream>
#define  FILENAME "emFIle.txt"

8.2成員函數(shù)聲明

在workerManager.h中類里添加成員函數(shù) void save();

	//保存文件
	void save();

8.3保存文件功能實(shí)現(xiàn)

//保存文件
void WorkerManager::save()
{
	ofstream ofs;
	ofs.open(FILENAME, ios::out);//用輸出的方式打開文件--寫文件
	//將每個(gè)人的數(shù)據(jù)寫入到文件中
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		ofs << this->m_EmArray[i]->m_Id << " "
			<< this->m_EmArray[i]->m_Name << " "
			<< this->m_EmArray[i]->m_DeptId << endl;
	}
	//關(guān)閉文件
	ofs.close();

}

8.4保存文件功能測試

	//釋放原有空間
		delete[] this->m_EmArray;

		//更改新空間指向
		this->m_EmArray = newSpace;
		//更新新的職工人數(shù)
		this->m_EmpNum = newSize;

		//成功添加后,保存到文件中
		//提示添加成功
		cout << "成功添加" << addNum << "名新職工" << endl;
		
		//保存數(shù)據(jù)到文件中
		this->save();
	
	}

再次運(yùn)行代碼,添加職工

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

同級(jí)目錄下多出文件,并且保存了添加的信息

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

9、文件交互-讀文件

功能描述: 將文件中的內(nèi)容讀取到程序中

雖然我們實(shí)現(xiàn)了添加職工后保存到文件的操作,但是每次開始運(yùn)行程序,并沒有將文件中數(shù)據(jù)讀取到程序中

而我們的程序功能中還有清空文件的請(qǐng)求

因此狗哦早函數(shù)初始化數(shù)據(jù)的情況分為三種

1、第一次使用,文件未創(chuàng)建

2、文件存在,但是數(shù)據(jù)被用戶清空

3、文件存在,并且保護(hù)職工的所有數(shù)據(jù)

9.1文件未創(chuàng)建

在workerManager.h中添加新的成員屬性m_FileEmpty標(biāo)志文件是否為空

	//判斷文件是否為空 標(biāo)志
	bool m_FileIsEmpty;

修改WorkerManager.cpp中構(gòu)造函數(shù)代碼

	ifstream ifs;
	ifs.open(FILENAME, ios::in);//讀文件

	if (!ifs.is_open())
	{
		cout << "文件不存在" << endl;
		//初始化屬性
		//初始化記錄人數(shù)
		this->m_EmpNum = 0;
		//初始化數(shù)組指針
		this->m_EmArray = NULL;
		//初始化文件是否為空
		this->m_FileIsEmpty=true;
		ifs.close();
		return;

	}

9.2文件存在且數(shù)據(jù)為空

在workerManager.cpp中的構(gòu)造函數(shù)追加代碼:

//2、文件存在 數(shù)據(jù)為空
	char ch;
	ifs >> ch;
	if (ifs.eof())
	{
		//文件為空
		cout << "文件為空" << endl;
		//初始化屬性
		//初始化記錄人數(shù)
		this->m_EmpNum = 0;
		//初始化數(shù)組指針
		this->m_EmArray = NULL;
		//初始化文件是否為空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

追加代碼位置如圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

將文件創(chuàng)建后清空文件內(nèi)容,并測試該情況下初始化功能

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

我們發(fā)現(xiàn)文件不存在或者為空,清空m_FilesEmpty 判斷文件是否為空的標(biāo)志都為真,那何時(shí)為假?

成功添加職工后,應(yīng)該更改文件不為空的標(biāo)志

在void WorkerManager::Add_Emp()成員函數(shù)中添加:

//更新職工不為空標(biāo)志
		this->m_FileIsEmpty = false;

9.3文件存在且保存職工數(shù)據(jù)

9.3.1獲取記錄的職工人數(shù)

在workerManager.h中添加成員函數(shù) int get_EmpNum();

	//統(tǒng)計(jì)文件中人數(shù)
	int get_EmpNum();

workerManager.cpp中實(shí)現(xiàn)

//統(tǒng)計(jì)文件中人數(shù)
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)
	{
		//統(tǒng)計(jì)人數(shù)變量
		num++;
	}
	return num;

}

在workerManager.cpp構(gòu)造函數(shù)中繼續(xù)追加代碼

	//3、文件存在,并且記錄數(shù)據(jù)
	int num = this->get_EmpNum();
	cout << "職工人數(shù)為 : " << num << endl;
	this->m_EmpNum = num;

手動(dòng)添加一些職工數(shù)據(jù),測試獲取職工數(shù)量函數(shù)

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

9.3.2 初始化數(shù)組

根據(jù)職工的數(shù)據(jù)以及職工數(shù)量,初始化workerManager中的Worker ** m_EmpArray 指針

在WorkerManager.h中添加成員函數(shù) void intit_Emp();

	//初始化員工
	void init_Emp();

在WorkerManager.cpp中實(shí)現(xiàn)

//初始化員工
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)//經(jīng)理
		{
			worker = new Manager(id, name, dId);

		}
		else//老板
		{
			worker = new Boss(id, name, dId);
		}
		this->m_EmArray[index] = worker;
		index++;
	}
	//關(guān)閉文件
	ifs.close();

}

在workerManager.cpp構(gòu)造函數(shù)中追加代碼

	//開辟空間
	this->m_EmArray = new Worker*[this->m_EmpNum];
	//將文件中的數(shù)據(jù)存到數(shù)組中
	this->init_Emp();

	//測試代碼
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		cout << "職工編號(hào)" << this->m_EmArray[i]->m_Id
			<< "姓名:" << this->m_EmArray[i]->m_Name
			<< "部門編號(hào):" << this->m_EmArray[i]->m_DeptId << endl;
	}

運(yùn)行效果如圖

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

10、顯示職工

功能描述:顯示當(dāng)前所有職工信息

10.1 顯示職工函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Show_Emp();

	//顯示職工
	void Show_Emp();

10.2 顯示職工函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) void Show_Emp();

//顯示職工
void WorkerManager::Show_Emp()
{
	//判斷文件是否為空
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或記錄為空!" << endl;
	}
	else
	{
		for (int i = 0; i < m_EmpNum; i++)
		{
			//利用多態(tài)調(diào)用程序接口
			this->m_EmArray[i]->showInfo();
		}
	}
	//按任意鍵后清屏
	system("pause");
	system("cls");
}

效果如圖:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

10.3 測試顯示職工

case 2://顯示職工
	wm.Show_Emp();

測試時(shí)分別測試 文件為空和文件不為空兩種情況

測試效果

測試1、文件不存在或者違抗情況

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

測試2、文件存在且有記錄情況

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

測試完畢,至此,顯示所有職工信息功能實(shí)現(xiàn)

11、刪除職工

11.1刪除職工函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Del_Emp();

	//刪除職工
	void Del_Emp();

11.2職工是否存在函數(shù)聲明

很多功能都需要用到根據(jù)職工是否存在進(jìn)行操作如:刪除職工、修改職工、查找職工

因此添加該構(gòu)造公告函數(shù),以便后續(xù)調(diào)用

在workerManager.h中添加成員函數(shù) int IsExist(int id);

	//判斷職工是否存在  如果存在返回職工所在數(shù)組中的位置,不存在返回-1
	int IsExist(int id);

11.3職工是否存在函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) int IsExist(int id);

//判斷職工是否存在  如果存在返回職工所在數(shù)組中的位置,不存在返回-1
int WorkerManager::IsExist(int id)
{
	int index = -1;
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		if (this->m_EmArray[i]->m_Id==id)
		{
		
		//找到職工
		index = 1;
		break;
		}
	}
	return index;
}

11.4刪除職工函數(shù)實(shí)現(xiàn)

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

	//刪除職工
void WorkerManager::Del_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "請(qǐng)輸入想要?jiǎng)h除職工編號(hào):" << endl;
		int id = 0;
		cin >> id;

     int index = this->IsExist(id);
	if (index !=-1) //說明職工存在,并且要?jiǎng)h除掉index位置上的職工
	{
		for (int i=index;i<this->m_EmpNum-1;i++)
		{
	
		//數(shù)據(jù)前移
		this->m_EmArray[i] = this->m_EmArray[i + 1];

        }
		this->m_EmpNum--;//更新數(shù)組中記錄人員個(gè)數(shù)
		//同步更新到文件中
		this->save();
		cout << "刪除成功" << endl;
	}
	else
	{
		cout << "刪除失敗,未找到該職工" << endl;
	}
}
//按任意鍵清屏
system("pause");
system("cls");
}

11.5測試刪除職工

case 3://刪除職工
// 	{	
// 		//測試
// 
// 		int ret = wm.IsExist(8);
// 	if (ret != -1)
// 	{
// 		cout << "職工存在" << endl;
// 	}
// 	else
// 	{
// 		cout << "職工不存在" << endl;
// 	}
		wm.Del_Emp();
		break;

測試1、刪除不存在職工情況

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

測試2、刪除存在職工情況

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

再次顯示所有職工信息,確保已經(jīng)刪除

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

查看文件中信息,再次核實(shí)員工已被完全刪除

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

12、修改職工

功能描述:能夠按照職工的編號(hào)對(duì)職工信息進(jìn)行修改并保存

12.1修改職工函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Mod_Emp();

	//修改員工
	void Mod_Emp();

12.2修改職工函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) void Mod_Emp();

//修改員工
void WorkerManager::Mod_Emp()
{
	if (this ->m_FileIsEmpty)
	{
		cout << "文件不存在或記錄為空!" << endl;
	}
	else
	{
		cout << "請(qǐng)輸入修改職工的編號(hào):" << endl;
		int id;
		cin >> id;
		int ret = this->IsExist(id);
		if (ret != -1)
		{
			//查找到編號(hào)的職工
			delete this->m_EmArray[ret];
			int newId = 0;
			string newName = "";
			int dSelect = 0;

			cout << "查到 ;" << id << "號(hào)職工,請(qǐng)輸入新職工號(hào):" << endl;
			cin >> newId;
			cout << "請(qǐng)輸入新姓名:" << endl;
			cin >> newName;
			cout << "請(qǐng)輸入崗位" << endl;
			cout << "1、普通崗位" << endl;
			cout << "2、經(jīng)理" << 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;
			}
			//更新數(shù)據(jù) 到數(shù)組中
			this->m_EmArray[ret] = worker;
			cout << "修改成功" << endl;
			//保存到文件中
			this->save();

		}
		else
		{
			cout << "修改失敗,查無此人" << endl;
		}
	}
	system("pause");
	system("cls");

}

測試:

無此人:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

13、查找職工

功能描述:提供兩種查找職工方式,一種按照職工編號(hào),一種按照職工姓名

13.1 查找職工函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Find_Emp();

	//查找職工
	void Find_Emp();

13.2查找職工函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) void Find_Emp();

//查找職工
void WorkerManager::Find_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或記錄為空" << endl;
	}
	else {
		cout << "請(qǐng)輸入查找的方式:" << endl;
		cout << "1、按照職工編號(hào)查找" << endl;
		cout << "2、按照姓名查找" << endl;
	
		int select = 0;
		cin >> select;

		if (select == 1)
		{
			//按照編號(hào)查
			int id;
			cout << "請(qǐng)輸入查找的職工編號(hào):" << endl;
			cin >> id;
			int ret = IsExist(id);
			if (ret != -1)
			{
				//找到職工
				cout << "查找成功!該職工信息如下:" << endl;
				this->m_EmArray[ret]->showInfo();
			}
			else
			{
				cout << "查找失敗,查無此人" << endl;
			}

		}
		else if (select == 2)
	    {
			//按照姓名查
			string name;
			cout << "請(qǐng)輸入查找的姓名:" << endl;
			cin >> name;

			//介入判斷是否查到的標(biāo)志
			bool flag = false;//默認(rèn)未找到職工

			for (int i = 0; i < m_EmpNum; i++)
			{
				if (this->m_EmArray[i]->m_Name == name)
				{
					cout << "查找成功,職工編號(hào)為:"
						<< this->m_EmArray[i]->m_Id 
						<< "號(hào)職工信息如下:" << endl;
					flag = true;
				//調(diào)用顯示信息接口
				this->m_EmArray[i]->showInfo();
			}
			}
			if (flag == false)
			{
				cout << "查找失敗,查無此人!" << endl;
			}
		}
		else
		{
			cout << "輸入選項(xiàng)有誤" << endl;
		}
	}
	//按任意鍵清屏
		system("pause");
		system("cls");
	
}

13.3測試查找職工

case 5://查找職工
	wm.Find_Emp();
	break;

1.按編號(hào)

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

2、按姓名

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

14、排序

功能描述:按照職工編號(hào)進(jìn)行排序,排序的順序由用戶指定

14.1排序函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Sort_Emp();

	//按照編號(hào)排序
	void Sort_Emp();

14.2 排序函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) void Sort_Emp();

//按照編號(hào)排序
void WorkerManager::Sort_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或記錄為空" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		cout << "請(qǐng)輸入排序方式:" << endl;
		cout << "1、按照工號(hào)進(jìn)行升序" << endl;
		cout << "2、按照工號(hào)進(jìn)行降序" << endl;
		int select = 0;
		cin >> select;


		for (int i = 0; i < m_EmpNum; i++)
		{
			int minOrMax = i;//聲明最小值或最大值下標(biāo)
			for (int j = i + 1; j < this->m_EmpNum; j++)
			{
				if (select == 1)//升序
				{
					if (this->m_EmArray[minOrMax]->m_Id>this->m_EmArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}

				else//降序
				{
					if (this->m_EmArray[minOrMax]->m_Id < this->m_EmArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}
			}
			//判斷一開始認(rèn)定 最小值或最大值 是不是計(jì)算的最大值或最小值 ,如果不是 交換數(shù)據(jù)
			if (i != minOrMax)
			{
				Worker * temp = this->m_EmArray[i];
				this->m_EmArray[i] = this->m_EmArray[minOrMax];
				this->m_EmArray[minOrMax] = temp;
			}
		}
		cout << "排序成功!排序后的結(jié)果為:" << endl;
		this->save();//排序后結(jié)果保存到文件中
		this->Show_Emp();//展示所有職工
	}

}

測試:

case 6://排序職工
	wm.Sort_Emp();
	break;

升序:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

降序:

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

15、清空文件

功能描述:將文件記錄數(shù)據(jù)清空

15.1 清空函數(shù)聲明

在workerManager.h中添加成員函數(shù) void Clean_File();

	//清空文件操作
	void Clean_File();

15.2清空函數(shù)實(shí)現(xiàn)

在workerManager.cpp中實(shí)現(xiàn)成員函數(shù) void Clean_File();

//清空文件操作
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);//刪除文件后重新創(chuàng)建
		ofs.close();
		if (this->m_EmArray != NULL)
		{
//刪除堆區(qū)的每個(gè)職工對(duì)象
			for (int i=0;i<this->m_EmpNum;i++)
			{
				delete this->m_EmArray[i];
				this->m_EmArray[i] = NULL;
			}
			//刪除堆區(qū)數(shù)組指針
			delete[] this->m_EmArray;
			this->m_EmArray = NULL;
			this->m_EmpNum = 0;
			this->m_FileIsEmpty = true;
		}
		cout << "清空成功!" << endl;
	}
	system("pause");
	system("cls");
}

15.3 測試清空文件

在main函數(shù)分支7選項(xiàng)中,調(diào)用清空文件窗口

case 7://清空文檔
	wm.Clean_File();
	break;
default://清屏
	system("cls");
	break;

測試確認(rèn)清空文件

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

再次查看文件中數(shù)據(jù),記錄已空

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

打開文件,里面數(shù)據(jù)已確保清空,該功能需要慎用

用c++實(shí)現(xiàn)職工管理系統(tǒng)

?

隨著文件功能實(shí)現(xiàn),本案例制作完畢~文章來源地址http://www.zghlxwxcb.cn/news/detail-480823.html

到了這里,關(guān)于用c++實(shí)現(xiàn)職工管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 37基于java的職工管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    本章節(jié)給大家?guī)硪粋€(gè)基于java的職工管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),可適用于員工管理系統(tǒng),企業(yè)員工管理系統(tǒng),公司員工管理系統(tǒng),企業(yè)人事管理系統(tǒng),基于java職工管理系統(tǒng),前后端分離,員工考勤管理系統(tǒng),職工獎(jiǎng)懲管理系統(tǒng),職員合同管理,HR管理系統(tǒng),人事HR管理系統(tǒng)等;

    2024年02月05日
    瀏覽(13)
  • QT5實(shí)現(xiàn)職工工資信息管理系統(tǒng)(文件讀寫)

    QT5實(shí)現(xiàn)職工工資信息管理系統(tǒng)(文件讀寫)

    暑期學(xué)校QT實(shí)踐項(xiàng)目 該系統(tǒng)需創(chuàng)建和管理如下信息:1、職工信息:工號(hào)、姓名、年齡、入職日期、電話、住址、月工資數(shù)據(jù)集。2、月工資信息:月份、基本工資、崗位工資、工齡工資、津貼、崗貼、補(bǔ)貼、房貼、交通補(bǔ)貼。 系統(tǒng)功能要求如下: 1.創(chuàng)建和管理職工信息的對(duì)

    2024年02月09日
    瀏覽(19)
  • 程序設(shè)計(jì)職工管理系統(tǒng)

    程序設(shè)計(jì)職工管理系統(tǒng)

    本系統(tǒng)要求用 C 語言建立 一個(gè)職工信息管理系統(tǒng) ,本職工信息管理系統(tǒng)可以實(shí)現(xiàn)對(duì)眾多員工信息 的管理 。 包含 對(duì) 職工信息 進(jìn)行 添加 、 查詢 、 刪除 、修改 。 1.2 系統(tǒng)的界面要求? 按任意鍵便可以進(jìn)入主菜單,在主菜單上顯示出 該系統(tǒng) 的功能,通過輸入數(shù)字 0 到 6 ?來

    2024年02月08日
    瀏覽(19)
  • 職工信息管理系統(tǒng)(C語言)

    職工信息管理系統(tǒng)(C語言)

    目錄 1.前言 2.實(shí)現(xiàn)功能 3.流程圖? 4.源碼 5.總結(jié) ? ? ? ? 距學(xué)習(xí)C語言已經(jīng)相當(dāng)長的一段時(shí)間了,編寫一個(gè)小項(xiàng)目,功能實(shí)現(xiàn)可能不是很完美,算是復(fù)習(xí)和記錄吧! 0.錄入職工信息? ? ? ? ? ? ? ? ? ? ? 1.按工資高低排序 2.修改職工信息 3.顯示職工信息 4.刪除職工信息 5.查詢

    2024年02月11日
    瀏覽(18)
  • C語言課程設(shè)計(jì)_職工工資管理系統(tǒng)

    C語言課程設(shè)計(jì)_職工工資管理系統(tǒng)

    設(shè)計(jì)一個(gè)職工工資管理系統(tǒng): (1)輸入記錄:將每一個(gè)職工的姓名、ID號(hào)以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險(xiǎn)、公積金的數(shù)據(jù)作為一個(gè)記錄。該軟件能建立一個(gè)新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。 (2)顯示記錄:根據(jù)用戶提供的記錄或者根據(jù)職工姓名

    2024年02月10日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)C/C++ 職工信息管理系統(tǒng) 一、前言 二、系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 三、模塊功能代碼 3.1 菜單函數(shù) 3.2?初始化單鏈表 3.3 添加信息 3.4 信息輸出 3.5 信息排序 3.6 信息刪除 3.7 信息存儲(chǔ) 四、系統(tǒng)完整代碼 五、運(yùn)行結(jié)果(部分展示) 六、實(shí)驗(yàn)總結(jié) 七、參考網(wǎng)址 本文還是使用較老的

    2024年01月16日
    瀏覽(14)
  • 趕緊進(jìn)來看看---C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(3.0文件存儲(chǔ)版)

    趕緊進(jìn)來看看---C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(3.0文件存儲(chǔ)版)

    本文主要介紹了將學(xué)生信息管理系統(tǒng)改造為文件存儲(chǔ)版本… 主要涉及文件操作函數(shù)–將學(xué)生信息導(dǎo)入文件和從文件讀取學(xué)生信息到程序中,從而達(dá)到數(shù)據(jù)持久化的效果 文章最后有源碼展示 學(xué)生信息管理系統(tǒng)1.0靜態(tài)版-學(xué)生信息管理系統(tǒng)2.0動(dòng)態(tài)內(nèi)存增長版-學(xué)生信息管理系統(tǒng)3.0文

    2024年01月20日
    瀏覽(24)
  • 黑馬程序員-職工管理系統(tǒng)實(shí)戰(zhàn)-附加源碼Git

    黑馬程序員-職工管理系統(tǒng)實(shí)戰(zhàn)-附加源碼Git

    職工管理系統(tǒng)可以用來管理公司內(nèi)所有員工的信息 本教程主要利用C++來實(shí)現(xiàn)一個(gè)基于多態(tài)的職工管理系統(tǒng) 公司中職工分為三類:普通員工、經(jīng)理、老板,顯示信息時(shí),需要顯示職工編號(hào)、職工姓名、職工崗位、以及職責(zé) 普通員工職責(zé):完成經(jīng)理交給的任務(wù) 經(jīng)理職責(zé):完成老

    2024年02月03日
    瀏覽(31)
  • 今天給大家介紹一篇基于springboot的醫(yī)院管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    今天給大家介紹一篇基于springboot的醫(yī)院管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    臨近學(xué)期結(jié)束,你還在做java程序網(wǎng)絡(luò)編程,期末作業(yè),老師的作業(yè)要求覺得大了嗎?不知道畢業(yè)設(shè)計(jì)該怎么辦?網(wǎng)頁功能的數(shù)量是否太多?沒有合適的類型或系統(tǒng)?等等。這里根據(jù)疫情當(dāng)下,你想解決的問題,今天給大家介紹一篇基于springboot的醫(yī)院管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。 隨著科

    2023年04月14日
    瀏覽(25)
  • 學(xué)生成績管理系統(tǒng)(C++實(shí)現(xiàn))

    實(shí)現(xiàn)學(xué)生成績管理系統(tǒng): 學(xué)生信息包括:學(xué)號(hào)、姓名、性別、年齡、班級(jí)等信息。除了包括學(xué)生所有信息外,還包括專業(yè)、英語、程序設(shè)計(jì)和高等數(shù)學(xué)等課程。 設(shè)計(jì)一程序能夠?qū)W(xué)生成績進(jìn)行管理,應(yīng)用到繼承、抽象類、虛函數(shù)、虛基類、多態(tài)和文件的輸入/輸出等內(nèi)容。用

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包