?職工管理系統(tǒng)有以下8個功能:
- 增加職工信息:實現(xiàn)批量添加職工功能,將信息錄入到文件中,職工信息為:職工編號、姓名、部門編號
- 顯示職工信息:顯示公司內(nèi)部所有職工的信息
- 刪除離職職工:按照編號刪除指定的職工
- 修改職工信息:按照編號修改職工個人信息
- 查找職工信息:按照職工的編號或者職工的姓名進行查找相關(guān)的人員信息
- 按照編號排序:按照職工編號,進行排序,排序規(guī)則由用戶指定
- 清空所有文檔:清空文件中記錄的所有職工信息 (清空前需要再次確認,防止誤刪)
每個功能都對應(yīng)著0-7一個數(shù)字實現(xiàn)
?每個職工都有:職工編號,職工姓名,崗位,崗位職責四個信息
?編寫相對應(yīng)的功能,更改這些信息
以下是每個功能的實現(xiàn)界面:
0:退出管理系統(tǒng)
?1:增加職工信息
?2:顯示職工信息
?3:刪除離職職工
?4:修改職工信息
5:查找職工信息
?
6:按照編號排序
?7:清空所有文檔
清空之后再查詢,顯示文件不存在或記錄為空!
?
?詳細代碼如下,首先是頭文件
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);
//顯示個人的所有信息
virtual void showInfo() ;
//獲取崗位名稱
virtual string getDeptName();
};
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);
//顯示個人的所有信息
virtual void showInfo();
//獲取崗位名稱
virtual string getDeptName();
};
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);
//顯示個人的所有信息
virtual void showInfo() ;
//獲取崗位名稱
virtual string getDeptName() ;
};
worker.h
#pragma once
#include<iostream>
using namespace std;
#include<string>
//職工抽象類
class Worker
{
public:
//顯示個人的所有信息
virtual void showInfo() = 0;
//獲取崗位名稱
virtual string getDeptName() = 0;
//職工編號
int m_Id;
//職工姓名
string m_Name;
//部門編號
int m_DeptId;
};
workerManager.h(用來聲明函數(shù))
#pragma once//防止頭文件重復(fù)包含
#include<iostream>
using namespace std;
#include"worker.h"
#include"employee.h"
#include"manager.h"
#include"boss.h"
#include<fstream>
#define FILENAME "empFile.txt"
class WorkerManager
{
public:
//構(gòu)造函數(shù)
WorkerManager();
//展示菜單
void Show_Menu();
//退出系統(tǒng)
void ExitSystem();
//記錄職工人數(shù)
int m_EmpNum;
//職工數(shù)組指針
Worker ** m_EmpArray;
//添加職工
void Add_Emp();
//保存文件
void save();
//判斷文件是否為空標志
bool m_FileIsEmpty;
//統(tǒng)計文件中人數(shù)
int get_EmpNum();
//初始化員工
void init_Emp();
//顯示職工
void Show_Emp();
//刪除職工
void Del_Emp();
//判斷職工是否存在 如果存在返回職工所在數(shù)組中的位置,不存在返回-1
int IsExist(int id);
//修改職工
void Mod_Emp();
//查找職工
void Find_Emp();
//按照編號排序
void Sort_Emp();
//清空文件
void Clean_File();
//析構(gòu)函數(shù)
~WorkerManager();
};
源文件
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;
}
//顯示個人的所有信息
void Boss::showInfo()
{
cout << "職工編號:" << this->m_Id
<< "\t職工姓名:" << this->m_Name
<< "\t崗位:" << this->getDeptName()
<< "\t崗位職責:管理公司所有事務(wù)" << endl;
}
//獲取崗位名稱
string Boss::getDeptName()
{
return string("老板");
}
employee.cpp
#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;
}
//顯示個人的所有信息
void Employee::showInfo()
{
cout << "職工編號:" << this->m_Id
<< "\t職工姓名:" << this->m_Name
<< "\t崗位:" << this->getDeptName()
<< "\t崗位職責:完成經(jīng)理交給的任務(wù)" << endl;
}
//獲取崗位名稱
string Employee::getDeptName()
{
return string("員工");
}
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;
}
//顯示個人的所有信息
void Manager:: showInfo()
{
cout << "職工編號:" << this->m_Id
<< "\t職工姓名:" << this->m_Name
<< "\t崗位:" << this->getDeptName()
<< "\t崗位職責:完成老板交給的任務(wù),并且下發(fā)任務(wù)給普通員工" << endl;
}
//獲取崗位名稱
string Manager :: getDeptName()
{
return string("經(jīng)理");
}
workerManager.cpp
#include"workerManager.h"
WorkerManager::WorkerManager()
{
//1.文件不存在
ifstream ifs;
ifs.open(FILENAME, ios::in);//讀文件
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
//初始化屬性
//初始化記錄人數(shù)
this->m_EmpNum = 0;
//初始化數(shù)組指針
this->m_EmpArray = NULL;
//初始化文件是否為空
this->m_FileIsEmpty = true;
ifs.close();
return;
}
//2.文件存在 數(shù)據(jù)為空
char ch;
ifs >> ch;
if (ifs.eof())//判斷文件是否為空
{
//cout << "文件為空!"<<endl;
}
//3.文件存在,并且記錄數(shù)據(jù)
int num = this->get_EmpNum();
/*cout << "職工人數(shù)為: " << num << endl;*/
this->m_EmpNum = num;
//開辟空間
this->m_EmpArray = new Worker * [this->m_EmpNum];
//將文件中的數(shù)據(jù),存到數(shù)組中
this->init_Emp();
//測試代碼
//for (int i = 0; i < this->m_EmpNum; i++)
//{
// cout << "職工編號: " << this->m_EmpArray[i]->m_Id
// << "姓名: " << this->m_EmpArray[i]->m_Name
// << "部門編號: " << this->m_EmpArray[i]->m_DeptId << endl;
//}
}
//展示菜單
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.按照編號排序 *************" << endl;
cout << "************* 7.清空所有文檔 *************" << endl;
cout << "********************************************" << endl;
cout << endl;
}
//退出系統(tǒng)
void WorkerManager::ExitSystem()
{
cout << "歡迎下次使用" << endl;
system("pause");
exit(0);//退出程序
}
//添加職工
void WorkerManager::Add_Emp()
{
cout << "請輸入添加職工數(shù)量:" << endl;
int addNum = 0;//保存用戶的輸入數(shù)量
cin >> addNum;
if (addNum > 0)
{
//添加
//計算添加新空間大小
int newSize = this->m_EmpNum + addNum;//新空間大小=原來人數(shù)+新增人數(shù)
//開辟新空間
Worker ** newSpace=new Worker* [newSize];
//將原來空間下數(shù)據(jù),拷貝到新空間下
if (this->m_EmpArray != NULL)
{
for (int i = 0; i < this->m_EmpNum; i++)
{
newSpace[i] = this->m_EmpArray[i];
}
}
//批量添加新數(shù)據(jù)
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.經(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);
break;
default:
break;
}
//將創(chuàng)建職工指針,保存到數(shù)組中
newSpace[this->m_EmpNum + i] = worker;
}
//釋放原有空間
delete[] this->m_EmpArray;
//更改新空間指向
this->m_EmpArray = newSpace;
//更新新的職工人數(shù)
this->m_EmpNum = newSize;
//更新職工不為空標志
this->m_FileIsEmpty = false;
//提示添加成功
cout << "成功添加" << addNum << "名新職工!" << endl;
//保存數(shù)據(jù)到文件中
this->save();
}
else
{
cout << "輸入數(shù)據(jù)有誤" << endl;
}
//按任意鍵后 清屏回到上級目錄
system("pause");
system("cls");
}
//保存文件
void WorkerManager::save()
{
ofstream ofs;
ofs.open(FILENAME, ios::out);//用輸出的方式打開文件--寫文件
//將每個人數(shù)據(jù)寫入到文件中
for (int i = 0; i < this->m_EmpNum; i++)
{
ofs << this->m_EmpArray[i]->m_Id << " "
<< this->m_EmpArray[i]->m_Name << " "
<< this->m_EmpArray[i]->m_DeptId << endl;
}
//關(guān)閉文件
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)
{
//統(tǒng)計人數(shù)變量
num++;
}
ifs.close();
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)//經(jīng)理
{
worker = new Manager(id, name, dId);
}
else //老板
{
worker = new Boss(id, name, dId);
}
this->m_EmpArray[index] = worker;
index++;
}
//關(guān)閉文件
ifs.close();
}
//顯示職工
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_EmpArray[i]->showInfo();
}
}
//按任意鍵后清屏
system("pause");
system("cls");
}
void WorkerManager::Del_Emp()
{
if (this->m_FileIsEmpty)
{
cout << "文件不存在或記錄為空!" << endl;
}
else
{
//按照職工編號刪除
cout << "請輸入想要刪除職工編號:" << endl;
int id = 0;
cin >> id;
int index = this->IsExist(id);
if (index != -1)//說明該職工存在,并且瑤刪除掉index位置上的職工
{
//數(shù)據(jù)前移
for (int i = index; i < this->m_EmpNum - 1; i++)
{
this->m_EmpArray[i] = this->m_EmpArray[i + 1];
}
this->m_EmpNum--;//更新數(shù)組中記錄人員個數(shù)
//同步更新到文件中
this->save();
cout << "刪除成功!" << endl;
}
else
{
cout << "刪除失敗,未找到" << endl;
}
}
//按任意鍵清屏
system("pause");
system("cls");
}
int WorkerManager::IsExist(int id)
{
int index = -1;
for (int i = 0; i < this->m_EmpNum; i++)
{
if (this->m_EmpArray[i]->m_Id == id)
{
//找到職工
index = i;
break;
}
}
return index;
}
//修改職工
void WorkerManager::Mod_Emp()
{
if (this->m_FileIsEmpty)
{
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 dSelect = 0;
cout << "查到: " << id << "號職工,請輸入新職工號: " << endl;
cin >> newId;
cout << "請輸入新姓名: " << endl;
cin >> newName;
cout << "請輸入崗位: " << 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_EmpArray[ret] = worker;
cout << "修改成功!" << endl;
//保存到文件中
this->save();
}
else
{
cout << "修改失敗,查無此人" << endl;
}
}
//按任意鍵 清屏
system("pause");
system("cls");
}
//查找職工
void WorkerManager::Find_Emp()
{
if (this->m_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->m_EmpArray[ret]->showInfo();
}
else
{
cout << "查找失敗,查無此人" << endl;
}
}
//按姓名查找
else if (select == 2)
{
string name;
cout << "請輸入查找的姓名:" << endl;
cin >> name;
bool flag = false; //查找到的標志
for (int i = 0; i < m_EmpNum; i++)
{
if (m_EmpArray[i]->m_Name == name)
{
cout << "查找成功,職工編號為:"
<< m_EmpArray[i]->m_Id
<< " 號的信息如下:" << endl;
flag = true;
this->m_EmpArray[i]->showInfo();
}
}
if (flag == false)
{
//查無此人
cout << "查找失敗,查無此人" << endl;
}
}
else
{
cout << "輸入選項有錯誤" << endl;
}
}
system("pause");
system("cls");
}
//按照編號排序
void WorkerManager::Sort_Emp()
{
if (this->m_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 < m_EmpNum; i++)
{
int minOrMax = i;
for (int j = i + 1; j < m_EmpNum; j++)
{
if (select == 1) //升序
{
if (m_EmpArray[minOrMax]->m_Id > m_EmpArray[j]->m_Id)
{
minOrMax = j;
}
}
else //降序
{
if (m_EmpArray[minOrMax]->m_Id < m_EmpArray[j]->m_Id)
{
minOrMax = j;
}
}
}
if (i != minOrMax)
{
Worker* temp = m_EmpArray[i];
m_EmpArray[i] = m_EmpArray[minOrMax];
m_EmpArray[minOrMax] = temp;
}
}
cout << "排序成功,排序后結(jié)果為:" << 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)
{
//打開模式 ios::trunc 如果存在刪除文件并重新創(chuàng)建
ofstream ofs(FILENAME, ios::trunc);
ofs.close();
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];
}
}
this->m_EmpNum = 0;
delete[] this->m_EmpArray;
this->m_EmpArray = NULL;
this->m_FileIsEmpty = true;
}
cout << "清空成功!" << endl;
}
system("pause");
system("cls");
}
WorkerManager::~WorkerManager()
{
if (this->m_EmpArray != NULL)
{
delete[] this->m_EmpArray;
this->m_EmpArray = NULL;
}
}
職工管理系統(tǒng).cpp文章來源:http://www.zghlxwxcb.cn/news/detail-427359.html
#include "workerManager.h"
using namespace std;
//#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(3, "王五", 3);
worker->showInfo();
delete worker;*/
//實例化管理者對象
WorkerManager wm;
int choice = 0;//用來存儲用戶的選項
while (true)
{
//調(diào)用展示菜單成員函數(shù)
wm.Show_Menu();
cout << "請輸入您的選擇:" << endl;
cin >> choice;//接受用戶的選項
switch (choice)
{
case 0://退出系統(tǒng)
wm.ExitSystem();
break;
case 1://增加職工
wm.Add_Emp();
break;
case 2://顯示職工
wm.Show_Emp();
break;
case 3://刪除職工
//{
// int ret = wm.IsExist(1);
// if (ret != -1)
// {
// cout << "職工存在" << endl;
// }
// else
// {
// cout << "職工不存在" << endl;
// }
// break;}
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;
}
以上便是職工管理系統(tǒng)的全部代碼實現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-427359.html
到了這里,關(guān)于職工管理系統(tǒng)(C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!