再系統地過一次,夯實基礎
學習目標:
過一遍黑馬程式員C/C++學習視頻文章目錄
- 學習目標:
- 學習內容:
- 一、C++基礎入門
- 二、通訊錄管理系統
- 三、C++核心編程
- 三、 C++核心編程(面向物件) 繼承
- 四、基于多型的企業職工系統
- 1. 管理系統需求
- 3. 創建管理類
- 3.1 創建檔案
- 3.2 頭檔案實作
- 3.3 源檔案實作
- 4. 選單功能
- 4.1 添加成員函式
- 4.2 選單功能實作
- 5. 推出功能
- 5.1 提供功能介面
- 5.2 實作退出功能
- 6. 創建職工類
- 6.1 創建職工抽象類
- 6.2 創建普通員工類
- 6.3 創建經理類
- 6.4 創建老板類
- 6.5 測驗多型
- 7.添加職工
- 7.1 功能分析
- 7.2 功能實作
- 8. 檔案互動 - 寫檔案
- 8.1 設定檔案路徑
- 8.2 成員函式宣告
- 8.3 保存檔案功能實作
- 8.4 保存檔案功能測驗
- 9. 檔案互動 - 讀檔案
- 9.1 檔案未創建
- 9.2 檔案存在且資料為空
- 9.3 檔案存在且保存職工資料
- 9.3.1 獲取記錄的職工人數
- 9.3.2 初始化陣列
- 10. 顯示員工
- 10.1 顯示職工函式宣告
- 10.2 顯示職工函式實作
- 11. 洗掉職工
- 11.1 洗掉職工的函式宣告
- 11.2 職工是否存在函式宣告
- 11.3 職工是否存在函式實作
- 11.4 洗掉職工函式實作
- 12. 修改職工
- 12.1 修改職工函式宣告
- 12.2 修改職工函式實作
- 13. 查找職工
- 13.1 查找職工函式宣告
- 13.2 查找職工函式實作
- 14. 排序
- 14.1 排序函式宣告
- 15. 清空檔案
- 15.1 清空函式宣告
- 15.2 清空函式實作
- 五、C++提高編程
- 六、基于STL泛化編程的演講比賽
- 七、C++實戰專案機房預約管理系統
- 學習產出:
學習內容:
一、C++基礎入門
二、通訊錄管理系統
三、C++核心編程
三、 C++核心編程(面向物件) 繼承
四、基于多型的企業職工系統
1. 管理系統需求
職工管理系統可以用來管理公司內所有員工的資訊
公司中職工分為三類:普通員工共、經理、老板,顯示資訊時,需要顯示職工編號、職工姓名、職工崗位,以及職責
普通員工職責:完成經理交給的任務
經理職責:完成老板交給的任務,并下發任務給員工
老板職責:管理公司所有事物
管理系統中需要實作的功能如下:
- 退出管理程式:退出當前管理系統
- 增加職工資訊:實作批量添加職工功能,將資訊錄入到檔案中,職工資訊為:職工編號、姓名、部門編號
- 顯示職工資訊:顯示公司內部所有職工的資訊
- 洗掉離職職工:按照編號洗掉指定的職工
- 修改職工資訊:按照編號修改職工個人資訊
- 查找職工資訊:按照職工的編號或者職工的姓名進行查找相關的人員資訊
- 按照編號排序:按照職工編號,進行排序,排序規則由用戶指定
- 清空所有檔案:清空檔案中記錄的所有員工資訊(清空前需要在此確認,防止誤刪)
3. 創建管理類
管理類負責的內容如下:
- 與用戶的溝通選單界面
- 對職工增刪改查的操作
- 對檔案的讀寫互動
3.1 創建檔案
在頭檔案和源檔案的檔案夾下分別創建workerManager.h和workerManager.cpp檔案

3.2 頭檔案實作
在workerManager.h中設計管理類
#pragma once
#include<iostream>
using namespace std;
class WorkerManager {
public:
//定義 實作在cpp
WorkerManager();
~WorkerManager();
};
3.3 源檔案實作
在workerManager.cpp中將構造和解構式空實作補全
#include "workerManager.h"
WorkerManager::WorkerManager() {}
WorkerManager::~WorkerManager() {}
至此職工管理類創建完畢
4. 選單功能
功能描述:與用戶的溝通界面
4.1 添加成員函式
在管理類workerManager.h中添加成員函式 void Show_Menu();
4.2 選單功能實作
在管理類workerManager.cpp中實作Show_Menu()函式
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;
}
5. 推出功能
5.1 提供功能介面
在main()函式中提供分支選擇,提供每個功能介面
int choice;
cout << "請輸入您的選擇:" << endl;
cin >> choice;
switch (choice) {
case 0://退出系統
break;
case 1://添加職工
break;
case 2://顯示職工
break;
case 3://洗掉職工
break;
case 4://修改職工
break;
case 5://查找職工
break;
case 6://排序職工
break;
case 7://清空檔案
break;
default:
system("cls");
break;
}
5.2 實作退出功能
在workerManager.h中提供退出系統的成員函式void exitSystem();
在workerManager.cpp中提供功能實作
void WorkerManager::exitSystem() {
cout << "歡迎下次使用" << endl;
system("pause");
//退出程式
exit(0);
}
6. 創建職工類
6.1 創建職工抽象類
職工的分類為:普通員工、經理、老板
將三種職工抽象到一個類(worker)中,利用多型管理不同職工類
職工的屬性為:職工編號、職工姓名、職工所在部門編號
職工的行為為:崗位職責資訊描述,獲取崗位名稱
在頭檔案夾中創建worker.h
//職工抽象類
class Worker {
public:
//顯示個人資訊
virtual void showInfo() = 0;
//獲取崗位名稱
virtual void getDeptName() = 0;
int m_Id;//職工編號
string m_Name;//職工姓名
int m_DeptId;//職工所在部門名稱編號
};
6.2 創建普通員工類
普通員工類繼承職工抽象類,并重寫父類中純虛函式
在頭檔案和源檔案夾中分別創建employee.h 和 employee.cpp檔案
#pragma once
#include<iostream>
using namespace std;
#include "woker.h"
//員工類
class Employee :public Worker {
public:
//建構式
Employee(int id, string name, int dId);
//顯示個人資訊
virtual void showInfo();
//獲取職工崗位名稱
virtual string getDeptName();
};
employee.cpp
#include "employee.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("員工");
}
6.3 創建經理類
經理類繼承職工抽象類,并重寫父類中純虛函式,和普通員工類似
在頭檔案夾和源檔案夾下分別創建manager.h和manager.cpp檔案
#pragma once
#include <iostream>
#include "employee.h"
using namespace std;
class Manager :public Worker {
public:
//建構式
Manager(int id, string name, int dId);
void showInfo();
string getDeptName();
};
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("經理");
}
6.4 創建老板類
老板類繼承職工抽象類,并重寫父類中純虛函式,和普通員工類似
在頭檔案夾和源檔案夾下分別創建boss.h和boss.cpp檔案
class Boss :public Worker{
public:
//建構式
Boss(int id, string name, int dId);
void showInfo();
string getDeptName();
};
boss.cpp
#include "boss.h"
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崗位職責:管理公司所有事物" << endl;
}
string Boss::getDeptName() {
return "總裁";
}
6.5 測驗多型
在職工管理系統.cpp中添加測驗函式,并且運行能夠產生多型
#include <iostream>
#include "boss.h"
#include "manager.h"
#include "employee.h"
using namespace std;
void test() {
Worker* worker = nullptr;
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;
}

7.添加職工
功能描述:批量添加職工,并且保存到檔案中
7.1 功能分析
分析:
用戶在批量創建時,可能會創建不同種類的職工
如果想將所有不同種類的員工都放入到一個陣列中,可以將所有員工的指標回鶻到一個陣列里
如果想在程式中維護這個不定長度的陣列,可以將陣列創建到堆區,并利用 Worker**的指標維護

7.2 功能實作
在WokerManager.h頭檔案中添加成員屬性代碼
//記錄檔案中的人數個數
int m_EmpNum;
//員工陣列的指標
Worker** m_EmpArray;
在WorkerManager建構式中初始化屬性
WorkerManager::WorkerManager() {
//初始化人數
this->m_EmpNum = 0;
//初始化陣列指標
this->m_EmpArray = nullptr;
}
在WorkerManager.h添加成員函式
//增加職工
void Add_Emp();
在WorkerManager.cpp中實作該函式
#include "workerManager.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
//添加職工
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;
while (true) {
cin >> id;
int flag = 0;
for (int i = 0; i < this->m_EmpNum; i++) {
if (id == this->m_EmpArray[i]->m_Id) {
cout << "Id已存在,請重新輸入" << endl;
flag = 1;
break;
}
}
if (flag == 0)
break;
}
cout << "請輸入第" << i + 1 << "個新職工的姓名: " << endl;
cin >> name;
cout << "請選擇的該職工的崗位: " << endl;
cout << "1、普通職工" << endl;
cout << "2、經理" << endl;
cout << "3、老板" << endl;
cin >> dSelect;
Worker* worker = nullptr;
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:
cout << "輸入有誤:";
break;
}
//將創建職工指標, 保存到陣列中
newSpace[this->m_EmpNum + i] = worker;
}
//釋放原有的空間
delete[] this->m_EmpArray;
//更改新空間的指向
this->m_EmpArray = newSpace;
//更新新的職工人數
this->m_EmpNum = newSize;
//提示添加成功
cout << "成功添加" << addNum << "名新職工" << endl;
}
else {
cout << "輸入資料有誤" << endl;
}
//按任意鍵后 清屏回到上級目錄
system("pause");
system("cls");
注意: 解構式釋放堆區資料
WorkerManager::~WorkerManager() {
if (this->m_EmpArray != nullptr) {
delete[] this->m_EmpArray;
this->m_EmpArray = nullptr;
}
}
8. 檔案互動 - 寫檔案
功能描述:對檔案進行讀寫
在上一個添加功能中,我們只是將所有的資料添加到了記憶體中,一旦程式結束就無法保存了
8.1 設定檔案路徑
首先我們將檔案的路徑,在workerManager.h中田間宏常量,并且包含頭檔案fstream
#include <fstream>
constexpr auto FILENAME = "empFile.txt";
8.2 成員函式宣告
在workerManager.h中類里添加成員函式void save()
//保存檔案
void save();
8.3 保存檔案功能實作
void WorkerManager::save() {
ofstream ofs;
ofs.open(FILENAME, ios::out);
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;
}
ofs.close();
}
8.4 保存檔案功能測驗
在添加職工功能中添加成功后添加保存檔案函式
//提示添加成功
cout << "成功添加" << addNum << "名新職工" << endl;
//保存到檔案中
this->save();
9. 檔案互動 - 讀檔案
功能描述:將檔案中的內容讀取到程式中
雖然我們實作了添加職工后保存到檔案的操作,但是每次開始運行程式,并沒有將檔案中資料讀取到程式中
而我們的程式功能中還有清空檔案的需求
因此建構式初始化資料的情況分為三種
- 第一次使用,檔案未創建
- 檔案存在,但是資料被用戶清空
- 檔案存在,并且保存職工的所有資料
9.1 檔案未創建
在workerManager.h中添加新的成員屬性 m_FileisEmpty 標志檔案是否為空
//標志檔案是否為空
bool m_FileIsEmpty;
修改WorkerManager.cpp中建構式代碼
WorkerManager::WorkerManager() {
ifstream ifs;
ifs.open(FILENAME, ios::in);//讀檔案
//檔案不存在的情況
if (!ifs.is_open()) {
cout << "檔案不存在" << endl;//測驗輸出
this->m_EmpNum = 0;//初始化人數
this->m_FileIsEmpty = true;//初始化檔案為空標志
this->m_EmpArray = nullptr;//初始化陣列
ifs.close();
return;
}
}
9.2 檔案存在且資料為空
在WorkerManager.cpp中建構式檔案不存在后追加代碼:
//檔案存在 且沒有資料
char ch;
ifs >> ch;
if (ifs.eof()) {
cout << "檔案為空" << endl;
this->m_EmpNum = 0;
this->m_FileIsEmpty = true;
this->m_EmpArray = nullptr;
ifs.close();
return;
}
}
再在添加職工代碼塊中的 //更新新的職工人數之后添加更新不為空標志
//更新新的職工人數
this->m_EmpNum = newSize;
//更新職工不為空標志
this->m_FileIsEmpty = false;
9.3 檔案存在且保存職工資料
9.3.1 獲取記錄的職工人數
在WorkerManager.h中添加成員函式 int get_EmpNum();
//統計人數
int get_EmpNum();
在WorkerManager.cpp中實作
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;
}
在WorkerManager.cpp建構式中繼續追加代碼:
int num = this->get_EmpNum();
//cout << "職工個數為: " << num << endl;//測驗代碼
this->m_EmpNum = num;
9.3.2 初始化陣列
根據職工的資料以及職工資料,初始化workerManager中Worker** m_EmpArray指標
在WorkerManager.h中添加成員函式void init_Emp();
//初始化員工
void init_Emp();
在WorkerManager.cpp中實作
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 = nullptr;
//根據不同的部門ID創建不同物件
if (dId == 1) {//1、普通員工
worker = new Employee(id, name, dId);
}
else if (dId == 2) {//2、經理
worker = new Manager(id, name, dId);
}
else if (dId == 3) {//3、Boss
worker = new Manager(id, name, dId);
}
//存放在陣列中
this->m_EmpArray[index] = worker;
index++;
}
}
在WorkerManager.cpp建構式中追加代碼
//根據職工數創建陣列,開辟空間
this->m_EmpArray = new Worker * [this->m_EmpNum];
//初始化職工
//將檔案中的資料,存到陣列中
init_Emp();
//測驗代碼
for (int i = 0; i < m_EmpNum; i++) {
cout << "職工號: " << this->m_EmpArray[i]->m_Id
<< "職工姓名: " << this->m_EmpArray[i]->m_Name
<< "部門編號: " << this->m_EmpArray[i]->m_DeptId << endl;
}
10. 顯示員工
功能描述:顯示當前所有職工資訊
10.1 顯示職工函式宣告
在workerManager.h中田間成員函式 void Show_Emp();
//顯示職工
void ShowEmp();
10.2 顯示職工函式實作
在WorkerManager.cpp中實作成員函式 void Show_Emp();
//顯示職工
void WorkerManager::ShowEmp() {
if (this->m_FileIsEmpty) {
cout << "檔案夾不存在或記錄為空" << endl;
}
else {
for (int i = 0; i < m_EmpNum; i++) {
//利用多型呼叫介面
this->m_EmpArray[i]->showInfo();
}
}
system("pause");
system("cls");
}
11. 洗掉職工
功能描述:按照職工的編號進行洗掉職工操作
11.1 洗掉職工的函式宣告
在WorkerManager.h中添加成員函式 void Del_Emp();
//洗掉職工
void Del_Emp();
11.2 職工是否存在函式宣告
很多功能都需要用到根據職工是否存在來進行操作如:洗掉職工、修改職工、查找職工
因此添加該公告函式,以便后續呼叫
在Workermanager.h中添加成員函式 int IsExist(int id;
//按照職工編號判斷職工是否存在, 若存在回傳職工在陣列中位置,不存在回傳-1
int IsExit(int id);
11.3 職工是否存在函式實作
在WorkerMananger.cpp中實作成員函式 int IsExit(int id);
int WorkerManager::IsExit(int id)
{
int index = -1;
for (int i = 0; i < m_EmpNum; i++) {
if (this->m_EmpArray[i]->m_Id == id) {
index = i;
break;
}
}
return index;
}
11.4 洗掉職工函式實作
void WorkerManager::Del_Emp() {
if (this->m_FileIsEmpty) {
cout << "檔案不存在或記錄為空" << endl;
}
else {
//按照職工的編號進行洗掉
cout << "請輸入要洗掉的職工編號" << endl;
int id = -1;
cin >> id;
int index = this->IsExit(id);
if (index != -1) {//說明職工存在,并且要洗掉掉相關職工
//資料前移
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");
}
12. 修改職工
功能描述:能夠按照職工的編號對職工資訊進行修改并保存
12.1 修改職工函式宣告
在WorkerManager.h中添加成員函式 void Mod_Emp();
//修改職工
void Mod_Emp();
12.2 修改職工函式實作
在WorkerManager.cpp中實作成員函式 void Mod_Emp();
void WorkerManager::Mod_Emp()
{
if (this->m_FileIsEmpty) {
cout << "檔案不存在或者記錄為空" << endl;
}
else {
cout << "請輸入修改職工的編號: " << endl;
int id;
cin >> id;
int ret = this->IsExit(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、 經理" << endl;
cout << "3、 老板" << endl;
cin >> dSelect;
Worker* worker = nullptr;
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:
cout << "輸入有誤" << endl;
break;
}
//更新資料 到陣列中
this->m_EmpArray[ret] = worker;
cout << "修改成功!" << endl;
//保存到檔案中
this->save();
}
else {
cout << "修改失敗,查無此人" << endl;
}
}
system("pause");
system("cls");
}
13. 查找職工
功能描述:提供兩種查找職工方式,一種按照職工編號,一種按照職工姓名
13.1 查找職工函式宣告
在WorkerManager.h中添加成員函式 void Find_Emp();
//查找職工
void Find_Emp();
13.2 查找職工函式實作
在WorkerManager.cpp中實作成員函式void Find_Emp();
//查找職工
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 = IsExit(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;
m_EmpArray[i]->showInfo();
flag = true;
}
}
if (flag == false) {
cout << "查找失敗,查無此人" << endl;
}
}
else {
cout << "輸入選項有誤" << endl;
}
}
system("pause");
system("cls");
}
14. 排序
功能描述:按照職工編號進行排序,,排序功能由用戶指定
14.1 排序函式宣告
在WorkerManager.h中添加成員函式 void Sort_Emp();
//排序職工
void Sort_Emp();
在WorkerManager.cpp中實作成員函式void Sort_Emp();
void WorkerManager::Sort_Emp() {
if (this->m_FileIsEmpty) {
cout << "檔案不存在或記錄為空!" << endl;
system("pause");
system("cls");
}
else{
cout << "1、按職工號進行升序" << endl;
cout << "2、按職工號進行降序" << endl;
int select;
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();
this->ShowEmp();
}
}
15. 清空檔案
功能描述:將檔案中記錄資料清空
15.1 清空函式宣告
在WorkerManager.h中添加成員函式 void Clean_File();
//清空檔案
void Clean_File();
15.2 清空函式實作
在WorkerManager.cpp中實作成員函式void Clean_File();
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 != nullptr) {
//釋放堆區陣列
for (int i = 0; i < this->m_EmpNum; i++) {
//物件存在先清楚物件
if (this->m_EmpArray[i] != nullptr) {
delete this->m_EmpArray[i];
}
}
this->m_EmpNum = 0;
//清楚陣列物件
delete[] this->m_EmpArray;
this->m_EmpArray = nullptr;
this->m_FileIsEmpty = true;
}
cout << "清除成功" << endl;
}
system("pause");
system("cls");
}
更新解構式
WorkerManager::~WorkerManager() {
if (this->m_EmpArray != nullptr) {
for(int i = 0; i < this->m_EmpNum; i++){
if (this->m_EmpArray[i] != nullptr) {
delete this->m_EmpArray[i];
}
}
delete[] this->m_EmpArray;
}
}
五、C++提高編程
六、基于STL泛化編程的演講比賽
七、C++實戰專案機房預約管理系統
學習產出:
1、github 啃STL簡化專案,能夠自己實作STL相關專案
2、做一個微信小程式,具體功能暫定
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/156261.html
標籤:其他
