1. 程式人生 > >實驗樓學習之C++實現課程管理系統

實驗樓學習之C++實現課程管理系統

需求分析

        課程總共分成三種:基礎課,專案課以及評估課,每門課都有唯一ID以及課程名,其中專案課增加了標籤資料,評估課增加了時間資料。整個系統的功能有:列印課程表(僅僅列印課程名和ID),根據ID或者課程名列印課程詳細資訊,根據ID或者課程名刪除課程,新增課程。整個課程資訊儲存在檔案內,當啟動課程管理系統時需要從檔案內讀取課程資訊。

實現分析

通過上面的需求分析,我們設計三種類來實現:課程類,課程管理類以及命令類。

      課程類分為基礎課類,專案課類和評估課類,為了是的課程管理類能夠統一管理,以基礎課類為基類,專案課類和評估課類公有繼承它:

class Course
{
    ....
};

class ProjectCourse:public Course
{
    ....
};
class JudgeCourse:public Course
{
    ....
}; 
由於需要實現列印課程詳細資訊的操作,在繼承體系中新增下面函式
virtual void PrintInfo() const; //列印課程詳細,並且是虛擬函式,保證課程管理類能夠呼叫正確的版本

為了可以通過ID或者課程名尋找課程,還需要新增兩個函式能夠返回ID和課程名,並且也要是虛擬函式,這兩個虛擬函式派生類可以直接繼承,不需要改寫。

virtual int GetID() const;
virtual string GetName() const;

每門課程ID唯一,只要在基類新增靜態資料成員即可,整個繼承體系共享一份基類的靜態成員。同時,我們禁止拷貝或者賦值,為了能夠實現將課程資源交給其他變數,新增移動建構函式和移動賦值運算子,還有另一個原因在下面課程管理類中。

static int currentID;

以上即使課程類的實現方式。

            課程管理類。既然要保證能夠統一管理課程,那容器類必須儲存的成員是基類的指標,為了能夠防止資源洩露,使用只能指標來管理資源。那選擇什麼容器儲存智慧指標呢?課程管理類需要實現課程新增以及刪除,那麼就要保證方便刪除和新增課程,這裡我們實際並沒有實現刪除操作,僅僅新增一個標記vector來標記此課程是否已經被刪除。那隻需要實現新增課程操作就可以了,那麼vector足夠。我這裡還有一些操作不完善,比如沒有在檔案中標記課程是否被刪除。我們課程管理類啟動所產生的所有動作都沒有和檔案同步,這一點還需要完善。對於上面的課程需要移動建構函式和移動賦值運算子另外一個原因就是,我們需要用Course物件來初始化智慧指標,如果沒有上面兩個成員,我們無法完成上述操作。

           對於命令類,比較簡單,可以直接看程式碼。程式碼已經上傳到github。CourseManageSystem

最後新增一個執行圖片: