目 錄
摘 要 3
Summary 4
前言 5
第一章 系統(tǒng)設(shè)計(jì)相關(guān)原理 7
1.1 ASP技術(shù)介紹 7
1.2 SQL語句介紹 11
1.3 VBScript介紹 15
第二章 需求分析 18
2.1 系統(tǒng)需要解決的主要問題 18
2.2 系統(tǒng)應(yīng)該具備的基本功能 19
第三章 系統(tǒng)總體設(shè)計(jì) 20
3.1基本簡(jiǎn)介 20
3.2 運(yùn)行環(huán)境與系統(tǒng)結(jié)構(gòu) 21
3.3 系統(tǒng)結(jié)構(gòu)圖 21
3.4 詳細(xì)設(shè)計(jì) 22
3.4.1試題設(shè)計(jì) 22
3.4.2數(shù)據(jù)庫中表的設(shè)計(jì) 22
3.4.3 用戶、管理員權(quán)限 25
3.4.4 功能模塊詳細(xì)設(shè)計(jì) 25
第四章 系統(tǒng)實(shí)現(xiàn) 28
4.1 系統(tǒng)流程圖設(shè)計(jì) 28
4.2 各文件功能介紹及詳解 30
4.2.1.<conn.asp頁介紹> 30
4.2.2.<default.asp頁介紹> 30
4.2.3.<register.asp頁介紹> 31
4.2.4.<selectsubject.asp頁介紹> 32
4.2.5.<test.asp頁介紹> 33
4.2.6.<result.asp頁介紹> 34
4.2.7.<primary.asp頁介紹> 36
4.2.8.<mgstudent.asp頁介紹> 36
4.2.9.<mgadmin.asp頁介紹> 36
4.2.10.<mgsubject.asp頁介紹> 36
4.2.11.<mgscore.asp頁介紹> 36
4.2.12.<mgquestion.asp頁介紹> 36
4.3調(diào)試過程中遇到的主要問題和解決辦法 37
4.4 系統(tǒng)測(cè)試及實(shí)現(xiàn)后主要界面 47
結(jié)論 48
結(jié)束語 49
參考文獻(xiàn) 50
前 言
隨著技術(shù)的飛速發(fā)展,現(xiàn)在很多國(guó)外的大學(xué)和社會(huì)其他部門都已經(jīng)開設(shè)了教學(xué),通過計(jì)算機(jī)實(shí)現(xiàn)異地教育和培訓(xùn)?,F(xiàn)在,計(jì)算機(jī)硬件技術(shù)的發(fā)展已經(jīng)達(dá)到了相當(dāng)高的水平。但是,教學(xué)軟件的開發(fā)目前還處于起步階段,隨著這項(xiàng)技術(shù)的不斷深入發(fā)展,就要求有更好、更完善的軟件系統(tǒng)應(yīng)用到教學(xué)當(dāng)中去,這就給軟件設(shè)計(jì)人員提出了更高的設(shè)計(jì)要求。
教學(xué)包括很多環(huán)節(jié),例如教學(xué)系統(tǒng)、答疑系統(tǒng)和考試系統(tǒng)等等。其中很重要的一個(gè)環(huán)節(jié)就是在線考試系統(tǒng),同時(shí)它也是最難實(shí)現(xiàn)的環(huán)節(jié)。在我國(guó),雖然教學(xué)已經(jīng)蓬勃地發(fā)展起來,但是目前學(xué)校與社會(huì)上的各種考試大都采用傳統(tǒng)的考試方式,在此方式下,組織一次考試至少要經(jīng)過五個(gè)步驟,即人工出題、考生考試、人工閱卷、成績(jī)?cè)u(píng)估和試卷分析。顯然,隨著考試類型的不斷增加及考試要求的不斷提高,教師的工作量將會(huì)越來越大,并且其工作將是一件十分煩瑣和非常容易出錯(cuò)的事情,可以說傳統(tǒng)的考試方式已經(jīng)不能適應(yīng)現(xiàn)代考試的需要。隨著計(jì)算機(jī)應(yīng)用的迅猛發(fā)展,應(yīng)用不斷擴(kuò)大,如教學(xué)和虛擬大學(xué)的出現(xiàn)等等,且這些應(yīng)用正逐步深入到千家萬戶。人們迫切要求利用這些技術(shù)來進(jìn)行在線考試,以減輕教師的工作負(fù)擔(dān)及提高工作效率,與此同時(shí)也提高了考試的質(zhì)量,從而使考試更趨于公證、客觀,更加激發(fā)學(xué)生的學(xué)習(xí)興趣。例如目前許多國(guó)際著名的計(jì)算機(jī)公司所舉辦的各種認(rèn)證考試絕大部分采用這種方式。
在線考試是現(xiàn)階段研究開發(fā)的一個(gè)熱點(diǎn)。它是建立在國(guó)際互聯(lián)網(wǎng)上的應(yīng)用系統(tǒng),客戶端的配置可以極為簡(jiǎn)單,使考試不受地域的局限。一個(gè)完備的在線考試系統(tǒng)可以使用戶在網(wǎng)上學(xué)習(xí)過后及時(shí)檢驗(yàn)自己的學(xué)習(xí)效果,已發(fā)現(xiàn)自己的不足,使得學(xué)習(xí)效率得到很大提高。在線考試系統(tǒng)中題目的生成、試卷的提交、成績(jī)的批閱等都可以在上自動(dòng)完成。只要形成一套成熟的題庫就可以實(shí)現(xiàn)考試的自動(dòng)化。這樣一來,教師所要做的只是精心設(shè)計(jì)題目、維護(hù)題庫,而不是組織考試,從而大大減輕了教師的負(fù)擔(dān),這表明其經(jīng)濟(jì)性是相當(dāng)可觀的。為了適應(yīng)新形勢(shì)的發(fā)展,我進(jìn)行了這一系統(tǒng)的初步設(shè)計(jì)工作,也可以說是做一個(gè)初步的探索,希望它能夠在各類考試中發(fā)揮高效、便捷的作用,把老師從繁重的工作中解脫出來!
目前,應(yīng)用軟件運(yùn)行的模式主要有二類:Client/server模式,Browser/Web模式。前者主要的缺點(diǎn)是維護(hù)、升級(jí)較麻煩,后者是近幾年伴隨Internet迅速發(fā)展起來的一種技術(shù),它與客戶/服務(wù)器方式類似,客戶端是一個(gè)標(biāo)準(zhǔn)的瀏覽器,服務(wù)器端是Web Server ,而Web Server與數(shù)據(jù)庫和應(yīng)用服務(wù)器的緊密結(jié)合,使得這種模式的應(yīng)用范圍不斷擴(kuò)大,它已不僅僅用于網(wǎng)上查詢,有很多部門的業(yè)務(wù)系統(tǒng)、企業(yè)的MIS系統(tǒng)紛紛采用這種模式,它的主要優(yōu)點(diǎn)是便于擴(kuò)充應(yīng)用、升級(jí)維護(hù)簡(jiǎn)便。
另外,考試系統(tǒng)的軟件也必將不斷的更新;同時(shí)軟件產(chǎn)品本身就要經(jīng)過一個(gè)不斷自我完善的過程。
基于上述考慮,用Browser/Web模式來設(shè)計(jì)考試系統(tǒng)比較合適,服務(wù)器端我們采用Access數(shù)據(jù)庫系統(tǒng)和ASP組件來構(gòu)成考試的應(yīng)用服務(wù)系統(tǒng);客戶端采用瀏覽器來完成考試全過程,同時(shí)可進(jìn)行遠(yuǎn)程系統(tǒng)維護(hù)和管理。
利用和數(shù)據(jù)庫技術(shù),結(jié)合目前硬件價(jià)格普遍下跌與寬帶網(wǎng)大力建設(shè)的有利優(yōu)勢(shì),應(yīng)用Active Server Page技術(shù),我開發(fā)了基于B/S模式多用戶在線考試系統(tǒng)這一程序。它運(yùn)用方便、操作簡(jiǎn)單,效率很高(同時(shí),它要求計(jì)算機(jī)配置也很高,尤其是服務(wù)器端)。現(xiàn)階段雖只實(shí)現(xiàn)了試卷的客觀題部分,但已具有用戶注冊(cè)、多用戶同時(shí)在線考試、動(dòng)態(tài)隨機(jī)出題、時(shí)間控制、自動(dòng)判卷,試題錄入、修改題庫、用戶管理、科目管理、管理員管理、分?jǐn)?shù)管理等重要功能,也就是說實(shí)現(xiàn)了真正的無紙化考試,滿足任何授權(quán)的考生隨時(shí)隨地考試并迅速獲得成績(jī),同時(shí)也大大減輕了教師出題、出題和判卷等繁重的工作量。
第一章 系統(tǒng)設(shè)計(jì)相關(guān)原理
該在線考試系統(tǒng)主要采用ASP、HTML、Access數(shù)據(jù)庫、VBScript、SQL等技術(shù)和工具,整體設(shè)計(jì)遵循軟件工程的方法,經(jīng)過需求分析、總體設(shè)計(jì)、文檔和代碼的編制、模塊測(cè)試和系統(tǒng)實(shí)現(xiàn)幾個(gè)階段。下面就對(duì)這幾種技術(shù)和方法做一個(gè)概述。
1.1 ASP技術(shù)介紹
Microsoft Active Server Pages 即我們所稱的ASP,其實(shí)是一套微軟開發(fā)的服務(wù)器端腳本環(huán)境。Active Server Page 是創(chuàng)建動(dòng)態(tài)網(wǎng)頁的一個(gè)很好的工具,它起一種編程語言的作用,可以利用它編寫動(dòng)態(tài)產(chǎn)生HTML的程序代碼。因此,只要用戶瀏覽Web站點(diǎn)并請(qǐng)求一個(gè)ASP頁,Web服務(wù)器就可以處理相應(yīng)的ASP代碼,生成HTML代碼,然后將它傳遞到用戶瀏覽器并顯示出網(wǎng)頁。ASP內(nèi)含于IIS3.0和4.0之中,通過ASP我們可以結(jié)合HTML網(wǎng)頁、ASP指令和ActiveX元件建立動(dòng)態(tài)、交互且高效的WEB服務(wù)器應(yīng)用程序。有了ASP就不必?fù)?dān)心客戶的瀏覽器是否能運(yùn)行所編寫的代碼,因?yàn)樗械某绦蚨紝⒃诜?wù)器端執(zhí)行,包括所有嵌在普通HTML中的腳本程序。當(dāng)程序執(zhí)行完畢后,服務(wù)器僅將執(zhí)行的結(jié)果返回給客戶瀏覽器,這樣也就減輕了客戶端瀏覽器的負(fù)擔(dān),大大提高了交互的速度。以下羅列了ASP所獨(dú)具的一些特點(diǎn):
1.使用VBScript 、JScript等簡(jiǎn)單易懂的腳本語言,結(jié)合HTML代碼,即可快速地完成網(wǎng)站的應(yīng)用程序。
2.無須編譯,容易編寫,可在服務(wù)器端直接執(zhí)行。
3.使用普通的文本編輯器,如Windows的記事本,即可進(jìn)行編輯設(shè)計(jì)。
4.與瀏覽器無關(guān),用戶端只要使用可執(zhí)行HTML碼的瀏覽器,即可瀏覽ASP所設(shè)計(jì)的網(wǎng)頁內(nèi)容。ASP所使用的腳本語言(VBScript 、Jscript)均在WEB服務(wù)器端執(zhí)行,用戶端的瀏覽器不需要能夠執(zhí)行這些腳本語言。
5.ASP能與任何ActiveX scripting語言相容。除了可使用VBScript或JScript語言來設(shè)計(jì)外,還通過plug-in的方式,使用由第三方所提供的其他腳本語言,譬如REXX、Perl、Tcl等。腳本引擎是處理腳本程序的COM(Component Object Model)物件。
6.ASP的源程序,不會(huì)被傳到客戶瀏覽器,因而可以避免所寫的源程序被他人剽竊,也提高了程序的安全性。
7.可使用服務(wù)器端的腳本來產(chǎn)生客戶端的腳本。
8.物件導(dǎo)向(Object-oriented)。
9.ActiveX Server Components(ActiveX服務(wù)器元件)具有無限可擴(kuò)充性??梢允褂肰isual Basic 、Java 、Visual C++ 、COBOL等編程語言來編寫你所需要的ActiveX Server Component。
10.另外,ASP技術(shù)的處理速度相當(dāng)快,并且其安全性也很高。ASP最重要的優(yōu)點(diǎn)是能夠建立對(duì)諸如時(shí)間、地點(diǎn)、用戶標(biāo)志、以前的選擇和活動(dòng)等因素敏感的頁面。換句話說,可針對(duì)每個(gè)用戶的個(gè)別需求,用ASP定制網(wǎng)頁,能夠滿足用戶的各種需求。
總之,ASP包含三方面含義:
1.Active:ASP使用了微軟的ActiveX技術(shù)。ActiveX(COM)技術(shù)是現(xiàn)在Microsoft軟件的重要基礎(chǔ)。它采用封裝對(duì)象,程序調(diào)用對(duì)象的技術(shù),簡(jiǎn)化編程,加強(qiáng)程序間合作。ASP本身封裝了一些基本組件和常用組件,有很多公司也開發(fā)了很多實(shí)用組件。只要你可以在服務(wù)器上安裝這些組件,通過訪問組件,你就可以快速、簡(jiǎn)易地建立自己的WEB應(yīng)用。
2.Server:ASP運(yùn)行在服務(wù)器端。這樣就不必?fù)?dān)心瀏覽器是否支持ASP所使用的編程語言。ASP的編程語言可以是VBSCRIPT和JSCRIPT。VBSCRIPT是VB的一個(gè)簡(jiǎn)集,會(huì)VB的人可以很方便的快速上手。然而Netscape瀏覽器不支持客戶端的VBSCRIPT,所以最好不要在客戶端使用VBSCRIPT。而在服務(wù)器端,則無需考慮瀏覽器的支持問題。Netscape瀏覽器也可以正常顯示ASP頁面。
3.Pages:ASP返回標(biāo)準(zhǔn)的HTML頁面,可以正常地在常用的瀏覽器中顯示。瀏覽者查看頁面源文件時(shí),看到的是ASP生成的HTML代碼,而不是ASP程序代碼。這樣就可以防止別人抄襲程序。
由此可以看出,ASP是在IIS下開發(fā)WEB應(yīng)用的一種簡(jiǎn)單、方便的編程工具。在了解了VBSCRIPT的基本語法后,只需要清楚各個(gè)組件的用途、屬性、方法,就可以輕松編寫出自己的ASP系統(tǒng)。
運(yùn)行 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等腳本語言來設(shè)計(jì)的,當(dāng)執(zhí)行ASP程序時(shí),腳本程序?qū)⒁徽酌畎l(fā)送給腳本解釋器(即腳本引擎),由腳本解釋器進(jìn)行翻譯并將其轉(zhuǎn)換成服務(wù)器所能執(zhí)行的命令。當(dāng)然,同其他編程語言一樣,ASP程序的編寫也遵循一定的規(guī)則,如果你想使用你所喜愛的腳本語言編寫ASP程序,那么你的服務(wù)器上必須要有能解釋這種腳本語言的腳本解釋器。當(dāng)你安裝ASP時(shí),系統(tǒng)提供了兩種腳本語言:VBSrcipt和JScript,而VBScript則被作為系統(tǒng)默認(rèn)的腳本語言。
ASP程序其實(shí)是以擴(kuò)展名為.asp的純文本形式存在于WEB服務(wù)器上的,可以用任何文本編輯器打開它,ASP程序中可以包含純文本、HTML標(biāo)記以及腳本命令。只需將.asp程序放在Web服務(wù)器的虛擬目錄下(該目錄必須要有可執(zhí)行權(quán)限),就可以通過WWW的方式訪問ASP程序了。要學(xué)好ASP程序的設(shè)計(jì),必須掌握腳本的編寫,那么究竟什么是腳本呢?其實(shí)腳本是由一系列的腳本命令所組成的,如同一般的程序,腳本可以將一個(gè)值賦給一個(gè)變量,可以命令Web服務(wù)器發(fā)送一個(gè)值到客戶瀏覽器,還可以將一系列命令定義成一個(gè)過程。要編寫腳本,你必須要熟悉至少一門腳本語言,如VBScript。腳本語言是一種介于HTML和諸如JAVA、Visual Basic、C++等編程語言之間的一種特殊的語言,盡管它更接近后者,但它卻不具有編程語言復(fù)雜、嚴(yán)謹(jǐn)?shù)恼Z法和規(guī)則。如前所述ASP所提供的腳本運(yùn)行環(huán)境可支持多種腳本語言,譬如:JScript、REXX、PERL等等,這無疑給ASP程序設(shè)計(jì)者提供了廣泛的發(fā)揮余地。ASP的出現(xiàn)使得廣大Web設(shè)計(jì)者不必在為客戶瀏覽器是否支持而擔(dān)心,實(shí)際上就算在同一個(gè).asp文件中使用不同的腳本語言,都無須為此擔(dān)憂,因?yàn)樗械囊磺卸紝⒃诜?wù)器端進(jìn)行,客戶瀏覽器得到的只是一個(gè)程序執(zhí)行的結(jié)果,而你也只需在文件中聲明使用不同的腳本語言即可。
ASP的對(duì)象和組件:
1.ASP有7個(gè)固有對(duì)象
這7個(gè)固有對(duì)象分別是Request、Response、Server、Application、Session、ASPError和ObjectContext。
Request對(duì)象用來處理用戶做出的請(qǐng)求,就是處理用戶要求瀏覽器查看特定的網(wǎng)頁或Web應(yīng)用時(shí)做出的請(qǐng)求。此請(qǐng)求可以HTML的形式輸入或僅以URL的形式作出。Response對(duì)象用來處理從Web服務(wù)器向用戶發(fā)送信息并對(duì)此信息進(jìn)行控制。
Serve對(duì)象用來代表服務(wù)器自身。因此它提供幾個(gè)與Web服務(wù)器可能要完成的任務(wù)相關(guān)的常用功能,諸如建立新對(duì)象和設(shè)置腳本的超時(shí)特性等。還有通過將不合法字符轉(zhuǎn)化為合法字符,把字符串轉(zhuǎn)換為URL和HTML正確的使用格式的方法。
Application對(duì)象用來代表應(yīng)用,可用它來管理諸如應(yīng)用目錄這一類的東西。
Session對(duì)象用來代表用戶會(huì)話,并存儲(chǔ)該會(huì)話的信息。可利用Session對(duì)象來管理如Web服務(wù)器在用戶“請(qǐng)求”之間等待的時(shí)間等。
ObjectContext對(duì)象用來管理事務(wù)處理。它目前已經(jīng)集成到Windows2000操作系統(tǒng)中了。它包含了所有ASP其他對(duì)象,可通過ObjectContext引用ASP的每個(gè)對(duì)象。
ASPError對(duì)象包含ASP腳本或asp.dll本身產(chǎn)生的任何錯(cuò)誤的詳細(xì)內(nèi)容。
2.Microsoft Data Access Component
MDAC作為操作系統(tǒng)的組成部分的組件,與ASP一起提供。此組件中包含一組稱為ActiveX Data Object(ADO)的對(duì)象,他們對(duì)于查看不同平臺(tái)上的各種數(shù)據(jù)(數(shù)據(jù)庫、表單、文本文件)是必不可少的。ADO主要有3個(gè)對(duì)象,分別是Connection、Command和Recordset。
Connection對(duì)象就是使ADO與數(shù)據(jù)庫之間建立一個(gè)通道,也就是實(shí)現(xiàn)與數(shù)據(jù)庫的連接。
Command對(duì)象就是對(duì)數(shù)據(jù)庫進(jìn)行發(fā)號(hào)施令,比如建立新的索引,執(zhí)行查詢等,它可以通過標(biāo)準(zhǔn)的SQL數(shù)據(jù)庫操作語言得以實(shí)現(xiàn)。
Recordset對(duì)象是一個(gè)數(shù)據(jù)記錄集,它包含了我們檢索出來的記錄數(shù)據(jù),通過它可以直接對(duì)數(shù)據(jù)庫進(jìn)行修改。
3.活動(dòng)服務(wù)器組件
活動(dòng)服務(wù)器組件是與ASP一起免費(fèi)帶來的組件或DLL,他們有著廣泛的用途。主要包括AD Rotator、Browser Capabilities、Content Link、Content Rotator、Counters、logging Utility、MyInfo、Page Counter、permission Checker、tools等組件。由于本次設(shè)計(jì)用到的不多,在此就不詳細(xì)介紹了。
4.ASP腳本對(duì)象
他們分別是Dictionary、FileSystemObject和TextStream.由于本設(shè)計(jì)用到的也不多,在此就不詳細(xì)介紹了。
1.2 SQL語句介紹
SQL全稱是“結(jié)構(gòu)化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結(jié)構(gòu)簡(jiǎn)潔,功能強(qiáng)大,簡(jiǎn)單易學(xué),所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應(yīng)用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的數(shù)據(jù)庫管理系統(tǒng),還是像Visual Foxporo,PowerBuilder這些微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。
Structured Query Language包含4個(gè)部分:
☆數(shù)據(jù)查詢語言DQL-Data Query Language SELECT
☆據(jù)操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE
☆數(shù)據(jù)定義語言DQL-Data Definition Language CREATE, ALTER, DROP
☆數(shù)據(jù)控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK
1.2.1 SQL的優(yōu)點(diǎn)
SQL廣泛地被采用正說明了它的優(yōu)點(diǎn)。它使全部用戶,包括應(yīng)用程序員、DBA管理員和終端用戶受益非淺。
1.非過程化語言
SQL是一個(gè)非過程化的語言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。 SQL不要求用戶指定對(duì)數(shù)據(jù)的存放方法。 這種特性使用戶更易集中精力于要得到的結(jié)果。所有SQL語句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對(duì)指定數(shù)據(jù)存取的最快速度的手段。查詢優(yōu)化器知道存在什么索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。
2.統(tǒng)一的語言
SQL可用于所有用戶的DB活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、 應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類型的終端用戶?;镜腟QL 命令只需很少時(shí)間就能學(xué)會(huì),最高級(jí)的命令在幾天內(nèi)便可掌握。 SQL為許多任務(wù)提供了命令,包括:
☆查詢數(shù)據(jù)
☆在表中插入、修改和刪除記錄
☆建立、修改和刪除數(shù)據(jù)對(duì)象
☆控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取
☆保證數(shù)據(jù)庫一致性和完整性
以前的數(shù)據(jù)庫管理系統(tǒng)為上述各類操作提供單獨(dú)的語言,而SQL將全部任務(wù)統(tǒng)一在一種語言中。
3.是所有關(guān)系數(shù)據(jù)庫的公共語言
由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個(gè)RDBMS轉(zhuǎn)到另一個(gè)。所有用SQL編寫的程序都是可以移植的。SQL是PostgreSQL(和大多數(shù)其它關(guān)系型數(shù)據(jù)庫)用做查詢語言的語言。它是可以移植的,并且容易學(xué)習(xí)使用。但是所有SQL語句都必須由數(shù)據(jù)庫服務(wù)器獨(dú)立地執(zhí)行。這就意味著客戶端應(yīng)用必須把每條查詢發(fā)送到數(shù)據(jù)庫服務(wù)器,等待它處理這個(gè)查詢,接收結(jié)果,做一些運(yùn)算,然后給服務(wù)器發(fā)送另外一條查詢。所有這些東西都會(huì)產(chǎn)生進(jìn)程間通訊,并且如果客戶端在另外一臺(tái)機(jī)器上甚至還會(huì)導(dǎo)致開銷。如果使用了 PL/pgSQL,那么可以把一塊運(yùn)算和一系列查詢?cè)跀?shù)據(jù)庫服務(wù)器里面組成一個(gè)塊,這樣就擁有了過程語言的力量并且簡(jiǎn)化SQL的使用,因而節(jié)約了大量的時(shí)間,因?yàn)橛貌恢冻隹蛻舳?服務(wù)器通訊的過熱。通過使用PL/pgSQL,應(yīng)用可以獲得可觀的性能提升。
1.2.2 SQL的使用
1.ASP與Access數(shù)據(jù)庫連接:
<%@language=VBscript%>
<%
dimconn,mdbfile
mdbfile=server.mappath(“數(shù)據(jù)庫名稱.mdb”)
setconn=server.createobject(“adodb.connection”)
conn.open"driver={microsoftaccessdriver
(.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
2.ASP與SQL數(shù)據(jù)庫連接:
<%@language=VBscript%>
<%
dimconn
set conn=server.createobject(“ADODB.connection”)
conn.open"PROVIDER=SQLOLEDB;DATA
SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對(duì)象:
setrs=server.createobject(“adodb.recordset”)
rs.openSQL語句,conn,3,2
3.SQL常用命令使用方法:
(1)數(shù)據(jù)記錄篩選:
sql="selectfrom數(shù)據(jù)表where字段名=字段值orderby字段名[desc]"
sql=“selectfrom數(shù)據(jù)表where字段名like’%字段值%'orderby字段名[desc]"
sql="selecttop10from數(shù)據(jù)表where字段名orderby字段名[desc]”
sql=“selectfrom數(shù)據(jù)表where字段名in(‘值1’,‘值2’,‘值 3’)"
sql="selectfrom數(shù)據(jù)表where字段名between值1and值2”
(2)更新數(shù)據(jù)記錄:
sql=“update數(shù)據(jù)表set字段名=字段值where條件表達(dá)式”?
sql=“update數(shù)據(jù)表set字段1=值1,字段2=值2……字段n=值nwhere條件表達(dá)式
(3)刪除數(shù)據(jù)記錄:
sql=“deletefrom數(shù)據(jù)表where條件表達(dá)式”
sql=“deletefrom數(shù)據(jù)表”(將數(shù)據(jù)表所有記錄刪除)
(4)添加數(shù)據(jù)記錄:
sql=“insertinto數(shù)據(jù)表(字段1,字段2,字段3…)values(值1,值2,值3…)”
sql=“insertinto目標(biāo)數(shù)據(jù)表select*from源數(shù)據(jù)表”(把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)
(5)數(shù)據(jù)記錄統(tǒng)計(jì)函數(shù):
AVG(字段名)得出一個(gè)表格欄平均值
COUNT(*|字段名)對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名)取得一個(gè)表格欄最大的值
MIN(字段名)取得一個(gè)表格欄最小的值
SUM(字段名)把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql=“selectsum(字段名)as別名from數(shù)據(jù)表where條件表達(dá)式”
setrs=conn.excute(sql)
用rs(“別名”)獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。
(5)數(shù)據(jù)表的建立和刪除:
CREATETABLE數(shù)據(jù)表名稱(字段1類型1(長(zhǎng)度),字段2類型2(長(zhǎng)度)……)
DROPTABLE數(shù)據(jù)表名稱(永久性刪除一個(gè)數(shù)據(jù)表)
4.記錄集對(duì)象的方法:
rs.movenext將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst將記錄指針移到數(shù)據(jù)表第一行
rs.movelast將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N將記錄指針移到第N頁的第一行
rs.pagesize=N設(shè)置每頁為N條記錄
rs.pagecount根據(jù)pagesize的設(shè)置返回總頁數(shù)
rs.recordcount返回記錄總數(shù)
rs.bof返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete刪除當(dāng)前記錄,但記錄指針不會(huì)向下移動(dòng)
1.3 VBScript介紹
Microsoft Visual Basic Scripting Edition是程序開發(fā)語言Visual Basic家族的最新成員,它將靈活的Script應(yīng)用于更廣泛的領(lǐng)域,包括Microsoft Internet Explorer中的 Web 客戶機(jī) Script 和 Microsoft Internet Information Server 中的 Web 服務(wù)器 Script。
VBScript使用ActiveX? Script與宿主應(yīng)用程序?qū)υ挕J褂肁ctiveX Script,瀏覽器和其他宿主應(yīng)用程序不再需要每個(gè)Script部件的特殊集成代碼。ActiveX Script使宿主可以編譯Script、獲取和調(diào)用入口點(diǎn)及管理開發(fā)者可用的命名空間。通過ActiveX Script,語言廠商可以建立標(biāo)準(zhǔn)Script運(yùn)行時(shí)語言。Microsoft將提供VBScript的運(yùn)行時(shí)支持。Microsoft正在與多個(gè)Internet組一起定義ActiveX Script標(biāo)準(zhǔn)以使Script引擎可以互換。ActiveX Script可用在Microsoft? Internet Explorer和Microsoft? Internet Information Server中。
VBScript只有一種數(shù)據(jù)類型,稱為Variant。Variant 是一種特殊的數(shù)據(jù)類型,根據(jù)使用的方式,它可以包含不同類別的信息。因?yàn)閂ariant是VBScript中唯一的數(shù)據(jù)類型,所以它也VBScript 中所有函數(shù)的返回值的數(shù)據(jù)類型。最簡(jiǎn)單的Variant可以包含數(shù)字或字符串信息。Variant用于數(shù)字上下文中時(shí)作為數(shù)字處理,用于字符串上下文中時(shí)作為字符串處理。這就是說,如果使用看起來象是數(shù)字的數(shù)據(jù),則VBScript會(huì)假定其為數(shù)字并以適用于數(shù)字的方式處理。與此類似,如果使用的數(shù)據(jù)只可能是字符串,則VBScript將按字符串處理。當(dāng)然,也可以將數(shù)字包含在引號(hào)(”")中使其成為字符串。除簡(jiǎn)單數(shù)字或字符串以外,Variant可以進(jìn)一步區(qū)分?jǐn)?shù)值信息的特定含義。例如使用數(shù)值信息表示日期或時(shí)間。此類數(shù)據(jù)在與其他日期或時(shí)間數(shù)據(jù)一起使用時(shí),結(jié)果也總是表示為日期或時(shí)間。當(dāng)然,從Boolean值到浮點(diǎn)數(shù),數(shù)值信息是多種多樣的。Variant包含的數(shù)值信息類型稱為子類型。大多數(shù)情況下,可將所需的數(shù)據(jù)放進(jìn)Variant中,而Variant也會(huì)按照最適用于其包含的數(shù)據(jù)的方式進(jìn)行操作。聲明變量的一種方式是使用Dim語句、Public語句和Private語句在Script中顯式聲明變量。
另一種方式是通過直接在Script中使用變量名這一簡(jiǎn)單方式隱式聲明變量。這通常不是一個(gè)好習(xí)慣,因?yàn)檫@樣有時(shí)會(huì)由于變量名被拼錯(cuò)而導(dǎo)致在運(yùn)行Script時(shí)出現(xiàn)意外的結(jié)果。因此,最好使用Option Explicit語句顯式聲明所有變量。
1.過程
在VBScript中,過程被分為兩類:Sub過程和Function過程。
(1)Sub過程
Sub過程是包含在Sub和End Sub語句之間的一組VBScript語句,執(zhí)行操作但不返回值。Sub過程可以使用參數(shù)(由調(diào)用過程傳遞的常數(shù)、變量或表達(dá)式)。
(2)Function過程
Function過程是包含在Function和End Function語句之間的一組VBScript語句。Function過程與Sub過程類似,但是Function過程可以返回值。Function過程可以使用參數(shù)(由調(diào)用過程傳遞的常數(shù)、變量或表達(dá)式)。如果Function過程無任何參數(shù),則Function語句必須包含空括號(hào)()。Function過程通過函數(shù)名返回一個(gè)值,這個(gè)值是在過程的語句中賦給函數(shù)名的。Function 返回值的數(shù)據(jù)類型總是Variant。
2.VBScript中可使用下列循環(huán)語句:
☆Do…Loop:當(dāng)(或直到)條件為True時(shí)循環(huán)。
☆While…Wend:當(dāng)條件為True時(shí)循環(huán)。
☆For…Next:指定循環(huán)次數(shù),使用計(jì)數(shù)器重復(fù)運(yùn)行語句。
☆For Each…Next:對(duì)于集合中的每項(xiàng)或數(shù)組中的每個(gè)元素,重復(fù)執(zhí)行一組語句。
3.在VBScript中可使用以下條件語句:
☆I(lǐng)f…Then…Else 語句
☆Select Case 語句
第二章 需求分析
要實(shí)現(xiàn)一個(gè)軟件系統(tǒng),首先應(yīng)該進(jìn)行需求分析,這樣才能令設(shè)計(jì)出的軟件滿足用戶的各項(xiàng)功能。下面就對(duì)在線考試系統(tǒng)的設(shè)計(jì)進(jìn)行需求分析。
2.1 系統(tǒng)需要解決的主要問題
首先,因?yàn)榭荚囀敲嫦蛱囟ǖ哪承?duì)象的,所以考試者進(jìn)入系統(tǒng)應(yīng)該進(jìn)行身份驗(yàn)證??荚囌哌M(jìn)入考試系統(tǒng)后,應(yīng)該能根據(jù)自己的需要選擇考試科目,所以該系統(tǒng)還應(yīng)具有考試科目選擇的功能。在線考試于一般的單機(jī)考試是不同的。鑒于考試環(huán)境一般為機(jī)房,考試者之間的距離很近,為了在線考試做到規(guī)范,對(duì)于每個(gè)應(yīng)試者來說,試卷的試題和題量都應(yīng)是相同的,但試題并不相同。在線考試基于環(huán)境,試卷應(yīng)該從服務(wù)器的數(shù)據(jù)庫隨機(jī)抽取試題后動(dòng)態(tài)生成的。另外,系統(tǒng)還應(yīng)該對(duì)考試時(shí)間進(jìn)行控制,時(shí)間到了會(huì)要求考試者交卷??荚囌哌x擇答案提交后,應(yīng)該由計(jì)算機(jī)自動(dòng)判卷,得到成績(jī)后顯示出來??荚囃戤吅螅梢苑祷氐卿浗缑婊蚶^續(xù)考試。此外,應(yīng)該能夠方便、快捷的對(duì)在線考試系統(tǒng)管理,此外,用戶還應(yīng)能進(jìn)行遠(yuǎn)程注冊(cè)。
2.2 系統(tǒng)應(yīng)該具備的基本功能
☆用戶注冊(cè):用戶可以進(jìn)行注冊(cè),然后登錄。
☆用戶信息的管理:管理員可以增刪用戶
☆試題模型設(shè)置:設(shè)置各科目試題的每種題型的數(shù)量和分值。
☆試題庫管理:分科目,對(duì)單選、多選兩種題型試題庫的管理,使試題的增刪、編輯更為簡(jiǎn)便。
☆試卷生成:可以指定試卷的各題型的數(shù)量,從試題庫里隨機(jī)抽取試題生成一份原始試卷。
☆在線考試:系統(tǒng)嚴(yán)格控制整個(gè)考試過程,實(shí)行時(shí)間的監(jiān)控與權(quán)限的控制,考生需要在限定的考試時(shí)間內(nèi)交卷。
☆計(jì)算機(jī)自動(dòng)閱卷:本系統(tǒng)只考慮客觀題,要求計(jì)算機(jī)能自動(dòng)閱卷,然后馬上顯示出考生分?jǐn)?shù)。
☆成績(jī)查閱:考生考完以后,管理員應(yīng)該能對(duì)所有紀(jì)錄進(jìn)行查詢,并應(yīng)該可以刪除指定紀(jì)錄。
除了實(shí)現(xiàn)上述功能以外,在線考試系統(tǒng)還應(yīng)該具有友好、簡(jiǎn)潔的界面,安全性要高,穩(wěn)定性要強(qiáng),能夠滿足100人以上同時(shí)及進(jìn)行在線考試。
第三章 系統(tǒng)總體設(shè)計(jì)
3.1基本簡(jiǎn)介
該系統(tǒng)是專門用于用戶注冊(cè)、登錄、參加在線考試以及管理員進(jìn)行試題錄入、修改、刪除、成績(jī)查詢、管理用戶的ASP應(yīng)用程序。它應(yīng)該具有開放性、方便性和靈活性。管理員不僅可以輕松地向題庫添加、修改和查詢?cè)囶},而且還可以自動(dòng)新增科目并建立相應(yīng)的數(shù)據(jù);它還允許用戶根據(jù)自己的需求,選取考試科目??忌M(jìn)行有效的身份驗(yàn)證登錄后,選擇考試科目,并要求在規(guī)定的時(shí)間內(nèi)進(jìn)行答題,當(dāng)達(dá)到規(guī)定的時(shí)間后,系統(tǒng)將自動(dòng)予以提示。一旦考生做完交卷后便能立即看到自己的考試成績(jī),并且其分?jǐn)?shù)將被記入庫中以供審核和查閱;另外,還可完全由計(jì)算機(jī)自動(dòng)靈活、隨機(jī)的抽取試題庫中的各類試題組成各種形式的試卷,其內(nèi)容會(huì)隨著庫中試題的改變而改變,而且,不同的考生生成的試題是不同的。
用戶可以是學(xué)校等單位的教師及學(xué)生和企事業(yè)單位的培訓(xùn)部門(因企事業(yè)單位每年要對(duì)員工進(jìn)行素質(zhì)、安全教育與技能等方面的培訓(xùn)及考試等)。
3.2 運(yùn)行環(huán)境與系統(tǒng)結(jié)構(gòu)
為了保證系統(tǒng)運(yùn)行的效率和可靠性,系統(tǒng)服務(wù)器端應(yīng)具有較高的軟硬件配置,客戶端的要求不是很高。此應(yīng)用程序可廣泛運(yùn)行于國(guó)際互聯(lián)網(wǎng)即Internet,也可適用于內(nèi)部的局域網(wǎng)。其運(yùn)行要求如下:
☆軟件環(huán)境:
客戶端: Windows95/98,Internet Explorer(IE)等
服務(wù)器端:Windows NT/Windows2000,Internet Information Server (IIS)4.0及其以上版本,IE等;或者Windows98,Personal Web Server(PWS),IE等。
數(shù)據(jù)庫:采用access,運(yùn)行于服務(wù)器端。
☆硬件環(huán)境:
服務(wù)器 CPU:PIII 500以上 ,內(nèi)存:256M以上
客戶機(jī) CPU:P200MMX以上,內(nèi)存:32M以上
3.3 系統(tǒng)結(jié)構(gòu)圖
根據(jù)需求分析,在線考試系統(tǒng)的結(jié)構(gòu)圖如下:
圖3-1 在線考試系統(tǒng)結(jié)構(gòu)圖
3.4 詳細(xì)設(shè)計(jì)
詳細(xì)設(shè)計(jì)是整個(gè)設(shè)計(jì)過程中,最重要的步驟之一。下面就分如下幾個(gè)部分對(duì)系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì):(1)試題設(shè)計(jì)(2)數(shù)據(jù)庫中表的設(shè)計(jì)(3)用戶、管理員權(quán)限(4)功能模塊詳細(xì)設(shè)計(jì)(5)在線考試系統(tǒng)考試模塊框圖
3.4.1試題設(shè)計(jì)
鑒于主觀題的主觀性,目前無法實(shí)現(xiàn)系統(tǒng)自動(dòng)判卷,所以本系統(tǒng)只作客觀題部分。一般情況下,單選題往往在四個(gè)供選的答案A、B、C、D中選擇唯一正確的答案;多選題是在供選答案中有多個(gè)選擇;而判斷題實(shí)質(zhì)上就相當(dāng)于有兩個(gè)選項(xiàng)的單選題。因而,本系統(tǒng)中所涉及的單選題和多選題跟過去的大體相同,由于時(shí)間的關(guān)系,判斷題部分沒有做。并且假設(shè)多選題一般情況下也是最多提供四個(gè)備選答案,標(biāo)準(zhǔn)答案至少有一個(gè)。故各題型的樣題設(shè)計(jì)如下:
單選題:password的意思是: A、密碼 B、經(jīng)過 C、單詞
D、通路
正確答案為A
多選題:下面的表達(dá)式為真的有:A、1>2 B、7%5=2
C、sin(30)=1/2 D、Cint(7/5)=1
正確答案為B、C、D
3.4.2數(shù)據(jù)庫中表的設(shè)計(jì)
1.question表結(jié)構(gòu)
通常,每一類型的試題都應(yīng)有一個(gè)表結(jié)構(gòu)。但考慮到目前系統(tǒng)存貯空間可以很大,也為了更加方便。我們采用把全部試題集中在一起的方案來建立數(shù)據(jù)表,每道客觀題均有四個(gè)備選答案項(xiàng),每個(gè)試題均具有題型、所屬科目等數(shù)據(jù)段表示其屬性。字段名一般是相應(yīng)的英文單詞。這樣,查詢起來較方便,會(huì)節(jié)約時(shí)間,也不致于造成數(shù)據(jù)十分雜亂等。詳細(xì)設(shè)計(jì)如下表所示:
表3-1 question 表
字段名稱 類型 說明
Haveselect 數(shù)字 常整型
ID 自動(dòng)編號(hào) 常整型,遞增,主鍵
Question 文本 字段大小200
A 文本 字段大小50
B 文本 字段大小50
C 文本 字段大小50
D 文本 字段大小50
Answer 文本 字段大小50
Type 文本 字段大小50
subjectname 文本 字段大小50
各字段說明:
(1)haveselect字段代表在隨機(jī)選題時(shí)是否已經(jīng)被某用戶選過,類型為數(shù)字。
(2)ID是問題的id號(hào),用來唯一標(biāo)志該問題,把它設(shè)為主鍵,類型為自動(dòng)編號(hào)。
(3)Question字段為問題內(nèi)容,類型為文本。
(4)A字段代表選項(xiàng)A的內(nèi)容
(5)B字段代表選項(xiàng)B的內(nèi)容
(6)C字段代表選項(xiàng)C的內(nèi)容
(7)D字段代表選項(xiàng)D的內(nèi)容
(8)Answer字段表示答案選項(xiàng)
(9)Type字段表示試題類型
(10)subjectname字段代表試題所屬科目名稱
2.subject表結(jié)構(gòu)
表3-2 subject表
字段名稱 類型 說明
Multiper 數(shù)字 常整型
Singleper 數(shù)字 常整型
multinumber 數(shù)字 常整型
singlenumber 數(shù)字 常整型
subjectname 文本 字段大小50
Testtime 數(shù)字 常整型
Id 自動(dòng)編號(hào) 常整型,遞增,主鍵
各字段說明:
(1)multiper字段代表在某考試科目的考試題中每個(gè)多選題的分值。
(2)singleper字段代表在某考試科目的考試題中每個(gè)單選題的分值。
(3)multinumber字段為某科的多選題題量。
(4)singlenumber字段為某科的多選題題量。
(5)subjectname字段代表科目名稱。
(6)testtime字段代表某科的考試總時(shí)間。
(7)id字段代表科目的id號(hào)。
3.score表結(jié)構(gòu)
表3-3 score表
字段名稱 類型 說明
Studentname 文本 字段大小50
Subjectname 文本 字段大小50
Score 數(shù)字 常整型
Id 自動(dòng)編號(hào) 常整型,遞增,主鍵
Endtime 日期/時(shí)間
各字段說明:
(1)studentname字段代表在某次考試記錄中學(xué)生的名字。
(2)subjectname字段代表在某次考試紀(jì)錄中考試科目名。
(3)score字段為某次考試紀(jì)錄中考試分?jǐn)?shù)。
(4)id字段為某次考試紀(jì)錄的標(biāo)志號(hào)。
(5)endtime字段代表考試的結(jié)束時(shí)間。
4.student表結(jié)構(gòu)
表3-4 student表
字段名稱 類型 說明
Studentname 文本 字段大小50
Studentpassword 文本 字段大小50
Id 自動(dòng)編號(hào) 常整型,遞增,主鍵
各字段說明:
(1)studentname字段代表學(xué)生的名字。
(2)studentpassword字段代表密碼。
(3)id字段為學(xué)生的標(biāo)志號(hào)。
5.admin表結(jié)構(gòu)
表3-5 admin表
字段名稱 類型 說明
Name 文本 字段大小50
Password 文本 字段大小50
Id 自動(dòng)編號(hào) 常整型,遞增,主鍵
各字段說明:
(1)name字段代表管理員的名字。
(2)password字段代表密碼。
(3)id字段為管理員的標(biāo)志號(hào)。
3.4.3 用戶、管理員權(quán)限
☆管理員:在此系統(tǒng)中可以由若干個(gè)管理員,即系統(tǒng)管理員。他們具有一般用戶所沒有的權(quán)限,即具有管理用戶、試題以及試卷等內(nèi)容的權(quán)力。它不需注冊(cè),在數(shù)據(jù)庫有一個(gè)表來存放相關(guān)信息,可由以存在的管理員添加或刪除管理員。
☆一般用戶:主要是指學(xué)校的學(xué)生和企事業(yè)單位的培訓(xùn)對(duì)象等。
3.4.4 功能模塊詳細(xì)設(shè)計(jì)
下面,對(duì)各個(gè)功能模塊分別進(jìn)行詳細(xì)討論,具體情況見系統(tǒng)源程序。
3.4.4.1 管理模塊
管理員可以向題庫中添加各種類型且符合要求的試題,也可以對(duì)它們進(jìn)行修改和刪除。同時(shí),管理員也能對(duì)科目、用戶、考試記錄等數(shù)據(jù)進(jìn)行管理。
1.試題管理
(1)試題錄入
首先,用戶選擇試題所屬科目。若菜單中沒有該科目,則可以新增一個(gè)。返回、刷新一次頁面,即可看到新增的科目名稱。而且,在本系統(tǒng)中其它需要選擇科目的地方也會(huì)自動(dòng)更新。其次,每道試題有類型、試題內(nèi)容與選項(xiàng)和答案等欄目。管理員輸入完以后,即可看到預(yù)覽效果。如果輸入不合法,或者該科題庫中已有該試題編號(hào)和內(nèi)容等,則系統(tǒng)給出相應(yīng)的提示或警告,以待更正。
(2)試題修改
管理員還可以對(duì)試題進(jìn)行修改。不過,對(duì)于各表中的主鍵不用修改,避免了造成系統(tǒng)中的數(shù)據(jù)混亂,或者覆蓋其它有用數(shù)據(jù)的現(xiàn)象。如果用戶執(zhí)行了非法操作,則必須重新操作。
(3)試題刪除
管理員可以刪除不再需要的試題。
2.科目管理
(1)添加科目
其基本信息有科目名稱、題型、題量和考試總時(shí)間等,對(duì)于用戶輸入的不符合系統(tǒng)要求的數(shù)據(jù),系統(tǒng)仍舊給出提示或警告。
(2)科目刪除
管理員可以刪除不再需要的科目。
3.用戶管理
管理員可以通過管理界面添加或刪除用戶。
4.管理管理員
管理員可以通過管理界面添加新管理員或刪除原有管理員。
5.考試記錄管理
系統(tǒng)中的管理員可以查詢考試記錄,也可以刪除考試紀(jì)錄。
3.4.4.2在線考試模塊
進(jìn)入在線考場(chǎng)是本系統(tǒng)最重要的部分之一。因?yàn)橐粋€(gè)系統(tǒng)如果涉及到現(xiàn)實(shí)的話,就必須考慮得十分周到、完善??忌卿浐?,只要選擇考試科目以后,就可以調(diào)出試卷進(jìn)行在線考試。為了實(shí)現(xiàn)動(dòng)態(tài)隨機(jī)不重復(fù)的抽取試題,需要在選題過程中每選出一題,就要在試題庫中作相應(yīng)的標(biāo)志,以便下次不會(huì)重復(fù)取出此題。試卷出來后要對(duì)試題庫中的標(biāo)志位復(fù)原。這樣就會(huì)使每個(gè)考生的試卷都不同??忌钠浯痤}信息通過單、復(fù)選按鈕選擇答案來反映??荚嚱Y(jié)束采取自主交卷和到了規(guī)定的時(shí)間自動(dòng)題示有機(jī)結(jié)合的方式辦法予以實(shí)現(xiàn)。
3.4.4.2用戶注冊(cè)模塊
該模塊的功能是實(shí)現(xiàn)用戶遠(yuǎn)程注冊(cè)。用戶輸入想要注冊(cè)的用戶名和密碼,提交之后由系統(tǒng)判斷該用戶是否已經(jīng)存在,如果存在,就給出相應(yīng)信息,如果不存在,就把用戶輸入的用戶名和密碼寫到數(shù)據(jù)庫中,完成注冊(cè)。
3.4.5 在線考試系統(tǒng)考試模塊框圖
否
是
圖3-2 在線考試系統(tǒng)考試模塊框圖
第四章 系統(tǒng)實(shí)現(xiàn)
在進(jìn)行了整體設(shè)計(jì)以后,就開始進(jìn)行詳細(xì)的設(shè)計(jì)及編碼工作。也就是設(shè)計(jì)文件和把他們有機(jī)地組織在一起實(shí)現(xiàn)所有功能。
4.1 系統(tǒng)流程圖設(shè)計(jì)
根據(jù)系統(tǒng)總體設(shè)計(jì),首先系統(tǒng)要有一個(gè)登錄界面,用戶可以從該界面登錄參加考試。管理員也應(yīng)該有一個(gè)進(jìn)入管理登錄界面的通道。此外,這個(gè)界面上還應(yīng)該有一個(gè)用戶注冊(cè)的通道。
在考生正確輸入用戶名和密碼以后,接著應(yīng)該進(jìn)入考試科目選擇界面。在該界面上,考生選擇參加考試的科目,這個(gè)人機(jī)交互的過程是必不可少的。
考生確定考試科目以后,進(jìn)入開始考試界面,由計(jì)算機(jī)隨機(jī)提取試題,顯示出來組成試卷,并開始進(jìn)行計(jì)時(shí)??忌俅芜M(jìn)行考試,答完試題后交卷,進(jìn)入下一個(gè)界面。
考生提交答卷后,由計(jì)算機(jī)進(jìn)行處理–判卷,得出考試分?jǐn)?shù),顯示出來,并把該生考試記錄存入數(shù)據(jù)庫。在這個(gè)界面上應(yīng)該可以返回繼續(xù)進(jìn)行考試或回到登錄界面。
以上是系統(tǒng)進(jìn)行考試功能的部分,要對(duì)系統(tǒng)進(jìn)行管理,如試題管理、科目管理、用戶管理等就需要設(shè)計(jì)一些管理界面。下面就來逐步進(jìn)行設(shè)計(jì)。
要進(jìn)行管理首先要有管理員登陸驗(yàn)證,這里另外設(shè)計(jì)了一個(gè)界面,使它與用戶登錄區(qū)別開來。這個(gè)界面與用戶登錄界面表面上很相似,但是他們是從不同的表中提取數(shù)據(jù)進(jìn)行驗(yàn)證的,以便于系統(tǒng)擴(kuò)充和增加安全性。
管理員登錄以后,應(yīng)該有一個(gè)管理項(xiàng)目選擇界面,其中包括管理用戶選項(xiàng)、管理管理員選項(xiàng)、管理考試科目選項(xiàng)、管理考試紀(jì)錄選項(xiàng)以及管理各科試題選項(xiàng)。
管理用戶的界面可以實(shí)現(xiàn)用戶的增加、和刪除的功能,管理員在此可以對(duì)用戶進(jìn)行管理。
管理管理員的界面,功能和管理用戶的差不多,實(shí)現(xiàn)對(duì)管理員的增加和刪除功能。
管理考試科目界面用來增加或刪除考試的科目,以方便對(duì)各科試題的管理和查詢。
管理考試紀(jì)錄界面可以對(duì)考生的每次考試進(jìn)行紀(jì)錄,管理員科可以對(duì)考生成績(jī)、考試科目、時(shí)間及考試各相關(guān)紀(jì)錄進(jìn)行查詢和刪除。
最后是試題庫管理界面,它根據(jù)各科進(jìn)行分類。通過這個(gè)界面管理員可以對(duì)題庫中的某科試題進(jìn)行增加、修改或刪除。這樣就十分方便靈活的對(duì)試題庫進(jìn)行管理。
下圖就是系統(tǒng)流程圖:
圖4-1 系統(tǒng)流程圖
4.2 各文件功能介紹及詳解
4.2.1.<conn.asp頁介紹>
該文件實(shí)現(xiàn)的是連接數(shù)據(jù)庫和斷開連接的功能。
文件中主要是定義了兩個(gè)過程conn_init()和endConnection()。第一個(gè)是連接數(shù)據(jù)庫,第二個(gè)是實(shí)現(xiàn)斷開連接。其中conn_init()過程中的連接是通過下面語句實(shí)現(xiàn)的:
connstr= “DBQ=” + server.mappath(“data.mdb”) + “;DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};”
set conn=server.createobject(“ADODB.CONNECTION”)
conn.open connstr
connstr確定了數(shù)據(jù)文件的路徑和數(shù)據(jù)庫驅(qū)動(dòng)程序。
Conn的含義是定義了一個(gè)變量用,來存放數(shù)據(jù)庫連接所創(chuàng)建的對(duì)象。
conn.open connstr則真正實(shí)現(xiàn)了數(shù)據(jù)庫的連接。
該文件主要被包含在其他文件中實(shí)現(xiàn)數(shù)據(jù)庫的連接和斷開功能。
4.2.2.<default.asp頁介紹>
該文件的功能是系統(tǒng)登陸的入口,在此可以實(shí)現(xiàn)用戶注冊(cè)入口,管理員管理入口以及用戶進(jìn)入考試系統(tǒng)登陸界面的功能。
該文件的功能使這樣實(shí)現(xiàn)的:表單提交給文件本身。再由HTML上面的ASP程序?qū)μ峤恍畔⑦M(jìn)行處理。
最上面的<%@ Language=VBScript %>表示腳本語言是VBScript。
set rs = server.createobject(“adodb.recordset”)
rs是一個(gè)變量,用來存放一個(gè)recordset對(duì)象。
sql=“select * from student where studentname='” & Request.Form(“studentname”) & “’ and studentpassword='” & Request.Form(“studentpassword”) & “'”
變量sql代表一個(gè)SQL語句,功能是從表student中選出用戶名和密碼與考生提交的用戶名和密碼都相同的記錄。
rs.open sql,conn,1,1
該語句的功能是執(zhí)行sql語句并把記錄集結(jié)果存儲(chǔ)在變量rs中。
rs.close的作用是關(guān)閉紀(jì)錄。
session(“studentname”)=request.form(“studentname”)
該句的意思是把表單提交的變量studentname的值賦給一個(gè)session對(duì)象studentname。這個(gè)對(duì)象用來存儲(chǔ)用戶名,它在該用戶對(duì)每個(gè)頁面的訪問中有效。
set rs=nothing含義是清空rs變量。
call endConnection()是調(diào)用conn.asp中的過程,用來關(guān)閉于數(shù)據(jù)庫的連接。
4.2.3.<register.asp頁介紹>
該文件實(shí)現(xiàn)了用戶注冊(cè)的功能,用戶只要填寫想要注冊(cè)的用戶名及密碼,文件首先查看用戶名是否已經(jīng)存在,如果存在就提示該用戶名已經(jīng)存在,否則就將用戶輸入的信息添加到數(shù)據(jù)庫中的student表內(nèi)。然后用戶就可以使用自己注冊(cè)的用戶名和密碼登錄在線考試系統(tǒng)進(jìn)行在線考試。
在文件中,表單提交給register.Asp自身進(jìn)行處理,如果submit值為“注冊(cè)”首先進(jìn)行判斷看用戶名或密碼是否為空。如果為空就顯示“錯(cuò)誤!用戶名或密碼不能為空!”的信息。如果不為空,進(jìn)行下一步判斷,看student表中是否已經(jīng)存在用戶想要注冊(cè)的用戶名,如果存在,就顯示信息“錯(cuò)誤!該用學(xué)生存在!”,如果不存在就將要注冊(cè)的用戶名和密碼寫入student表。代碼如下:
sql=“insert into student(studentname,studentpassword) values('” & cstr(trim(request(“studentname”))) & “‘,’” & cstr(trim(request(“studentpassword”))) & “')”
conn.execute sql
最后,用一個(gè)Vbscrip語言編寫的消息框顯示注冊(cè)成功信息。
4.2.4.<selectsubject.asp頁介紹>
該文件是實(shí)現(xiàn)用戶登錄在線考試系統(tǒng)后進(jìn)行考試科目選擇的功能,選擇科目后進(jìn)入考試界面。
該文件首先是將subject表中所有的紀(jì)錄都以單選項(xiàng)的方式選出來,如果沒有紀(jì)錄,則顯示“對(duì)不起,暫時(shí)沒有任何考試科目?!庇脩舭刺峤缓?,表單仍然提交給文件自身。處理程序首先判斷用戶是否選擇了一個(gè)考試科目,如果沒有選擇顯示“你沒有選擇考試科目,請(qǐng)選擇考試科目!”如果選擇了某個(gè)考試科目,先把該科目賦值給一個(gè)session變量selectsubjectname,然后從subject表中選出該科的相關(guān)信息,并也都設(shè)成session變量。Singlenumber表示單選試題數(shù)量,multinumber表示多選試題數(shù)量,singleper表示單選試題分值,multiper表示多選試題分值,testtime表示考試總時(shí)間。接著進(jìn)入考試界面。
4.2.5.<test.asp頁介紹>
該文件就是考試界面,實(shí)現(xiàn)真正的動(dòng)態(tài)隨機(jī)選題,并對(duì)每個(gè)考生的考試時(shí)間進(jìn)行監(jiān)控,到結(jié)束時(shí)間后自動(dòng)給出提示。
該文件的總體構(gòu)架是使用了if else 語句進(jìn)行了一個(gè)選擇,剛進(jìn)入該頁面submit1得值肯定不等于“開始考試”,所以先顯示出“開始考試”的按鈕。按下以后,首先把當(dāng)前時(shí)間以分種為單位存儲(chǔ)在session的變量starttime中。然后進(jìn)入隨機(jī)抽取試題部分,單選題和多選題的抽取很相似,只不過一個(gè)是單選按鈕,一個(gè)是多選按鈕罷了。這里只解釋單選題的部分。
strid1="“是定義了一個(gè)字符串變量,并先賦值為空。
Randomize是產(chǎn)生隨機(jī)種子,在使用rnd()函數(shù)之前一定要先用Randomize產(chǎn)生隨機(jī)種子才能實(shí)現(xiàn)其產(chǎn)生0~1之間隨機(jī)數(shù)的功能。
for i=1 to session(“singlenumber”)直到next是選擇singlenumber(代表某科目的單選題數(shù)量)個(gè)單選題。
下面的代碼實(shí)現(xiàn)了從數(shù)據(jù)庫中隨機(jī)不重復(fù)的選題:
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標(biāo)志某題是否已經(jīng)被選過。
Count變量用來存放所有未被選過的單選題的總數(shù)。
temp變量用來存放0~Count之間的隨機(jī)整數(shù)值。
rs.move temp是將當(dāng)前記錄移到第temp條紀(jì)錄。
rs(“haveselect”)=1是將當(dāng)前選出的紀(jì)錄的標(biāo)志位設(shè)為1,然后用rs.update把數(shù)據(jù)庫中的相應(yīng)標(biāo)志位改為1。
strid1=strid1 & rs(“ID”) & “,“是將所有選出的試題的id號(hào)用逗號(hào)分割后存儲(chǔ)在strid1一個(gè)變量中,以方便的把所有選出的試題的id號(hào)傳到result.Asp文件中,這也是本設(shè)計(jì)的一個(gè)獨(dú)特的地方。需要說明的是strid1變量的最后是一個(gè)逗號(hào),在下一個(gè)文件中會(huì)詳細(xì)說明如何進(jìn)行處理。
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
上面一段程序是在選完題之后將所有已經(jīng)設(shè)成1的haveselect改寫成0,這樣自己下次或別人就仍可以選擇所有的試題。
最后一段程序是用來計(jì)時(shí)的,考試時(shí)間到了之后自動(dòng)給出提示。
4.2.6.<result.asp頁介紹>
考生提交答卷以后,該文件就把考生的答案同question表中的正確答案進(jìn)行比較,最后得出考生的得分。
首先是變量賦值,取得session對(duì)象的一些變量值,以方便使用。endtime=now()是去的考試結(jié)束時(shí)間。
selectstr1=request.form(“hidQuestID1”)和
selectstr2=request.form(“hidQuestID2”)是獲取存放被選單選和多選試題的id號(hào)的兩個(gè)字符串。
len1=len(selectstr1)和
len2=len(selectstr2)是取得兩個(gè)字符串的長(zhǎng)度。
str1=left(selectstr1,len1-1)
str2=left(selectstr2,len2-1)是把兩個(gè)字符串的結(jié)尾(也就是逗號(hào))取掉。
dim id1,id2
id1=split(str1,”,”)
id2=split(str2,”,”)是用split()函數(shù)將存有id號(hào)的字符串拆開并存放到數(shù)組當(dāng)中,以便調(diào)用。
以上就實(shí)現(xiàn)了所有被選中的試題的id號(hào)的傳遞。
下面這段程序就實(shí)現(xiàn)了單選試題的答案于正確答案的比較,并得出單選題應(yīng)得分?jǐn)?shù)。
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
多選題與單選題程序基本相同,這里就不贅述了。
接著就是將考試結(jié)果紀(jì)錄存入score表中,并對(duì)考生顯示出考試成績(jī)。
上面是在線考試系統(tǒng)考試部分的程序及其解釋,該部分是系統(tǒng)最主要的部分,所以解釋得比較詳細(xì)。管理部分很多文件功能都很相似,這里就只挑功能最全又比較重要的文件作以解釋。(這些文件都放在admin文件夾下)
4.2.7.<primary.asp頁介紹>
該文件實(shí)現(xiàn)的功能是管理員選擇進(jìn)行管理的項(xiàng)目,也就是管理主界面。
4.2.8.<mgstudent.asp頁介紹>
該文件實(shí)現(xiàn)對(duì)用戶進(jìn)行管理(刪除或添加)的功能。
4.2.9.<mgadmin.asp頁介紹>
該文件實(shí)現(xiàn)對(duì)管理員進(jìn)行管理(刪除或添加)的功能。
4.2.10.<mgsubject.asp頁介紹>
該文件的功能是實(shí)現(xiàn)對(duì)考試科目及相關(guān)參數(shù)(如考試時(shí)間、單選及多選題量)進(jìn)行管理。
4.2.11.<mgscore.asp頁介紹>
該文件的功能是對(duì)考試記錄進(jìn)行查詢或刪除。
4.2.12.<mgquestion.asp頁介紹>
<mgquestion.asp>和<addquestion.asp>兩個(gè)文件和起來實(shí)現(xiàn)對(duì)試題庫進(jìn)行刪除修改和添加的功能。
subjectname=trim(request(“subjectname”))是將上一個(gè)界面?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表中將所有其科目名與所選科目相同的問題都選出來。
編輯 刪除
上面這段代碼的的作用是將刪除的參數(shù)傳給文件自身或?qū)⒕庉嫷膮?shù)傳給SureDel(id,subjectname)函數(shù)。
如果實(shí)執(zhí)行刪除操作就轉(zhuǎn)到SureDel(id,subjectname),提示是否真的要?jiǎng)h除,如果選擇確定就執(zhí)行如下代碼:
sql=“delete from question where id=” &request(“id”)
conn.execute sql
執(zhí)行刪除該問題的操作,將question表中的相應(yīng)記錄刪除。否則,如果選擇取消就不執(zhí)行刪除操作。
如果執(zhí)行編輯同樣將參數(shù)傳給文件自身,先執(zhí)行下面代碼將isedit的值設(shè)為真:
if request(“action”)=“edit” then
isedit=true
end if
文件最下面是編輯試題或添加試題部分,表單提交給addquestion進(jìn)行處理。
13.<addquestion.asp頁介紹>
首先將表單傳過來的各個(gè)參數(shù)值賦給不同的變量,以便于使用。然后判斷question,subjectname,answer和leixing四個(gè)變量是否為空,如果為空顯示錯(cuò)誤信息。不為空就進(jìn)行判斷,看是修改問題還是添加問題,分別進(jìn)行相應(yīng)處理(修改question表中的記錄或向其中添加記錄),然后返回到mgquestion.asp頁面。
4.3調(diào)試過程中遇到的主要問題和解決辦法
在系統(tǒng)調(diào)試的過程中主要遇到三個(gè)比較困難的問題:
第一個(gè)就是如何實(shí)現(xiàn)在隨機(jī)選題的同時(shí)保證不重復(fù),本設(shè)計(jì)最后使用了在question表中設(shè)置了一個(gè)haveselect字段來標(biāo)志選過的紀(jì)錄的辦法來解決。
第二個(gè)就是如何將test.asp中所有試題的id號(hào)傳到result.asp頁中。因?yàn)樵囶}數(shù)是變值,用一般的使用變量方式實(shí)行不通的。本設(shè)計(jì)采用了將id號(hào)以逗號(hào)分隔存在字符串變量中,然后到result.asp頁面用split()函數(shù)拆開存放到數(shù)組中的辦法進(jìn)行解決。
第三個(gè)就是問題在編輯之后就無法再選出來了,最后發(fā)現(xiàn)是因?yàn)榫庉嬛罂颇棵那懊鏁?huì)有空格,所以會(huì)無法選出。解決的辦法是使用trim()函數(shù)將空格去掉。
4.4 系統(tǒng)測(cè)試及實(shí)現(xiàn)后主要界面
本系統(tǒng)經(jīng)先進(jìn)行各模塊測(cè)試,經(jīng)過修改和調(diào)整通過以后,進(jìn)行總體測(cè)試。測(cè)試結(jié)果各項(xiàng)功能均已經(jīng)或基本達(dá)到設(shè)計(jì)要求。
下面就將各主要文件實(shí)現(xiàn)的界面一一列出:
1.<default.asp>
圖4-2 用戶登錄界面圖
2.<selectsubject.asp>
圖4-3 考試科目選擇界面圖
3.<test.asp>
圖4-4 考試界面圖
4.<result.asp>
圖4-5 考試結(jié)果界面圖
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 管理試題界面圖
結(jié)論
計(jì)算機(jī)考試系統(tǒng)經(jīng)過系統(tǒng)功能分析,可行性研究,需求分析三個(gè)階段,基本了解了該系統(tǒng)的功能要求及設(shè)計(jì)的可行性。通過總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼三個(gè)階段,基本實(shí)現(xiàn)了考試系統(tǒng)遠(yuǎn)程注冊(cè),考試,系統(tǒng)管理等預(yù)定要求,最后將所有模塊組裝成一個(gè)完整的系統(tǒng)。經(jīng)過測(cè)試,系統(tǒng)實(shí)現(xiàn)了需求分析中的所有要求,運(yùn)行正常,操作界面簡(jiǎn)潔。
結(jié)束語
經(jīng)過近三個(gè)月的畢業(yè)課題的設(shè)計(jì),我從其中學(xué)到許多在真正實(shí)際的軟件開發(fā)過程中才能夠涉及到的各種各樣簡(jiǎn)單的也有復(fù)雜的問題。
在這次畢業(yè)課題的設(shè)計(jì)過程中,我不僅僅只是單純的拓寬了我的專業(yè)知識(shí)面,更重要的是它提高了我各方面的能力。當(dāng)我在進(jìn)行程序設(shè)計(jì)時(shí),忽然涉及到了我從來都不了解的問題,甚至是根本就沒有聽說過的新概念或者是新技術(shù),這時(shí)我必須去圖書館或是一些相關(guān)的電子書店查找與這個(gè)問題相關(guān)的圖書資料,也會(huì)通過國(guó)際互聯(lián)網(wǎng)查找我所需要的內(nèi)容。在這一過程中,慢慢的鍛煉了我在多如大海的各種類型的資料中查詢我所需要的材料的能力。在以前學(xué)習(xí)課程的時(shí)間里,我很少會(huì)這樣體驗(yàn)如何去查找自己需要的資料,如今才知道在浩瀚的書海里要想找到我真正需要的東西也并非是一件易事。
本系統(tǒng)的設(shè)計(jì)是我真正獨(dú)自負(fù)責(zé)了一個(gè)實(shí)際項(xiàng)目從需求分析、設(shè)計(jì)到系統(tǒng)完成測(cè)試、編寫論文的整個(gè)軟件開發(fā)過程;
在畢業(yè)課題的設(shè)計(jì)過程中,我得到了院里許多老師的關(guān)心和支持,還有同學(xué)們的大力幫助,在此,我要特別感謝在我的整個(gè)課題設(shè)計(jì)中給予我悉心指導(dǎo)的指導(dǎo)老師——某某老師。最后,對(duì)所有關(guān)心過我的老師及同學(xué)們表示衷心的感謝!文章來源:http://www.zghlxwxcb.cn/news/detail-474709.html
參考文獻(xiàn)
【1】 |美| Eric A. Smith 著,韓軍 馬云 等譯Active Server Pages寶典 電子工業(yè)出版社,2000,6
【2】 |美| Greg Buczek MCSD.MCT 編著 李博 于騫 譯 科學(xué)出版社2000,9
【3】 薩師煊 王珊 數(shù)據(jù)庫系統(tǒng)概論 高等教育出版社2000,3
【4】|美| R.Allen Wyke 著 聞道工作室 譯 機(jī)械工業(yè)出版社 2001,6
【5】王姍 陳紅 編著 《數(shù)據(jù)庫系統(tǒng)原理教程》第一版 北京 清華大學(xué)出版社
【6】宣小平 但正剛 張文毅 編著 《ASP數(shù)據(jù)庫系統(tǒng)開發(fā)實(shí)例導(dǎo)航》 第一版 北京 人民郵電出版社 2003.1
【7】杜煜 姚鴻 編著 《FrontPage 2000 實(shí)用技能》 第一版 北京 清華大學(xué)出版社 2000.1
【8】李四達(dá) 編著 《Dreamweaver 4.0 精彩網(wǎng)頁設(shè)計(jì)教程》第一版 北京 人民郵電出版社 2001.3
【9】黃聰 編著 《Dreamweaver 4.0 基礎(chǔ) 實(shí)例 技巧 》第一版 北京 海洋出版社 2001.11文章來源地址http://www.zghlxwxcb.cn/news/detail-474709.html
到了這里,關(guān)于在線考試系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!