前言
隨著網絡技術的飛速發(fā)展,現在很多國外的大學和社會其他部門都已經開設了遠程教育,通過計算機網絡實現異地教育和培訓?,F在,計算機硬件技術的發(fā)展已經達到了相當高的水平。但是,遠程教育軟件的開發(fā)目前還處于起步階段,隨著這項技術的不斷深入發(fā)展,就要求有更好、更完善的軟件系統應用到遠程教育當中去,這就給軟件設計人員提出了更高的設計要求。
遠程教育包括很多環(huán)節(jié),例如教學系統、答疑系統和考試系統等等。其中很重要的一個環(huán)節(jié)就是在線考試系統,同時它也是最難實現的環(huán)節(jié)。在我國,雖然遠程教育已經蓬勃地發(fā)展起來,但是目前學校與社會上的各種考試大都采用傳統的考試方式,在此方式下,組織一次考試至少要經過五個步驟,即人工出題、考生考試、人工閱卷、成績評估和試卷分析。顯然,隨著考試類型的不斷增加及考試要求的不斷提高,教師的工作量將會越來越大,并且其工作將是一件十分煩瑣和非常容易出錯的事情,可以說傳統的考試方式已經不能適應現****試的需要。隨著計算機應用的迅猛發(fā)展,網絡應用不斷擴大,如遠程教育和虛擬大學的出現等等,且這些應用正逐步深入到千家萬戶。人們迫切要求利用這些技術來進行在線考試,以減輕教師的工作負擔及提高工作效率,與此同時也提高了考試的質量,從而使考試更趨于公證、客觀,更加激發(fā)學生的學習興趣。例如目前許多國際著名的計算機公司所舉辦的各種認證考試絕大部分采用這種方式。
在線考試是現階段研究開發(fā)的一個熱點。它是建立在國際互聯網上的應用系統,客戶端的配置可以極為簡單,使考試不受地域的局限。一個完備的在線考試系統可以使用戶在網上學習過后及時檢驗自己的學習效果,已發(fā)現自己的不足,使得學習效率得到很大提高。在線考試系統中題目的生成、試卷的提交、成績的批閱等都可以在網絡上自動完成。只要形成一套成熟的題庫就可以實現考試的自動化。這樣一來,教師所要做的只是精心設計題目、維護題庫,而不是組織考試,從而大大減輕了教師的負擔,這表明其經濟性是相當可觀的。為了適應新形勢的發(fā)展,我進行了這一系統的初步設計工作,也可以說是做一個初步的探索,希望它能夠在各類考試中發(fā)揮高效、便捷的作用,把老師從繁重的工作中解脫出來!
目前,網絡應用軟件運行的模式主要有二類:Client/server模式,Browser/Web模式。前者主要的缺點是維護、升級較麻煩,后者是近幾年伴隨Internet迅速發(fā)展起來的一種技術,它與客戶/服務器方式類似,客戶端是一個標準的瀏覽器,服務器端是Web Server ,而Web Server與數據庫和應用服務器的緊密結合,使得這種模式的應用范圍不斷擴大,它已不僅僅用于網上查詢,有很多部門的業(yè)務系統、企業(yè)的MIS系統紛紛采用這種模式,它的主要優(yōu)點是便于擴充應用、升級維護簡便。
另外,考試系統的軟件也必將不斷的更新;同時軟件產品本身就要經過一個不斷自我完善的過程。
基于上述考慮,用Browser/Web模式來設計考試系統比較合適,服務器端我們采用Access數據庫系統和ASP組件來構成考試的應用服務系統;客戶端采用瀏覽器來完成考試全過程,同時可進行遠程系統維護和管理。
利用網絡和數據庫技術,結合目前硬件價格普遍下跌與寬帶網大力建設的有利優(yōu)勢,應用Active Server Page技術,我開發(fā)了基于B/S模式多用戶在線考試系統這一程序。它運用方便、操作簡單,效率很高(同時,它要求計算機配置也很高,尤其是服務器端)。現階段雖只實現了試卷的客觀題部分,但已具有用戶注冊、多用戶同時在線考試、動態(tài)隨機出題、時間控制、自動判卷,試題錄入、修改題庫、用戶管理、科目管理、管理員管理、分數管理等重要功能,也就是說實現了真正的無紙化考試,滿足任何授權的考生隨時隨地考試并迅速獲得成績,同時也大大減輕了教師出題、出題和判卷等繁重的工作量。
第一章 系統設計相關原理
該在線考試系統主要采用ASP、HTML、Access數據庫、VBScript、SQL等技術和工具,整體設計遵循軟件工程的方法,經過需求分析、總體設計、文檔和代碼的編制、模塊測試和系統實現幾個階段。下面就對這幾種技術和方法做一個概述。
1.1 ASP技術介紹
Microsoft Active Server Pages 即我們所稱的ASP,其實是一套微軟開發(fā)的服務器端腳本環(huán)境。Active Server Page 是創(chuàng)建動態(tài)網頁的一個很好的工具,它起一種編程語言的作用,可以利用它編寫動態(tài)產生HTML的程序代碼。因此,只要用戶瀏覽Web站點并請求一個ASP 頁,Web服務器就可以處理相應的ASP代碼,生成HTML代碼,然后將它傳遞到用戶瀏覽器并顯示出網頁。ASP內含于IIS3.0和4.0之中,通過 ASP我們可以結合HTML網頁、ASP指令和ActiveX元件建立動態(tài)、交互且高效的WEB服務器應用程序。有了ASP就不必擔心客戶的瀏覽器是否能運行所編寫的代碼,因為所有的程序都將在服務器端執(zhí)行,包括所有嵌在普通HTML中的腳本程序。當程序執(zhí)行完畢后,服務器僅將執(zhí)行的結果返回給客戶瀏覽器,這樣也就減輕了客戶端瀏覽器的負擔,大大提高了交互的速度。以下羅列了ASP所獨具的一些特點:
1.使用VBScript 、JScript等簡單易懂的腳本語言,結合HTML代碼,即可快速地完成網站的應用程序。
2.無須編譯,容易編寫,可在服務器端直接執(zhí)行。
3.使用普通的文本編輯器,如Windows的記事本,即可進行編輯設計。
4.與瀏覽器無關,用戶端只要使用可執(zhí)行HTML碼的瀏覽器,即可瀏覽ASP所設計的網頁內容。ASP所使用的腳本語言(VBScript 、Jscript)均在WEB服務器端執(zhí)行,用戶端的瀏覽器不需要能夠執(zhí)行這些腳本語言。
5.ASP 能與任何ActiveX scripting語言相容。除了可使用VBScript或JScript語言來設計外,還通過plug-in的方式,使用由第三方所提供的其他腳本語言,譬如REXX、Perl、Tcl等。腳本引擎是處理腳本程序的COM(Component Object Model)物件。
6.ASP的源程序,不會被傳到客戶瀏覽器,因而可以避免所寫的源程序被他人剽竊,也提高了程序的安全性。
7.可使用服務器端的腳本來產生客戶端的腳本。
8.物件導向(Object-oriented)。
9.ActiveX Server Components(ActiveX服務器元件)具有無限可擴充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL等編程語言來編寫你所需要的ActiveX Server Component。
10.另外,ASP技術的處理速度相當快,并且其安全性也很高。ASP最重要的優(yōu)點是能夠建立對諸如時間、地點、用戶標志、以前的選擇和活動等因素敏感的頁面。換句話說,可針對每個用戶的個別需求,用ASP定制網頁,能夠滿足用戶的各種需求。
總之,ASP包含三方面含義:
1.Active:ASP 使用了微軟的ActiveX技術。ActiveX(COM)技術是現在Microsoft軟件的重要基礎。它采用封裝對象,程序調用對象的技術,簡化編程,加強程序間合作。ASP本身封裝了一些基本組件和常用組件,有很多公司也開發(fā)了很多實用組件。只要你可以在服務器上安裝這些組件,通過訪問組件,你就可以快速、簡易地建立自己的WEB應用。
2.Server:ASP運行在服務器端。這樣就不必擔心瀏覽器是否支持ASP所使用的編程語言。ASP 的編程語言可以是VBSCRIPT和JSCRIPT。VBSCRIPT是VB的一個簡集,會VB的人可以很方便的快速上手。然而Netscape瀏覽器不支持客戶端的VBSCRIPT,所以最好不要在客戶端使用VBSCRIPT。而在服務器端,則無需考慮瀏覽器的支持問題。Netscape瀏覽器也可以正常顯示ASP頁面。
3.Pages:ASP返回標準的HTML頁面,可以正常地在常用的瀏覽器中顯示。瀏覽者查看頁面源文件時,看到的是ASP生成的HTML代碼,而不是ASP程序代碼。這樣就可以防止別人抄襲程序。
由此可以看出,ASP是在IIS下開發(fā)WEB應用的一種簡單、方便的編程工具。在了解了VBSCRIPT的基本語法后,只需要清楚各個組件的用途、屬性、方法,就可以輕松編寫出自己的ASP系統。
運行 ASP 所需的環(huán)境如下:
☆Microsoft Internet Information Server version 3.0/4.0 on Windows NT Server
☆Microsoft Peer Web Services Version 3.0 on Windows NT Workstation
☆Microsoft Personal Web Server on Windows 95/98
與一般的程序不同,ASP程序無須編譯。ASP程序的控制部份,是使用VBScript、JScript等腳本語言來設計的,當執(zhí)行ASP程序時,腳本程序將一整套命令發(fā)送給腳本解釋器(即腳本引擎),由腳本解釋器進行翻譯并將其轉換成服務器所能執(zhí)行的命令。當然,同其他編程語言一樣,ASP程序的編寫也遵循一定的規(guī)則,如果你想使用你所喜愛的腳本語言編寫ASP程序,那么你的服務器上必須要有能解釋這種腳本語言的腳本解釋器。當你安裝ASP時,系統提供了兩種腳本語言:VBSrcipt和JScript,而VBScript則被作為系統默認的腳本語言。
ASP程序其實是以擴展名為.asp的純文本形式存在于WEB服務器上的,可以用任何文本編輯器打開它,ASP程序中可以包含純文本、HTML標記以及腳本命令。只需將.asp程序放在Web服務器的虛擬目錄下(該目錄必須要有可執(zhí)行權限),就可以通過WWW的方式訪問ASP程序了。要學好ASP程序的設計,必須掌握腳本的編寫,那么究竟什么是腳本呢?其實腳本是由一系列的腳本命令所組成的,如同一般的程序,腳本可以將一個值賦給一個變量,可以命令Web服務器發(fā)送一個值到客戶瀏覽器,還可以將一系列命令定義成一個過程。要編寫腳本,你必須要熟悉至少一門腳本語言,如VBScript。腳本語言是一種介于HTML和諸如JAVA、Visual Basic、C++等編程語言之間的一種特殊的語言,盡管它更接近后者,但它卻不具有編程語言復雜、嚴謹的語法和規(guī)則。如前所述ASP所提供的腳本運行環(huán)境可支持多種腳本語言,譬如:JScript、REXX、PERL等等,這無疑給ASP程序設計者提供了廣泛的發(fā)揮余地。ASP的出現使得廣大Web設計者不必在為客戶瀏覽器是否支持而擔心,實際上就算在同一個.asp文件中使用不同的腳本語言,都無須為此擔憂,因為所有的一切都將在服務器端進行,客戶瀏覽器得到的只是一個程序執(zhí)行的結果,而你也只需在文件中聲明使用不同的腳本語言即可。
ASP的對象和組件:
1.ASP有7個固有對象
這7個固有對象分別是Request、Response、Server、Application、Session、ASPError和ObjectContext。
Request對象用來處理用戶做出的請求,就是處理用戶要求瀏覽器查看特定的網頁或Web應用時做出的請求。此請求可以HTML的形式輸入或僅以URL的形式作出。Response對象用來處理從Web服務器向用戶發(fā)送信息并對此信息進行控制。
Serve對象用來代表服務器自身。因此它提供幾個與Web服務器可能要完成的任務相關的常用功能,諸如建立新對象和設置腳本的超時特性等。還有通過將不合法字符轉化為合法字符,把字符串轉換為URL和HTML正確的使用格式的方法。
Application對象用來代表應用,可用它來管理諸如應用目錄這一類的東西。
Session對象用來代表用戶會話,并存儲該會話的信息??衫肧ession對象來管理如Web服務器在用戶“請求”之間等待的時間等。
ObjectContext對象用來管理事務處理。它目前已經集成到Windows2000操作系統中了。它包含了所有ASP其他對象,可通過ObjectContext引用ASP的每個對象。
ASPError對象包含ASP腳本或asp.dll本身產生的任何錯誤的詳細內容。
2.Microsoft Data Access Component
MDAC 作為操作系統的組成部分的組件,與ASP一起提供。此組件中包含一組稱為ActiveX Data Object(ADO)的對象,他們對于查看不同平臺上的各種數據(數據庫、表單、文本文件)是必不可少的。ADO主要有3個對象,分別是 Connection、Command和Recordset。
Connection對象就是使ADO與數據庫之間建立一個通道,也就是實現與數據庫的連接。
Command對象就是對數據庫進行發(fā)號施令,比如建立新的索引,執(zhí)行查詢等,它可以通過標準的SQL數據庫操作語言得以實現。
Recordset對象是一個數據記錄集,它包含了我們檢索出來的記錄數據,通過它可以直接對數據庫進行修改。
3.活動服務器組件
活動服務器組件是與ASP一起免費帶來的組件或DLL,他們有著廣泛的用途。主要包括AD Rotator、Browser Capabilities、Content Link、Content Rotator、Counters、logging Utility、MyInfo、Page Counter、permission Checker、tools等組件。由于本次設計用到的不多,在此就不詳細介紹了
4.ASP腳本對象
他們分別是Dictionary、FileSystemObject和TextStream.由于本設計用到的也不多,在此就不詳細介紹了。
1.2 SQL語句介紹
SQL 全稱是“結構化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實驗室為其關系數據庫管理系統SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的數據庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的數據庫開發(fā)系統,都支持SQL語言作為查詢語言。
Structured Query Language包含4個部分:
☆數據查詢語言DQL-Data Query Language SELECT
☆據操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE
☆數據定義語言DQL-Data Definition Language CREATE, ALTER, DROP
☆數據控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK
1.2.1 SQL的優(yōu)點
SQL廣泛地被采用正說明了它的優(yōu)點。它使全部用戶,包括應用程序員、DBA管理員和終端用戶受益非淺。
1.非過程化語言
SQL 是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。 SQL不要求用戶指定對數據的存放方法。這種特性使用戶更易集中精力于要得到的結果。所有SQL語句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段。查詢優(yōu)化器知道存在什么索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。
2.統一的語言
SQL可用于所有用戶的DB活動模型,包括系統管理員、數據庫管理員、 應用程序員、決策支持系統人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。 SQL為許多任務提供了命令,包括:
☆查詢數據
☆在表中插入、修改和刪除記錄
☆建立、修改和刪除數據對象
控制對數據和數據對象的存取
☆保證數據庫一致性和完整性
以前的數據庫管理系統為上述各類操作提供單獨的語言,而SQL將全部任務統一在一種語言中。
3.是所有關系數據庫的公共語言
由于所有主要的關系數據庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉到另一個。所有用SQL編寫的程序都是可以移植的。SQL 是PostgreSQL(和大多數其它關系型數據庫)用做查詢語言的語言。它是可以移植的,并且容易學習使用。但是所有SQL語句都必須由數據庫服務器獨立地執(zhí)行。這就意味著客戶端應用必須把每條查詢發(fā)送到數據庫服務器,等待它處理這個查詢,接收結果,做一些運算,然后給服務器發(fā)送另外一條查詢。所有這些東西都會產生進程間通訊,并且如果客戶端在另外一臺機器上甚至還會導致網絡開銷。如果使用了 PL/pgSQL,那么可以把一塊運算和一系列查詢在數據庫服務器里面組成一個塊,這樣就擁有了過程語言的力量并且簡化SQL的使用,因而節(jié)約了大量的時間,因為用不著付出客戶端/服務器通訊的過熱。通過使用PL/pgSQL,應用可以獲得可觀的性能提升。
1.2.2 SQL的使用
1.ASP與Access數據庫連接:
<%@language=VBscript%>
<%
dimconn,mdbfile
mdbfile=server.mappath("數據庫名稱.mdb")
setconn=server.createobject("adodb.connection")
conn.open"driver={microsoftaccessdriver
(*.mdb)};uid=admin;pwd=數據庫密碼;dbq="&mdbfile
%>
2.ASP與SQL數據庫連接:
<%@language=VBscript%>
<%
dimconn
set conn=server.createobject("ADODB.connection")
conn.open"PROVIDER=SQLOLEDB;DATA
SOURCE=SQL服務器名稱或IP地址;UID=sa;PWD=數據庫密碼;DATABASE=數據庫名稱
%>
建立記錄集對象:
setrs=server.createobject("adodb.recordset")
rs.openSQL語句,conn,3,2
3.SQL常用命令使用方法:
(1)數據記錄篩選:
sql="select*from數據表where字段名=字段值orderby字段名[desc]"
sql="select*from數據表where字段名like'%字段值%'orderby字段名[desc]"
sql="selecttop10*from數據表where字段名orderby字段名[desc]"
sql="select*from數據表where字段名in('值1','值2','值 3')"
sql="select*from數據表where字段名between值1and值2"
(2)更新數據記錄:
sql="update數據表set字段名=字段值where條件表達式"
sql="update數據表set字段1=值1,字段2=值2……字段n=值nwhere條件表達式
(3)刪除數據記錄:
sql="deletefrom數據表where條件表達式"
sql="deletefrom數據表"(將數據表所有記錄刪除)
(4)添加數據記錄:
sql="insertinto數據表(字段1,字段2,字段3…)values(值1,值2,值3…)"
sql="insertinto目標數據表select*from源數據表"(把源數據表的記錄添加到目標數據表)
(5)數據記錄統計函數:
AVG(字段名)得出一個表格欄平均值
COUNT(*¦字段名)對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名)取得一個表格欄最大的值
MIN(字段名)取得一個表格欄最小的值
SUM(字段名)把數據欄的值相加
引用以上函數的方法:
sql="selectsum(字段名)as別名from數據表where條件表達式"
setrs=conn.excute(sql)
用rs("別名")獲取統的計值,其它函數運用同上。
(5)數據表的建立和刪除:
CREATETABLE數據表名稱(字段1類型1(長度),字段2類型2(長度)……)
DROPTABLE數據表名稱(永久性刪除一個數據表)
4.記錄集對象的方法:
rs.movenext將記錄指針從當前的位置向下移一行
rs.moveprevious將記錄指針從當前的位置向上移一行
rs.movefirst將記錄指針移到數據表第一行
rs.movelast將記錄指針移到數據表最后一行
rs.absoluteposition=N將記錄指針移到數據表第N行
rs.absolutepage=N將記錄指針移到第N頁的第一行
rs.pagesize=N設置每頁為N條記錄
rs.pagecount根據pagesize的設置返回總頁數
rs.recordcount返回記錄總數
rs.bof返回記錄指針是否超出數據表首端,true表示是,false為否
rs.eof返回記錄指針是否超出數據表末端,true表示是,false為否
rs.delete刪除當前記錄,但記錄指針不會向下移動
rs.addnew添加記錄到數據表末端
rs.update更新數據表記錄
1.3 VBScript介紹
Microsoft Visual Basic Scripting Edition是程序開發(fā)語言Visual Basic家族的最新成員,它將靈活的Script應用于更廣泛的領域,包括Microsoft Internet Explorer中的 Web 客戶機 Script 和 Microsoft Internet Information Server 中的 Web 服務器 Script。
VBScript 使用ActiveX™ Script與宿主應用程序對話。使用ActiveX Script,瀏覽器和其他宿主應用程序不再需要每個Script部件的特殊集成代碼。ActiveX Script使宿主可以編譯Script、獲取和調用入口點及管理開發(fā)者可用的命名空間。通過ActiveX Script,語言廠商可以建立標準Script運行時語言。Microsoft將提供VBScript的運行時支持。Microsoft正在與多個 Internet組一起定義ActiveX Script標準以使Script引擎可以互換。ActiveX Script可用在Microsoft® Internet Explorer和Microsoft® Internet Information Server中。
VBScript只有一種數據類型,稱為Variant。Variant 是一種特殊的數據類型,根據使用的方式,它可以包含不同類別的信息。因為Variant是VBScript中唯一的數據類型,所以它也VBScript 中所有函數的返回值的數據類型。最簡單的Variant可以包含數字或字符串信息。Variant用于數字上下文中時作為數字處理,用于字符串上下文中時作為字符串處理。這就是說,如果使用看起來象是數字的數據,則VBScript會假定其為數字并以適用于數字的方式處理。與此類似,如果使用的數據只可能是字符串,則VBScript將按字符串處理。當然,也可以將數字包含在引號("")中使其成為字符串。除簡單數字或字符串以外,Variant可以進一步區(qū)分數值信息的特定含義。例如使用數值信息表示日期或時間。此類數據在與其他日期或時間數據一起使用時,結果也總是表示為日期或時間。當然,從 Boolean值到浮點數,數值信息是多種多樣的。Variant包含的數值信息類型稱為子類型。大多數情況下,可將所需的數據放進Variant中,而 Variant也會按照最適用于其包含的數據的方式進行操作。聲明變量的一種方式是使用Dim語句、Public語句和Private語句在Script 中顯式聲明變量。
另一種方式是通過直接在Script中使用變量名這一簡單方式隱式聲明變量。這通常不是一個好習慣,因為這樣有時會由于變量名被拼錯而導致在運行Script時出現意外的結果。因此,最好使用Option Explicit語句顯式聲明所有變量。
1.過程
在VBScript中,過程被分為兩類:Sub過程和Function過程。
(1)Sub過程
Sub過程是包含在Sub和End Sub語句之間的一組VBScript語句,執(zhí)行操作但不返回值。Sub過程可以使用參數(由調用過程傳遞的常數、變量或表達式)。
(2)Function過程
Function 過程是包含在Function和End Function語句之間的一組VBScript語句。Function過程與Sub過程類似,但是Function過程可以返回值。Function過程可以使用參數(由調用過程傳遞的常數、變量或表達式)。如果Function過程無任何參數,則Function語句必須包含空括號()。 Function過程通過函數名返回一個值,這個值是在過程的語句中賦給函數名的。Function 返回值的數據類型總是Variant。
2.VBScript中可使用下列循環(huán)語句:
☆Do...Loop:當(或直到)條件為True時循環(huán)。
需求分析
要實現一個軟件系統,首先應該進行需求分析,這樣才能令設計出的軟件滿足用戶的各項功能。下面就對在線考試系統的設計進行需求分析。
2.1 系統需要解決的主要問題
首先,因為考試是面向特定的某些對象的,所以考試者進入系統應該進行身份驗證。考試者進入考試系統后,應該能根據自己的需要選擇考試科目,所以該系統還應具有考試科目選擇的功能。在線考試于一般的單機考試是不同的。鑒于考試環(huán)境一般為機房,考試者之間的距離很近,為了在線考試做到規(guī)范,對于每個應試者來說,試卷的試題和題量都應是相同的,但試題并不相同。在線考試基于網絡環(huán)境,試卷應該從服務器的數據庫隨機抽取試題后動態(tài)生成的。另外,系統還應該對考試時間進行控制,時間到了會要求考試者交卷??荚囌哌x擇答案提交后,應該由計算機自動判卷,得到成績后顯示出來??荚囃戤吅螅梢苑祷氐卿浗缑婊蚶^續(xù)考試。此外,應該能夠方便、快捷的對在線考試系統管理,此外,用戶還應能進行遠程注冊。
2.2 系統應該具備的基本功能
☆用戶注冊:用戶可以進行注冊,然后登錄。
☆用戶信息的管理:管理員可以增刪用戶
☆試題模型設置:設置各科目試題的每種題型的數量和分值。
☆試題庫管理:分科目,對單選、多選兩種題型試題庫的管理,使試題的增刪、編輯更為簡便。
☆試卷生成:可以指定試卷的各題型的數量,從試題庫里隨機抽取試題生成一份原始試卷。
☆在線考試:系統嚴格控制整個考試過程,實行時間的監(jiān)控與權限的控制,考生需要在限定的考試時間內交卷。
☆計算機自動閱卷:本系統只考慮客觀題,要求計算機能自動閱卷,然后馬上顯示出考生分數。
☆成績查閱:考生考完以后,管理員應該能對所有紀錄進行查詢,并應該可以刪除指定紀錄。
除了實現上述功能以外,在線考試系統還應該具有友好、簡潔的界面,安全性要高,穩(wěn)定性要強,能夠滿足100人以上同時及進行在線考試。
系統總體設計
3.1基本簡介
該系統是專門用于用戶注冊、登錄、參加在線考試以及管理員進行試題錄入、修改、刪除、成績查詢、管理用戶的ASP應用程序。它應該具有開放性、方便性和靈活性。管理員不僅可以輕松地向題庫添加、修改和查詢試題,而且還可以自動新增科目并建立相應的數據;它還允許用戶根據自己的需求,選取考試科目。考生進行有效的身份驗證登錄后,選擇考試科目,并要求在規(guī)定的時間內進行答題,當達到規(guī)定的時間后,系統將自動予以提示。一旦考生做完交卷后便能立即看到自己的考試成績,并且其分數將被記入庫中以供審核和查閱;另外,還可完全由計算機自動靈活、隨機的抽取試題庫中的各類試題組成各種形式的試卷,其內容會隨著庫中試題的改變而改變,而且,不同的考生生成的試題是不同的。
用戶可以是學校等單位的教師及學生和企事業(yè)單位的培訓部門(因企事業(yè)單位每年要對員工進行素質、安全教育與技能等方面的培訓及考試等)。
3.2 運行環(huán)境與系統結構
為了保證系統運行的效率和可靠性,系統服務器端應具有較高的軟硬件配置,客戶端的要求不是很高。此應用程序可廣泛運行于國際互聯網即Internet,也可適用于內部的局域網。其運行要求如下:
☆軟件環(huán)境:
客戶端: Windows95/98,Internet Explorer(IE)等
服務器端:Windows NT/Windows2000,Internet Information Server (IIS)4.0及其以上版本,IE等;或者Windows98,Personal Web Server(PWS),IE等。
數據庫:采用access,運行于服務器端。
☆硬件環(huán)境:
服務器 CPU:PIII 500以上 ,內存:256M以上
客戶機 CPU:P200MMX以上,內存:32M以上
3.2 系統結構圖
根據需求分析,在線考試系統的結構圖如下:
圖3-1 在線考試系統結構圖
3.3 詳細設計
詳細設計是整個設計過程中,最重要的步驟之一。下面就分如下幾個部分對系統進行詳細設計:(1)試題設計(2)數據庫中表的設計(3)用戶、管理員權限(4)功能模塊詳細設計(5)在線考試系統考試模塊框圖
3.3.1試題設計
鑒于主觀題的主觀性,目前無法實現系統自動判卷,所以本系統只作客觀題部分。一般情況下,單選題往往在四個供選的答案A、B、C、D中選擇唯一正確的答案;多選題是在供選答案中有多個選擇;而判斷題實質上就相當于有兩個選項的單選題。因而,本系統中所涉及的單選題和多選題跟過去的大體相同,由于時間的關系,判斷題部分沒有做。并且假設多選題一般情況下也是最多提供四個備選答案,標準答案至少有一個。故各題型的樣題設計如下:
單選題:password的意思是: A、密碼 B、經過 C、單詞
D、通路
正確答案為A
多選題:下面的表達式為真的有:A、1>2 B、7%5=2
C、sin(30)=1/2 D、Cint(7/5)=1
正確答案為B、C、D
3.3.2數據庫中表的設計
1.question表結構
通常,每一類型的試題都應有一個表結構。但考慮到目前系統存貯空間可以很大,也為了更加方便。我們采用把全部試題集中在一起的方案來建立數據表,每道客觀題均有四個備選答案項,每個試題均具有題型、所屬科目等數據段表示其屬性。字段名一般是相應的英文單詞。這樣,查詢起來較方便,會節(jié)約時間,也不致于造成數據十分雜亂等。詳細設計如下表所示:
表3-1 question 表
字段名稱 類型 說明
Haveselect 數字 常整型
ID 自動編號 常整型,遞增,主鍵
Question 文本 字段大小200
A 文本 字段大小50
B 文本 字段大小50
C 文本 字段大小50
D 文本 字段大小50
Answer 文本 字段大小50
Type 文本 字段大小50
subjectname 文本 字段大小50
各字段說明:
(1)haveselect字段代表在隨機選題時是否已經被某用戶選過,類型為數字。
(2)ID是問題的id號,用來唯一標志該問題,把它設為主鍵,類型為自動編號。
Question字段為問題內容,類型為文本。
(4)A字段代表選項A的內容
(5)B字段代表選項B的內容
(6)C字段代表選項C的內容
(7)D字段代表選項D的內容
(8)Answer字段表示答案選項
(9)Type字段表示試題類型
(10)subjectname字段代表試題所屬科目名稱
2.subject表結構
表3-2 subject表
字段名稱 類型 說明
Multiper 數字 常整型
Singleper 數字 常整型
multinumber 數字 常整型
singlenumber 數字 常整型
subjectname 文本 字段大小50
Testtime 數字 常整型
Id 自動編號 常整型,遞增,主鍵
各字段說明:
(1)multiper字段代表在某考試科目的考試題中每個多選題的分值。
(2)singleper字段代表在某考試科目的考試題中每個單選題的分值。
(3)multinumber字段為某科的多選題題量。
(4)singlenumber字段為某科的多選題題量。
(5)subjectname字段代表科目名稱。
(6)testtime字段代表某科的考試總時間。
(7)id字段代表科目的id號。
3.score表結構
表3-3 score表
字段名稱 類型 說明
Studentname 文本 字段大小50
Subjectname 文本 字段大小50
Score 數字 常整型
Id 自動編號 常整型,遞增,主鍵
Endtime 日期/時間
各字段說明:
(1)studentname字段代表在某次考試記錄中學生的名字。
(2)subjectname字段代表在某次考試紀錄中考試科目名。
(3)score字段為某次考試紀錄中考試分數。
(4)id字段為某次考試紀錄的標志號。
(5)endtime字段代表考試的結束時間。
4.student表結構
表3-4 student表
字段名稱 類型 說明
Studentname 文本 字段大小50
Studentpassword 文本 字段大小50
Id 自動編號 常整型,遞增,主鍵
各字段說明:
(1)studentname字段代表學生的名字。
(2)studentpassword字段代表密碼。
(3)id字段為學生的標志號。
5.admin表結構
表3-5 admin表
字段名稱 類型 說明
Name 文本 字段大小50
Password 文本 字段大小50
Id 自動編號 常整型,遞增,主鍵
各字段說明:
(1)name字段代表管理員的名字。
(2)password字段代表密碼。
(3)id字段為管理員的標志號。
3.3.3 用戶、管理員權限
☆管理員:在此系統中可以由若干個管理員,即系統管理員。他們具有一般用戶所沒有的權限,即具有管理用戶、試題以及試卷等內容的權力。它不需注冊,在數據庫有一個表來存放相關信息,可由以存在的管理員添加或刪除管理員。
☆一般用戶:主要是指學校的學生和企事業(yè)單位的培訓對象等。
3.3.4 功能模塊詳細設計
下面,對各個功能模塊分別進行詳細討論,具體情況見系統源程序。
3.3.4.1 管理模塊
管理員可以向題庫中添加各種類型且符合要求的試題,也可以對它們進行修改和刪除。同時,管理員也能對科目、用戶、考試記錄等數據進行管理。
1. 試題管理
(1)試題錄入
首先,用戶選擇試題所屬科目。若菜單中沒有該科目,則可以新增一個。返回、刷新一次頁面,即可看到新增的科目名稱。而且,在本系統中其它需要選擇科目的地方也會自動更新。其次,每道試題有類型、試題內容與選項和答案等欄目。管理員輸入完以后,即可看到預覽效果。如果輸入不合法,或者該科題庫中已有該試題編號和內容等,則系統給出相應的提示或警告,以待更正。
(2)試題修改
管理員還可以對試題進行修改。不過,對于各表中的主鍵不用修改,避免了造成系統中的數據混亂,或者覆蓋其它有用數據的現象。如果用戶執(zhí)行了非法操作,則必須重新操作。
(3)試題刪除
管理員可以刪除不再需要的試題。
2. 科目管理
(1)添加科目
其基本信息有科目名稱、題型、題量和考試總時間等,對于用戶輸入的不符合系統要求的數據,系統仍舊給出提示或警告。
(2)科目刪除
管理員可以刪除不再需要的科目。
3.用戶管理
管理員可以通過管理界面添加或刪除用戶。
4.管理管理員
管理員可以通過管理界面添加新管理員或刪除原有管理員。
5.考試記錄管理
系統中的管理員可以查詢考試記錄,也可以刪除考試紀錄。
3.3.4.2在線考試模塊
進入在線考場是本系統最重要的部分之一。因為一個系統如果涉及到現實的話,就必須考慮得十分周到、完善??忌卿浐?,只要選擇考試科目以后,就可以調出試卷進行在線考試。為了實現動態(tài)隨機不重復的抽取試題,需要在選題過程中每選出一題,就要在試題庫中作相應的標志,以便下次不會重復取出此題。試卷出來后要對試題庫中的標志位復原。這樣就會使每個考生的試卷都不同??忌钠浯痤}信息通過單、復選按鈕選擇答案來反映??荚嚱Y束采取自主交卷和到了規(guī)定的時間自動題示有機結合的方式辦法予以實現。
3.3.4.2用戶注冊模塊
該模塊的功能是實現用戶遠程注冊。用戶輸入想要注冊的用戶名和密碼,提交之后由系統判斷該用戶是否已經存在,如果存在,就給出相應信息,如果不存在,就把用戶輸入的用戶名和密碼寫到數據庫中,完成注冊。
3.3.5 在線考試系統考試模塊框圖 圖3-2 在線考試系統考試模塊框圖
系統實現
在進行了整體設計以后,就開始進行詳細的設計及編碼工作。也就是設計文件和把他們有機地組織在一起實現所有功能。
4.1 系統流程圖設計
根據系統總體設計,首先系統要有一個登錄界面,用戶可以從該界面登錄參加考試。管理員也應該有一個進入管理登錄界面的通道。此外,這個界面上還應該有一個用戶注冊的通道。
在考生正確輸入用戶名和密碼以后,接著應該進入考試科目選擇界面。在該界面上,考生選擇參加考試的科目,這個人機交互的過程是必不可少的。
考生確定考試科目以后,進入開始考試界面,由計算機隨機提取試題,顯示出來組成試卷,并開始進行計時??忌俅芜M行考試,答完試題后交卷,進入下一個界面。
考生提交答卷后,由計算機進行處理--判卷,得出考試分數,顯示出來,并把該生考試記錄存入數據庫。在這個界面上應該可以返回繼續(xù)進行考試或回到登錄界面。
以上是系統進行考試功能的部分,要對系統進行管理,如試題管理、科目管理、用戶管理等就需要設計一些管理界面。下面就來逐步進行設計。
要進行管理首先要有管理員登陸驗證,這里另外設計了一個界面,使它與用戶登錄區(qū)別開來。這個界面與用戶登錄界面表面上很相似,但是他們是從不同的表中提取數據進行驗證的,以便于系統擴充和增加安全性。
管理員登錄以后,應該有一個管理項目選擇界面,其中包括管理用戶選項、管理管理員選項、管理考試科目選項、管理考試紀錄選項以及管理各科試題選項。
管理用戶的界面可以實現用戶的增加、和刪除的功能,管理員在此可以對用戶進行管理。
管理管理員的界面,功能和管理用戶的差不多,實現對管理員的增加和刪除功能。
管理考試科目界面用來增加或刪除考試的科目,以方便對各科試題的管理和查詢。
管理考試紀錄界面可以對考生的每次考試進行紀錄,管理員科可以對考生成績、考試科目、時間及考試各相關紀錄進行查詢和刪除。
最后是試題庫管理界面,它根據各科進行分類。通過這個界面管理員可以對題庫中的某科試題進行增加、修改或刪除。這樣就十分方便靈活的對試題庫進行管理。
下圖就是系統流程圖:
圖4-1 系統流程圖
4.2 各文件功能介紹及詳解
1.<conn.asp>
該文件實現的是連接數據庫和斷開連接的功能。
文件中主要是定義了兩個過程conn_init()和endConnection()。第一個是連接數據庫,第二個是實現斷開連接。其中conn_init()過程中的連接是通過下面語句實現的:
connstr= "DBQ=" + server.mappath("data.mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
connstr確定了數據文件的路徑和數據庫驅動程序。
Conn的含義是定義了一個變量用,來存放數據庫連接所創(chuàng)建的對象。
conn.open connstr則真正實現了數據庫的連接。
該文件主要被包含在其他文件中實現數據庫的連接和斷開功能。
2.<default.asp>
該文件的功能是系統登陸的入口,在此可以實現用戶注冊入口,管理員管理入口以及用戶進入考試系統登陸界面的功能。
該文件的功能使這樣實現的:表單提交給文件本身。再由HTML上面的ASP程序對提交信息進行處理。
最上面的<%@ Language=VBScript %>表示腳本語言是VBScript。
<!--#include file="conn.asp"-->表示包含conn.asp文件。以下的程序進行了選擇判斷,如果提交的表單中的submit值為“登錄”,就繼續(xù)判斷看student表中是否存在與該用戶輸入的用戶名和密碼相同的記錄,如果存在就轉到selectsubject.asp頁進行考試科目選擇。不存在就返回“對不起,請輸入正確的用戶名和密碼。”如果submit值為“注冊”,就轉到register.asp頁進行用戶注冊。如果submit的值為“管理”就轉到admin文件夾中的login.asp頁。重點程序如下:
set rs = server.createobject("adodb.recordset")
rs是一個變量,用來存放一個recordset對象。
sql="select * from student where studentname='" & Request.Form("studentname") & "' and studentpassword='" & Request.Form("studentpassword") & "'"
變量sql代表一個SQL語句,功能是從表student中選出用戶名和密碼與考生提交的用戶名和密碼都相同的記錄。
rs.open sql,conn,1,1
該語句的功能是執(zhí)行sql語句并把記錄集結果存儲在變量rs中。
rs.close的作用是關閉紀錄。
session("studentname")=request.form("studentname")
該句的意思是把表單提交的變量studentname的值賦給一個session對象studentname。這個對象用來存儲用戶名,它在該用戶對每個頁面的訪問中有效。
set rs=nothing含義是清空rs變量。
call endConnection()是調用conn.asp中的過程,用來關閉于數據庫的連接。
3.<register.asp>
該文件實現了用戶注冊的功能,用戶只要填寫想要注冊的用戶名及密碼,文件首先查看用戶名是否已經存在,如果存在就提示該用戶名已經存在,否則就將用戶輸入的信息添加到數據庫中的student表內。然后用戶就可以使用自己注冊的用戶名和密碼登錄在線考試系統進行在線考試。
在文件中,表單提交給register.Asp自身進行處理,如果submit值為“注冊”首先進行判斷看用戶名或密碼是否為空。如果為空就顯示“錯誤!用戶名或密碼不能為空!”的信息。如果不為空,進行下一步判斷,看student表中是否已經存在用戶想要注冊的用戶名,如果存在,就顯示信息“錯誤!該用學生存在!”,如果不存在就將要注冊的用戶名和密碼寫入student表。代碼如下:
sql="insert into student(studentname,studentpassword) values('" & cstr(trim(request("studentname"))) & "','" & cstr(trim(request("studentpassword"))) & "')"
conn.execute sql
最后,用一個Vbscrip語言編寫的消息框顯示注冊成功信息。
4.<selectsubject.asp>
該文件是實現用戶登錄在線考試系統后進行考試科目選擇的功能,選擇科目后進入考試界面。
該文件首先是將subject表中所有的紀錄都以單選項的方式選出來,如果沒有紀錄,則顯示“對不起,暫時沒有任何考試科目。”用戶按提交后,表單仍然提交給文件自身。處理程序首先判斷用戶是否選擇了一個考試科目,如果沒有選擇顯示“你沒有選擇考試科目,請選擇考試科目!”如果選擇了某個考試科目,先把該科目賦值給一個session變量selectsubjectname,然后從subject表中選出該科的相關信息,并也都設成session變量。 Singlenumber表示單選試題數量,multinumber表示多選試題數量,singleper表示單選試題分值,multiper表示多選試題分值,testtime表示考試總時間。接著進入考試界面。
5.<test.asp>
該文件就是考試界面,實現真正的動態(tài)隨機選題,并對每個考生的考試時間進行監(jiān)控,到結束時間后自動給出提示。
該文件的總體構架是使用了if else 語句進行了一個選擇,剛進入該頁面submit1得值肯定不等于“開始考試”,所以先顯示出“開始考試”的按鈕。按下以后,首先把當前時間以分種為單位存儲在session的變量starttime中。然后進入隨機抽取試題部分,單選題和多選題的抽取很相似,只不過一個是單選按鈕,一個是多選按鈕罷了。這里只解釋單選題的部分。
strid1=""是定義了一個字符串變量,并先賦值為空。
Randomize是產生隨機種子,在使用rnd()函數之前一定要先用Randomize產生隨機種子才能實現其產生0~1之間隨機數的功能。
for i=1 to session("singlenumber")直到next是選擇singlenumber(代表某科目的單選題數量)個單選題。
下面的代碼實現了從數據庫中隨機不重復的選題:
set rs=server.createobject("adodb.recordset")
sql="select * from question where subjectname='"&session("selectsubjectname") & "'and type='單選題' and haveselect=0 "
rs.open sql,conn,3,2
count=rs.recordcount
temp=fix(count*rnd(10))
rs.move temp
rs("haveselect")=1
rs.update
strid1=strid1 & rs("ID") & ","
其中haveselect標志某題是否已經被選過。
Count變量用來存放所有未被選過的單選題的總數。
temp變量用來存放0~Count之間的隨機整數值。
rs.move temp是將當前記錄移到第temp條紀錄。
rs("haveselect")=1是將當前選出的紀錄的標志位設為1,然后用rs.update把數據庫中的相應標志位改為1。
strid1=strid1 & rs("ID") & ","是將所有選出的試題的id號用逗號分割后存儲在strid1一個變量中,以方便的把所有選出的試題的id號傳到result.Asp文件中,這也是本設計的一個獨特的地方。需要說明的是strid1變量的最后是一個逗號,在下一個文件中會詳細說明如何進行處理。
set rs=server.createobject("adodb.recordset")
sql="select * from question where haveselect=1 "
rs.open sql,conn,3,2
rs.movefirst
do while not rs.eof
rs("haveselect")=0
rs.update
rs.movenext
loop
上面一段程序是在選完題之后將所有已經設成1的haveselect改寫成0,這樣自己下次或別人就仍可以選擇所有的試題。
最后一段程序是用來計時的,考試時間到了之后自動給出提示。
6.<result.asp>
考生提交答卷以后,該文件就把考生的答案同question表中的正確答案進行比較,最后得出考生的得分。
首先是變量賦值,取得session對象的一些變量值,以方便使用。endtime=now()是去的考試結束時間。
selectstr1=request.form("hidQuestID1")和
selectstr2=request.form("hidQuestID2")是獲取存放被選單選和多選試題的id號的兩個字符串。
len1=len(selectstr1)和
len2=len(selectstr2)是取得兩個字符串的長度。
str1=left(selectstr1,len1-1)
str2=left(selectstr2,len2-1)是把兩個字符串的結尾(也就是逗號)取掉。
dim id1,id2
id1=split(str1,",")
id2=split(str2,",")是用split()函數將存有id號的字符串拆開并存放到數組當中,以便調用。
以上就實現了所有被選中的試題的id號的傳遞。
下面這段程序就實現了單選試題的答案于正確答案的比較,并得出單選題應得分數。
for i=1 to singlenumber
result=request.form("no"&id1(i-1))
if not isempty(result) then
sql="select * from question where id="& clng(id1(i-1))
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,3,2
if result=rs("answer") then
score=score+cint(singleper)
end if
rs.close
set rs=nothing
else
end if
next
多選題與單選題程序基本相同,這里就不贅述了。
接著就是將考試結果紀錄存入score表中,并對考生顯示出考試成績。
上面是在線考試系統考試部分的程序及其解釋,該部分是系統最主要的部分,所以解釋得比較詳細。管理部分很多文件功能都很相似,這里就只挑功能最全又比較重要的文件作以解釋。(這些文件都放在admin文件夾下)
7.<primary.asp>
該文件實現的功能是管理員選擇進行管理的項目,也就是管理主界面。
8.<mgstudent.asp>
該文件實現對用戶進行管理(刪除或添加)的功能。
<mgadmin.asp>
該文件實現對管理員進行管理(刪除或添加)的功能。
10.<mgsubject.asp>
該文件的功能是實現對考試科目及相關參數(如考試時間、單選及多選題量)進行管理。
11.<mgscore.asp>
該文件的功能是對考試記錄進行查詢或刪除。
12.<mgquestion.asp>
<mgquestion.asp>和<addquestion.asp>兩個文件和起來實現對試題庫進行刪除修改和添加的功能。
subjectname=trim(request("subjectname"))是將上一個界面?zhèn)鱽淼目颇棵Q賦值給subjectname變量。
set rs=server.createobject("adodb.recordset")
rs.open "select * from question where subjectname='" & cstr(trim(request("subjectname")))&"' order by id desc ",conn,1,1
上面這段代碼是從question表中將所有其科目名與所選科目相同的問題都選出來。
<a href='mgquestion.asp?type=<%=trim(rs("type"))%>
&subjectname=& lt;%=trim(rs("subjectname"))%>&action=edit&id=& lt;%=trim(rs("id"))%>&page=<%=request("page")%>'>編輯< /a> <a href='javascript:SureDel(<%=rs("id")%>)'>刪除</a>
上面這段代碼的的作用是將刪除的參數傳給文件自身或將編輯的參數傳給SureDel(id,subjectname)函數。
如果實執(zhí)行刪除操作就轉到SureDel(id,subjectname),提示是否真的要刪除,如果選擇確定就執(zhí)行如下代碼:
sql="delete from question where id=" &request("id")
conn.execute sql
執(zhí)行刪除該問題的操作,將question表中的相應記錄刪除。否則,如果選擇取消就不執(zhí)行刪除操作。
如果執(zhí)行編輯同樣將參數傳給文件自身,先執(zhí)行下面代碼將isedit的值設為真:
if request("action")="edit" then
isedit=true
end if
文件最下面是編輯試題或添加試題部分,表單提交給addquestion進行處理。
13.<addquestion.asp>
首先將表單傳過來的各個參數值賦給不同的變量,以便于使用。然后判斷question,subjectname,answer和leixing四個變量是否為空,如果為空顯示錯誤信息。不為空就進行判斷,看是修改問題還是添加問題,分別進行相應處理(修改question表中的記錄或向其中添加記錄),然后返回到mgquestion.asp頁面。
4.3調試過程中遇到的主要問題和解決辦法
在系統調試的過程中主要遇到三個比較困難的問題:
第一個就是如何實現在隨機選題的同時保證不重復,本設計最后使用了在question表中設置了一個haveselect字段來標志選過的紀錄的辦法來解決。
第二個就是如何將test.asp中所有試題的id號傳到result.asp頁中。因為試題數是變值,用一般的使用變量方式實行不通的。本設計采用了將 id號以逗號分隔存在字符串變量中,然后到result.asp頁面用split()函數拆開存放到數組中的辦法進行解決。
第三個就是問題在編輯之后就無法再選出來了,最后發(fā)現是因為編輯之后科目名的前面會有空格,所以會無法選出。解決的辦法是使用trim()函數將空格去掉。
4.4 系統測試及實現后主要界面
本系統經先進行各模塊測試,經過修改和調整通過以后,進行總體測試。測試結果各項功能均已經或基本達到設計要求。
下面就將各主要文件實現的界面一一列出:
1.<default.asp>
圖4-2 用戶登錄界面圖
2.<selectsubject.asp>
圖4-3 考試科目選擇界面圖
3.<test.asp>
圖4-4 考試界面圖
4.<result.asp>
圖4-5 考試結果界面圖
5.<login.asp>
圖4-6 管理員登錄界面圖
6. <primary.asp>
圖4-7 管理界面圖
7.<mgsubject.asp>
圖4-8 管理科目界面圖
8.<mgscore.asp>
圖4-9 管理記錄界面圖
9.<mgquestion.asp>
圖4-10 管理試題界面圖