基于.net的駕校理論考試模擬系統(tǒng)_第1頁
已閱讀1頁,還剩81頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  第一章系統(tǒng)概述1</b></p><p>  1.1系統(tǒng)開發(fā)背景和意義1</p><p><b>  1.2開發(fā)目的1</b></p><p><b>  1.3開發(fā)環(huán)境1</b&g

2、t;</p><p><b>  1.4硬件需求2</b></p><p>  第二章 系統(tǒng)需求分析3</p><p>  2.1系統(tǒng)功能設(shè)計(jì)3</p><p>  2.2系統(tǒng)功能模塊劃分4</p><p>  2.3系統(tǒng)數(shù)據(jù)流圖5</p><p><b&g

3、t;  2.4數(shù)據(jù)字典6</b></p><p>  第三章 系統(tǒng)總體設(shè)計(jì)7</p><p>  3.1總體設(shè)計(jì)目標(biāo)7</p><p>  3.2概念模型(E-R圖)7</p><p>  3.3關(guān)系模式錯(cuò)誤!未定義書簽。</p><p>  第四章 系統(tǒng)詳細(xì)設(shè)計(jì)11</p>&l

4、t;p>  4.1系統(tǒng)通用類設(shè)計(jì)11</p><p>  4.1.1基本通用類設(shè)計(jì)11</p><p>  4.1.2系統(tǒng)流程圖11</p><p>  第五章 系統(tǒng)程序?qū)崿F(xiàn)與測(cè)試14</p><p>  5.1 用戶登錄和新用戶注冊(cè)14</p><p>  5.1.1用戶界面設(shè)計(jì)14</p&g

5、t;<p>  5.1.2用戶登錄14</p><p>  5.1.3用戶注冊(cè)15</p><p>  5.1.4用戶角色管理16</p><p>  5.1.5用戶密碼修改17</p><p>  5.2題庫(kù)設(shè)計(jì)17</p><p>  5.2.1試題種類管理錯(cuò)誤!未定義書簽。</p&

6、gt;<p>  5.2.2試題圖片管理17</p><p>  5.2.3添加試題錯(cuò)誤!未定義書簽。</p><p>  5.2.4修改試題錯(cuò)誤!未定義書簽。</p><p>  5.2.5刪除試題錯(cuò)誤!未定義書簽。</p><p>  5.2.6試題答案設(shè)計(jì)18</p><p>  5.2.

7、7試題答案添加錯(cuò)誤!未定義書簽。</p><p>  5.2.8試題答案修改錯(cuò)誤!未定義書簽。</p><p>  5.2.9試題答案刪除錯(cuò)誤!未定義書簽。</p><p>  5.3試卷設(shè)計(jì)錯(cuò)誤!未定義書簽。</p><p>  5.3.1添加新試卷錯(cuò)誤!未定義書簽。</p><p>  5.3.2修改試卷

8、錯(cuò)誤!未定義書簽。</p><p>  5.3.3刪除試卷錯(cuò)誤!未定義書簽。</p><p>  5.4隨機(jī)生成試卷19</p><p>  5.5考生在線答題21</p><p>  5.6自動(dòng)閱卷23</p><p>  5.7考試結(jié)果24</p><p><b>  

9、5.8測(cè)試24</b></p><p>  5.8.1測(cè)試項(xiàng)目25</p><p>  5.8.2測(cè)試運(yùn)行結(jié)果錯(cuò)誤!未定義書簽。</p><p><b>  結(jié)束語26</b></p><p><b>  參考文獻(xiàn)27</b></p><p><b

10、>  第一章系統(tǒng)概述</b></p><p>  1.1系統(tǒng)開發(fā)背景和意義</p><p>  隨著我國(guó)經(jīng)濟(jì)的高速發(fā)展,我國(guó)的交通運(yùn)輸能力不斷提高,越來越多的人開私家車到異地進(jìn)行商務(wù)或者旅游等活動(dòng)。在這一條件下,我國(guó)的車輛逐漸增多,最近幾年,學(xué)車的人也是越來越多。為了減少交通事故的發(fā)生,車管所對(duì)駕駛員的交通知識(shí)考核起著至關(guān)重要的作用。隨著信息量的逐步增加,繁雜的數(shù)據(jù)處理費(fèi)

11、時(shí)費(fèi)力,單純以人力進(jìn)行的駕駛員理論考試的考核已經(jīng)不適合駕駛理論考試的現(xiàn)狀?,F(xiàn)在是一個(gè)信息產(chǎn)業(yè)的時(shí)代,國(guó)家把信息產(chǎn)業(yè)作為增長(zhǎng)國(guó)民經(jīng)濟(jì)的重要因數(shù)。在這樣的環(huán)境下,先進(jìn)的信息技術(shù)進(jìn)行駕駛員理論考試已成為必要。</p><p>  駕駛模擬考試系統(tǒng)以計(jì)算機(jī)為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫(kù)中,

12、通過計(jì)算機(jī)可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡(jiǎn)單的數(shù)據(jù)便可操作。</p><p>  該系統(tǒng)采用B/S模式進(jìn)行設(shè)計(jì),異地的想學(xué)車的學(xué)員也可以使用該系統(tǒng),進(jìn)行模擬考試,從而了解自己對(duì)交通規(guī)則了解多少。</p><p>  本系統(tǒng)主要由使用Microsoft Visual Studio.NET 2003 開發(fā)的頁

13、面,由SQL Server2000開發(fā)的數(shù)據(jù)庫(kù)組成。</p><p><b>  1.2開發(fā)目的</b></p><p>  本系統(tǒng)采用B/S模式設(shè)計(jì),開發(fā)目的除了方便車輛管理所的工作人員。同時(shí)把駕駛理論所有試題保存到數(shù)據(jù)庫(kù),通過互聯(lián)網(wǎng)方便地進(jìn)行模擬考試,還能讓學(xué)車的學(xué)員對(duì)交通規(guī)則和法律知識(shí)有更多的了解。</p><p><b>  

14、1.3開發(fā)環(huán)境</b></p><p>  本系統(tǒng)是在windows XP操作系統(tǒng)下,使用Microsoft Visual Studio.NET 2003作為開發(fā)工具進(jìn)行開發(fā)的。數(shù)據(jù)庫(kù)使用的是SQL Server2000。</p><p><b>  1.4硬件需求</b></p><p>  在運(yùn)行本系統(tǒng)前,請(qǐng)檢查以下計(jì)算機(jī)是否滿

15、足以下要求。</p><p>  服務(wù)器要求的配置為:</p><p>  CPU:Intel 賽揚(yáng)Ⅳ以上,建議Intel PentiumⅣ以上</p><p>  內(nèi)存:128M以上,建議256M以上</p><p>  硬盤:1G以上的可用硬盤安裝空間</p><p>  操作系統(tǒng):Windows 2000以上,I

16、nternet信息服務(wù)器5.0(IIS 5.0)</p><p>  軟件:Microsoft SQL Server 7.0以上版本</p><p>  客戶機(jī)硬件配置要求為:</p><p>  CPU:Intel賽揚(yáng)Ⅲ 以上,建議Intel PentiumⅢ 以上</p><p>  內(nèi)存:32M以上,建議64M以上</p>

17、<p>  操作系統(tǒng):Windows2000以上,IE5.0以上版本</p><p>  第二章 系統(tǒng)需求分析</p><p><b>  2.1系統(tǒng)功能設(shè)計(jì)</b></p><p>  根據(jù)駕校理論考試的邏輯劃分,本系統(tǒng)一共有六個(gè)子系統(tǒng),分別是用戶登錄和注冊(cè),用戶角色管理,用戶管理,試題管理,題庫(kù)管理,在線答題。其功能結(jié)構(gòu)圖如圖2

18、.1所示。</p><p>  圖2.1 系統(tǒng)功能圖</p><p><b>  用戶管理</b></p><p>  添加用戶,修改用戶,刪除用戶,用戶登錄和注冊(cè)。</p><p><b>  試題管理</b></p><p>  (1)試題類別管理,主要是實(shí)現(xiàn)試題類別的添

19、加、修改試題類別、刪除試題類別、和試題的類別排序功能。</p><p>  (2)試題圖片管理,主要實(shí)現(xiàn)試題的圖片添加,刪除和修改等功能</p><p>  (3)考試試題管理,主要實(shí)現(xiàn)試題的添加、修改、刪除功能。</p><p>  (4)試題答案管理,主要實(shí)現(xiàn)試題答案的添加、修改、刪除功能。</p><p><b>  題庫(kù)管理

20、</b></p><p>  題庫(kù)管理主要是在系統(tǒng)中構(gòu)造試卷,即試題的每一種題型有多少題,添加試卷、及刪除試卷和修改試卷功能。</p><p><b>  在線答題</b></p><p>  (1)動(dòng)態(tài)隨機(jī)生成試卷,使用隨機(jī)函數(shù)動(dòng)態(tài)地從題庫(kù)中取得整套試卷和題目,每次生成的試卷是不相同的。</p><p> 

21、 (2)顯示出整套試卷,依次答題,系統(tǒng)自動(dòng)判斷該題是否正確。</p><p>  (3)最后顯示該考生的考試成績(jī)。</p><p>  2.2系統(tǒng)功能模塊劃分</p><p>  系統(tǒng)整體設(shè)計(jì)如圖2.2所示,此系統(tǒng)可以劃分為業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層和數(shù)據(jù)庫(kù)。</p><p>  圖2.2 系統(tǒng)設(shè)計(jì)圖</p><p> 

22、 數(shù)據(jù)庫(kù)、數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層的具體描述如下:</p><p>  (1)數(shù)據(jù)庫(kù)位于系統(tǒng)最底層,它存儲(chǔ)系統(tǒng)的所有數(shù)據(jù)。</p><p>  (2)數(shù)據(jù)訪問層建立在數(shù)據(jù)庫(kù)之上,應(yīng)用程序通過該層訪問數(shù)據(jù)庫(kù)。數(shù)據(jù)訪問層一般封裝數(shù)據(jù)庫(kù)的選擇、添加、更新、刪除等操作。同時(shí)還為業(yè)務(wù)邏輯層提供訪問數(shù)據(jù)庫(kù)的接口或函數(shù)等。該層直接與數(shù)據(jù)庫(kù)相關(guān)聯(lián),同時(shí)又為業(yè)務(wù)邏輯層服務(wù),所以數(shù)據(jù)庫(kù)訪問層設(shè)計(jì)的好壞關(guān)系到整個(gè)

23、系統(tǒng)的成敗。下面以用戶管理模塊的數(shù)據(jù)訪問(UserDB類)為例,介紹數(shù)據(jù)訪問層的實(shí)現(xiàn)方法。UserDB類實(shí)現(xiàn)訪問數(shù)據(jù)庫(kù)的方法如下:</p><p>  Public SqlDataReader GetUsers() 從用戶表Users獲取所有用戶信息。</p><p>  Public SqlDataReader GetSingleUser(int nUserID)從用戶表Users獲取單

24、個(gè)用戶信息。</p><p>  Public int AddUser(String sUserName,String sPassword,String sEmail)添加新用戶到用戶表Users中。</p><p>  Public void UpdateUserPassword(int nUserID,string sPassword)更新用戶的密碼。</p><p

25、>  Public void UpdateUserState(int nUserID,int nState)更新用戶的當(dāng)前狀態(tài)。</p><p>  Public void UpdateUserRole(int nUserID,int nRoleID)更新用戶的角色。</p><p>  Public void DeleteUser(int nUserID)從用戶表Users中刪除用

26、戶。</p><p>  Public SqlDataReader GetUserLogin(String nUserName,String sPassword)從用戶表Users中獲取用戶ID,用于用戶登錄。</p><p> ?。?)業(yè)務(wù)邏輯層包括題庫(kù)創(chuàng)建、用戶管理、用戶注冊(cè)等業(yè)務(wù)邏輯,它一般由Web頁面實(shí)現(xiàn),如系統(tǒng)登錄頁面Default.aspx、用戶管理頁面UserManage.

27、aspx、隨機(jī)生成試卷頁面CreateExaminePaper.aspx等。</p><p>  系統(tǒng)是由六個(gè)完整的功能實(shí)現(xiàn)的,根據(jù)這些功能,可以設(shè)計(jì)出系統(tǒng)的功能模塊,各個(gè)系統(tǒng)功能模塊之間的關(guān)系如圖2.3所示。</p><p>  圖2.3 模塊關(guān)系圖</p><p><b>  2.3系統(tǒng)數(shù)據(jù)流圖</b></p><p&g

28、t;  本系統(tǒng)采用B/S模式設(shè)計(jì),開發(fā)目的除了方便車輛管理所的工作人員。同時(shí)把駕駛理論所有試題保存到數(shù)據(jù)庫(kù),通過互聯(lián)網(wǎng)方便地進(jìn)行模擬考試,還能讓學(xué)車的學(xué)員對(duì)交通規(guī)則和法律知識(shí)有更多的了解。該系統(tǒng)數(shù)據(jù)流圖如圖2.4所示。</p><p>  D1用戶信息 D2題庫(kù) </p><p>  核對(duì)信息 題庫(kù)管理</p>&

29、lt;p>  登錄 核對(duì)正確 答題</p><p><b>  提交</b></p><p>  查看 計(jì)算考試成績(jī)</p><p><b>  讀取成績(jī)</b></p><p><b>  D

30、3考試成績(jī)</b></p><p>  圖2.4系統(tǒng)數(shù)據(jù)流圖</p><p><b>  2.4數(shù)據(jù)字典</b></p><p>  數(shù)據(jù)流圖描述了系統(tǒng)的分解,但沒有對(duì)圖中各成分進(jìn)行說明,數(shù)據(jù)字典就是為了數(shù)據(jù)流圖的每個(gè)數(shù)據(jù),以及組成數(shù)據(jù)流或文件的數(shù)據(jù)項(xiàng)作出說明。</p><p><b>  數(shù)據(jù)字典

31、:</b></p><p>  試題=問題內(nèi)容+問題類型+問題選項(xiàng)+問題圖片+問題分值</p><p>  用戶=用戶名+用戶密碼+用戶Email地址+用戶類型</p><p>  答案=問題的正確答案+答案所屬的問題</p><p>  第三章 系統(tǒng)總體設(shè)計(jì)</p><p><b>  3.1總

32、體設(shè)計(jì)目標(biāo)</b></p><p>  駕駛模擬考試系統(tǒng)以計(jì)算機(jī)為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫(kù)中,通過計(jì)算機(jī)可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡(jiǎn)單的數(shù)據(jù)便可操作。</p>&

33、lt;p>  該系統(tǒng)采用B/S模式進(jìn)行設(shè)計(jì),異地的想學(xué)車的學(xué)員也可以使用該系統(tǒng),進(jìn)行模擬考試,從而了解自己對(duì)交通規(guī)則了解多少。</p><p>  3.2概念模型(E-R圖)</p><p>  得到前面的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)以后,就可以設(shè)計(jì)出能夠滿足用戶需求的各種實(shí)體,以及它們之間的關(guān)系。這些實(shí)體包含各種具體信息,通過相互之間的作用形成數(shù)據(jù)的流動(dòng)。</p><p&g

34、t;  駕駛模擬考試系統(tǒng)以計(jì)算機(jī)為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫(kù)中,通過計(jì)算機(jī)可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡(jiǎn)單的數(shù)據(jù)便可操作。</p><p>  本例根據(jù)上面的設(shè)計(jì)規(guī)劃出的實(shí)體有:管理員,試卷,

35、考生。下面畫出各實(shí)體之間的主要E-R關(guān)系圖,如圖3.1所示。</p><p>  圖3.1個(gè)實(shí)體之間的主要關(guān)系的E-R圖</p><p><b>  3.3關(guān)系模式</b></p><p>  用戶(用戶ID,用戶名,用戶密碼,用戶Email,用戶角色I(xiàn)D)</p><p>  問題(問題ID,問題內(nèi)容,問題類型,問題圖

36、片,問題分值)</p><p>  答案(問題正確答案,問題ID)</p><p>  試卷(試卷ID,試題總分?jǐn)?shù),考試時(shí)間)</p><p><b>  3.3.1字段</b></p><p>  些系統(tǒng)使用 SQL Server 2000 作為應(yīng)用程序的數(shù)據(jù)庫(kù),此系統(tǒng)的實(shí)際需要,系統(tǒng)至少需要實(shí)現(xiàn)考試題庫(kù),用戶及其角色

37、和試卷數(shù)據(jù),因此本系統(tǒng)數(shù)據(jù)庫(kù)所用到的一些用戶表、角色表、考生表、試題表,問題表、試題種類表、試題答案表、試卷表、試卷種類表和圖片表。</p><p><b>  1.用戶表</b></p><p>  用戶表用于存儲(chǔ)系統(tǒng)的用戶信息,該表引用角色的用戶角色I(xiàn)D字段作為表的外鍵,用戶表的字段說明如表3-1所示。</p><p>  表3-1 用戶表

38、字段說明</p><p><b>  2.角色表</b></p><p>  角色表用于存儲(chǔ)用戶的角色信息。角色表的字段說明如表3-2所示。</p><p>  表3-2 角色表字段說明</p><p><b>  3.考生表 </b></p><p>  考生表存儲(chǔ)參加考試

39、的考生信息,該表引用了用戶表的主鍵用戶ID作為該表的外鍵。</p><p><b>  4.問題表</b></p><p>  問題表存儲(chǔ)系統(tǒng)的試題信息。該表引用問題種類表QuestionKinds的問題類型ID、圖片表的問題圖片ID、用戶表的用戶ID作為表的外鍵。問題表的字段說明如表3-3所示。</p><p>  表3-3 問題表的字段說

40、明</p><p><b>  5.問題種類表</b></p><p>  問題種類表存儲(chǔ)問題種類的信息。問題種類表的字段說明如表3-4所示。</p><p>  表3-4 問題種類表的字段說明</p><p><b>  6.問題答案表</b></p><p>  問題答案

41、表存儲(chǔ)題庫(kù)中問題的答案信息,該表引用問題表的答案所屬問題ID作為表的外鍵。問題答案表的字段說明如表3-5所示。</p><p>  表3-5 答案表的字段說明</p><p><b>  7.圖片表</b></p><p>  圖片表存儲(chǔ)系統(tǒng)的圖片信息。</p><p><b>  8.試卷表</b>

42、;</p><p>  試卷表存儲(chǔ)每一套試卷的信息,該表引用用戶表的用戶ID、角色表的用戶角色I(xiàn)D,試卷表的字段說明如表5-6所示。</p><p>  表5-6 試卷表的字段說明</p><p><b>  9.試卷類型表</b></p><p>  試卷類型表存儲(chǔ)每一套試卷的詳細(xì)信息,試卷表的試卷ID作為表的外鍵。&

43、lt;/p><p>  第四章 系統(tǒng)詳細(xì)設(shè)計(jì)</p><p>  4.1系統(tǒng)通用類設(shè)計(jì)</p><p>  在應(yīng)用程序開發(fā)過程中多處使用類,如數(shù)據(jù)庫(kù)通用類、應(yīng)用數(shù)據(jù)通用類。 </p><p>  4.1.1基本通用類設(shè)計(jì)</p><p>  系統(tǒng)采用自定義的異

44、常處理類MyException處理應(yīng)用程序異常機(jī)制。該類定義了函數(shù)MyException()重載基類的函數(shù)Exception(),同時(shí)還繼承基類的message和inner兩個(gè)變量。異常處理類MyException定義了兩個(gè)同名的函數(shù),其中參數(shù)source表示錯(cuò)誤的類型編碼、參數(shù)message標(biāo)識(shí)錯(cuò)誤的具體信息;參數(shù)Exception繼承系統(tǒng)的異常參數(shù)。</p><p>  4.1.2系統(tǒng)流程圖</p>

45、;<p>  系統(tǒng)管理員可以對(duì)用戶管理和用戶角色分配管理等功能,此功能的關(guān)系流程圖4.1所示。</p><p>  圖4.1 用戶管理與角色管理關(guān)系系統(tǒng)流程圖</p><p>  在線答題模塊中,系統(tǒng)首先按照試卷的要求,如試卷總分、試卷章節(jié)、試題的類型等,隨機(jī)從數(shù)據(jù)庫(kù)生成一套試卷。然后把各個(gè)試題顯示在答題頁面上。試卷隨機(jī)產(chǎn)生流程如圖4.5所示。</p><

46、p>  圖4.5用戶答題流程圖</p><p>  在隨機(jī)生成試卷過程中存在兩個(gè)函數(shù)的調(diào)用過程,右邊的回調(diào)過程返回到隨機(jī)生成試卷的狀態(tài),該函數(shù)調(diào)用過程是在沒有滿足試卷的題型或題型種類條件時(shí)發(fā)生,左邊的函數(shù)返回隨機(jī)獲取試卷種類狀態(tài),該函數(shù)是在沒有滿足試卷種類條件時(shí)發(fā)生。數(shù)據(jù)庫(kù)中的每一類型的試卷所包含的題型是不相同的,且每一種題型所包含的試題和試題的題量也是不同相同的,各種類的試卷的總分和試題的章節(jié)都在同一個(gè)

47、范圍內(nèi),即屬于同一類型的試卷。</p><p>  試題的總分,試題的開始章節(jié),試題的結(jié)束章節(jié),試題的種類和第幾種題型的數(shù)量ArrarList變量。應(yīng)用程序在創(chuàng)建整套試題之前會(huì)檢查以上幾個(gè)參數(shù)是否匹配。如果每套試題的總分?jǐn)?shù)為設(shè)置的試題的總分的值,則為有效試卷,反之亦然。隨機(jī)生成試卷的流程如圖4.6所示。</p><p>  圖4.6隨機(jī)生成試卷流程圖</p><p>

48、;  第五章 系統(tǒng)程序?qū)崿F(xiàn)與測(cè)試</p><p>  5.1 用戶登錄和新用戶注冊(cè)</p><p>  5.1.1用戶界面設(shè)計(jì)</p><p>  用戶在登錄由Default.aspx頁面實(shí)現(xiàn),它的代碼隱藏在Default.aspx.cs文件中。用戶登錄是應(yīng)用程序的主要入口,用戶只有通過該入口才能進(jìn)入系統(tǒng)。由于用戶所屬的角色不相同,所以在登錄時(shí)都要選擇自己所屬的角色

49、,否則不能進(jìn)入系統(tǒng)。</p><p>  用戶登錄使用了兩個(gè)TextBox控件作為輸入名稱和密碼,用戶單擊“確定”按鈕就可以登錄到系統(tǒng)。單擊“注冊(cè)”按鈕可以重新注冊(cè)一個(gè)用戶。用戶的角色是從Roles表中獲取的,考生為默認(rèn)角色。用戶登錄使用了兩個(gè)驗(yàn)證控件,它們?yōu)镽FVUserNamet和RFVPassword,分別驗(yàn)證用戶名稱和用戶密碼是否為非空。</p><p>  兩個(gè)非空驗(yàn)證控件僅僅對(duì)

50、“確定”按鈕有效,其實(shí)現(xiàn)方法就是把“注冊(cè)”控鈕的屬性CausesValidation值設(shè)為False。</p><p><b>  5.1.2用戶登錄</b></p><p>  用戶登錄過程是一個(gè)驗(yàn)證過程,應(yīng)用程序首先從數(shù)據(jù)庫(kù)獲取該用戶的信息,如用戶名稱和用戶角色,然后再根據(jù)用戶的角色顯示用戶的下一步操作頁面。如果考生登錄,顯示生成等待頁面和在線答題頁面;如果管理登

51、錄,顯示題庫(kù)頁面;如果系統(tǒng)管理員登錄,則顯示系統(tǒng)維護(hù)頁面。無論用戶是什么樣的角色登錄,系統(tǒng)都將保存該用戶的ID和角色I(xiàn)D。</p><p>  用戶單擊“確定”按鈕觸發(fā)事件SureBtn_Click()來實(shí)現(xiàn)用戶登錄驗(yàn)證過程。該事件調(diào)用了數(shù)據(jù)訪問層的函數(shù) GetUserLogin()驗(yàn)證用戶的輸入,如果是正確的,用戶就登錄到系統(tǒng)中。否則頁面將彈出錯(cuò)誤信息的提示。</p><p>  函數(shù)G

52、etUserLogin()從數(shù)據(jù)庫(kù)獲取合法用戶的ID數(shù)據(jù),函數(shù)GetUserLogin() 調(diào)用存儲(chǔ)過程Pr_GetUserLogin()訪問數(shù)據(jù)庫(kù)。為了整個(gè)系統(tǒng)的安全性,在用戶表Users中的存儲(chǔ)用戶的密碼Password字段不是用戶密碼的真實(shí)值,而是加密后的密碼字符串。加密函數(shù)Encrypt()被定義為UserDB類的靜態(tài)函數(shù)。調(diào)用加密函數(shù)時(shí),首先把加密字符串編碼成Uncode,然后使用系統(tǒng)的不對(duì)稱加密算法MD5加密用戶密碼串。&l

53、t;/p><p><b>  5.1.3用戶注冊(cè)</b></p><p>  添加新的用戶有兩種方式,一種是從后臺(tái)的用戶管理中添加用戶,另一種是用戶注冊(cè),用戶注冊(cè)方式只能添加考生。因?yàn)榫哂泄芾韱T角色的用戶可以直接進(jìn)入到系統(tǒng)后臺(tái)進(jìn)行管理。</p><p>  用戶注冊(cè)時(shí)分別輸入用戶名稱、用戶密碼、確認(rèn)密碼和用戶的電子郵箱信息即可。前三個(gè)控件都用了驗(yàn)證

54、控件和一個(gè)正則表達(dá)式,電子郵箱則使用格式驗(yàn)證。</p><p>  單擊“確定”按鈕觸發(fā)事件SureBtn_Click(),該事件調(diào)用數(shù)據(jù)訪問層函數(shù)AddUser()提交新用戶注冊(cè)信息到表Users中。SureBtn_Click()事件調(diào)用函數(shù)AddUser(),AddUser()調(diào)用存儲(chǔ)過程Pr_AddUser添加新用戶信息到用戶表中。在添加的過程中,還查看用戶表中是否有同名稱用戶,有同名用戶就不添加當(dāng)前的用戶

55、。</p><p>  用戶管理功能由頁面UserManage.aspx實(shí)現(xiàn),用戶管理模塊實(shí)現(xiàn)了用戶的刪除、角色的分配、密碼的修改。界面設(shè)計(jì)如圖4.2所示</p><p>  圖5.2用戶管理及角色管理</p><p>  用戶列表框顯示系統(tǒng)當(dāng)前包含的所有用戶,系統(tǒng)管理員單擊“X”按鈕即可刪除當(dāng)前列表框被選中的用戶。單擊“/”按鈕即可添加新用戶。用戶管理頁面初始化時(shí)

56、,調(diào)用BindData()實(shí)現(xiàn)綁定用戶列表控件,該函數(shù)調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)GetUser()從用戶表中獲取用戶和用戶ID等數(shù)據(jù)。</p><p>  單擊刪除“X”按鈕實(shí)現(xiàn)刪除用戶的功能,該按鈕為圖像按鈕,單擊此按鈕觸發(fā)事件deleteBtn_Click()。該事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)DeleteUser()刪除數(shù)據(jù)庫(kù)中的用戶記錄。刪除列表中的用戶之后,該事件還要重新綁定用戶數(shù)據(jù)。&l

57、t;/p><p>  單擊添加“/”按鈕實(shí)現(xiàn)實(shí)現(xiàn)用戶添加功能,此按鈕為圖像按鈕,單擊此按鈕觸發(fā)事件AddBtn_Click()。用戶密碼同樣是采用MD5加密函數(shù)Encry(),事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)AddUser()添加新的用戶到數(shù)據(jù)庫(kù)中。添加后事件重新綁定用戶數(shù)據(jù)。</p><p>  5.1.4用戶角色管理 </p><p>  用戶角色管理實(shí)現(xiàn)用戶

58、角色的分配功能。系統(tǒng)存在角色較多,不同的角色具有不同的操作權(quán)限。如系統(tǒng)管理員具有該角色的用戶可以維護(hù)和管理整個(gè)系統(tǒng);管理員角色的用戶可以管理整個(gè)系統(tǒng),如可以添加系統(tǒng)考試試題,創(chuàng)建不同類型的試卷;不同的考生分配不同的試卷,而且參加考試后只能看到自己的考試成績(jī)。用戶角色管理由頁面RoleManage.aspx實(shí)現(xiàn)。 </p><p>  用戶角色管理頁面初始化時(shí)調(diào)用函數(shù)BindUserData(),調(diào)用數(shù)據(jù)訪問層的U

59、serDB類的函數(shù)GetUsers()從表中獲取用戶數(shù)據(jù),然后再綁定到用戶列表控件。函數(shù)BindRoleData()調(diào)用數(shù)據(jù)訪問層的RoleDB類的函數(shù)GetGetRoles()從表中獲取用戶數(shù)據(jù),然后再綁定數(shù)據(jù)到角色列表控件。函數(shù)BindUserRoleData()調(diào)用數(shù)據(jù)訪問層的UserDB類的函數(shù)GetSingleUser()從表中獲取用戶數(shù)據(jù),然后再綁定到用戶角色控件。</p><p>  用戶單擊“設(shè)為

60、該用戶的角色”按鈕觸發(fā)事件,該事件實(shí)現(xiàn)用戶角色之間的關(guān)聯(lián)功能,事件調(diào)用函數(shù)UpdateUserRole()修改用戶表的角色字段值。</p><p>  5.1.5用戶密碼修改</p><p>  用戶密碼修改如圖5.2所示</p><p>  圖5.2用戶修改密碼界面</p><p>  修改密碼由UpdataUserPassWord.asp

61、x實(shí)現(xiàn),用戶修改自己的密碼時(shí)必須知道自己以前的密碼,否則不能修改密碼。</p><p>  單擊“確定”后觸發(fā)事件SureBtn_Click().先判斷新密碼的兩次輸入是否一致。如果一致,就把新的密碼更新到數(shù)據(jù)庫(kù),該事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)UpdateUserPassword()修改表中的密碼。此函數(shù)獲取用戶的名稱,用戶只能修改自己的密碼,不能更改名稱。</p><p>&l

62、t;b>  5.2題庫(kù)設(shè)計(jì)</b></p><p>  題庫(kù)設(shè)計(jì)主要是試題的添加、刪除和修改,試題圖片的添加、修改和刪除,試題種類的添加、修改、刪除排序及試題的答案添加、刪除和修改等。 </p><p>  5.2.1試題圖片管理</p><p>  試題圖片管理由頁面PictureManage.aspx實(shí)現(xiàn),試題圖片管理主要實(shí)現(xiàn)圖片的添加、刪除、

63、修改等功能。界面設(shè)計(jì)如圖5.3所示:</p><p>  圖5.3 試題圖片管理</p><p>  試題圖片管理在初始頁面時(shí)調(diào)用函數(shù)BindPictureData(),該函數(shù)首先從圖片表中獲取所有圖片的信息,然后再把數(shù)據(jù)綁定到列表控件。圖片都是上傳到系統(tǒng)的一個(gè)文件夾中,顯示圖片的時(shí)候都是從數(shù)據(jù)庫(kù)獲取該圖片的路徑,然后在顯示在頁面上。單擊“上傳”按鈕即是添加新的圖片,添加圖片后,然后重新綁

64、定數(shù)據(jù)。單擊“/”、“X”此按鈕即可修改圖片信息和刪除圖片。</p><p>  5.2.6試題答案設(shè)計(jì)</p><p>  試題答案和試題是不可分割的,在此系統(tǒng)中,每個(gè)試題都有三個(gè)答案與之對(duì)應(yīng),只一個(gè)正確答案如圖5.4所示。</p><p><b>  圖5.4試題答案</b></p><p>  試題答案設(shè)計(jì)Ques

65、tionManage.aspx和頁面AddAnswer.aspx實(shí)現(xiàn)。在下拉列表選擇框中顯示試題種類,在普通列表框中顯示試題,單擊“添加試題答案”按鈕跳轉(zhuǎn)到答案添加頁面AddAnswer.aspx。試題管理界面用戶函數(shù)Page_Load()進(jìn)行初始化,函數(shù)Page_Load()調(diào)用函數(shù)BindQuesKindData()和BindQuestionData()函數(shù)。</p><p>  函數(shù)BindQuesKind

66、Data()綁定下拉列表控件的數(shù)據(jù),如試題種類。還調(diào)用數(shù)據(jù)訪問層QuestionKindDB類的函數(shù)GetQuesKinds()從表QuestionKinds中獲取試題種類數(shù)據(jù);函數(shù)BindQuestionData()綁定普通列表控件的數(shù)據(jù),如試題內(nèi)容。該函數(shù)調(diào)用數(shù)據(jù)訪問層QuestionDB類的GetQuestions()函數(shù)從表Questions中獲取試題信息。用戶單擊“添加問題答案”按鈕觸發(fā)事件AddQuesAnswer_Clic

67、k(),該事件首先判斷試題列表中某個(gè)試題項(xiàng)。如果已經(jīng)選擇,則跳轉(zhuǎn)到試題答案添加頁面,否則系統(tǒng)將提示你沒有選擇數(shù)據(jù)。</p><p>  private void AddQuesAnswer_Click(object sender, System.EventArgs e)</p><p>  { Response.Redirect("~/Admins/AddAnswer.aspx

68、?QuestionID=" + QuestionList.SelectedValue);}</p><p>  事件QuesKindList_SelectedIndexChanged()動(dòng)態(tài)綁定試題列表框的數(shù)據(jù),如試題名稱,當(dāng)試題類型下拉列表框選中的選擇試題種類發(fā)生改變時(shí)觸發(fā)該事件,此時(shí)頁面會(huì)重新綁定列表中的試題數(shù)據(jù)。該事件代碼如下:</p><p>  private void

69、 QuesKindList_SelectedIndexChanged(object sender, System. EventArgs e)</p><p>  {BindQuestionData(Int32.Parse(QuesKindList.SelectedValue));}</p><p><b>  5.3隨機(jī)生成試卷</b></p>&l

70、t;p>  系統(tǒng)隨機(jī)自動(dòng)生成試卷功能由頁面CreateExaminePaper.aspx實(shí)現(xiàn),頁面是</p><p>  一個(gè)等待頁面,應(yīng)用程序生成一套試卷需要一定的時(shí)間。界面設(shè)計(jì)如圖5.4所示:</p><p>  圖5.4 系統(tǒng)生成考試試卷頁面</p><p>  在等待界面中,應(yīng)用程序使用自動(dòng)跳轉(zhuǎn)方式跳轉(zhuǎn)到考試界面ExaminePaper.aspx,跳轉(zhuǎn)

71、代碼如下:</p><p>  <meta http-equiv=”refresh” content=”3;url=ExaminePaper.aspx”></p><p>  在試卷生成時(shí),等待頁面從Papers表中隨機(jī)獲取一套試卷及其參數(shù),獲取試卷及其參數(shù)功能由函數(shù)GetRolePaper()實(shí)現(xiàn)。函數(shù)的代碼如下:</p><p>  private

72、ArrayList GetRolePaper(int nRoleID)</p><p>  {ArrayList PaperList = new ArrayList();</p><p>  SqlDataReader recpc = paper.GetPaperCountByRole();</p><p>  while(recpc.Read())</p&

73、gt;<p>  {nPaperCount = Int32.Parse(recpc["PaperID"].ToString());}</p><p>  int index = GetRandomInt(nPaperCount);//隨機(jī)選擇一套試卷</p><p>  SqlDataReader repc = paper.GetPaperCo

74、untByRole();int i = 0;</p><p>  while(repc.Read()) /// 把選中的試卷添加到返回結(jié)果集中</p><p>  {if(i == index)</p><p>  {PaperList.Add(repc["PaperID"].ToString());</p><p> 

75、 PaperList.Add(repc["TotalMark"].ToString());</p><p>  PaperList.Add(repc["MaxDefficult"].ToString());break;</p><p><b>  }i++;</b></p><p>  }recpc.Cl

76、ose();///從數(shù)據(jù)庫(kù)中取到這套試卷所包含的題型及數(shù)量</p><p>  ArrayList KindList = new ArrayList();</p><p>  while(recpk.Read())///選中試卷的題型及其數(shù)量添加到結(jié)果集中</p><p>  {QuestionKinds kind = new QuestionKinds();&l

77、t;/p><p>  kind.KindID = Int32.Parse(recpk["KindID"].ToString());</p><p>  kind.KindNum = Int32.Parse(recpk["KindNum"].ToString());</p><p>  KindList.Add(kind);recp

78、k.Close();</p><p>  } PaperList.Add(KindList);return(PaperList);///返回結(jié)果集</p><p><b>  }</b></p><p>  在隨機(jī)生成試卷過程中,程序首先調(diào)用函數(shù)CreateIntegerExaminePaper()生成整套試卷,該函數(shù)遞歸調(diào)用自己。直到生成

79、試卷,函數(shù)代碼如下:</p><p>  CreateIntegerExaminePaper()</p><p>  {int allMark = 0;int defficultParm = 0;</p><p>  ArrayList QuestionIDList = new ArrayList();</p><p>  while(t

80、rue) ///逐個(gè)生成每種題型</p><p>  {for(int i = 0; i < KindList.Count; i++)</p><p>  { CreateSpecialKindQuestion()//調(diào)用函數(shù)生成特定的題型ArrayList tempList=CreateSpecialKindQuestion(KindNum,KindID);</p>

81、<p>  for(int j = 0; j < tempList.Count; j++)</p><p>  { QuestionIDList.Add(tempList[j]); }/// 添加到結(jié)果集中 }</p><p>  for(int k = 0; k < QuestionIDList.Count; k++)///檢查試卷的參數(shù)</p>&

82、lt;p>  {allMark += ((QuestionDetails)QuestionIDList[k]).Mark;</p><p>  defficultParm += ((QuestionDetails)QuestionIDList[k]).Mark * ((QuestionDetails)QuestionIDList[k]).Defficult; </p><p> 

83、 }/// 檢查試卷是否成功,如果成功則中止函數(shù),否則遞歸調(diào)用</p><p>  if(allMark == nTotalMark && defficultParm/10 >= maxDefficult && defficultParm/10 <= minDefficult)</p><p>  {break;}else{QuestionI

84、DList=CreateIntegerExaminePaper();}</p><p>  }return(QuestionIDList); // 返回結(jié)果集 }</p><p>  函數(shù)CreateSpecialKindQuestion()隨機(jī)生成一種特定的題型,index(試題索引),IndexList(試題索引容器)等。并調(diào)用隨機(jī)函數(shù)生成試題ID,最后把結(jié)果集添加到Question

85、List集合中。函數(shù)代碼如下:</p><p>  private ArrayList CreateSpecialKindQuestion(int nKindNum,int kind)</p><p>  {ArrayList IndexList = new ArrayList();IndexList.Capacity = nKindNum;</p><p>  

86、while(IndexList.Count != nKindNum) // 用隨機(jī)函數(shù)生存隨機(jī)序號(hào)序列</p><p>  {index = GetRandomInt(nKindNum);</p><p>  if(IsExistIndex(IndexList,index) == false)</p><p>  {IndexList.Add(index.ToS

87、tring());}</p><p>  }// 通過試題ID把試題的ID添加到臨時(shí)結(jié)果集中</p><p>  if(ds == null) // 從數(shù)據(jù)庫(kù)中取到結(jié)果集,并緩存到Cache中</p><p>  {ds = question.GetAllQuestionID();}int startIndex = 0;</p><p>

88、;  foreach(DataRow row in ds.Tables[0].Rows)//取到試題的ID結(jié)果集</p><p>  {if(row["KindID"].ToString() == kind.ToString()){break;}}</p><p>  for(int i = 0; i < IndexList.Count; i++)//試題的

89、屬性添加到結(jié)果集中</p><p>  {QuestionDetails questionDetail=new QuestionDetails();</p><p>  QuestionIDList.Add(questionDetail);</p><p>  } return(QuestionIDList); ///返回問題的ID集合}</p>

90、<p>  生成隨機(jī)結(jié)果集的映射索引調(diào)用函數(shù)IsExistIndex()保證索引的惟一性,該函數(shù)逐個(gè)比較即將添加的值和數(shù)組中的每一個(gè)值,如果相等返回為假,否則為真。函數(shù)代碼如下:</p><p>  private bool IsExistIndex(ArrayList IndexList,int index)</p><p>  {bool isExist = false;

91、</p><p>  for(int j = 0; j < IndexList.Count; j++)//如果相為false,否則為true</p><p>  {if(index.ToString() == IndexList[j].ToString())</p><p>  {isExist = true; break;}}return(isEx

92、ist);}</p><p><b>  5.4考生在線答題</b></p><p>  在線答題功能由頁面ExaminePaper.aspx實(shí)現(xiàn),頁面設(shè)計(jì)由DataGrid控件和Button控件組成,界面設(shè)計(jì)如圖5.5所示:</p><p>  圖5.5考生考試界面</p><p>  頁面初始化首先從Session

93、全局變量取到一套試卷的所有考試題目,然后由QuestionDB類的函數(shù)GetQuestions()創(chuàng)建問題數(shù)據(jù)源DataGrid,問題數(shù)據(jù)源DataList為IList接口對(duì)象,而不是DataReader對(duì)象,DataSet對(duì)象或其它的ArrayList對(duì)象,函數(shù)BindQustionData()實(shí)現(xiàn)頁面的初始化過程,函數(shù)代碼如下:</p><p>  private void BindQuestionData(

94、)</p><p>  {ArrayList QuestionIDList = new ArrayList();//從Session中取一套試卷</p><p>  if(Session[Session.SessionID+Session["UserName"]]!=null)</p><p>  { QuestionIDList=(Array

95、List)Session[Session.SessionID+Session["UserName"]];}</p><p>  List questionList = (IList)question.GetQuestions(QuestionIDList);</p><p>  //創(chuàng)建問題的數(shù)據(jù)源</p><p>  QuestionList

96、.DataSource = questionList;</p><p>  QuestionList.DataKeyField = "QuestionID";// 設(shè)置控件的試題索引</p><p>  QuestionList.DataBind();ShowPageStatus(questionList.Count);}</p><p>

97、  問題DataGrid控件綁定數(shù)據(jù)時(shí),采用IList接口對(duì)象作為數(shù)據(jù)源。此數(shù)據(jù)源由類QuestionDB的函數(shù)GetQuestion()函數(shù)創(chuàng)建,該函數(shù)的參數(shù)為ArrayList類型的對(duì)象QuestionList,它包含整套試卷的所有試題ID,函數(shù)GetQuestions()使用for語句從表中獲取每個(gè)試題的詳細(xì)信息。函數(shù)GetQustions()的代碼如下:</p><p>  public ArrayLis

98、t GetQuestions(ArrayList QuestionList)</p><p>  {for(int i = 0; i < QuestionList.Count; i++)</p><p>  { SqlDataReader recq = question.GetSingleQuestion(QuestionID);</p><p>  if(

99、recq.Read())</p><p>  {QuestionDetails questionDetail = new QuestionDetails();</p><p>  questionDetail.Title=recq["Title"].ToString();</p><p>  questionDetail.PictureUrl=

100、recq["PictureUrl"].ToString();</p><p>  questionDetail.Index=i+1;</p><p>  NewQuestionList.Add(questionDetail);</p><p>  } return(NewQuestionList);///返回問題的詳細(xì)信息}</p&g

101、t;<p>  在此循環(huán)中使用GetSingleQuestion()從問題表中獲取單個(gè)問題的詳細(xì)信息,然后把詳細(xì)信息保存到QuestionDetails對(duì)象中,最后函數(shù)把所有的題目的詳細(xì)信息構(gòu)建為一個(gè)ArrayList對(duì)象。并在函數(shù)的最后返回此對(duì)象。</p><p>  函數(shù)GetQuestions()僅僅綁定試卷的問題,沒有綁定每個(gè)試題的選擇答案,函數(shù)GetAnswers()和函數(shù)BindAnsw

102、erList()實(shí)現(xiàn)該功能。函數(shù)GetAnswers()屬于數(shù)據(jù)訪問層函數(shù),它需要參數(shù)問題ID從問題表取到屬于問題ID的問題答案,并把試題答案?jìng)鬟f到應(yīng)用程序的頁面呈現(xiàn)層。 </p><p>  在函數(shù)GetAnswers()基礎(chǔ)上,應(yīng)用程序的頁面呈現(xiàn)就可以使用該函數(shù)從數(shù)據(jù)庫(kù)獲取試題答案,并把試題綁定到每個(gè)相應(yīng)的問題,綁定試題答案函數(shù)BindAnswer()實(shí)現(xiàn),它的參數(shù)為RadioButtonList控件。函數(shù)代

103、碼如下:</p><p>  private void BindAnswerList(RadioButtonList radioList,int nQuestionID)</p><p>  {SqlDataReader reca = answer.GetAnswers(nQuestionID);</p><p>  radioList.DataSource =

104、reca;radioList.DataTextField = "Body";</p><p>  radioList.DataValueField = "AnswerID";radioList.DataBind();</p><p>  if(radioList.Items.Count > 0)</p><p>  

105、{radioList.SelectedIndex = 0;radioList.SelectedValue =null;}} </p><p>  在數(shù)據(jù)綁定時(shí),問題DataGrid控件觸發(fā)事件QuestionList_ItemDataBound(),并在事件中調(diào)用函數(shù)BindAnswerList()綁定問題答案數(shù)據(jù)。綁定數(shù)據(jù)如下:</p><p>  通過參數(shù)e的函數(shù)FindContr

106、ol()找到需要綁定數(shù)據(jù)的RadioButtonList控件,命名為answerList。判斷answerList控件是否為空,若為空,則中止函數(shù)。若answerList控件不為空,則調(diào)用函數(shù)BindAnserList()綁定控件的答案數(shù)據(jù)。</p><p><b>  5.6自動(dòng)閱卷</b></p><p>  單擊“上一題”或“下一題”按鈕觸發(fā)事件Question

107、List_ItemCommand(),該事件實(shí)現(xiàn)了跳轉(zhuǎn)到下一題,自動(dòng)獲取上一題的選項(xiàng),并判斷該選項(xiàng)是否正確。以此類推,有多少道試題就執(zhí)行多少次,直到做完為止。最后統(tǒng)計(jì)考生成績(jī),并保存到數(shù)據(jù)庫(kù)中,以方便考生在交卷時(shí)就能看到自己的考試成績(jī)。事件代碼如下:</p><p>  private void QuestionList_ItemCommand(object source,DataGridArgs e)</

108、p><p>  {if(answerList.SelectedIndex > -1)</p><p>  {Choose = answerList.SelectedItem.Text;}</p><p>  AnswerDB answerbody = new AnswerDB();</p><p>  SqlDataReader bo

109、dy = answerbody.GetQuestionBody();</p><p>  if(body.Read()){upmark.UpdateMark(userId,mark)}}}</p><p>  考生單擊“交卷”觸發(fā)事件refer_click(),該事件跳轉(zhuǎn)到考試結(jié)果頁面。并顯示考生的相關(guān)信息。</p><p><b>  5.7考試結(jié)果

110、</b></p><p>  考試結(jié)果由頁面Result.aspx實(shí)現(xiàn),該頁面實(shí)現(xiàn)了考試結(jié)果,考生在交卷后就能看到自己當(dāng)前的考試成績(jī)。系統(tǒng)自動(dòng)判斷此次考試是否合格。考試結(jié)果如圖5.8所示:</p><p><b>  圖5.8考試結(jié)果</b></p><p><b>  5.8測(cè)試</b></p>

111、<p>  完成了駕??荚囅到y(tǒng)的編程工作之后,最后的就是該系統(tǒng)的測(cè)試過程了,系統(tǒng)測(cè)試的根本目標(biāo)是盡可能多的發(fā)現(xiàn)和排除該系統(tǒng)設(shè)計(jì)過程中的隱藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系統(tǒng)交給用戶使用。</p><p>  系統(tǒng)的測(cè)試包括系統(tǒng)的編譯和發(fā)行,在測(cè)試中有兩種方法:黑盒測(cè)試(功能測(cè)試),白盒測(cè)試(結(jié)構(gòu)測(cè)試)。大型系統(tǒng)通常由若干個(gè)子系統(tǒng)組成,每個(gè)子系統(tǒng)又由很多的模塊組成,主要的步驟有:模塊測(cè)試,子系統(tǒng)測(cè)試,系

112、統(tǒng)測(cè)試,驗(yàn)收測(cè)試,平行運(yùn)行。</p><p>  在單元測(cè)試期間對(duì)模塊進(jìn)行測(cè)試主要是針對(duì)模塊接口,局部數(shù)據(jù)結(jié)構(gòu),重要的執(zhí)行通路,出錯(cuò)處理通路,邊界條件。在確定測(cè)試也成驗(yàn)收測(cè)試,是為了驗(yàn)證該設(shè)備管理系統(tǒng)的有效性。以保證軟件確實(shí)滿足了用戶需求而進(jìn)行的一系列活動(dòng),需求分析階段產(chǎn)生的系統(tǒng)規(guī)格說明書,準(zhǔn)確的描述用戶對(duì)軟件的合理期望,是測(cè)試的基礎(chǔ)。</p><p><b>  1.系統(tǒng)的編譯

113、</b></p><p>  設(shè)計(jì)系統(tǒng)的目的就是要使用者即使不安裝Visual FoxPro也能運(yùn)行該程序,要想系統(tǒng)脫離Visual FoxPro環(huán)境運(yùn)行,需要對(duì)系統(tǒng)進(jìn)行編譯,制作出可以單獨(dú)運(yùn)行的可執(zhí)行程序。系統(tǒng)的編譯過程首先將系統(tǒng)中涉及到的文件全部包含進(jìn)“項(xiàng)目管理器”中,單擊項(xiàng)目管理器的“連編”按鈕。編譯結(jié)束后,便生成可執(zhí)行文件。</p><p><b>  2.系

114、統(tǒng)的發(fā)行</b></p><p>  運(yùn)用Visual FoxPro自帶的安裝生成工具進(jìn)行生成安裝包。主要步驟是:</p><p>  了解應(yīng)用程序的基本結(jié)構(gòu)。</p><p><b>  制作發(fā)布樹。</b></p><p>  指定應(yīng)用程序需要的組件。</p><p>  指定磁盤

115、映像,即創(chuàng)建何種安裝磁盤。</p><p><b>  定義安裝設(shè)置。</b></p><p><b>  指定默認(rèn)安裝路徑。</b></p><p><b>  改變文件位置。</b></p><p><b>  5.8.1測(cè)試項(xiàng)目</b></p&

116、gt;<p>  輸入不存在的用戶得到以下結(jié)果如圖5.10所示</p><p>  圖5.10用戶登錄操作失敗界面</p><p><b>  結(jié)束語</b></p><p>  在通過幾月的認(rèn)真學(xué)習(xí)Microsoft Visual Studio.C#程序設(shè)計(jì),使用.NET開發(fā)技術(shù)和SQL數(shù)據(jù)庫(kù)知識(shí),并對(duì)其有一定了解的情況下,作者

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論