學生資訊管理系統的構建思路1

2021-08-07 07:04:40 字數 2124 閱讀 9122

開閉原則(ocp)

1)對於擴充套件是開放的(open for extension)。

2)對於修改是關閉的(closed for modification)。

實現方法

實現開閉原則的關鍵就在於「抽象」。把系統的所有可能的行為抽象成乙個抽象底層,這個抽象底層規定出所有的具體實現必須提供的方法的特徵。

c++抽象類引入原因

1、為了方便使用多型特性,我們常常需要在基類中定義虛函式。

2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以過載以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。

三、相似概念:

1、多型性

指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c++支援兩種多型性:編譯時多型性,執行時多型性。

a.編譯時多型性: 通過函式過載和運算子過載來實現的。

b 執行時多型性:通過繼承和虛函式來實現的。

2、虛函式

虛函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式,可實現成員函式的動態過載

純虛函式的宣告有著特殊的語法格式:virtual 返回值型別成員函式名(參數列)=0;

請注意,純虛函式應該只有宣告,沒有具體的定義,即使給出了純虛函式的定義也會被編譯器忽略。

3、抽象類

包含純虛函式的類稱為抽象類。由於抽象類包含了沒有定義的純虛函式,所以不能定義抽象類的物件。

在c++中,我們可以把只能用於被繼承而不能直接建立物件的類設定為抽象類(abstract class)。

學生資訊管理系統

將程式分為使用者介面層、邏輯層、資料訪問物件層、資料傳輸物件層這4層,各層的功能如下:

1.使用者介面層

使用者介面層主要用來呼叫各個子介面層,包含了各個子介面層的程式設計

2.邏輯層

邏輯層包含了各個資料處理功能

3.資料訪問物件層

定義了資料的存、讀功能

4.資料傳輸物件層

定義了資料的格式(結構體或類)

以學生成績管理系統為例,單個學生的學生資訊包含學號、姓名、成績,因此資料的格式可定義為乙個類cstudentdto,其中包含了學號、姓名、成績等私有變數,相關變數的讀取函式及構造、析構函式。

然後考慮該程式想要實現的功能,該程式想要實現對學生資訊的新增、查詢、顯示、排序、修改、刪除等功能,因此可在主視窗上給出各個功能的選擇介面,再在各個功能選擇後顯示相應的子介面,因此顯示介面包括乙個主介面以及若干個子介面,因此可以定義乙個介面類,該類中包含若干個公有成員函式用來顯示主介面以及若干個子介面,並在子介面中呼叫邏輯函式【各類資料處理函式】。而邏輯函式的功能定義在邏輯層中,因此需要在介面類中定義乙個邏輯類的指標【不能定義為非指標類區域性物件,指標在堆上開闢記憶體空間,只有用delete才能釋放資源,如果不delete,該資源在整個程式執行期間都存在】。

邏輯類中包含了對資料的所有處理方法,因此必須知道具體的資料型別,及要包含資料類。而邏輯類中在處理資料之前需讀到資料,資料處理完畢後需儲存資料,而資料的讀取和儲存功能都是定義在資料訪問物件中的,因此邏輯類還需包含資料訪問類。

本例僅在 資料訪問類和邏輯類中定義了抽象類,介面類和資料傳輸類中沒有定義抽象類,其實只要有方法實現的類都可以定義抽象類,只是本例中的資料類較為簡單,只包含學生,如何還包含教師,家長等資訊,可以寫乙個person抽象類,然後讓學生、教師、家長等派生於此類。介面類也比較簡單,沒有定義抽象類。

學生資訊管理系統

學生資訊管理系統,顧名思義就是為了管理學生的相關資訊做的一款軟體。雖然這次有原始碼供我們參考,但是從中我學習到了如何從開始到完工去做一款軟體,下邊我從做一項軟體專案的前後順序來總結我的學生資訊管理系統。一,分析需求 首先在做這款軟體是,我們先想象乙個成品,他的功能有哪些,每個功能完成哪項任務,這就是...

學生資訊管理系統

1.背景描述 學校招生辦在錄取當年新生時為新生建立了乙個新生基礎資訊類studentbase,其中包含每位新生的基本資料 學號 long mnum 姓名 char mname 20 性別 int m 其中0表示男,1表示女 年齡 int mage 住址 char maddr 30 新生主修專業所在系...

學生資訊管理系統

學生資訊管理系統由13個窗體1乙個mdi窗體乙個模組組成,窗體主要實現了登陸 新增 修改 檢視等功能,模組主要是存放全域性變數和各種函式。在敲這個系統之前,我覺得有個問題需要考慮一下,要是想一邊敲一邊除錯的話,那前面就得把資料庫等配置好了,如果想敲完再除錯的話,那就什麼時候配置好資料庫都可以。我當時...