崔旭冉 朱珍珍
摘要:標準化考試系統的設計與開發旨在完成各種標準化考試的系統界面運行。通過設計并優化該標準考試系統,可實現選擇試題,考試計時,暫停計時,智能批改試題并給出得分的功能。本課題的具體功能需通過以下具體步驟實現,首先利用Java Swing的相關知識設計考試系統界面,方便用戶對各個模塊進行了解和使用,即將需要實現的功能分模塊呈現,包括選擇試題模塊界面、考試內容模塊界面、考試選擇答案模塊界面、答案核對模塊界面。用戶通過界面指南,完成選題、考試、練習、評分的具體功能。為使用戶交互更加方便高效,基于此添加連接SqlServer數據庫的登錄和注冊功能。
關鍵詞:Java;軟件設計;SQLSever
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2019)05-0004-02
1 設計概述
本課題設計旨在完成集多功能于一體化的標準考試系統,用戶可以自行選擇題庫中的任意一套試題進行測試,每套試題的考試用時由試題文件給出;在練習的過程中,用戶也可以隨時暫停計時,以增加模擬考試練習的靈活性;考試過程中,開始讀取試題的同時,計時器計時,用戶提交答案后自動讀取下一題;每套題目有固定的作答時間,超出時間則不能再讀取任何題目;用戶每答完一道題目,可顯示本題正確答案以及所得分數。
2 設計分析
上述具體功能則是基于Java語言的多線程知識編寫相關的方法,通過編寫監聽改變方法實現對考試期間選擇不同答案的記錄、題號改變的記錄、試卷改變的記錄,主要監聽點擊事件實現對“開始”“下一題”“暫停”按鈕的控制,即當用戶進入該頁面時首先選擇試題頁,點擊開始時進入考試界面,同時調用讀取試題方法,考試過程中用戶在左界面區選擇選項,點擊下一題后,調用比對答案的方法,自動在右界面區呈現用戶答案和正確答案,最后通過總得分計算方法輸出得分。在用戶調用自定義線程結束方法時,或題目倒計時結束后,自動統計總分。為增加該考試系統的靈活性,增加系統暫停方法,即暫停方法被調用后,考試系統進入練習模式,時間倒計時停止,同時可以由用戶自動選擇題號進行針對訓練。
綜上,本系統的設計主要將運用到Java Swing界面設計和Java 多線程知識,要求實現良好的用戶交互界面設計和多功能函數多線程運行。
3 具體實現
3.1系統功能模塊設計
首先明確該系統的總體功能實現,在用戶界面的基礎上,實現選擇試卷、考試計時、題目批改與練習、成績統計的主要功能,之后為增加用戶交互感,添加連接數據庫的功能。
分析系統各功能模塊可初步確定,在用戶界面設計模塊采用null布局格式,通過頂層容器JFrame的名字.setlayout(null),來設置其布局為空布局,當要在空布局中添加空間或者其他中層容器時,需用setBounds()方法來輸入控件的x,y坐標以及它們的寬度和長度。實現選擇、判分功能則是運用itemStateChanged(ItemEvent e)選擇項發生改變時的回調事件(一般是在多個選項中選擇一個)和actionPerformed(ActionEvent e)組件的響應事件的回調事件(如按鈕的按下、下拉列表的選擇等,一般是組件焦點按下回車鍵的效果)。選擇試題、讀取題目、對比答案、獲取成績則是自行構造相應的方法實現,包括:readQuestions()、getAnswewr()、getScore()、zanting()、jixu()等。
本課題的關鍵在于如何使用多線程實現多功能的并發執行,如:在考試過程中對每個題目進行倒計時,該計時功能為整個運行過程的子線程,為此構造自定義線程運行的run()方法和線程中斷的stopRun()方法。
3.2 主要功能模塊
運行Run()方法,啟動線程,并在此線程中完成倒計時功能,即考試開始與倒計時界面同步執行。在時分秒不為0的時刻執行當前線程,并顯示當前剩余時間。在倒計時結束后,設置“下一題”、“暫停”、“選擇題目”為禁用狀態,“開始”為啟用狀態,并得到最后分數。基于此,中斷線程的方法即,使hour,min,sec均為0,此時多線程結束。
讀取題目的readQuestions()方法,則是首先讀取題目文檔的第一行的每一套試題限制時間,通過輸入輸出流依次讀取文檔題目至中間面板上,并使用換行分隔符進行分割讀取,并通過判斷依次讀取下一題。
4 程序設計
4.1 用戶界面設計
用戶界面設計主要由Java Swing實現,Swing是JAVA基礎類的一部分。Swing包括了圖形用戶界面(GUI)器件如:文本框,按鈕,分隔窗格和表。 Swing提供許多比AWT更好的屏幕顯示元素。它們用純Java寫成,所以同Java本身一樣可以跨平臺運行。
4.2 監聽改變事件方法
監聽改變事件方法主要實現考試進行過程中選擇答案、題號、選擇試卷的部分,即用戶可以自主判斷題目答案并進行選擇和更改,題號隨“下一題”的點擊改變,試卷由用戶選擇決定。
4.5監聽點擊事件方法
監聽點擊事件,actionPerformed(ActionEvent e)方法,監聽要點擊的按鈕為何。在點擊開始按鈕時,將選擇項按鈕、下一題、暫停等按鈕設置成可點擊狀態,啟動線程,即用戶選擇試卷完畢后將選試卷一欄窗體隱藏,否則中斷線程。
4.6讀取文檔題目方法
讀取題目方法,使用Java語言中輸入輸出流的相關知識,將以.txt文件保存的試卷輸入到中間頁面布局的面板上。文件第一行為整套題目所給定的倒計時時間,以分隔符截取。使用線程睡眠每間隔1秒刷新一次,實現倒計時。讀取題目則是以換行為間隔符實現,依次將每一行輸出。
4.7校對答案方法
使用輸入輸出流將保存在文件中的答案依次讀取,方法與讀取文檔類似。讀取完畢后關閉文件流。
4.8線程的運行與中斷方法
本題實現倒計時與考試系統并發執行的理論基礎是采用多線程的相關知識,主線程即main方法里的各個函數的實現,子線程則是支持倒計時功能的函數。線程睡眠時間為1000毫秒,即每1秒刷新一次,同時添加同步鎖的機制,使得多線程運行更協調。中斷線程可在時間片用完后執行stopRun()方法。
5 系統測試
5.1 登錄注冊頁面實現
5.2 用戶界面實現
6 設計總結
本課題的順利完成,首先連接數據庫實現用戶注冊和保存記錄登錄的功能,整體界面使用null結構布局,空布局容器可以準確地定位組件在容器中的位置和大小setBounds(int a,int b,int width,int height)的方法是所有組件都擁有的一個方法,組建調用該方法可以設置本身的大小和在容器中的位置。同時使用各組件、架構、標簽等豐富界面,完成用戶交互界面設計。
在功能實現方面,使用Java多線程實現,及支持多個線程同時運行,如:計時與考試模塊同時運行,在設置進程同步的同時,又使用同步鎖防止多線程運行的混亂,從而支持多種功能在同一系統下的可操作性、可實用性。監聽事件是本系統功能得以實現的重要部分,使用getSources()方法監聽觸發的是哪個按鈕,從而依次調用相關的方法。
本課題的設計收獲在于補充學習了課堂之外的頁面布局的編程知識,同時能將多線程的知識靈活運用到系統設計中,更鞏固了相關的編程基礎知識。
參考文獻:
[1] 劉麗霞.基于SQLServer的數據庫技術及應用[M].西安:西北工業大學出版社,2007.
[2] 李春葆.數據結構教程 [M]. 5版.北京:清華大學出版社,2017.
[3] 耿祥義,張躍平.Java大學實用教程[M]. 4版.北京:清華大學出版社,2017.
[4] 張劍飛.Java EE開發技術[M].黑龍江: 哈爾濱工業大學出版社,2013.
【通聯編輯:謝媛媛】