該專案綜合的知識點較多,包括記憶體管理,面向物件的三大特性封裝、繼承、多型都有涉及到,而且包括檔案操作,現分別進行總結,
0、專案需求如下:

1、主函式框架
1 int main()
2 {
3 //實體化管理者物件
4 WorkerManager wm;
5 //用戶選擇
6 int choice = 0;
7 while (true)
8 {
9 wm.ShowMenu();
10 cout << "請輸入您的選擇: " << endl;
11 cin >> choice;
12 switch (choice)
13 {
14 case 0://退出系統
15 wm.ExitSystem();
16 break;
17 case 1://添加職工
18 wm.AddEmp();
19 break;
20 case 2://顯示職工
21 wm.Show_Emp();
22 break;
23 case 3://洗掉職工
24 wm.Del_Emp();
25 break;
26 case 4://修改職工
27 wm.Mod_Emp();
28 break;
29 case 5://查找職工
30 wm.Find_Emp();
31 break;
32 case 6://排序職工
33 wm.Sort_Emp();
34 break;
35 case 7://清空檔案
36 wm.Clean_File();
37 break;
38 default:
39 system("cls");//清屏
40 break;
41 }
42 }
43 system("pause");
44 return 0;
45 }
2、創建管理類
管理類負責的內容包括:與用戶互動的選單界面、對職工增刪改查的操作、與檔案讀寫互動
其中的各屬性和行為在程式完成的程序中逐漸添加
#pragma once
#include <iostream>
#include "worker.h"
using namespace std;
class WorkerManager
{
public:
//建構式
WorkerManager();
//展示選單
void ShowMenu();
//退出系統
void ExitSystem();
//記錄職工人數
int m_EmpNum;
//職工陣列指標
Worker** m_EmpArray;
//添加職工函式
void AddEmp();
//保存檔案函式
void Save();
//標志檔案是否為空
bool FileIsEmpty;
//檔案非空,獲取職工人數
int get_EmpNum();
//檔案非空,初始化函式
void init_Emp();
//顯示職工
void Show_Emp();
//洗掉職工
void Del_Emp();
//修改職工資訊
void Mod_Emp();
//查找職工
void Find_Emp();
//檢測職工是否存在,存在回傳位置,不存在回傳-1
int IsExit(int id);
//按照職工編號排序
void Sort_Emp();
//清空檔案
void Clean_File();
//解構式
~WorkerManager();
};
3、抽象職工基類和三種具體職工派生類
需求中具體的職工分為三類:普通職工、經理、老板,可以考慮創建一個抽象的職工類,里面包含著需要的屬性和行為,成員函式均為純虛函式,子類通過繼承然后重寫基類的虛函式,去創建相應的派生類,創建的抽象類如下:
6 //設計worker抽象類
7 class Worker
8 {
9 public:
10 //崗位資訊描述
11 virtual void ShowInfo() = 0;
12 //獲取崗位名稱
13 virtual string GetDeptName() = 0;
14 int m_ID;
15 string m_Name;
16 int m_DeptID;
17 };
通過繼承,創建普通職工類,經理類,老板類如下:
(檔案只編譯一次,包含父類的頭檔案,添加的成員函式包括自身的建構式、重寫父類的虛函式,在頭檔案中只做宣告,去源檔案中實作)
7 class Employee : public Worker
8 {
9 public:
10 //建構式
11 Employee(int id, string name, int deptid);
12 //崗位資訊描述
13 virtual void ShowInfo();
14 //獲取崗位名稱
15 virtual string GetDeptName();
16 };
7 class Manager : public Worker
8 {
9 public:
10 //建構式
11 Manager(int id, string name, int deptid);
12 //崗位資訊描述
13 virtual void ShowInfo();
14 //獲取崗位名稱
15 virtual string GetDeptName();
16 };
7 class Boss : public Worker
8 {
9 public:
10 //建構式
11 Boss(int id, string name, int deptid);
12 //崗位資訊描述
13 virtual void ShowInfo();
14 //獲取崗位名稱
15 virtual string GetDeptName();
16 };
以普通職工為例,源檔案為:
建構式中初始化職工編號、姓名等屬性,采用有參構造的方式,傳入的職工編號、姓名等賦值給物件的屬性
成員函式有展示崗位資訊函式,以及獲取崗位名稱函式
1 #include "employee.h"
2 //建構式
3 Employee::Employee(int id, string name, int deptid)
4 {
5 this->m_ID = id;
6 this->m_Name = name;
7 this->m_DeptID = deptid;
8 }
9 //崗位資訊描述
10 void Employee::ShowInfo()
11 {
12 cout << "職工編號: " << this->m_ID
13 << "\t職工姓名: " << this->m_Name
14 << "\t部門編號: " << this->GetDeptName()
15 << "\t職責是完成老板交代的任務" << endl;
16 }
17 //獲取崗位名稱
18 string Employee::GetDeptName()
19 {
20 return "職工";
21 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456961.html
標籤:C++
上一篇:僅獲取串列中最后一個回圈的資料
