基于C++的职工信息管理系统
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                基于C++的职工信息管理系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                需求分析
職工管理系統可以用來管理公司的所有員工信息
 此項目主要利用C++來實現一個基于多態的職工管理系統
公司職工分為三類:普通員工、經理、老板
 顯示信息時:需要顯示職工編號、職工姓名、職工崗位、及職工職責
普通員工職責:完成經理交付的任務
 經理職責:完成老板交給的任務,并下發給員工
 老板職責:管理公司所有事務
管理系統中需要實現的功能如下:
 1、退出管理程序:退出當前管理系統
 2、增加職工信息:實現批量添加職工的功能,將信息錄入到文件中,職工信息為:職工編號、姓名、部門編號
 3、顯示職工信息:顯示公司內部所有的職工信息
 4、刪除離職職工:按照編號刪除指定的職工
 5、修改職工信息:按照編號修改職工個人信息
 6、查找職工信息:按照職工的編號或者職工的姓名進行查找相關的人員信息
 7、按照編號排序:按照職工編號進行排序,排序規則由用戶指定(此項目有升序和降序兩種排序方式)
 8、清空所有文檔:清空文件中記錄的所有職工信息(清空前需要再次確認,防止誤刪)
開發環境:vs2019
源碼展示:
頭文件:
**boss.h** #pragma once #include<iostream> #include<string> #include"worker.h" using namespace std;//抽象老板類 class Boss : public Worker { public://給構造函數進行屬性初始化//構造函數Boss(int id, string name, int dId);//只做聲明//顯示個人信息virtual void showInfo();//獲取崗位名稱virtual string getDeptName(); }; *********************employee.h** //普通員工文件 #pragma once #include<iostream> #include<string> #include"worker.h" using namespace std;//使用普通員工類去繼承worker類 class Employee :public Worker { public://給構造函數進行屬性初始化Employee(int id, string name, int dId); //構造函數//只做聲明virtual void showInfo(); //顯示個人信息virtual string getDeptName(); //獲取崗位名稱};manager.h
#pragma once #include<iostream> #include<string> #include"worker.h"using namespace std;//抽象經理類 class Manager :public Worker { public://給構造函數進行屬性初始化//構造函數Manager(int id, string name, int dId);//只做聲明//顯示個人信息virtual void showInfo(); //獲取崗位名稱virtual string getDeptName(); };worker.h
#pragma once #include<iostream> #include<string>using namespace std;//職工抽象類 class Worker { public:virtual void showInfo() = 0; //顯示個人信息virtual string getDeptName() = 0; //獲取崗位名稱int m_Id; //職工編號string m_Name; //職工姓名int m_DeptId; //職工部門編號};workerManager.h
#pragma once//防頭文件重復包含 #include<iostream> #include"worker.h" using namespace std; #include"employee.h" #include"manager.h" #include"boss.h"#include<fstream> #define FILENAME "empFile.txt"class WorkerManager {//.h頭文件中只做聲明不做實現 public:WorkerManager();//構造函數void Show_Menu(); //展示菜單void ExitSystem(); //退出系統//記錄職工人數int m_EmpNum;//職工數組指針Worker** m_EmpArray;//添加職工void Add_Emp();//保存文件void save();//判斷文件是否為空 的標志bool m_FileIsEmpty;//統計文件中人數int get_EmpNum();//初始化員工void init_Emp();//顯示員工void Show_Emp();//刪除職工void Del_Emp();//判斷職工是否存在 如果存在返回職工所在的數組中的位置,不存在返回-1int IsExist(int id);//修改職工void Mod_Emp();//查找職工void Find_Emp();//排序職工void Sort_Emp();//清空文件void Clean_File();//析構函數~WorkerManager();};源文件:
**boss.cpp** #include"boss.h"//構造函數 Boss::Boss(int id, string name, int dId) {this->m_Name = name;this->m_Id = id;this->m_DeptId = dId; }//只做聲明//顯示個人信息 void Boss::showInfo() {cout << "職工編號: " << this->m_Id<< "\t職工姓名: " << this->m_Name<< "\t崗位: " << this->getDeptName()<< "\t崗位職責:管理公司所有事物" << endl;} //獲取崗位名稱 string Boss::getDeptName() {return string("老板");}employee.cpp
#include"employee.h" #include"worker.h"//構造函數 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崗位職責:完成經理交付的任務"<<endl;} //獲取崗位名稱 string Employee::getDeptName() {return string("員工");}********************manager.cpp**#include"manager.h"//構造函數 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崗位職責:完成老板交付的任務,給普通員工分配任務" << endl; } //獲取崗位名稱 string Manager::getDeptName() {return string("經理"); }workerManager.cpp
```cpp```cpp #include"workerManager.h"WorkerManager::WorkerManager() {//1、文件不存在ifstream ifs;ifs.open(FILENAME, ios::in); //讀文件if (!ifs.is_open()){cout << "文件不存在" << endl;//初始化屬性//初始化記錄人數this->m_EmpNum = 0;//初始化數組指針this->m_EmpArray = NULL;//初始化文件是否為空this->m_FileIsEmpty = true;ifs.close();return;}//2、文件存在,數組為空char ch;ifs >>ch;if (ifs.eof()){//文件為空cout << "文件為空!" << endl;//初始化記錄人數this->m_EmpNum = 0;//初始化數組指針this->m_EmpArray = NULL;//初始化文件是否為空this->m_FileIsEmpty = true;ifs.close();return;}//3、文件存在,并且記錄數據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 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::ExitSystem() {cout << "歡迎下次使用" << endl;system("pause");exit(0); //退出程序system("cls"); }```cpp //添加職工 void WorkerManager::Add_Emp() {cout << "請輸入添加職工數量:" << endl;int addNum = 0; //保存用戶的輸入數量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 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->m_EmpNum + i] = worker;}//釋放原有空間delete[] this->m_EmpArray;//更改新空間的指向this->m_EmpArray = newSpace;//更新新的職工人數this->m_EmpNum = newSize;//更新職工不為空標志this->m_FileIsEmpty = false;//提示添加成功cout << "成功添加" << addNum << "名新職工!" << endl;//成功添加后 保存到文件中this->save();}else{cout << "輸入數據有誤!!!" << endl;}system("pause");system("cls"); } //保存文件 void WorkerManager::save() {ofstream ofs; //寫文件用 ofstreamofs.open(FILENAME, ios::out); //用輸出的方式打開文件 --寫文件//將每個人的數據寫入到文件中for (int i = 0;i < m_EmpNum;i++){ofs << this->m_EmpArray[i]->m_Id << ""<< this->m_EmpArray[i]->m_Name << ""<< this->m_EmpArray[i]->m_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++; //記錄人數}ifs.close();return num; }//初始化員工 void WorkerManager::init_Emp() {ifstream ifs;ifs.open(FILENAME, ios::in);int id;string name;int dId;while (ifs >> id && ifs >> name && ifs >> dId){Worker* worker = NULL;int index = 0;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();//關閉文件}//顯示員工 void WorkerManager::Show_Emp() {if (this->m_FileIsEmpty) //先判斷文件是否為空{cout << "文件不存在或記錄為空!" << endl;}else{for (int i = 0;i < m_EmpNum;i++){//利用多態調用接口this->m_EmpArray[i]->showInfo();}}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){//找到職工break;}}return index;}//刪除職工 void WorkerManager::Del_Emp() {//首先判斷文件是否存在if (this->m_FileIsEmpty) {cout << "文件不存在或記錄為空" << endl;}else{//按照職工編號刪除cout << "請輸入想要刪除的職工編號:" << endl;int id;cin >> id;int index = this->IsExist(id);if (index != -1) //說明文件不存在,并且要刪除掉index{for (int i = index;i < this->m_EmpNum - 1;i++){//數據遷移this->m_EmpArray[i] = this->m_EmpArray[i + 1];}this->m_EmpNum--; //更新數組中記錄人員個數//數據同步更新到文件中this->save();cout << "刪除成功!" << endl;}else{cout << "刪除失敗,未找到該職工" << endl;}}system("pause");system("cls"); }//修改職工 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 << "號職工,請輸入新職工號:";cin >> newId;cout << "請輸入新姓名:";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->m_EmpArray[ret] = worker;cout << "修改成功!" << this->m_EmpArray[ret]->m_DeptId << 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 << "排序成功,排序后的結果為:" << endl;this->save();}} //清空文件 void WorkerManager::Clean_File() {cout << "確認清空?" << endl;cout << "1、確認" << endl;cout << "2、返回" << endl;int select=0;cin >> select;if (select == 1){//打開模式ios::trunc 如果存在,刪除文件并重新創建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"); }//展示菜單 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; }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];this->m_EmpArray = NULL;}}delete[] this->m_EmpArray;this->m_EmpArray = NULL;}} *************************** ****main函數**** **職工管理系統.cpp**```cpp #include<iostream>#include<string> using namespace std; #include"workerManager.h"#include"employee.h" #include"worker.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){wm.Show_Menu(); //調用展示菜單的成員函數cout << "請輸入你的選擇:";cin >> choice;switch (choice){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");system("cls"); } 都看到這了,不點個贊在走。。。。哈哈總結
以上是生活随笔為你收集整理的基于C++的职工信息管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: tar 压缩与解压缩打包命令
- 下一篇: 用cookie实现叶卡的记忆功能
