本書以Microsoft Visual Studio 2013為集成開發環境,通過對實際項目(學生選課管理系統)
的逐步重構和完善過程,引導讀者全面、深入地掌握C# Windows應用項目的開發技術。本書主要
介紹C# Windows應用項目的設計思路和開發步驟、OOP基本概念、ADO.NET數據庫訪問技術、三
層體系架構、簡單工廠模式等.NET開發的關鍵技術。
本書采用由點及面、由易到難、逐步完善的項目化內容組織方式,逐步介紹C#窗體項目開發
的關鍵技術及其應用技能。本書中涉及的關鍵技術不僅可用于開發三層架構的C#窗體應用軟件,
對于讀者后續學習各類框架開發更起著奠定基礎、知根溯源的作用。
本書適用于高職高專院校軟件專業的學生學習,也適用于廣大需要開發C# Windows應用項目
的讀者學習。
本書基于.NET軟件編碼員的崗位需求,在.NET框架內,基于Windows窗體項目開發介紹Windows應用程序的設計思路、OOP基本概念、ADO.NET數據庫訪問技術、三層體系架構、簡單工廠模式等關鍵基礎技術。本書以實際項目學生選課管理系統為載體,通過項目的逐步重構和完善,使讀者深入、全面地掌握以上Windows窗體項目開發技術。本書可作為高職高專軟件專業的教材,也可作為廣大Windows窗體項目開發人員的參考書。
前 言
目前的高職高專教學強調基于工作崗位需求的課程體系設計以及基于工作過程的課程開發。
首先,本書基于對軟件編碼員的崗位需求。在微軟的.NET框架內,Windows應用項目的開發是一個重要的工作領域。因此,本書的重點內容為C# Windows應用項目的設計思路和開發步驟、OOP基本概念、ADO.NET數據庫訪問技術、三層體系架構、簡單工廠模式等.NET開發的關鍵技術。本書中,以上內容以實際項目(學生選課管理系統)為載體,通過對其逐步的重構和完善,使讀者能夠深入、全面地掌握此類項目的開發技術和開發過程。
本書的內容結構設計如下圖所示。
第一階段:開發準備
這一階段通過5個工作任務的實施,介紹項目開發環境,項目開發必須要掌握的基礎語法和事件驅動機制,以及項目中自定義類的設計與應用,引入OOP基本概念。
第二階段:項目開發原始版本
這一階段首先是學生選課管理系統的需求分析和總體設計,然后用兩層架構完成課程管理模塊,并用自定義數據訪問類進行初步的重構。在此過程中引入ADO.NET數據庫訪問技術。
第三階段:項目開發重構過程
這一階段用三層架構重構課程管理模塊,在重構的過程中讓讀者體會三層架構的必要性、優越性,熟悉從兩層向三層轉換的詳細過程,以及用三層架構實現常用功能的技術。
第四階段:項目開發最終版本
這一階段用三層架構實現選課系統的其余所有模塊,讓讀者能熟練地理解三層架構,從而達到當面對任意的任務需求,都能應用三層架構來實現。
第五階段:項目的數據庫遷移
這一階段通過實現項目的數據庫遷移,引入繼承、多態、簡單工廠模式等OOP開發的高級技術。
第六階段:項目的安裝部署
這一階段通過實現項目的安裝和部署,讓讀者理解窗體類項目的實際安裝和維護的基本知識。
知識梳理
由于本書的知識點都是根據項目任務的需求而設置的,在此對本書的理論知識進行系統的梳理,以便讀者參考。
其次,本書通過仿真編碼員的典型工作過程:接受任務理解任務編碼思路設計編碼實現簡單測試,來具體進行各基本單元的設計。
在每個階段中,包含若干工作任務,工作任務的設計均仿真編碼員的實際工作過程。在每個任務中,基本包含以下環節:①情境描述,作為任務的接收環節;②業務流程分析,作為其任務的理解環節;③相關知識與技能,作為其設計決策的依據;④設計思路,引導學生應用知識,依據業務流程,設計實現思路,作為其設計環節;⑤實施與分析,作為其編碼實現和測試環節;⑥知識拓展,對一些經典的、但沒有包含在情境內的知識點進行講解和應用,以提升本書的普適性。
本書所對應的課程為面向對象程序設計,其前序課程應包含類似于結構化程序設計、數據庫技術基礎的相關課程,使讀者具備基本的編碼思路和關系數據庫的基本概念;后續課程為Web項目開發等。本書所包含的OOP概念、ADO.NET數據庫訪問技術、三層架構等基礎,對Web項目開發起著奠定基礎、知根溯源的作用。
本書適用于高職高專院校軟件專業的學生學習,也適用于廣大需要開發C# Windows應用項目的讀者學習。
本書不僅從易到難講透關鍵技術,更包含實際崗位工作的過程步驟,具體特點如下。
(1)采用由點及面、由簡到難、逐步重構項目的內容組織方式。在重構過程中,有利于鞏固讀者對基礎知識的理解和應用能力,有利于讀者體會三層架構的必要性、優越性,以及在從低級向高級的重構中,通過詳細的轉換過程,讓讀者對于關鍵技術真正知其然,也知其所以然。
(2)結合并仿真軟件編碼崗位的典型工作過程,各任務的設計均仿真實際工作過程,有利于讀者鍛煉就業崗位所需工作技能。
主要創作團隊為課程組的包芳、陳東東、屠莉,以及周建林、嚴洪濤老師。陳士川、吳懋剛老師進行了細致的總審。當然也離不開家人和其余領導同事的關心支持,在此一并表示真摯的感謝!
編 者
2017年1月
目
錄
第一階段
開 發 準 備
任務1 Visual Studio 2013開發環境的安裝 003
1.1 情境描述 003
1.2 相關知識 003
1.2.1 Visual Studio 2013的特點 003
1.2.2 .NET框架的組成 003
1.2.3 .NET 環境下程序的編譯執行過程 004
1.3 安裝實施 005
任務2 歡迎窗體 008
2.1 情境描述 008
2.2 相關知識 008
2.2.1 軟件分類及其運行機制 008
2.2.2 控件及其屬性 009
2.2.3 事件及事件驅動機制 010
2.2.4 控件的事件 010
2.2.5 控件的方法 011
2.2.6 基于事件驅動機制的 Windows
窗體應用程序設計思路 011
2.2.7 標簽、圖片和窗體控件 011
2.3 實施與分析 013
2.3.1 歡迎窗體的設計思路 013
2.3.2 歡迎窗體的實現 013
2.3.3 測試與改進 015
2.4 知識拓展 016
2.4.1 引用命名空間 016
2.4.2 程序集和反射 016
任務3 加法運算練習游戲 018
3.1 情境描述 018
3.2 相關知識 019
3.2.1 預定義和自定義類型 019
3.2.2 標識符和命名規范 020
3.2.3 變量和常量 021
3.2.4 值類型和引用類型 022
3.2.5 運算符 023
3.2.6 控制語句 023
3.2.7 文本框和按鈕控件 025
3.3 實施與分析 026
3.3.1 加法運算練習游戲的設計思路 026
3.3.2 加法運算練習游戲的實現 027
3.3.3 測試與改進 029
3.4 知識拓展 030
3.4.1 裝箱和拆箱 030
3.4.2 字符串和正則表達式 031
任務4 隨機抽號游戲 035
4.1 情境描述 035
4.2 相關知識C#的數組 035
4.3 實施與分析 036
4.3.1 隨機抽號游戲的設計思路 036
4.3.2 隨機抽號游戲的實現 036
4.3.3 測試與改進 037
4.4 知識拓展 038
4.4.1 窗體的描述 038
4.4.2 分布式類 039
4.4.3 項目中窗體的命名規范 039
任務5 Person類及其對象 041
5.1 情境描述 041
5.2 相關知識 041
5.2.1 OOP概述 041
5.2.2 類的定義 042
5.2.3 類的字段與屬性 043
5.2.4 類的方法 045
5.2.5 類的實例化 047
5.2.6 對象的應用 050
5.2.7 組框控件 051
5.3 實施與分析 051
5.3.1 Person類的設計應用思路 051
5.3.2 Person類及其對象應用的實現 051
5.3.3 測試與改進 053
5.3.4 Course類的設計與應用 054
5.4 知識拓展 056
5.4.1 靜態成員 056
5.4.2 常量成員 057
5.4.3 方法的重載 057
5.4.4 委托和事件 058
5.4.5 值參數 061
5.4.6 引用參數 062
5.4.7 輸出參數 063
5.4.8 參數數組 064
第二階段
項目開發原始版本
任務6 項目的需求分析 073
6.1 情境描述 073
6.2 相關知識軟件開發流程概述 073
6.3 項目需求概述 074
任務7 項目的總體設計 078
7.1 情境描述 078
7.2 相關知識應用程序的分層架構 078
7.3 項目總體設計 079
7.4 項目重構過程設計 081
7.5 項目中類的設計和應用 087
任務8 基于兩層架構的課程瀏覽查詢模塊 089
8.1 情境描述 089
8.2 相關知識 090
8.2.1 ADO.NET概述 090
8.2.2 OleDbConnection 類 091
8.2.3 OleDbDataAdapter 類 093
8.2.4 DataSet 類 093
8.2.5 DataGridView控件 093
8.3 實施與分析 094
8.3.1 課程瀏覽查詢的設計思路 094
8.3.2 課程瀏覽查詢的實現 095
8.3.3 測試與改進 097
任務9 基于兩層架構的課程添加刪除模塊 099
9.1 情境描述 099
9.2 相關知識 099
9.2.1 格式化字符串 099
9.2.2 OleDbCommand類 100
9.2.3 OleDbDataReader類 102
9.3 實施與分析 103
9.3.1 課程添加的設計思路 103
9.3.2 課程添加的實現 104
9.3.3 課程刪除的設計思路 105
9.3.4 測試與改進 105
任務10 數據訪問類DBHelper的設計和應用 107
10.1 情境描述 107
10.2 相關知識 107
10.2.1 數據操作類的設計思路 107
10.2.2 連接字符串字段 108
10.2.3 數據操作方法 109
10.3 實施與分析 110
10.3.1 DBHelper數據操作類的設計 110
10.3.2 應用DBHelper數據操作類
優化代碼 111
10.3.3 測試與改進 113
10.4 相關拓展 113
第三階段
項目開發重構過程
任務11 向三層架構的轉換 125
11.1 情境描述 125
11.2 相關知識 126
11.2.1 三層架構的劃分原理 126
11.2.2 對象關系映射ORM 127
11.3 實施與分析 128
11.3.1 向三層架構轉換的設計思路 128
11.3.2 向三層架構轉換的實現 129
11.3.3 測試與改進 129
任務12 基于三層架構的課程瀏覽查詢重構 132
12.1 情境描述 132
12.2 相關知識泛型集合 132
12.3 實施與分析 134
12.3.1 課程瀏覽的三層架構設計思路 134
12.3.2 課程查詢的三層架構設計思路 135
12.3.3 課程瀏覽和查詢的實現 136
12.3.4 測試與改進 140
任務13 基于三層架構的課程添加重構 142
13.1 情境描述 142
13.2 課程添加的三層架構設計思路 142
13.2.1 課程添加的數據訪問類 142
13.2.2 課程添加的業務邏輯類 143
13.2.3 課程添加的表現層 144
13.3 課程添加的三層架構實現 144
13.3.1 操作步驟 144
13.3.2 DAL層 144
13.3.3 BLL層 145
13.3.4 UI層 145
13.3.5 測試與改進 146
任務14 基于三層架構的課程刪除重構 149
14.1 情境描述 149
14.2 相關知識 150
14.2.1 自定義鏈接列 150
14.2.2 數據網格中行值的獲取 150
14.3 課程刪除的三層設計思路 151
14.3.1 課程刪除的數據訪問類 151
14.3.2 課程刪除的業務邏輯類 151
14.3.3 課程刪除表現層 152
14.4 課程刪除的三層架構實現 152
14.4.1 操作步驟 152
14.4.2 DAL層 152
14.4.3 BLL層 152
14.4.4 UI層 153
14.4.5 測試與改進 153
14.5 知識拓展:取單條記錄到實體類對象 154
第四階段
項目開發最終版本
任務15 用戶登錄模塊 161
15.1 情境描述 161
15.2 業務分析 162
15.3 相關知識 164
15.3.1 MDI窗體 164
15.3.2 MenuStrip菜單控件 164
15.3.3 窗體間的跳轉 164
15.3.4 RadioButton單選按鈕控件 164
15.4 界面制作 165
15.4.1 登錄界面及軟件首頁設置 165
15.4.2 管理員主界面 166
15.5 登錄的三層架構設計思路 166
15.5.1 學生登錄的三層架構設計 166
15.5.2 管理員登錄的三層架構設計 167
15.6 登錄的三層架構實現 168
15.6.1 操作步驟 168
15.6.2 DAL層 168
15.6.3 BLL層 169
15.6.4 UI層 169
15.6.5 測試與分析 170
任務16 管理員選課查詢模塊 172
16.1 情境描述 172
16.2 業務分析 172
16.3 相關知識下拉列表框控件 174
16.4 選課查詢的三層架構設計思路 175
16.5 選課查詢的三層實現 176
16.5.1 界面制作 176
16.5.2 操作步驟 176
16.5.3 DAL層 176
16.5.4 BLL層 177
16.5.5 UI層 177
16.5.6 測試與分析 178
任務17 學生選課退選模塊 180
17.1 情境描述 180
17.2 業務分析 180
17.2.1 學號傳遞的分析 181
17.2.2 退選的分析 181
17.2.3 選課的分析 182
17.3 相關知識 183
17.3.1 學號在窗體間的傳遞 183
17.3.2 異常捕捉 184
17.3.3 數據訪問類DBHelper類的
重構 185
17.4 選課退選設計思路 187
17.4.1 子功能1:已選總學分的三層
架構設計 187
17.4.2 子功能2:已選課程列表的
三層架構設計 187
17.4.3 子功能3:退選的三層架構
設計 188
17.4.4 子功能4:選課的三層架構
設計 189
17.5 選課退選的實現 190
17.5.1 界面設計 190
17.5.2 操作思路 190
17.5.3 配置文件的修改 191
17.5.4 子功能1:已選總學分 191
17.5.5 子功能2:已選課程列表 191
17.5.6 子功能3:退選 192
17.5.7 子功能4:選課 193
17.5.8 測試與分析 195
17.6 知識拓展應用委托和事務實現已選
總學分的實時更新 196
第五階段
項目的數據庫遷移
任務18 遷移的分析與設計 201
18.1 情境描述 201
18.2 相關知識 201
18.2.1 OOP再述 201
18.2.2 繼承 202
18.2.3 多態的概念 204
18.2.4 方法的隱藏 204
18.2.5 方法的覆蓋 205
18.2.6 抽象類 207
18.2.7 接口 209
18.2.8 簡單工廠模式 212
18.3 數據庫遷移的設計思路 214
任務19 遷移的實現 218
19.1 情境描述 218
19.2 實施與分析 218
19.2.1 設計數據訪問類公共接口
IDAL 218
19.2.2 重構原Access數據訪問類
AccessDAL 220
19.2.3 設計新的SQL Server數據
訪問類SQLServerDAL 220
19.2.4 設計工廠類DALFactory 228
19.2.5 重構業務邏輯層 229
第六階段
項目的安裝部署
任務20 安裝包的制作 235
20.1 情境描述 235
20.2 相關知識 235
20.2.1 新建安裝項目 235
20.2.2 應用程序文件夾 235
20.2.3 用戶的程序菜單 236
20.2.4 卸載功能 237
20.2.5 用戶桌面 238
20.2.6 安裝路徑 238
20.2.7 .NET框架等系統環境
的打包 238
20.2.8 SQL Server數據庫的打包 239
20.3 實施與分析 239
20.3.1 生成安裝文件夾 239
20.3.2 簡單測試 239
任務21 安裝包的部署 241
21.1 情境描述 241
21.2 實施與分析 241
21.2.1 安裝軟件 241
21.2.2 卸載軟件 242
21.2.3 簡單測試 242
知
識 梳 理
參
考 文 獻