摘要:該文介紹了利用JSP、JavaBeans、JDBC技術實現一個計算機網上考試系統的基本思想及具體實現。
關鍵詞:J2EE;JSP;JavaBeans;JDBC;計算機網上考試
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)25-7144-03
The Development and Implement of Computer Network Examination System Based on JSP JavaBeans and JDBC Author
HUANG Cheng
(Chengdu Radio and TV University, Chengdu 610051,China)
Abstract: This article introduced the basic idea and the implement of Computer Network Examination System realized by JSP, JavaBeans and JDBC.
Key words: J2EE; JSP; JavaBeans; JDBC; computer network examination
現代信息社會中,計算機已經滲透到各行各業,計算機網上考試的范圍相信還將繼續擴大。著名的TOFEL考試也采用了計算機網上考試的方式就是一個很好的證明。
本文介紹一套能夠實現網上考試與評分的技術——JSP+JavaBeans+JDBC+ACCESS。JSP用于頁面顯示部分,JavaBeans用于封裝業務邏輯,JDBC用于存取數據庫,數據庫用于數據存儲。JSP通過調用封裝了業務邏輯的JavaBeans的接口,對數據庫的數據處理,實現網上考試與評分。本文所敘述的方法對標準化客觀題目非常適用,對于其他類型的題目只要在本文的基礎上稍加修改即可在局域網或Intranet上使用。
1 概念
1.1 J2EE
J2EE是Sun公司對于電子企業和電子企業協作的一種設想,整體稱為Java 2企業版( Enterprise Edition,J2EE)。J2EE是一種規范,而不是一種產品。
1.2 JSP
JSP是為基于WEB應用實現動態交互網頁制作提供的技術環境支持,能夠為程序開發人員提供實現應用程序的編制與自帶組件設計網頁從邏輯上分離的技術,而且能夠替代CGI(Common Gateway Interface)使網站建設與發展變的較為簡單與快捷。
1.3 JavaBeans
JavaBean體系結構是第一個全面的基于組件的標準模型之一,為Java類提供了定義方法、事件、屬性的方法,以便在設計時允許外部的操作和定制。JavaBean組件是一種Java類,這些類遵循一個統一的接口格式,通過封裝屬性和方法成為具有某種功能或者處理某個業務的對象。
1.4 JDBC
JDBC(Java Database Connectivity)是Java應用程序訪問關系數據庫的接口,是我們實現JSP+JavaBeans與數據庫的操作關鍵技術,我們可以使用JDBC開發獨立于DBMS的應用系統。
2 計算機網上考試系統分析
2.1 計算機網上考試數據流圖
考查一般計算機考試系統,可以得到其數據流圖,見圖1。
數據流圖說明
1)考試的前期工作由系統管理員實現。具體來說,至少有三項工作:
第一,題庫文件的生成、編輯與維護。
第二,考生信息的生成、編輯與維護。
第三,考試信息的設定。
2)考生登錄時,首先輸入自己的相關信息,包括考生姓名、考生密碼等,經與考生信息表中數據對照無誤后,才可以進入系統。
3)考生成功登錄后,可進行考試或查詢成績。開始考試時,生成試卷可以在考生進入考試過程中隨機生成,生成過程中要用到題庫文件。每個考生生成的試卷通常用一張考生試卷表來保存。
4)考生在經過合法登錄,調題后,在給定的考試界面下調用試題的有關文件答題。這時通常有時間限定。
5)評分系統對考生所做的工作進行評判,評分的結果至關重要。評分系統牽涉面非常廣,可能涉及所有文件。評分的依據是考生的答題信息,評分的結果將記入考生信息表,以方便考生查詢。
6)最后,對成績進行處理后,可以實時輸出考生的成績。
7)根據系統具體編制情況,可以得到相關數據字典。
3 計算機網上考試系統設計
3.1 邏輯結構圖
1)基于數據庫和網絡應用的系統實現技術有多種,可以采用傳統的客戶機/服務器(C/S)架構,也可以采用目前流行的基于WEB的方式。本系統采用后者實現。
2)由于Java的平臺獨立性,以及Java能有效的防止系統的崩潰。使得本系統在平臺移植性和穩定性方面都能得到很好的保障。加之,JSP為應用提供了健壯的意外事件處理機制,其突出的組件技術使修改內容而不影響邏輯或修改邏輯而不影響內容變得很容易實現。而企業級的Javabeans結構整合了企業邏輯,例如數據庫的訪問,安全,事務完整性,及獨立性即獨立于應用程序,從而使得程序的實現及維護也變得相對容易。
3.2 計算機網上考試系統功能結構圖
根據計算機網上考試數據流圖,以變換分析方法進行分解,可以得到計算機網上考試系統功能結構圖。見圖2所示。
3.3 功能結構圖說明
整個系統由兩個模塊構成。即面向管理員的系統管理模塊和面向考生的考試系統模塊。每個模塊又有若干子模塊組成。
系統管理模塊負責管理員登錄,題庫維護,考生管理和考試管理。都是由管理員所做的工作。
考試系統模塊負責考生考試全過程。具體包括考生登錄界面設計及有效性驗證,系統生成考卷算法,考試界面設計,關鍵的評分算法,最后還有成績查詢。
3.4 實例
3.4.1 基本原理
系統基本原理是:用ACCESS建立一個數據庫文件,用來存儲試題、考生信息、管理員信息和考試信息。
當考生登錄時,首先提示要輸入驗證信息,當輸入考生信息后,通過 SQL 語言在考生信息表中查詢此用戶是否合法,如果不合法,則顯示提示信息,要求考生重新登錄。否則,進入考試系統,考生可選擇進行考試或是查詢考試成績。開始考試時,為每個考生建立一張考生試卷表,由服務器隨機抽取試題存入考生試卷表,并顯示到考生屏幕上。當考生答完題并遞交后,由系統自動評分并顯示成績,同時將成績寫入考生信息表,以方便考生查詢。
管理員登錄時,當輸入管理員驗證信息后,通過查詢管理員信息表,如果不合法,則顯示提示信息,要求管理員重新登錄。否則,進入管理系統,管理員可進行添加試題、修改試題信息、添加考生、修改考生信息和設置考試信息等操作。
3.4.2 建立數據表
在本系統中,數據庫的建立是用 ACCESS 實現的。其中包括四個表:user、admin、info和choose。
user 表存儲用戶信息,admin表存儲管理員信息,info表存儲考試信息,choose 表存儲考試內容。
user 表結構如表1所示。
admin 表、info 表、choose 表結構略。
另外,當考生開始考試時,系統為每個考生自動生成一張考生試卷表,用于記錄系統為每個考生選取的試題題號和正確答案。表名即為該考生的登錄名稱。考試結束時,表中的內容將自動刪除。
3.4.3 提取及反饋信息
在提取用戶端信息以及反饋信息時用到了 JSP 的內置對象。現說明如下:
request 對象
可以使用 request 對象訪問任何用 HTTP 請求傳遞的信息,包括從 HTML 表格用 POST 方法或 GET 方法傳遞的參數、Cookie 和用戶認證。本系統通過 request 獲取用戶輸入的用戶名和密碼。
Session 對象
Session 對象是用來分別保存每一個用戶信息的對象,以便于跟蹤用戶的操作狀態。不同的用戶對應的 Session 對象也是不同的。Session 的信息保存在服務器端,Session 的 ID 保存在客戶機的 Cookie 中。本系統用 Session 對象來保存用戶的登錄名稱和考試的開始時間。
response 對象
可以使用 response 對象控制發送給用戶的信息。包括直接發送信息給瀏覽器、重定向瀏覽器到另一個 URL 或設置 Cookie 的值。本系統通過 response 來進行 URL 地址重定向:
response.sendRedirect(\"exam.jsp?examtime=\"+examtime+\"count=\"+count+\"\");
response.sendRedirect(\"timeout.jsp\");
response.sendRedirect(\"exam.jsp?page=\"+yh+\"examtime=\"+examtime+\"count=\"+count+\"\");
response.sendRedirect(\"answer.jsp\");
3.4.4 JavaBeans 編寫
該系統中共編寫了三個 JavaBeans ,分別是:
數據庫操作用 JavaBean :(代碼略)
取隨機數用 JavaBean :(代碼略)
計算時間用 JavaBean :(代碼略)
試題的讀取和成績的錄入是通過 JavaBean 來進行的。operatedb Bean 用于數據庫訪問,對數據庫進行查詢、插入、更新、刪除等操作。對數據庫的查詢是用 SQL 的 select 命令,成績的錄入是用 SQL 的 update 命令。考生開始考試時,首先通過調用 randomxt 這個 Bean ,在一定范圍(試題總數)內產生隨機數,然后通過調用 operatedb 這個 Bean ,從題庫中選取以這些隨機數為題號的試題,并將題號和正確答案存入考生試卷表。考試過程中,利用 calendar 這個 JavaBean 來進行考試計時。
3.4.5 JSP 實現
在此僅將隨機出題代碼列出,并做詳細說明。考生開始考試時,用以下方法實現系統隨機出題:
//實例化一個用于數據庫操作的JavaBean
//實例化一個用于取隨機數的JavaBean
<%
int i;
int[] st = hchxt.setSelect(count,total,0);//在總數total中選取count個隨機數,并存入數組st[]中
String user=(String)session.getValue(\"user\");
for (i=0;i { String SQL1 = \"SELECT topicid,answer FROM choose WHERE topicid=\"+st[i]+\"\"; ResultSet rs=hchdb.executeQuery(SQL1);//從題庫中選取以數組st[]中的隨機數為題號的試題 if (rs.next()) { int id=rs.getInt(\"topicid\"); String col=rs.getString(\"answer\"); String SQL2 = \"INSERT INTO \"+user+\"(topicid,answer) VALUES('\"+id+\"','\"+col+\"')\"; hchdb.executeUpdate(SQL2);//將題號和正確答案存入考生試卷表 } hchdb.closeConn();//關閉數據庫連接 } response.sendRedirect(\"exam.jsp?examtime=\"+examtime+\"count=\"+count+\"\");//重定向URL到考試界面,考生開始考試 %> 參考文獻: [1] White B. JavaBeans開發使用手冊[M]. 拓文工作室,譯.北京:機械工業出版社,1998. [2] Avedal K. JSP 編程指南[M]. 黎文,譯. 北京:電子工業出版社,2001. [3] 施汝軍. 網站JSP后臺解決方案[M].北京: 人民郵電出版社,2000. [4] 楊玨,盧銀娟,趙昊彤. JSP網絡開發技術[M]. 北京:人民郵電出版社,2001.