基于web技術(shù)的考試管理系統(tǒng)畢業(yè)論文_第1頁
已閱讀1頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  應(yīng)用本科論文</b></p><p>  題 目:基于Web技術(shù)的考試管理系統(tǒng)</p><p><b>  姓 名:</b></p><p>  專 業(yè):計算機科學(xué)與技術(shù)</p><p><b>  班 級:</b><

2、/p><p>  院 系:信息科學(xué)與工程學(xué)院</p><p><b>  入學(xué)年度:</b></p><p><b>  指導(dǎo)教師: </b></p><p>  日 期: 2008年5月25日</p><p>  基于Web技術(shù)的考試管理系統(tǒng)</p>

3、<p><b>  摘要: </b></p><p>  隨著教育信息化的發(fā)展,在線考試系統(tǒng)作為一種新型的考核手段和考試方式,在實際教學(xué)中得到了廣泛的應(yīng)用,并成為當(dāng)前計算機信息系統(tǒng)研究與應(yīng)用的熱點領(lǐng)域。本考試系統(tǒng)在綜合分析了當(dāng)前考試系統(tǒng)研究成果的基礎(chǔ)上,采用B/S和C/S兩種結(jié)構(gòu)相結(jié)合的模式開發(fā),利用IE瀏覽器作為界面設(shè)計,使用戶可利用瀏覽器直接訪問本平臺,完成考試和測評。.NET

4、技術(shù)和SQL數(shù)據(jù)庫以及其他網(wǎng)絡(luò)程序設(shè)計開發(fā)平臺為本系統(tǒng)主要開發(fā)技術(shù),本論文對在線考試系統(tǒng)的最重要功能,包括用戶登錄、身份驗證、新用戶注冊、教師學(xué)生信息管理、在線考試、管理員登錄及管理等模塊,以減輕教師的工作負(fù)擔(dān)、提高工作效率和考試質(zhì)量為設(shè)計目標(biāo)進(jìn)行了較深入的研究與分析。 本論文研究的重點在于考試系統(tǒng)的隨機組卷策略,由于考核對象的不同,要求試卷內(nèi)容也不一樣,運用隨機組卷策略才能解決這個問題。本文重點研究遺傳組卷算法,分析了遺傳算法的基本理

5、論,對隨機組卷問題進(jìn)行了比較詳細(xì)的闡述, 形成了本考試系統(tǒng)隨機組卷的數(shù)學(xué)模型,并在此基礎(chǔ)上給出了算法的實現(xiàn)原理和 代碼描述。</p><p><b>  關(guān)鍵字:</b></p><p>  在線考試系統(tǒng);B/S模式;.NET;組卷</p><p>  Examination Management System Based on Web<

6、/p><p><b>  Abstrct:</b></p><p>  With the development of the education,Test―online becomes a new way of the examination,which iS used more and more widely at the education and becomes

7、the hotspot of research.This system is designed by using the B/S and the C/S,and we use the IE browser as the interface.The user can access this system by the IE browser to test or study.The main technique of this system

8、 is.Net and Database,SQL and other program operating platform of the network.In this dissertation,an important part of the Test-o</p><p> ?。甂ey words: </p><p>  Test―online system;Browser/Server

9、;.NET;test paper composition;genetic algorithm</p><p><b>  目  錄</b></p><p><b>  摘 要I</b></p><p><b>  前 言1</b></p><p>  第1章開發(fā)工

10、具選擇2</p><p>  1.1前臺開發(fā)工具2</p><p>  1.2后臺開發(fā)工具2</p><p>  1.3 開發(fā)語言介紹4</p><p>  1.4 工程架構(gòu)、配置文件4</p><p><b>  1.4工程框架6</b></p><p>  

11、1.5數(shù)據(jù)庫的選擇7</p><p>  1.6數(shù)據(jù)庫的連接7</p><p>  第2章在線考試管理系統(tǒng)的開發(fā)與設(shè)計10</p><p>  2.1系統(tǒng)開發(fā)思想10</p><p>  2.2 需求分析 (試卷管理模塊)10</p><p>  2.3 系統(tǒng)功能模塊劃分11</p><

12、;p>  2.4系統(tǒng)數(shù)據(jù)庫設(shè)計11</p><p>  2.5系統(tǒng)界面風(fēng)格設(shè)計15</p><p>  第3章在線考試管理系統(tǒng)的具體實現(xiàn)17</p><p>  3.試卷管理功能的實現(xiàn)17</p><p>  3.1 試卷管理的后臺具體實現(xiàn)(服務(wù)層)17</p><p>  3.2試卷管理的前臺具體實

13、現(xiàn)(視圖層)20</p><p>  第4章 結(jié)論24</p><p><b>  參考文獻(xiàn)25</b></p><p><b>  前 言</b></p><p>  當(dāng)今時代是飛速發(fā)展的信息時代。在各行各業(yè)中離不開信息處理,這正是計算機被廣泛應(yīng)用于信息管理系統(tǒng)的環(huán)境。計算機的最大好處在于

14、利用它能夠進(jìn)行信息管理。使用計算機進(jìn)行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。尤其對于復(fù)雜的信息管理,計算機能夠充分發(fā)揮它的優(yōu)越性。計算機進(jìn)行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。本系統(tǒng)就是為了管理好在線考試信息而設(shè)計的。</p><p>  在線考試作為一種信息資源的大集合,包含很多的信息數(shù)據(jù)的管理,諸如對考試資料情況(如考試日期、考試時間)的統(tǒng)計和核實,對考生的審閱

15、試卷權(quán)限設(shè)置,以及考卷信息和讀者信息的檢索等。這些數(shù)據(jù)信息處理工作量大,若采用手工操作工作,出錯率高,出錯后不易查找更改,而考試信息的管理工作混亂而又復(fù)雜;一般考試情況是記錄在準(zhǔn)考證上,考卷的修改和審計工作時間較長,而改卷老師也只是當(dāng)時對它比較清楚,時間一長,如再要進(jìn)行查詢,就得在眾多的資料中翻閱、查找了,造成查詢費時、費力,而考生更不能在第一時間知道自己的成績。基于這些問題,有必要建立一個在線考試管理系統(tǒng),使在線考試管理工作規(guī)范化,系

16、統(tǒng)化,程序化,避免考試管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時、準(zhǔn)確、有效的查詢考試情況。本系統(tǒng)是一個典型的基于WEB的信息管理系統(tǒng),實現(xiàn)在線考試管理,從而提高處理效率、簡化處理步驟、加快處理速度。本系統(tǒng)是基于B/S(瀏覽器/服務(wù)器)模式的系統(tǒng),數(shù)據(jù)集中存放于服務(wù)器中,用戶只通過瀏覽器就能完成所有管理功能。通過在線考試管理系統(tǒng)進(jìn)行試卷上傳處理,試卷審閱與考生信息的管理、并提供強大的信息查詢及報表打印功能及數(shù)據(jù)備份恢復(fù)和<

17、/p><p><b>  第一章開發(fā)工具選擇</b></p><p><b>  1.1前臺開發(fā)工具</b></p><p>  隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站技術(shù)也成為了一門重要且熱門的技術(shù),而網(wǎng)頁是整個網(wǎng)站的組成元素,是用HTML語言來表示的。HTML代碼編輯工具很多,由最簡單的記事本、寫字板,到現(xiàn)在出現(xiàn)的許多功能強大的網(wǎng)頁編輯工

18、具Dreamweaver、FrontPage等。記事本、寫字板相對于編輯HTML代碼來說是最原始的編輯工具了,這樣做需要開發(fā)人員對HTML語言非常的熟練,而且工作繁瑣,用它作為開發(fā)工具是極不理想的選擇。而目前最流行并被廣泛使用的工具就是FrontPage和Dreamweaver。本系統(tǒng)的開發(fā)采用的是Dreamweaver。</p><p>  Dreamweaver是Macromedia公司開發(fā)的,也是一種功能強

19、大、所見即所得的網(wǎng)頁編輯工具,而且它支持最新的DHTML和CSS標(biāo)準(zhǔn),具有完善的站點管理機制。從功能上來看,它比FrontPage要多,而且用戶無需熟悉HTML語言就可以用它做出很不錯的網(wǎng)頁??梢哉f,它是一種傻瓜式的編輯工具。</p><p>  FrontPage是Microsoft公司開發(fā)的一種用于創(chuàng)建網(wǎng)頁、組織和管理WEB站點的網(wǎng)頁設(shè)計軟件。它由許多不同的元素組成。FrontPage的網(wǎng)頁視圖提供給了一種簡

20、單、實用的工具,用于Web網(wǎng)頁的編輯和格式化。其他視圖提供了用于管理Web站點中文件集合的復(fù)雜工具。另外,F(xiàn)rontPage帶有內(nèi)置的工具可產(chǎn)生動畫(移動的圖形)、交互性(對象代表訪問者的動作)甚至在線數(shù)據(jù)收集和數(shù)據(jù)管理。簡而言之,它是一種所見即所得、簡單實用、功能強大的網(wǎng)頁編輯工具。</p><p>  也許有人會置疑,因為Dreamweaver比FrontPage功能要多,所以我們選擇Dreamweaver作

21、為本系統(tǒng)的開發(fā)工具。對于一位專業(yè)的開發(fā)者來說,需要的是一個簡單易用的傻瓜式的編輯工具,而是一種能讓程序運行穩(wěn)定、操作界面簡潔的編輯工具。而Dreamweaver有比FrontPage那么多的附加功能,但它在網(wǎng)頁的編輯方面更具專業(yè)性、穩(wěn)定性、可見性和易修改性,是開發(fā)本系統(tǒng)的理想工具。</p><p>  1.2后臺開發(fā)工具 </p><p>  在這個系統(tǒng)的后臺部分我們選擇JSP作為后臺開發(fā)

22、工具。盡管當(dāng)前的后臺開發(fā)工具有很多,像還有ASP,PHP等,但是根據(jù)現(xiàn)階段的我們開發(fā)系統(tǒng)的實際情況,</p><p>  相對其他工具而言,我們對于JSP更為熟悉,而且,利用JSP完全可以實現(xiàn)系統(tǒng)設(shè)計的各項需要。</p><p>  Wsb服務(wù)器是Web應(yīng)用程序的心臟。Tomcat作為JAVA的擴展,自推出以來已經(jīng)有了很大發(fā)展,其體系結(jié)構(gòu)是當(dāng)今市場上最受關(guān)注的Web服務(wù)器之一。新推出的TO

23、MCAT6.0版本增強了系統(tǒng)安全性,具有服務(wù)器端腳本開發(fā)調(diào)試,內(nèi)容管理和站點分析,崩潰防護,內(nèi)置JAVA虛擬機及全面支持JSP等強大功能。</p><p>  此外,在過去,客戶機/服務(wù)器結(jié)構(gòu)的設(shè)計與Web的相關(guān)技術(shù)幾乎處于平行線上,兩者相互獨立并無法作出集成性的設(shè)計?,F(xiàn)在我們利用TOMCAT+JSP構(gòu)成三層式Web結(jié)構(gòu)(如圖2.1所示)的中間一層,將客戶機/服務(wù)器結(jié)構(gòu)與Web密切結(jié)合,完成前后端兩者的集成輸出功

24、能,使得Web站點的開發(fā)更方便,實現(xiàn)的功能更強大。</p><p>  利用TOMCAT+JSP技術(shù)來集成Web前后端所帶來的強大效益可歸結(jié)為以下幾個方面:</p><p><b>  減少構(gòu)建和維護成本</b></p><p><b>  加快聯(lián)機過程</b></p><p>  應(yīng)用軟件集中在服

25、務(wù)器端開發(fā)管理</p><p>  前端可使用任何瀏覽器(IE、Netscape…..)</p><p>  后端可存取任何數(shù)據(jù)庫 (SQL、Access…..)</p><p>  可使用任何腳本語言開發(fā) (JavaScript、PERL…..)</p><p><b>  后端數(shù)據(jù)庫</b></p>&

26、lt;p>  ActiveX Server組件</p><p><b>  程序和計算邏輯</b></p><p>  ActiveX Server組件</p><p><b>  前端瀏覽器</b></p><p>  圖1.1 三層式Web結(jié)構(gòu)示意圖</p><p>

27、;  1.3 開發(fā)語言介紹</p><p>  Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言(以下簡稱Java語言)和Java平臺的總稱。用Java實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一

28、方面,Java技術(shù)也不斷更新。</p><p>  Java平臺由Java虛擬機(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個獨立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分和擴展部分。在硬件或操作系統(tǒng)平臺上安裝一個Java平臺之后,Java應(yīng)用程序就可運行?,F(xiàn)在Ja

29、va平臺已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中運行。Java應(yīng)用編程接口已經(jīng)從1.1x版發(fā)展到1.2版。目前常用的Java平臺基于Java1.4,最近版本為Java1.7。</p><p>  Java分為三個體系JavaSE(Java2 Platform Standard Edition,java平臺標(biāo)準(zhǔn)版),JavaEE(Java 2 Platform,Enterpr

30、ise Edition,java平臺企業(yè)版),JavaME(Java 2 Platform Micro Edition,java平臺微型版)。</p><p>  Java語言的優(yōu)良特性使得Java應(yīng)用具有無比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護費用。Java對對象技術(shù)的全面支持和Java平臺內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次,到處可運行的特性使得它能夠提供一個隨處可用的開放

31、結(jié)構(gòu)和在多平臺之間傳遞信息的低成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫。</p><p>  1.4 工程架構(gòu)、配置文件</p><p>  工程架構(gòu)對于一個工程來說是非常重要的,它決定了一個工程的整體開發(fā)思路,一個架構(gòu)的好壞,決定了一個工程的質(zhì)量,選擇了一個最符合工程需求的架構(gòu),可以非常有效

32、地提高工程的效率,安全程度以及方便開發(fā)人員的編碼。而在java web中我們常用的架構(gòu)是EJB和SSH架構(gòu)。因為EJB是重量級架構(gòu),對于我們這樣的需求的工程是不實用的,而在WEB開發(fā)中最常用的輕量級架構(gòu)是struts,spring,以及hibernate,我們通稱為SSH架構(gòu)。</p><p>  本項目工程是使用了hibernate以及struts2為核心架構(gòu),未使用spring進(jìn)行整合,因為spring本身在

33、整合了工程之后,并不能提高工程運行效率,且spring整合過于繁瑣麻煩,本項目模塊實現(xiàn)功能也較為簡單,并不需要spring進(jìn)行工程整體的管理。故只使用了hibernate以及struts架構(gòu)作為核心架構(gòu)。</p><p>  對于struts架構(gòu)我們這里使用了struts2.0并沒有使用struts1.X,是因為以下四點:</p><p>  1.struts2.0把FORM層與actio

34、n層合并,沒有了FORM-BEAN 使程序可以把FORM層的屬性在ACTION層中直接調(diào)用</p><p>  2.STRUTS2的ACTION不用繼承父類,而STRUTS1的ACTION必須繼承父類例如ACTION dispatcherACTION</p><p>  3.STRUTS2的配置文件更簡單,把原有的STRUTS1中的ACTION的一些屬性分離出來形成了PACKAGE標(biāo)簽&l

35、t;/p><p>  4.struts2的標(biāo)簽比struts1更實用,例如表單回填、checkbox提交的BUG解決、對于AJAX的支持</p><p>  故由于以上這些優(yōu)點我們選擇了struts2.0</p><p>  對于工程的配置,因為我們使用了MySQL,struts、hibernate架構(gòu),以及我們需要讀入一個EXCEL文件(需要第三方的包)。故我們使用了

36、以下這些包:</p><p><b>  1.5工程框架</b></p><p>  為了方便對工程進(jìn)行管理,也為了使代碼的查閱更為直觀簡明,將包結(jié)構(gòu)分為5層,分別為action,entity,service,serviceimpl,util。</p><p>  Action層:視圖層,其中包括頁面跳轉(zhuǎn),以及關(guān)于頁面的數(shù)據(jù)流的代碼部分。<

37、;/p><p>  Entity層:包括工程中的所有實體,以及hibernate配置文件。</p><p>  Service層:是serviceimpl的接口層,為的是方便調(diào)用service方法。</p><p>  Serviceimpl層:具體到數(shù)據(jù)如去執(zhí)行一個事務(wù),從數(shù)據(jù)庫中存儲并取出的具體代碼部分。</p><p>  Util層:包括

38、小組公用代碼部分,方便小組其他成員的調(diào)用。</p><p><b>  1.6數(shù)據(jù)庫的選擇</b></p><p>  當(dāng)前流行的數(shù)據(jù)庫有很多,如Oracle,My SQL,SQL Server,Access等。在本系統(tǒng)中,我們選用My SQL進(jìn)行數(shù)據(jù)管理。My SQL是一個后臺關(guān)系數(shù)據(jù)庫管理系統(tǒng),它功能強大操作簡便、處理的數(shù)據(jù)量大且數(shù)據(jù)安全性強,適用于中型數(shù)據(jù)庫使用

39、者,其內(nèi)嵌的My SQL 企業(yè)管理器為用戶提供了方便全面的服務(wù)。My SQL不但可以應(yīng)用于大中型數(shù)據(jù)庫管理中,建立分布式關(guān)系數(shù)據(jù)庫,并且也可以開發(fā)桌面數(shù)據(jù)庫。</p><p>  對比其它的數(shù)據(jù)庫而言,Oracle一般用于非常大型的數(shù)據(jù)庫管理,對我們的系統(tǒng)而言,使用Oracle一方面沒有My SQL方便,另一方面根據(jù)系統(tǒng)的數(shù)據(jù)量沒有必要使用Oracle。而Access 數(shù)據(jù)庫對于小型的數(shù)據(jù)庫當(dāng)然也可以實現(xiàn),但是由

40、于公司的其它系統(tǒng)由于數(shù)據(jù)量較大,都采用My SQL 數(shù)據(jù)庫,況且本系統(tǒng)的中的圖書量和讀者信息量隨著公司規(guī)模的擴大可能不斷增加,Access 數(shù)據(jù)庫很有可能不能滿足需求,而且My SQL在操作上比Access要更加直觀和方便,功能也更加強大。</p><p>  從以上各項功能顯示,My SQL 的操作相當(dāng)方便,使用起來也很容易上手,對于初學(xué)者來說是一個很好的選擇,再加上本系統(tǒng)是針對企業(yè)開發(fā)的,非常適合采用My S

41、QL數(shù)據(jù)庫管理系統(tǒng)。</p><p><b>  1.7數(shù)據(jù)庫的連接</b></p><p>  hibernate是一種操作SUN所支持的數(shù)據(jù)庫的新技術(shù)。在JSP中,hibernate可以看作是一個服務(wù)器組件(Server Component),更簡單點說,是一系列的對象,應(yīng)用這些功能強大的對象,即可輕松完成對數(shù)據(jù)庫復(fù)雜的操作。本文中個性化頁面的實現(xiàn)便大量地用到了h

42、ibernate技術(shù)。具體的操作步驟可以歸納為以下幾步:</p><p><b>  創(chuàng)作公用的代碼塊</b></p><p>  創(chuàng)建數(shù)據(jù)庫鏈接(Connection)</p><p>  創(chuàng)建并提交事務(wù)(create/commit transaction)</p><p><b>  數(shù)據(jù)出錯</b&

43、gt;</p><p><b>  關(guān)閉數(shù)據(jù)對象和鏈接</b></p><p><b>  每一步的作法如下:</b></p><p>  1. 創(chuàng)作公用的代碼塊</p><p>  我們知道,在編碼過程中有大量重復(fù)編輯的代碼,由于這部分代碼的多次重復(fù)編輯,,所以把這類代碼建為一個共有類,可以大大的

44、降低了開發(fā)人員的開發(fā)效率。其語法如下:</p><p>  package com.fc.util; </p><p>  import org.hibernate.Session;</p><p>  import org.hibernate.SessionFactory;</p><p>  import org.hi

45、bernate.cfg.Configuration; //我們導(dǎo)入hibernate的如下這些包可以利用其創(chuàng)建session</p><p>  public class HibernateUtil { //建立一個公有類方便其他人調(diào)用</p><p>  private static SessionFactory factory = null;//每個代碼塊

46、建立成一個靜態(tài)代塊,讓程序在編譯時就已經(jīng)運行完畢</p><p>  //創(chuàng)建sessionfactory</p><p><b>  static {</b></p><p><b>  try {</b></p><p>  /*Configuration cft = new Configura

47、tion().configure();</p><p>  factory = cft.buildSessionFactory();*/</p><p>  factory = new Configuration().configure().buildSessionFactory();</p><p>  } catch (Exception e){</p&g

48、t;<p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //得到sessionfactory</p><p>  public static SessionFactory getSes

49、sionFactory() {</p><p>  return factory;</p><p><b>  }</b></p><p>  //創(chuàng)建session</p><p>  public static Session getSession() {</p><p>  Session

50、session = null;</p><p><b>  try {</b></p><p>  session = factory.openSession();//因為靜態(tài)代碼塊已經(jīng)建立,故factory</p><p><b>  已經(jīng)被實例化。</b></p><p>  } catch (

51、Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return session;</p><p><b>  }</b></p><p>  //關(guān)閉session</

52、p><p>  public static void closeSession(Session session) { //每次用完后都要關(guān)閉</p><p><b>  session</b></p><p>  if (session != null) {</p><p>  if (session.isOpen()) {

53、</p><p>  session.close();</p><p>  } 2. 創(chuàng)建數(shù)據(jù)庫鏈接(Connection)</p><p>  鏈接用以保持一些關(guān)于正在訪問的數(shù)據(jù)的一些狀態(tài)信息,以及鏈接者信息。JSP如果要訪問數(shù)據(jù),必須創(chuàng)建與數(shù)據(jù)庫的鏈接,其語法如下:</p><p>  Session session = null;//我

54、們要創(chuàng)建session,也就是讓session實例化,但付值為空,為的是與之前的靜態(tài)代碼塊相呼應(yīng)。</p><p><b>  try {</b></p><p>  session = HibernateUtil.getSession();// 利用靜態(tài)代碼塊可以直接使用類名調(diào)用方法。</p><p>  通過之前的靜待代碼塊實例化sessi

55、on</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p>  session.getTransaction().rollback();// 提交失敗回滾到提交前</p><p>  } finally {</p><p>  

56、HibernateUtil.closeSession(session);// 關(guān)閉SESSION</p><p><b>  } </b></p><p>  3. 創(chuàng)建并提交事務(wù)(create/commit transaction)</p><p>  session中的數(shù)據(jù)對象通常通過save方法保存。我們利用一個事務(wù)就完成事務(wù)的操作。以下

57、是創(chuàng)建方法:</p><p>  session.beginTransaction();// 實例化session后,打開事務(wù)</p><p>  session.save(answer);// 每次foreach持久化answer對象 </p><p>  通過此方法完成了對數(shù)據(jù)對象在數(shù)據(jù)庫中的存儲。</p><p>  session.g

58、etTransaction().commit();// 提交事務(wù)</p><p><b>  4.數(shù)據(jù)出錯</b></p><p>  我們在整個事務(wù)中經(jīng)行增刪改查,有可能出現(xiàn)一些錯誤,如果出現(xiàn)這類錯誤,需要對上部錯誤進(jìn)行操作,這時我們需要數(shù)據(jù)的回滾,例如:</p><p>  Session. GetTransaction().rollbac

59、k();//回滾到提交事務(wù)之前</p><p>  5. 關(guān)閉數(shù)據(jù)對象和鏈接對象</p><p>  在使用了session對象之后要關(guān)閉它,因為它使用了一定的服務(wù)器資源。通過調(diào)用方法close實現(xiàn)關(guān)閉,然后再釋放它。</p><p>  HibernateUtil.closeSession(session); //關(guān)閉session</p><

60、p>  第二章在線考試管理系統(tǒng)的開發(fā)與設(shè)計</p><p><b>  2.1系統(tǒng)開發(fā)思想</b></p><p>  在線考試系統(tǒng)中,一個面向管理員的后臺部分是必不可少的。但是,后臺的管理與操作不是一個簡單的過程,管理員會要在多個項目之間進(jìn)行交替操作,倘若每進(jìn)行一步操作就在前臺與后臺之間進(jìn)行切換,特別像借書還書這樣的日常操作是相當(dāng)頻繁的,不但容易造成許多操作失

61、誤,而且也會造成不可想象的安全隱患。因此,為了既能方便的對前臺的數(shù)據(jù)進(jìn)行更新和控制,同時實現(xiàn)在線考試管理系統(tǒng)的完善性等諸多功能,又能讓所有相關(guān)操作集中,便捷,最大程度的方便工作人員對考試信息的管理,我們考慮應(yīng)該把所有要完成的這些功能獨立為一個系統(tǒng)進(jìn)行管理。在這個系統(tǒng)中,所有的功能都模塊化,在分工上相對獨立,這樣就更便于操作和維護。當(dāng)被賦予權(quán)限的管理員進(jìn)入后臺的在線考試管理系統(tǒng)后,可以很方便的進(jìn)行試卷的錄入、出卷、閱卷等一系列操作,如果是

62、最高權(quán)限的管理員,則還可以對數(shù)據(jù)庫進(jìn)行備份,更改管理員密碼等,這樣整個后臺的在線考試管理系統(tǒng)就實現(xiàn)了管理模塊化和操作集中化,針對性強等.由于這是一個面向管理員的系統(tǒng),所以,不需要網(wǎng)站中諸多花樣的界面,只需要讓使用者以最快,最方便,最安全的方式進(jìn)行管理,所以,我們采用框架式界面,這樣可以隨時選擇需要進(jìn)行操作的功能,而</p><p>  總之,一個框架式的在線考試管理系統(tǒng),在它里面的各項功能在形式上應(yīng)相互獨立,但在

63、內(nèi)容上是互相關(guān)聯(lián)的.</p><p>  2.2 需求分析 (試卷管理模塊)</p><p>  在線考試管理系統(tǒng)需要滿足試卷管理人員和考生的需求。</p><p>  1.管理人員在試卷管理模塊的需求是:</p><p>  可以利用現(xiàn)成的EXCEL添加試卷</p><p><b>  可以進(jìn)行試卷的刪除&

64、lt;/b></p><p>  可以瀏覽所添加進(jìn)去的試卷</p><p>  2.3 系統(tǒng)功能模塊劃分</p><p>  在這個在線考試管理系統(tǒng)中,本人所完成的工作是試卷管理系統(tǒng)內(nèi)容:</p><p>  1.單選試題的錄入具體實現(xiàn)</p><p>  2.多選試題的錄入具體實現(xiàn)</p><

65、;p>  3.簡答試題的錄入具體實現(xiàn)。</p><p>  4.以及相應(yīng)的試題的刪除</p><p>  5.以及相應(yīng)的前臺頁面</p><p>  2.4系統(tǒng)數(shù)據(jù)庫設(shè)計</p><p>  本系統(tǒng)所有數(shù)據(jù)均存放于一個數(shù)據(jù)庫(user用戶中),在此數(shù)據(jù)庫基礎(chǔ)上建立了如下表:</p><p>  ·單選題

66、信息表  SUBJECT</p><p>  ·多選題信息表  MULTSUBJECT</p><p>  ·簡答題信息表  ESSAYSUBJECT</p><p>  各表的詳細(xì)說明如下:</p><p>  ·單選題信息表  SUBJECT</p><p>  表2.1 單選題信息表

67、</p><p>  ·多選題信息表  MULTSUBJECT</p><p>  表2.2 多選題信息表</p><p>  ·簡答題信息表  ESSAYSUBJECT</p><p>  表2.3 簡答題信息表</p><p>  接下來就是試卷錄入的數(shù)據(jù)庫設(shè)計:</p><

68、p>  我將hibernate配置文件存放到entity下</p><p>  Question實體:</p><p>  <!-- 建立類于數(shù)據(jù)庫中表的映射關(guān)系 --></p><p>  <hibernate-mapping package="com.fc.entity"></p><p>

69、;  <!-- 類名和表名的映射 --></p><p>  <class name="Question" table="SUBJECT"></p><p>  <!-- 屬性和字段的映射 --></p><p>  <id name="id" column=&qu

70、ot;ID"><!--主鍵生成策略-->//題號</p><p>  <generator class="native" /><!-- 主鍵產(chǎn)生方式:自動產(chǎn)生 因為數(shù)據(jù)庫底層支持autoincrement主鍵生成方式 例如MYSQL SQL SEVER--></p><p><b>  </id>

71、</b></p><p>  <property name="content" column="CONTENT" /><!-- NAME是實體類中的屬性 column是表單里的字段名--></p><p>  <property name="answerA" column="A

72、NSWERA" />//A選擇</p><p>  <property name="answerB" column="ANSWERB" />//B選擇</p><p>  <property name="answerC" column="ANSWERC" />//C選擇&

73、lt;/p><p>  <property name="answerD" column="ANSWERD" />//D選擇</p><p>  <property name="rightanswer" column="RIGHTANSWER" />//正確答案</p><

74、p>  <property name="subject" column="SUBJECT" />//科目名</p><p>  <property name="difficulty" column="DIFFICULTY" />//難度</p><p><b>  <

75、;/class></b></p><p>  </hibernate-mapping> </p><p>  public class Question {</p><p>  private Integer id;</p><p>  private String content;</p><

76、;p>  private String answerA;</p><p>  private String answerB;</p><p>  private String answerC;</p><p>  private String answerD;</p><p>  private String rightanswer;&

77、lt;/p><p>  private String subject;</p><p>  private String difficulty;</p><p>  public Question(String id, String content, String answerA, String answerB,</p><p>  String

78、 answerC, String answerD, String rightanswer, String subject, String difficulty) {</p><p><b>  super();</b></p><p>  this.id = Integer.valueOf(id);</p><p>  this.content

79、 = content;</p><p>  this.answerA = answerA;</p><p>  this.answerB = answerB;</p><p>  this.answerC = answerC;</p><p>  this.answerD = answerD;</p><p>  th

80、is.rightanswer = rightanswer;</p><p>  this.subject = subject;</p><p>  this.difficulty = difficulty;</p><p><b>  }</b></p><p>  public String getContent()

81、{</p><p>  return content;</p><p><b>  }</b></p><p>  public void setContent(String content) {</p><p>  this.content = content;</p><p><b>

82、;  }</b></p><p>  public String getAnswerA() {</p><p>  return answerA;</p><p><b>  }</b></p><p>  public void setAnswerA(String answerA) {</p>

83、<p>  this.answerA = answerA;</p><p><b>  }</b></p><p>  public String getAnswerB() {</p><p>  return answerB;</p><p><b>  }</b></p>

84、<p>  public void setAnswerB(String answerB) {</p><p>  this.answerB = answerB;</p><p><b>  }</b></p><p>  public String getAnswerC() {</p><p>  retu

85、rn answerC;</p><p><b>  }</b></p><p>  public void setAnswerC(String answerC) {</p><p>  this.answerC = answerC;</p><p><b>  }</b></p>&l

86、t;p>  public String getAnswerD() {</p><p>  return answerD;</p><p><b>  }</b></p><p>  public void setAnswerD(String answerD) {</p><p>  this.answerD = a

87、nswerD;</p><p><b>  }</b></p><p>  public String getRightanswer() {</p><p>  return rightanswer;</p><p><b>  }</b></p><p>  public

88、void setRightanswer(String rightanswer) {</p><p>  this.rightanswer = rightanswer;</p><p><b>  }</b></p><p>  public Integer getId() {</p><p>  return id;&l

89、t;/p><p><b>  }</b></p><p>  public void setId(Integer id) {</p><p>  this.id = id;</p><p><b>  }</b></p><p>  public String getSubjec

90、t() {</p><p>  return subject;</p><p><b>  }</b></p><p>  public void setSubject(String subject) {</p><p>  this.subject = subject;</p><p><

91、b>  }</b></p><p>  public String getDifficulty() {</p><p>  return difficulty;</p><p><b>  }</b></p><p>  public void setDifficulty(String difficul

92、ty) {</p><p>  this.difficulty = difficulty;</p><p><b>  }</b></p><p>  PS:注意ID,這個屬性定義為integer,但是我們在存入,或讀出時候卻需要string,因為我們是將一個anlist存入的數(shù)據(jù)庫或顯示到頁面,而anlist不能存integer,所以必須用s

93、tring,靠this.id = Integer.valueOf(id);將integer轉(zhuǎn)為String。</p><p>  2.5系統(tǒng)界面風(fēng)格設(shè)計</p><p>  在線考試系統(tǒng)試卷管理界面(開始登陸界面)</p><p>  在線考試系統(tǒng)試卷管理界面(進(jìn)入到試卷管理界面<單選題錄入部分>)</p><p>  第2章圖書

94、借閱管理的設(shè)計</p><p>  在線考試系統(tǒng)試卷管理界面(進(jìn)入到試卷管理界面<多選題錄入部分>)</p><p>  在線考試系統(tǒng)試卷管理界面(進(jìn)入到試卷管理界面<簡答題錄入部分>)</p><p>  第三章在線考試管理系統(tǒng)的具體實現(xiàn)</p><p>  3.試卷管理功能的實現(xiàn)</p><p&

95、gt;  試卷管理是在線考試管理系統(tǒng)的一個最重要也是最基本功能。它在管理工作人員的操作下,對試卷進(jìn)行錄入、修改、查詢等一系列的過程。在程序中,利用JAVA script 腳本語言實現(xiàn)畫面的控制,利用Jsp語言來實現(xiàn)對庫的操作和算法流程的控制。</p><p>  3.1 試卷管理的后臺具體實現(xiàn)(服務(wù)層)</p><p>  試卷管理工作人員根據(jù)所給的EXCEL(是由出題組提供的,格式必須按

96、需求所統(tǒng)一)將該EXCEL中的題目錄入到數(shù)據(jù)庫中,并將所加入的題目顯示到成功跳轉(zhuǎn)后的JSP上。因為該模塊是管理員的試卷的錄入,所以只對據(jù)有管理權(quán)限的人員開放,所以借閱者必須根據(jù)自己的工號(工作證編號)經(jīng)行驗證后,工作人員根據(jù)EXCEL所在的路徑進(jìn)行文件的瀏覽和載入,提交之后若成功進(jìn)入數(shù)據(jù)庫,則跳轉(zhuǎn)到成功頁面,若不成功則報錯。一般來說,只要該文件復(fù)合所提的標(biāo)準(zhǔn)類型,就可以進(jìn)行數(shù)據(jù)的錄入,但為了有效控制上傳的有效秩序,對于上傳的數(shù)據(jù)額超過最

97、大限制,不能進(jìn)行數(shù)據(jù)錄入,此外,若操作人員沒有相應(yīng)的權(quán)限,則無法訪問此頁面。</p><p><b>  算法描述如下:</b></p><p>  為了方便以后,使編碼時候調(diào)用更為清晰,所以使用了接口。</p><p>  我在service層中定義了個QuestionService接口其中包括的方法為:</p><p&g

98、t;  public List<Question> getAnswer(String path); //在每次錄入一個只有單選題的EXCEL后,將錄入的EXCEL的內(nèi)容提取出來,并顯示在頁面上。</p><p>  public void addQuestions(File file);//向數(shù)據(jù)庫中添加想要添加的那個單選EXCEL,逐行讀出,并將每行封裝成為一個對象存入數(shù)據(jù)庫中。</p>

99、<p>  public List<MultQuestion> getMultAnswer(String path);//在每次錄入一個只有多選題的EXCEL后,將錄入的EXCEL的內(nèi)容提取出來,并顯示在頁面上。</p><p>  public void addMultQuestions(File file); 向數(shù)據(jù)庫中添加想要添加的那個多選EXCEL,逐行讀出,并將每行封裝成為一個

100、對象存入數(shù)據(jù)庫中。</p><p>  public List<EssayQuestion> getEssayAnswer(String path);在每次錄入一個只有簡單題的EXCEL后,將錄入的EXCEL的內(nèi)容提取出來,并顯示在頁面上。</p><p>  public void addEssayQuestions(File file); 向數(shù)據(jù)庫中添加想要添加的那個簡單

101、EXCEL,逐行讀出,并將每行封裝成為一個對象存入數(shù)據(jù)庫中。</p><p>  我們具體介紹一下單選錄入的具體方法</p><p>  package com.fc.serviceimpl;</p><p>  import java.io.File;</p><p>  import java.util.ArrayList;</p&

102、gt;<p>  import java.util.List;</p><p>  import org.hibernate.Session;</p><p>  import com.fc.entity.EssayQuestion;</p><p>  import com.fc.entity.Question;</p><p&g

103、t;  import com.fc.service.QuestionService;</p><p>  import com.fc.util.HibernateUtil;</p><p>  import com.fc.entity.MultQuestion;</p><p>  import jxl.Sheet;</p><p>  im

104、port jxl.Workbook;</p><p>  public class QuestionServiceImpl implements QuestionService {</p><p>  public List<Question> getAnswer(String path) {</p><p>  Workbook workbook =

105、null;</p><p><b>  try {</b></p><p>  workbook = Workbook.getWorkbook(new File(path));</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p&g

106、t;<p>  Sheet sheet = workbook.getSheet(0);</p><p>  int columns = sheet.getColumns();</p><p>  int rows = sheet.getRows();</p><p>  int j = 0;</p><p>  List<

107、Question> anlist = new ArrayList<Question>();</p><p>  for (int i = 1; i < rows; i++) {</p><p>  Question answer = new Question(sheet.getCell(j, i).getContents(),</p><p>

108、;  sheet.getCell(j + 1, i).getContents(), sheet.getCell(j + 2,</p><p>  i).getContents(), sheet.getCell(j + 3, i)</p><p>  .getContents(), sheet.getCell(j + 4, i)</p><p>  .getConte

109、nts(), sheet.getCell(j + 5, i)</p><p>  .getContents(), sheet.getCell(j + 6, i)</p><p>  .getContents(), sheet.getCell(j + 7, i)</p><p>  .getContents(), sheet.getCell(j + 8, i)<

110、/p><p>  .getContents());</p><p>  anlist.add(answer);</p><p>  return anlist;}</p><p>  public void addQuestions(File file) {Workbook workbook = null;</p><p>

111、;  try workbook = Workbook.getWorkbook(file);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  Sheet sheet = workbo

112、ok.getSheet(0);</p><p>  int columns = sheet.getColumns();</p><p>  int rows = sheet.getRows();</p><p>  int j = 0;</p><p>  List<Question> anlist = new ArrayList

113、<Question>();</p><p>  for (int i = 1; i < rows; i++) {</p><p>  Question answer = new Question(sheet.getCell(j, i).getContents(),</p><p>  sheet.getCell(j + 1, i).getConte

114、nts(), sheet.getCell(j + 2,</p><p>  i).getContents(), sheet.getCell(j + 3, i)</p><p>  .getContents(), sheet.getCell(j + 4, i)</p><p>  .getContents(), sheet.getCell(j + 5, i)</

115、p><p>  .getContents(), sheet.getCell(j + 6, i)</p><p>  .getContents(), sheet.getCell(j + 7, i)</p><p>  .getContents(), sheet.getCell(j + 8, i)</p><p>  .getContents());

116、</p><p>  anlist.add(answer);</p><p><b>  }</b></p><p>  }首先因為我們是在錄入一個EXCEL,但是EXCEL是微軟的一個軟件,所以我們需要引入第三方的包,即jxl.jar。引入這個包后,我們可以通過它進(jìn)行對EXCEL的讀取。JXL中有workbook這個對象,我們可以通過實例它之

117、后,用getWorkbook方法去讀出EXCEL,但要確定它是代參數(shù)的,參數(shù)類型是String,且是文件路徑。</p><p>  其次jxl.jar包中還有sheet對象,sheet對象是EXCEL中的表,我們可以通過它的getSheet方法得到表,注意參數(shù)為int,且我們要得到第一張表所以參數(shù)為0.</p><p>  再之,在sheet對象中還有g(shù)etColumns()和getRow

118、s()方法,分別是取出表中的列數(shù)和行數(shù)。</p><p>  之后我們可以規(guī)定了泛型的一個anlist去存入整個表中我們所需的內(nèi)容。注意我們存入時是需要將每道題看作成為一個對象,分別存入整個anlist中。</p><p>  在試卷錄入這個程序中,我們利用題號這個自增的關(guān)鍵字,把題目信息表存入數(shù)據(jù)庫中,多方面考慮問題,把試題錄入過程中可能出現(xiàn)的狀況,都要一一考慮進(jìn)來,方便能操作人員。&l

119、t;/p><p>  3.2試卷管理的前臺具體實現(xiàn)(視圖層)</p><p>  我們可以發(fā)現(xiàn)服務(wù)層代碼與視圖層是緊密聯(lián)系的,在我們在頁面中提交了我們所選中的信息之后,通過數(shù)據(jù)的傳遞,進(jìn)行頁面的跳轉(zhuǎn),完成了試卷管理所要實現(xiàn)的功能。在left.html中,點擊提交按鈕之后</p><p>  <form method="post" action=

120、"welcome.action"</p><p>  enctype="multipart/form-data" ></p><p>  <input type="file" name="targetfile" style="position:relative;width:300px;he

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論