

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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è)計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è)計7</p><p> 3.1總體設(shè)計目標(biāo)7</p><p> 3.2概念模型(E-R圖)7</p><p> 3.3關(guān)系模式錯誤!未定義書簽。</p><p> 第四章 系統(tǒng)詳細設(shè)計11</p>&l
4、t;p> 4.1系統(tǒng)通用類設(shè)計11</p><p> 4.1.1基本通用類設(shè)計11</p><p> 4.1.2系統(tǒng)流程圖11</p><p> 第五章 系統(tǒng)程序?qū)崿F(xiàn)與測試14</p><p> 5.1 用戶登錄和新用戶注冊14</p><p> 5.1.1用戶界面設(shè)計14</p&g
5、t;<p> 5.1.2用戶登錄14</p><p> 5.1.3用戶注冊15</p><p> 5.1.4用戶角色管理16</p><p> 5.1.5用戶密碼修改17</p><p> 5.2題庫設(shè)計17</p><p> 5.2.1試題種類管理錯誤!未定義書簽。</p&
6、gt;<p> 5.2.2試題圖片管理17</p><p> 5.2.3添加試題錯誤!未定義書簽。</p><p> 5.2.4修改試題錯誤!未定義書簽。</p><p> 5.2.5刪除試題錯誤!未定義書簽。</p><p> 5.2.6試題答案設(shè)計18</p><p> 5.2.
7、7試題答案添加錯誤!未定義書簽。</p><p> 5.2.8試題答案修改錯誤!未定義書簽。</p><p> 5.2.9試題答案刪除錯誤!未定義書簽。</p><p> 5.3試卷設(shè)計錯誤!未定義書簽。</p><p> 5.3.1添加新試卷錯誤!未定義書簽。</p><p> 5.3.2修改試卷
8、錯誤!未定義書簽。</p><p> 5.3.3刪除試卷錯誤!未定義書簽。</p><p> 5.4隨機生成試卷19</p><p> 5.5考生在線答題21</p><p> 5.6自動閱卷23</p><p> 5.7考試結(jié)果24</p><p><b>
9、5.8測試24</b></p><p> 5.8.1測試項目25</p><p> 5.8.2測試運行結(jié)果錯誤!未定義書簽。</p><p><b> 結(jié)束語26</b></p><p><b> 參考文獻27</b></p><p><b
10、> 第一章系統(tǒng)概述</b></p><p> 1.1系統(tǒng)開發(fā)背景和意義</p><p> 隨著我國經(jīng)濟的高速發(fā)展,我國的交通運輸能力不斷提高,越來越多的人開私家車到異地進行商務(wù)或者旅游等活動。在這一條件下,我國的車輛逐漸增多,最近幾年,學(xué)車的人也是越來越多。為了減少交通事故的發(fā)生,車管所對駕駛員的交通知識考核起著至關(guān)重要的作用。隨著信息量的逐步增加,繁雜的數(shù)據(jù)處理費
11、時費力,單純以人力進行的駕駛員理論考試的考核已經(jīng)不適合駕駛理論考試的現(xiàn)狀?,F(xiàn)在是一個信息產(chǎn)業(yè)的時代,國家把信息產(chǎn)業(yè)作為增長國民經(jīng)濟的重要因數(shù)。在這樣的環(huán)境下,先進的信息技術(shù)進行駕駛員理論考試已成為必要。</p><p> 駕駛模擬考試系統(tǒng)以計算機為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫中,
12、通過計算機可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡單的數(shù)據(jù)便可操作。</p><p> 該系統(tǒng)采用B/S模式進行設(shè)計,異地的想學(xué)車的學(xué)員也可以使用該系統(tǒng),進行模擬考試,從而了解自己對交通規(guī)則了解多少。</p><p> 本系統(tǒng)主要由使用Microsoft Visual Studio.NET 2003 開發(fā)的頁
13、面,由SQL Server2000開發(fā)的數(shù)據(jù)庫組成。</p><p><b> 1.2開發(fā)目的</b></p><p> 本系統(tǒng)采用B/S模式設(shè)計,開發(fā)目的除了方便車輛管理所的工作人員。同時把駕駛理論所有試題保存到數(shù)據(jù)庫,通過互聯(lián)網(wǎng)方便地進行模擬考試,還能讓學(xué)車的學(xué)員對交通規(guī)則和法律知識有更多的了解。</p><p><b>
14、1.3開發(fā)環(huán)境</b></p><p> 本系統(tǒng)是在windows XP操作系統(tǒng)下,使用Microsoft Visual Studio.NET 2003作為開發(fā)工具進行開發(fā)的。數(shù)據(jù)庫使用的是SQL Server2000。</p><p><b> 1.4硬件需求</b></p><p> 在運行本系統(tǒng)前,請檢查以下計算機是否滿
15、足以下要求。</p><p> 服務(wù)器要求的配置為:</p><p> CPU:Intel 賽揚Ⅳ以上,建議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> 客戶機硬件配置要求為:</p><p> CPU:Intel賽揚Ⅲ 以上,建議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è)計</b></p><p> 根據(jù)駕校理論考試的邏輯劃分,本系統(tǒng)一共有六個子系統(tǒng),分別是用戶登錄和注冊,用戶角色管理,用戶管理,試題管理,題庫管理,在線答題。其功能結(jié)構(gòu)圖如圖2
18、.1所示。</p><p> 圖2.1 系統(tǒng)功能圖</p><p><b> 用戶管理</b></p><p> 添加用戶,修改用戶,刪除用戶,用戶登錄和注冊。</p><p><b> 試題管理</b></p><p> (1)試題類別管理,主要是實現(xiàn)試題類別的添
19、加、修改試題類別、刪除試題類別、和試題的類別排序功能。</p><p> (2)試題圖片管理,主要實現(xiàn)試題的圖片添加,刪除和修改等功能</p><p> (3)考試試題管理,主要實現(xiàn)試題的添加、修改、刪除功能。</p><p> (4)試題答案管理,主要實現(xiàn)試題答案的添加、修改、刪除功能。</p><p><b> 題庫管理
20、</b></p><p> 題庫管理主要是在系統(tǒng)中構(gòu)造試卷,即試題的每一種題型有多少題,添加試卷、及刪除試卷和修改試卷功能。</p><p><b> 在線答題</b></p><p> (1)動態(tài)隨機生成試卷,使用隨機函數(shù)動態(tài)地從題庫中取得整套試卷和題目,每次生成的試卷是不相同的。</p><p>
21、 (2)顯示出整套試卷,依次答題,系統(tǒng)自動判斷該題是否正確。</p><p> (3)最后顯示該考生的考試成績。</p><p> 2.2系統(tǒng)功能模塊劃分</p><p> 系統(tǒng)整體設(shè)計如圖2.2所示,此系統(tǒng)可以劃分為業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層和數(shù)據(jù)庫。</p><p> 圖2.2 系統(tǒng)設(shè)計圖</p><p>
22、 數(shù)據(jù)庫、數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層的具體描述如下:</p><p> (1)數(shù)據(jù)庫位于系統(tǒng)最底層,它存儲系統(tǒng)的所有數(shù)據(jù)。</p><p> (2)數(shù)據(jù)訪問層建立在數(shù)據(jù)庫之上,應(yīng)用程序通過該層訪問數(shù)據(jù)庫。數(shù)據(jù)訪問層一般封裝數(shù)據(jù)庫的選擇、添加、更新、刪除等操作。同時還為業(yè)務(wù)邏輯層提供訪問數(shù)據(jù)庫的接口或函數(shù)等。該層直接與數(shù)據(jù)庫相關(guān)聯(lián),同時又為業(yè)務(wù)邏輯層服務(wù),所以數(shù)據(jù)庫訪問層設(shè)計的好壞關(guān)系到整個
23、系統(tǒng)的成敗。下面以用戶管理模塊的數(shù)據(jù)訪問(UserDB類)為例,介紹數(shù)據(jù)訪問層的實現(xiàn)方法。UserDB類實現(xiàn)訪問數(shù)據(jù)庫的方法如下:</p><p> Public SqlDataReader GetUsers() 從用戶表Users獲取所有用戶信息。</p><p> Public SqlDataReader GetSingleUser(int nUserID)從用戶表Users獲取單
24、個用戶信息。</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> (3)業(yè)務(wù)邏輯層包括題庫創(chuàng)建、用戶管理、用戶注冊等業(yè)務(wù)邏輯,它一般由Web頁面實現(xiàn),如系統(tǒng)登錄頁面Default.aspx、用戶管理頁面UserManage.
27、aspx、隨機生成試卷頁面CreateExaminePaper.aspx等。</p><p> 系統(tǒng)是由六個完整的功能實現(xiàn)的,根據(jù)這些功能,可以設(shè)計出系統(tǒng)的功能模塊,各個系統(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è)計,開發(fā)目的除了方便車輛管理所的工作人員。同時把駕駛理論所有試題保存到數(shù)據(jù)庫,通過互聯(lián)網(wǎng)方便地進行模擬考試,還能讓學(xué)車的學(xué)員對交通規(guī)則和法律知識有更多的了解。該系統(tǒng)數(shù)據(jù)流圖如圖2.4所示。</p><p> D1用戶信息 D2題庫 </p><p> 核對信息 題庫管理</p>&
29、lt;p> 登錄 核對正確 答題</p><p><b> 提交</b></p><p> 查看 計算考試成績</p><p><b> 讀取成績</b></p><p><b> D
30、3考試成績</b></p><p> 圖2.4系統(tǒng)數(shù)據(jù)流圖</p><p><b> 2.4數(shù)據(jù)字典</b></p><p> 數(shù)據(jù)流圖描述了系統(tǒng)的分解,但沒有對圖中各成分進行說明,數(shù)據(jù)字典就是為了數(shù)據(jù)流圖的每個數(shù)據(jù),以及組成數(shù)據(jù)流或文件的數(shù)據(jù)項作出說明。</p><p><b> 數(shù)據(jù)字典
31、:</b></p><p> 試題=問題內(nèi)容+問題類型+問題選項+問題圖片+問題分值</p><p> 用戶=用戶名+用戶密碼+用戶Email地址+用戶類型</p><p> 答案=問題的正確答案+答案所屬的問題</p><p> 第三章 系統(tǒng)總體設(shè)計</p><p><b> 3.1總
32、體設(shè)計目標(biāo)</b></p><p> 駕駛模擬考試系統(tǒng)以計算機為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫中,通過計算機可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡單的數(shù)據(jù)便可操作。</p>&
33、lt;p> 該系統(tǒng)采用B/S模式進行設(shè)計,異地的想學(xué)車的學(xué)員也可以使用該系統(tǒng),進行模擬考試,從而了解自己對交通規(guī)則了解多少。</p><p> 3.2概念模型(E-R圖)</p><p> 得到前面的數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)以后,就可以設(shè)計出能夠滿足用戶需求的各種實體,以及它們之間的關(guān)系。這些實體包含各種具體信息,通過相互之間的作用形成數(shù)據(jù)的流動。</p><p&g
34、t; 駕駛模擬考試系統(tǒng)以計算機為操作工具,按照駕駛理論考試的流程,把駕駛理論考試的一些工作人員從繁瑣的數(shù)據(jù)處理中解放出來,從而提高駕駛考試的工作效率。駕駛理論考試系統(tǒng)把駕駛的理論試題保存于數(shù)據(jù)庫中,通過計算機可以很方便地查詢使用所需要的數(shù)據(jù),而且這些操作全部由系統(tǒng)內(nèi)部的代碼完成??忌拖到y(tǒng)管理員通過系統(tǒng)的友好界面,輸入一些簡單的數(shù)據(jù)便可操作。</p><p> 本例根據(jù)上面的設(shè)計規(guī)劃出的實體有:管理員,試卷,
35、考生。下面畫出各實體之間的主要E-R關(guān)系圖,如圖3.1所示。</p><p> 圖3.1個實體之間的主要關(guān)系的E-R圖</p><p><b> 3.3關(guān)系模式</b></p><p> 用戶(用戶ID,用戶名,用戶密碼,用戶Email,用戶角色ID)</p><p> 問題(問題ID,問題內(nèi)容,問題類型,問題圖
36、片,問題分值)</p><p> 答案(問題正確答案,問題ID)</p><p> 試卷(試卷ID,試題總分?jǐn)?shù),考試時間)</p><p><b> 3.3.1字段</b></p><p> 些系統(tǒng)使用 SQL Server 2000 作為應(yīng)用程序的數(shù)據(jù)庫,此系統(tǒng)的實際需要,系統(tǒng)至少需要實現(xiàn)考試題庫,用戶及其角色
37、和試卷數(shù)據(jù),因此本系統(tǒng)數(shù)據(jù)庫所用到的一些用戶表、角色表、考生表、試題表,問題表、試題種類表、試題答案表、試卷表、試卷種類表和圖片表。</p><p><b> 1.用戶表</b></p><p> 用戶表用于存儲系統(tǒng)的用戶信息,該表引用角色的用戶角色ID字段作為表的外鍵,用戶表的字段說明如表3-1所示。</p><p> 表3-1 用戶表
38、字段說明</p><p><b> 2.角色表</b></p><p> 角色表用于存儲用戶的角色信息。角色表的字段說明如表3-2所示。</p><p> 表3-2 角色表字段說明</p><p><b> 3.考生表 </b></p><p> 考生表存儲參加考試
39、的考生信息,該表引用了用戶表的主鍵用戶ID作為該表的外鍵。</p><p><b> 4.問題表</b></p><p> 問題表存儲系統(tǒng)的試題信息。該表引用問題種類表QuestionKinds的問題類型ID、圖片表的問題圖片ID、用戶表的用戶ID作為表的外鍵。問題表的字段說明如表3-3所示。</p><p> 表3-3 問題表的字段說
40、明</p><p><b> 5.問題種類表</b></p><p> 問題種類表存儲問題種類的信息。問題種類表的字段說明如表3-4所示。</p><p> 表3-4 問題種類表的字段說明</p><p><b> 6.問題答案表</b></p><p> 問題答案
41、表存儲題庫中問題的答案信息,該表引用問題表的答案所屬問題ID作為表的外鍵。問題答案表的字段說明如表3-5所示。</p><p> 表3-5 答案表的字段說明</p><p><b> 7.圖片表</b></p><p> 圖片表存儲系統(tǒng)的圖片信息。</p><p><b> 8.試卷表</b>
42、;</p><p> 試卷表存儲每一套試卷的信息,該表引用用戶表的用戶ID、角色表的用戶角色ID,試卷表的字段說明如表5-6所示。</p><p> 表5-6 試卷表的字段說明</p><p><b> 9.試卷類型表</b></p><p> 試卷類型表存儲每一套試卷的詳細信息,試卷表的試卷ID作為表的外鍵。&
43、lt;/p><p> 第四章 系統(tǒng)詳細設(shè)計</p><p> 4.1系統(tǒng)通用類設(shè)計</p><p> 在應(yīng)用程序開發(fā)過程中多處使用類,如數(shù)據(jù)庫通用類、應(yīng)用數(shù)據(jù)通用類。 </p><p> 4.1.1基本通用類設(shè)計</p><p> 系統(tǒng)采用自定義的異
44、常處理類MyException處理應(yīng)用程序異常機制。該類定義了函數(shù)MyException()重載基類的函數(shù)Exception(),同時還繼承基類的message和inner兩個變量。異常處理類MyException定義了兩個同名的函數(shù),其中參數(shù)source表示錯誤的類型編碼、參數(shù)message標(biāo)識錯誤的具體信息;參數(shù)Exception繼承系統(tǒng)的異常參數(shù)。</p><p> 4.1.2系統(tǒng)流程圖</p>
45、;<p> 系統(tǒng)管理員可以對用戶管理和用戶角色分配管理等功能,此功能的關(guān)系流程圖4.1所示。</p><p> 圖4.1 用戶管理與角色管理關(guān)系系統(tǒng)流程圖</p><p> 在線答題模塊中,系統(tǒng)首先按照試卷的要求,如試卷總分、試卷章節(jié)、試題的類型等,隨機從數(shù)據(jù)庫生成一套試卷。然后把各個試題顯示在答題頁面上。試卷隨機產(chǎn)生流程如圖4.5所示。</p><
46、p> 圖4.5用戶答題流程圖</p><p> 在隨機生成試卷過程中存在兩個函數(shù)的調(diào)用過程,右邊的回調(diào)過程返回到隨機生成試卷的狀態(tài),該函數(shù)調(diào)用過程是在沒有滿足試卷的題型或題型種類條件時發(fā)生,左邊的函數(shù)返回隨機獲取試卷種類狀態(tài),該函數(shù)是在沒有滿足試卷種類條件時發(fā)生。數(shù)據(jù)庫中的每一類型的試卷所包含的題型是不相同的,且每一種題型所包含的試題和試題的題量也是不同相同的,各種類的試卷的總分和試題的章節(jié)都在同一個
47、范圍內(nèi),即屬于同一類型的試卷。</p><p> 試題的總分,試題的開始章節(jié),試題的結(jié)束章節(jié),試題的種類和第幾種題型的數(shù)量ArrarList變量。應(yīng)用程序在創(chuàng)建整套試題之前會檢查以上幾個參數(shù)是否匹配。如果每套試題的總分?jǐn)?shù)為設(shè)置的試題的總分的值,則為有效試卷,反之亦然。隨機生成試卷的流程如圖4.6所示。</p><p> 圖4.6隨機生成試卷流程圖</p><p>
48、; 第五章 系統(tǒng)程序?qū)崿F(xiàn)與測試</p><p> 5.1 用戶登錄和新用戶注冊</p><p> 5.1.1用戶界面設(shè)計</p><p> 用戶在登錄由Default.aspx頁面實現(xiàn),它的代碼隱藏在Default.aspx.cs文件中。用戶登錄是應(yīng)用程序的主要入口,用戶只有通過該入口才能進入系統(tǒng)。由于用戶所屬的角色不相同,所以在登錄時都要選擇自己所屬的角色
49、,否則不能進入系統(tǒng)。</p><p> 用戶登錄使用了兩個TextBox控件作為輸入名稱和密碼,用戶單擊“確定”按鈕就可以登錄到系統(tǒng)。單擊“注冊”按鈕可以重新注冊一個用戶。用戶的角色是從Roles表中獲取的,考生為默認角色。用戶登錄使用了兩個驗證控件,它們?yōu)镽FVUserNamet和RFVPassword,分別驗證用戶名稱和用戶密碼是否為非空。</p><p> 兩個非空驗證控件僅僅對
50、“確定”按鈕有效,其實現(xiàn)方法就是把“注冊”控鈕的屬性CausesValidation值設(shè)為False。</p><p><b> 5.1.2用戶登錄</b></p><p> 用戶登錄過程是一個驗證過程,應(yīng)用程序首先從數(shù)據(jù)庫獲取該用戶的信息,如用戶名稱和用戶角色,然后再根據(jù)用戶的角色顯示用戶的下一步操作頁面。如果考生登錄,顯示生成等待頁面和在線答題頁面;如果管理登
51、錄,顯示題庫頁面;如果系統(tǒng)管理員登錄,則顯示系統(tǒng)維護頁面。無論用戶是什么樣的角色登錄,系統(tǒng)都將保存該用戶的ID和角色ID。</p><p> 用戶單擊“確定”按鈕觸發(fā)事件SureBtn_Click()來實現(xiàn)用戶登錄驗證過程。該事件調(diào)用了數(shù)據(jù)訪問層的函數(shù) GetUserLogin()驗證用戶的輸入,如果是正確的,用戶就登錄到系統(tǒng)中。否則頁面將彈出錯誤信息的提示。</p><p> 函數(shù)G
52、etUserLogin()從數(shù)據(jù)庫獲取合法用戶的ID數(shù)據(jù),函數(shù)GetUserLogin() 調(diào)用存儲過程Pr_GetUserLogin()訪問數(shù)據(jù)庫。為了整個系統(tǒng)的安全性,在用戶表Users中的存儲用戶的密碼Password字段不是用戶密碼的真實值,而是加密后的密碼字符串。加密函數(shù)Encrypt()被定義為UserDB類的靜態(tài)函數(shù)。調(diào)用加密函數(shù)時,首先把加密字符串編碼成Uncode,然后使用系統(tǒng)的不對稱加密算法MD5加密用戶密碼串。&l
53、t;/p><p><b> 5.1.3用戶注冊</b></p><p> 添加新的用戶有兩種方式,一種是從后臺的用戶管理中添加用戶,另一種是用戶注冊,用戶注冊方式只能添加考生。因為具有管理員角色的用戶可以直接進入到系統(tǒng)后臺進行管理。</p><p> 用戶注冊時分別輸入用戶名稱、用戶密碼、確認密碼和用戶的電子郵箱信息即可。前三個控件都用了驗證
54、控件和一個正則表達式,電子郵箱則使用格式驗證。</p><p> 單擊“確定”按鈕觸發(fā)事件SureBtn_Click(),該事件調(diào)用數(shù)據(jù)訪問層函數(shù)AddUser()提交新用戶注冊信息到表Users中。SureBtn_Click()事件調(diào)用函數(shù)AddUser(),AddUser()調(diào)用存儲過程Pr_AddUser添加新用戶信息到用戶表中。在添加的過程中,還查看用戶表中是否有同名稱用戶,有同名用戶就不添加當(dāng)前的用戶
55、。</p><p> 用戶管理功能由頁面UserManage.aspx實現(xiàn),用戶管理模塊實現(xiàn)了用戶的刪除、角色的分配、密碼的修改。界面設(shè)計如圖4.2所示</p><p> 圖5.2用戶管理及角色管理</p><p> 用戶列表框顯示系統(tǒng)當(dāng)前包含的所有用戶,系統(tǒng)管理員單擊“X”按鈕即可刪除當(dāng)前列表框被選中的用戶。單擊“/”按鈕即可添加新用戶。用戶管理頁面初始化時
56、,調(diào)用BindData()實現(xiàn)綁定用戶列表控件,該函數(shù)調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)GetUser()從用戶表中獲取用戶和用戶ID等數(shù)據(jù)。</p><p> 單擊刪除“X”按鈕實現(xiàn)刪除用戶的功能,該按鈕為圖像按鈕,單擊此按鈕觸發(fā)事件deleteBtn_Click()。該事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)DeleteUser()刪除數(shù)據(jù)庫中的用戶記錄。刪除列表中的用戶之后,該事件還要重新綁定用戶數(shù)據(jù)。&l
57、t;/p><p> 單擊添加“/”按鈕實現(xiàn)實現(xiàn)用戶添加功能,此按鈕為圖像按鈕,單擊此按鈕觸發(fā)事件AddBtn_Click()。用戶密碼同樣是采用MD5加密函數(shù)Encry(),事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)AddUser()添加新的用戶到數(shù)據(jù)庫中。添加后事件重新綁定用戶數(shù)據(jù)。</p><p> 5.1.4用戶角色管理 </p><p> 用戶角色管理實現(xiàn)用戶
58、角色的分配功能。系統(tǒng)存在角色較多,不同的角色具有不同的操作權(quán)限。如系統(tǒng)管理員具有該角色的用戶可以維護和管理整個系統(tǒng);管理員角色的用戶可以管理整個系統(tǒng),如可以添加系統(tǒng)考試試題,創(chuàng)建不同類型的試卷;不同的考生分配不同的試卷,而且參加考試后只能看到自己的考試成績。用戶角色管理由頁面RoleManage.aspx實現(xiàn)。 </p><p> 用戶角色管理頁面初始化時調(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ā)事件,該事件實現(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實現(xiàn),用戶修改自己的密碼時必須知道自己以前的密碼,否則不能修改密碼。</p><p> 單擊“確定”后觸發(fā)事件SureBtn_Click().先判斷新密碼的兩次輸入是否一致。如果一致,就把新的密碼更新到數(shù)據(jù)庫,該事件調(diào)用數(shù)據(jù)訪問層UserDB類的函數(shù)UpdateUserPassword()修改表中的密碼。此函數(shù)獲取用戶的名稱,用戶只能修改自己的密碼,不能更改名稱。</p><p>&l
62、t;b> 5.2題庫設(shè)計</b></p><p> 題庫設(shè)計主要是試題的添加、刪除和修改,試題圖片的添加、修改和刪除,試題種類的添加、修改、刪除排序及試題的答案添加、刪除和修改等。 </p><p> 5.2.1試題圖片管理</p><p> 試題圖片管理由頁面PictureManage.aspx實現(xiàn),試題圖片管理主要實現(xiàn)圖片的添加、刪除、
63、修改等功能。界面設(shè)計如圖5.3所示:</p><p> 圖5.3 試題圖片管理</p><p> 試題圖片管理在初始頁面時調(diào)用函數(shù)BindPictureData(),該函數(shù)首先從圖片表中獲取所有圖片的信息,然后再把數(shù)據(jù)綁定到列表控件。圖片都是上傳到系統(tǒng)的一個文件夾中,顯示圖片的時候都是從數(shù)據(jù)庫獲取該圖片的路徑,然后在顯示在頁面上。單擊“上傳”按鈕即是添加新的圖片,添加圖片后,然后重新綁
64、定數(shù)據(jù)。單擊“/”、“X”此按鈕即可修改圖片信息和刪除圖片。</p><p> 5.2.6試題答案設(shè)計</p><p> 試題答案和試題是不可分割的,在此系統(tǒng)中,每個試題都有三個答案與之對應(yīng),只一個正確答案如圖5.4所示。</p><p><b> 圖5.4試題答案</b></p><p> 試題答案設(shè)計Ques
65、tionManage.aspx和頁面AddAnswer.aspx實現(xiàn)。在下拉列表選擇框中顯示試題種類,在普通列表框中顯示試題,單擊“添加試題答案”按鈕跳轉(zhuǎn)到答案添加頁面AddAnswer.aspx。試題管理界面用戶函數(shù)Page_Load()進行初始化,函數(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(),該事件首先判斷試題列表中某個試題項。如果已經(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()動態(tài)綁定試題列表框的數(shù)據(jù),如試題名稱,當(dāng)試題類型下拉列表框選中的選擇試題種類發(fā)生改變時觸發(fā)該事件,此時頁面會重新綁定列表中的試題數(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隨機生成試卷</b></p>&l
70、t;p> 系統(tǒng)隨機自動生成試卷功能由頁面CreateExaminePaper.aspx實現(xiàn),頁面是</p><p> 一個等待頁面,應(yīng)用程序生成一套試卷需要一定的時間。界面設(shè)計如圖5.4所示:</p><p> 圖5.4 系統(tǒng)生成考試試卷頁面</p><p> 在等待界面中,應(yīng)用程序使用自動跳轉(zhuǎn)方式跳轉(zhuǎn)到考試界面ExaminePaper.aspx,跳轉(zhuǎn)
71、代碼如下:</p><p> <meta http-equiv=”refresh” content=”3;url=ExaminePaper.aspx”></p><p> 在試卷生成時,等待頁面從Papers表中隨機獲取一套試卷及其參數(shù),獲取試卷及其參數(shù)功能由函數(shù)GetRolePaper()實現(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);//隨機選擇一套試卷</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ù)庫中取到這套試卷所包含的題型及數(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> 在隨機生成試卷過程中,程序首先調(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) ///逐個生成每種題型</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()隨機生成一種特定的題型,index(試題索引),IndexList(試題索引容器)等。并調(diào)用隨機函數(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) // 用隨機函數(shù)生存隨機序號序列</p><p> {index = GetRandomInt(nKindNum);</p><p> if(IsExistIndex(IndexList,index) == false)</p><p> {IndexList.Add(index.ToS
87、tring());}</p><p> }// 通過試題ID把試題的ID添加到臨時結(jié)果集中</p><p> if(ds == null) // 從數(shù)據(jù)庫中取到結(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> 生成隨機結(jié)果集的映射索引調(diào)用函數(shù)IsExistIndex()保證索引的惟一性,該函數(shù)逐個比較即將添加的值和數(shù)組中的每一個值,如果相等返回為假,否則為真。函數(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實現(xiàn),頁面設(shè)計由DataGrid控件和Button控件組成,界面設(shè)計如圖5.5所示:</p><p> 圖5.5考生考試界面</p><p> 頁面初始化首先從Session
93、全局變量取到一套試卷的所有考試題目,然后由QuestionDB類的函數(shù)GetQuestions()創(chuàng)建問題數(shù)據(jù)源DataGrid,問題數(shù)據(jù)源DataList為IList接口對象,而不是DataReader對象,DataSet對象或其它的ArrayList對象,函數(shù)BindQustionData()實現(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ù)時,采用IList接口對象作為數(shù)據(jù)源。此數(shù)據(jù)源由類QuestionDB的函數(shù)GetQuestion()函數(shù)創(chuàng)建,該函數(shù)的參數(shù)為ArrayList類型的對象QuestionList,它包含整套試卷的所有試題ID,函數(shù)GetQuestions()使用for語句從表中獲取每個試題的詳細信息。函數(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);///返回問題的詳細信息}</p&g
101、t;<p> 在此循環(huán)中使用GetSingleQuestion()從問題表中獲取單個問題的詳細信息,然后把詳細信息保存到QuestionDetails對象中,最后函數(shù)把所有的題目的詳細信息構(gòu)建為一個ArrayList對象。并在函數(shù)的最后返回此對象。</p><p> 函數(shù)GetQuestions()僅僅綁定試卷的問題,沒有綁定每個試題的選擇答案,函數(shù)GetAnswers()和函數(shù)BindAnsw
102、erList()實現(xiàn)該功能。函數(shù)GetAnswers()屬于數(shù)據(jù)訪問層函數(shù),它需要參數(shù)問題ID從問題表取到屬于問題ID的問題答案,并把試題答案傳遞到應(yīng)用程序的頁面呈現(xiàn)層。 </p><p> 在函數(shù)GetAnswers()基礎(chǔ)上,應(yīng)用程序的頁面呈現(xiàn)就可以使用該函數(shù)從數(shù)據(jù)庫獲取試題答案,并把試題綁定到每個相應(yīng)的問題,綁定試題答案函數(shù)BindAnswer()實現(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ù)綁定時,問題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自動閱卷</b></p><p> 單擊“上一題”或“下一題”按鈕觸發(fā)事件Question
107、List_ItemCommand(),該事件實現(xiàn)了跳轉(zhuǎn)到下一題,自動獲取上一題的選項,并判斷該選項是否正確。以此類推,有多少道試題就執(zhí)行多少次,直到做完為止。最后統(tǒng)計考生成績,并保存到數(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實現(xiàn),該頁面實現(xiàn)了考試結(jié)果,考生在交卷后就能看到自己當(dāng)前的考試成績。系統(tǒng)自動判斷此次考試是否合格??荚嚱Y(jié)果如圖5.8所示:</p><p><b> 圖5.8考試結(jié)果</b></p><p><b> 5.8測試</b></p>
111、<p> 完成了駕??荚囅到y(tǒng)的編程工作之后,最后的就是該系統(tǒng)的測試過程了,系統(tǒng)測試的根本目標(biāo)是盡可能多的發(fā)現(xiàn)和排除該系統(tǒng)設(shè)計過程中的隱藏的錯誤,最終把一個高質(zhì)量的軟件系統(tǒng)交給用戶使用。</p><p> 系統(tǒng)的測試包括系統(tǒng)的編譯和發(fā)行,在測試中有兩種方法:黑盒測試(功能測試),白盒測試(結(jié)構(gòu)測試)。大型系統(tǒng)通常由若干個子系統(tǒng)組成,每個子系統(tǒng)又由很多的模塊組成,主要的步驟有:模塊測試,子系統(tǒng)測試,系
112、統(tǒng)測試,驗收測試,平行運行。</p><p> 在單元測試期間對模塊進行測試主要是針對模塊接口,局部數(shù)據(jù)結(jié)構(gòu),重要的執(zhí)行通路,出錯處理通路,邊界條件。在確定測試也成驗收測試,是為了驗證該設(shè)備管理系統(tǒng)的有效性。以保證軟件確實滿足了用戶需求而進行的一系列活動,需求分析階段產(chǎn)生的系統(tǒng)規(guī)格說明書,準(zhǔn)確的描述用戶對軟件的合理期望,是測試的基礎(chǔ)。</p><p><b> 1.系統(tǒng)的編譯
113、</b></p><p> 設(shè)計系統(tǒng)的目的就是要使用者即使不安裝Visual FoxPro也能運行該程序,要想系統(tǒng)脫離Visual FoxPro環(huán)境運行,需要對系統(tǒng)進行編譯,制作出可以單獨運行的可執(zhí)行程序。系統(tǒng)的編譯過程首先將系統(tǒng)中涉及到的文件全部包含進“項目管理器”中,單擊項目管理器的“連編”按鈕。編譯結(jié)束后,便生成可執(zhí)行文件。</p><p><b> 2.系
114、統(tǒng)的發(fā)行</b></p><p> 運用Visual FoxPro自帶的安裝生成工具進行生成安裝包。主要步驟是:</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> 指定默認安裝路徑。</b></p><p><b> 改變文件位置。</b></p><p><b> 5.8.1測試項目</b></p&
116、gt;<p> 輸入不存在的用戶得到以下結(jié)果如圖5.10所示</p><p> 圖5.10用戶登錄操作失敗界面</p><p><b> 結(jié)束語</b></p><p> 在通過幾月的認真學(xué)習(xí)Microsoft Visual Studio.C#程序設(shè)計,使用.NET開發(fā)技術(shù)和SQL數(shù)據(jù)庫知識,并對其有一定了解的情況下,作者
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于.net的駕校理論考試模擬系統(tǒng)設(shè)計與實現(xiàn)
- 基于android的駕校模擬考試系統(tǒng)
- 基于jsp的駕??荚囅到y(tǒng)
- 基于.net的駕校信息管理系統(tǒng)的設(shè)計與實現(xiàn)
- 駕校理論考試2018完整題庫-理論考試
- 駕校理論考試2018完整題庫,理論考試
- 駕校理論考試2018完整題庫,理論考試
- 駕校理論考試2018完整題庫,理論考試
- 駕校理論考試2018完整題庫,理論考試
- 駕校模擬考試游戲
- 駕校理論考試題庫
- 基于.net的高校在線考試系統(tǒng)
- 日照駕校模擬考試題
- 駕校在線模擬考試系統(tǒng)的設(shè)計與實現(xiàn)(王成勇)
- 駕校在線模擬考試系統(tǒng)的設(shè)計與實現(xiàn)(王成勇)
- 基于.net的考試系統(tǒng)的設(shè)計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于android的駕校模擬考試系統(tǒng)的設(shè)計與實現(xiàn)
- 駕校理論題
- 基于.net的在線考試系統(tǒng)設(shè)計與實現(xiàn)
- 基于.net技術(shù)的網(wǎng)絡(luò)考試系統(tǒng)平臺設(shè)計
評論
0/150
提交評論