版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> XXXXXXXX學(xué)院</p><p><b> 課程設(shè)計(jì)報告書</b></p><p> 課程名稱: JAVA課程設(shè)計(jì) </p><p> 題 目: 基于Java的在線評測系統(tǒng)的設(shè)計(jì)與開發(fā)</p><p> 系 名: 信息工程系
2、 </p><p> 專業(yè)班級: 軟件工程 </p><p> 姓 名: XXX </p><p> 學(xué) 號: XXXXXXXXXXX </p><p> 指導(dǎo)
3、教師: XX </p><p> 2013年 6 月 28 日</p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 學(xué)生姓名: XXX 專業(yè)班級: 軟件1111 指導(dǎo)教師: XX 工作單位: 信息工程系
4、</p><p> 設(shè)計(jì)題目:基于Java的在線評測系統(tǒng)的設(shè)計(jì)與開發(fā)</p><p><b> 初始條件: </b></p><p> Java基礎(chǔ),Java SE,《在線評測系統(tǒng)》,桌面版的在線考試系統(tǒng)</p><p> 要求完成的主要任務(wù):</p><p> ?。òㄕn程設(shè)計(jì)工作量及其
5、技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 使用JAVA開發(fā)一個在線評測系統(tǒng)。該系統(tǒng)主要包括:用戶登錄、菜單選擇、開始考試、分?jǐn)?shù)統(tǒng)計(jì)四個功能模塊。</p><p> 本系統(tǒng)使用JAVA SWING技術(shù),事件處理機(jī)制,文件流和泛型集合進(jìn)行測評系統(tǒng)的設(shè)計(jì),開發(fā)和功能實(shí)現(xiàn),并綜合運(yùn)用多線程和網(wǎng)絡(luò)編程技術(shù)。</p><p> 系統(tǒng)總體功能模塊圖如下:<
6、;/p><p> 系統(tǒng)功能點(diǎn)說明如下:</p><p><b> 用戶登錄功能描述</b></p><p> 獲取登錄信息:獲取客戶端輸入用戶ID和用戶密碼pwd。</p><p> 登錄響應(yīng):根據(jù)登錄校驗(yàn)的結(jié)果,顯示相應(yīng)的界面;若登錄不成功,只在當(dāng)前頁面顯示錯誤提示,若登錄成功,關(guān)閉當(dāng)前界面,顯示菜單界面。<
7、/p><p><b> 菜單選擇描述</b></p><p> 更新用戶信息:將登錄成功的用戶信息顯示到當(dāng)前界面。</p><p> 開始考試:點(diǎn)擊“開始”,關(guān)閉當(dāng)前界面,顯示考試界面。</p><p> 查看分?jǐn)?shù):點(diǎn)擊“分?jǐn)?shù)”,若還未開始,提示“考試未開啟”,若已完成考試,顯示分?jǐn)?shù)結(jié)果。</p>&l
8、t;p> 查看考試規(guī)則:點(diǎn)擊“考試規(guī)則”,顯示考試規(guī)則面板。</p><p> 退出考試系統(tǒng):點(diǎn)擊“離開”,退出系統(tǒng)。</p><p><b> 開始考試功能描述</b></p><p> 裝載用戶信息:現(xiàn)在用戶身份、考試科目等相關(guān)信息。</p><p> 裝載題目信息:將題目信息顯示到面板上。</
9、p><p> 答題:選擇當(dāng)前題目答案,并自動保存該答案數(shù)據(jù)到內(nèi)存中。</p><p> 上下翻題:點(diǎn)擊“上一題”“下一圖”,可隨意翻閱題目信息。</p><p> 考試倒計(jì)時:考試開始后,面板顯示考試時間倒計(jì)時,時長為20分鐘。</p><p> 交卷保存答案:點(diǎn)擊“交卷”確認(rèn)后,考試結(jié)束,保存當(dāng)前試卷相關(guān)數(shù)據(jù),關(guān)閉當(dāng)前界面,顯示菜單選擇
10、界面。</p><p><b> 分?jǐn)?shù)統(tǒng)計(jì)功能描述</b></p><p> 統(tǒng)計(jì)分?jǐn)?shù):將答題結(jié)果與標(biāo)準(zhǔn)答案比對,計(jì)算分?jǐn)?shù)。</p><p> 分?jǐn)?shù)顯示:查看分?jǐn)?shù)或者交卷時,將計(jì)算出的分?jǐn)?shù)顯示到當(dāng)前面板中。</p><p><b> 時間安排:</b></p><p>
11、; 指 導(dǎo) 教 師 簽 字: 2013 年 6 月 13 日</p><p> 系 主 任 簽 字: 馬德寶 2013 年 6 月 14日</p><p><b> 課程設(shè)計(jì)報告書</b></p><p><b> 設(shè)計(jì)題目</b>
12、</p><p> 基于java的在線測評系統(tǒng)的設(shè)計(jì)與開發(fā)。</p><p><b> 開發(fā)環(huán)境</b></p><p> 硬件環(huán)境:微機(jī)系列,內(nèi)存在1G以上</p><p> 軟件環(huán)境:Microsoft Windows XP。</p><p><b> 開發(fā)工具</b
13、></p><p> MyEclipse IDE</p><p><b> 完成時間</b></p><p> 2013.6.17-2013.6.28</p><p><b> 5.需求分析</b></p><p> 系統(tǒng)的對象確定之后,應(yīng)該對系統(tǒng)進(jìn)行定性的分
14、析,分析是為了了解系統(tǒng)應(yīng)達(dá)到的目和</p><p> 系統(tǒng)應(yīng)具備的功能。在線考試系統(tǒng)由四大功能模塊組成:用戶登錄模塊、菜單選擇模塊、</p><p> 開始考試模塊以及分?jǐn)?shù)統(tǒng)計(jì)模塊。</p><p> 5.1用戶登錄模塊功能</p><p> 獲取登錄信息:獲取客戶端輸入用戶ID和用戶密碼pwd。</p><p&g
15、t; 登錄響應(yīng):根據(jù)登錄校驗(yàn)的結(jié)果,顯示相應(yīng)的界面;若登錄不成功,只在當(dāng)前頁面顯示錯誤提示,若登錄成功,關(guān)閉當(dāng)前界面,顯示菜單界面。</p><p> 登錄取消:若文本框內(nèi)容錯誤或許清除,可直接按取消按鈕來實(shí)現(xiàn)。 </p><p> 5.2菜單選擇模塊功能</p><p> 更新用戶信息:將登錄成功的用戶信息顯示到當(dāng)前界面。</p><
16、p> 開始考試:點(diǎn)擊“開始”,關(guān)閉當(dāng)前界面,顯示考試界面。</p><p> 查看分?jǐn)?shù):點(diǎn)擊“分?jǐn)?shù)”,若還未開始,提示“考試未開啟”,若已完成考試,</p><p><b> 顯示分?jǐn)?shù)結(jié)果。</b></p><p> 看考試規(guī)則:點(diǎn)擊“考試規(guī)則”,顯示考試規(guī)則面板。</p><p> 退出考試系統(tǒng):點(diǎn)擊“
17、離開”,退出系統(tǒng)。</p><p> 5.3開始考試模塊功能</p><p> 裝載用戶信息:現(xiàn)在用戶身份、考試科目等相關(guān)信息。</p><p> 裝載題目信息:將題目信息顯示到面板上。</p><p> 答題:選擇當(dāng)前題目答案,并自動保存該答案數(shù)據(jù)到內(nèi)存中。</p><p> 上下翻題:點(diǎn)擊“上一題”“下一
18、題”,可隨意翻閱題目信息,無上一題或下一題是按鈕無效。</p><p> 考試倒計(jì)時:考試開始后,面板顯示考試時間倒計(jì)時,時長為20分鐘,時間到時,不能在答題,系統(tǒng)自動保存試卷。</p><p> 交卷保存答案:點(diǎn)擊“交卷”確認(rèn)后,考試結(jié)束,保存當(dāng)前試卷相關(guān)數(shù)據(jù),關(guān)閉當(dāng)前界面,顯示菜單選擇界面,意外點(diǎn)擊窗口關(guān)閉按鈕時,也自動進(jìn)行保存。</p><p> 5.4
19、分?jǐn)?shù)統(tǒng)計(jì)模塊功能 </p><p> 統(tǒng)計(jì)分?jǐn)?shù):將答題結(jié)果與標(biāo)準(zhǔn)答案比對,計(jì)算分?jǐn)?shù)。</p><p> 分?jǐn)?shù)顯示:查看分?jǐn)?shù)或者交卷或關(guān)閉考試界面時,將計(jì)算出的分?jǐn)?shù)顯示到當(dāng)前面板中。</p><p><b> 6系統(tǒng)總體設(shè)計(jì)方案</b></p><p> 6.1系統(tǒng)功能模塊的創(chuàng)建</p><p
20、> 1歡迎登陸界面的創(chuàng)建;</p><p> 2登陸界面模塊創(chuàng)建和劃分;</p><p> 3 菜單界面的創(chuàng)建與其作用實(shí)現(xiàn);</p><p> 4 考試規(guī)則界面創(chuàng)建;</p><p> 5考試界面的創(chuàng)建和劃分;</p><p> 6.2系統(tǒng)要實(shí)現(xiàn)的功能</p><p>
21、1用戶的名字、密碼和編號都能夠在菜單界面和考試界面中顯示出來;</p><p> 2系統(tǒng)能隨機(jī)在題庫中所給的十個級別題目中每個級別中抽出兩個題目構(gòu)成一套試</p><p><b> 卷;</b></p><p> 3考試完后用戶可通過交卷或查分能夠看到成績;</p><p> 4 考試界面有個倒計(jì)時來限制答題時
22、間,時間到,系統(tǒng)自動交卷和保</p><p><b> 存。</b></p><p> 6.3面向?qū)ο蟮脑O(shè)計(jì)</p><p> 本次課設(shè)充分體現(xiàn)出了java語言抽象,封裝,繼承,多態(tài)和多線程的作用,為實(shí)現(xiàn)該項(xiàng)目功能鎖設(shè)計(jì)類如下:</p><p> 界面類:LoginFrame(登錄界面),MenuFrame(菜單
23、界面)</p><p> WelcomeWindow(歡迎界面) RuleFrame(考試規(guī)則界面) ExamFrame</p><p><b> ?。荚嚱缑妫?lt;/b></p><p> 控制器類:ClientContext</p><p> 后臺數(shù)據(jù)處理類:ExamService(考試后臺數(shù)據(jù)處理)</p
24、><p> IdOrPwdException(編號與密碼數(shù)據(jù)處理) </p><p> 實(shí)體類: EntityContext(試卷內(nèi)容的讀取與顯示) Question(題</p><p> 庫) QuestionInfo(試卷) User(用戶信息)</p><p> 主類:Main(入口類)</p><p>
25、 6.4畫出系統(tǒng)的結(jié)構(gòu)</p><p><b> 7.系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> 1 歡迎界面設(shè)計(jì),通過Welcome類來實(shí)現(xiàn),該界面在出現(xiàn)2秒后會自動消失,然后登陸界面出現(xiàn),歡迎界面截圖如圖1</p><p><b> 圖1 歡迎界面</b></p><p> 2實(shí)現(xiàn)用戶的登
26、陸功能,通過login類來設(shè)計(jì)該界面,該界面能獲取登錄信息(獲取客戶端輸入用戶ID和用戶密碼pwd)和得到登錄響應(yīng)(根據(jù)登錄校驗(yàn)的結(jié)果,顯示相應(yīng)的界面;若登錄不成功,只在當(dāng)前頁面顯示錯誤提示,若登錄成功,關(guān)閉當(dāng)前界面, 顯示菜單界面。)以及能通過取消按鈕(cancelBtn)</p><p> 和clientContext.cancel()方法實(shí)現(xiàn)取消功能。登錄界面與前臺邏輯處理截圖如圖2-4</p>
27、;<p><b> 圖2 登錄界面</b></p><p> 圖3 編號輸入不合法</p><p><b> 圖4 密碼錯誤</b></p><p> 3創(chuàng)建一個MunuFrame的類,實(shí)現(xiàn)菜單面板功能的實(shí)現(xiàn),能實(shí)現(xiàn)更新用戶信息即將登錄成功的用戶信息顯示到當(dāng)前界面, 開始考試, 查看分?jǐn)?shù)(點(diǎn)擊“分?jǐn)?shù)”
28、,若還未開始,提示“考試未開啟”,若已完成考試,顯示分?jǐn)?shù)結(jié)果),查看考試規(guī)則(點(diǎn)擊“考試規(guī)則”,顯示考試規(guī)則面板)和退出考試系統(tǒng)(點(diǎn)擊“離開”,退出系統(tǒng))以及點(diǎn)擊關(guān)閉窗體有提示信息等功能。各功能截圖如圖5-圖10</p><p><b> 圖5 菜單界面</b></p><p> 圖6 考試前點(diǎn)擊分?jǐn)?shù)按鈕</p><p> 圖7考試后
29、點(diǎn)擊“開始”按鈕</p><p> 圖8 點(diǎn)擊考試規(guī)則按鈕</p><p> 圖9 點(diǎn)擊“X”按鈕</p><p> 圖10 點(diǎn)擊“離開”按鈕</p><p> 4開始考試功能的實(shí)現(xiàn),包括裝載用戶信息,裝載題目信息,答題,上下翻題,考試倒計(jì)時交卷保存答案,關(guān)閉窗體系統(tǒng)自動保存試卷以及當(dāng)前為第一題或最后一題時前一題按鈕或最<
30、;/p><p> 后一題按鈕無效(不可點(diǎn)擊)等功能,試卷的創(chuàng)建與保存可用集合(list,map)來實(shí)現(xiàn),把題庫中的級別當(dāng)作鍵,級別對應(yīng)題當(dāng)作值放在map中,截圖如圖11-圖14</p><p> 圖11 考試總體界面</p><p><b> 圖12 時間到界面</b></p><p> 圖13 試卷保存成功后窗體顯
31、示(交卷或時間截至)</p><p> 圖14 考試中途關(guān)閉窗體</p><p> 5考試分?jǐn)?shù)統(tǒng)計(jì)功能模塊的描述,包括統(tǒng)計(jì)分?jǐn)?shù):將答題結(jié)果與標(biāo)準(zhǔn)答案比對,</p><p> 計(jì)算分?jǐn)?shù)和分?jǐn)?shù)顯示:查看分?jǐn)?shù)或者交卷時,將計(jì)算出的分?jǐn)?shù)顯示到當(dāng)前面</p><p> 板中;效果截圖如圖15-圖16</p><p>
32、圖15 交卷時分?jǐn)?shù)顯示</p><p> 圖16 查分時分?jǐn)?shù)顯示</p><p> 6源代碼 見附錄1</p><p> 8 系統(tǒng)的調(diào)試和測試</p><p> 8.1 設(shè)計(jì)過程中遇到的問題和解決方案</p><p> 如何讓整個項(xiàng)目具有層次性,既易于閱讀也用于防止業(yè)務(wù)邏輯處理與數(shù)據(jù)</p&g
33、t;<p> 處理全部在一個類里而導(dǎo)致實(shí)現(xiàn)困難和編程混亂?</p><p> 解決方案:通過MVC模式來設(shè)計(jì)程序,界面只處理前臺工作,建立一個控制器</p><p> 類進(jìn)行業(yè)務(wù)邏輯處理,在后臺進(jìn)行業(yè)務(wù)數(shù)據(jù)處理功能。</p><p> 8.2測試過程中遇到的問題和解決方案</p><p> ?。?)當(dāng)考試時,意外關(guān)閉窗口
34、時,考試答案不會保存。</p><p> 解決方案:為窗口添加監(jiān)聽器,</p><p> setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);</p><p> this.addWindowListener(new WindowAdapter() {</p><p><b>
35、; @Override</b></p><p> public void windowClosing(WindowEvent e) {</p><p> int val=JOptionPane.showConfirmDialog(null, "確定離開?");</p><p> if(val==JOptionPane.YES_
36、OPTION){</p><p> clientContext.send();</p><p> clientContext.examFrameExit();</p><p><b> }</b></p><p> }當(dāng)窗體關(guān)閉時,會更據(jù)提示信息自動保存。</p><p> ?。?)發(fā)現(xiàn)登
37、錄見面的取消按鈕無作用。</p><p> 于是為取消按鈕設(shè)置了事件監(jiān)聽,再將方法實(shí)現(xiàn)為清空文本框中內(nèi)容,即通過</p><p> idTextField.setText(null)和pwdField.setText(null)語句來實(shí)現(xiàn)。</p><p><b> 9設(shè)計(jì)心得體會</b></p><p> 面向
38、對象,java是面向?qū)ο蟪绦蛟O(shè)計(jì)語言,這次課程實(shí)踐.,我更加深刻地理解了面向?qū)ο蟮母拍?我覺得這是我這次實(shí)踐的第一個收貨.;。</p><p> 怎么說呢,達(dá)內(nèi)的老師講課方法新穎,很有吸引力,我十分喜歡這種方式,在這種氛圍下學(xué)習(xí)我很有激情.</p><p> 再說說我的感想吧,錯誤,是啊,不斷的錯不斷的錯,不斷的找不斷的找,好多次我都快發(fā)瘋了,但是呢,沒有真正用過心的去做一件事的認(rèn)識不
39、能理解那種心情的,就是,你的努力,終于有收獲了,而這次的實(shí)驗(yàn)課,也是再一次讓我明白,只有不斷的犯錯,然后找錯,才能學(xué)到知識,才能進(jìn)步.哎,這真的是,讓人心里,既焦躁,又興奮.這次的經(jīng)歷告訴我,淡定,細(xì)心,耐心,不要輕易放棄,相信自己,加油加油. </p><p> 軟件知識的學(xué)習(xí),從來都不是意見容易的事,其實(shí)也是,任何的東西,想要學(xué)好學(xué)精,都的付出時間和汗水啊.我一次次告訴自己,加油加油啊!</p
40、><p> 不知不覺一個多星期實(shí)驗(yàn)就這樣結(jié)束了,感覺時間好快,時間就是知識時間就是金錢啊,而我不自覺的又想起了自己平時,一次次浪費(fèi)時間,常立志不立長志,哎,人也許就是這樣,需要壓力,和打擊,然后才能真正的長大,懂事啊!</p><p> 本次課設(shè)也讓我明白了毅力與心態(tài)的重要性,無論如何時候都不要輕易放棄,也不要讓懶惰纏上自己,要抓住任何一個機(jī)會去學(xué)習(xí)更多知識。更要多實(shí)踐,它對知識的收獲將是
41、更深刻的。</p><p><b> 10答辯</b></p><p><b> 指導(dǎo)教師評語:</b></p><p> 成績評定: 簽名:</p><p> 2013 年 6 月 30 日</p>
42、<p><b> 附錄1</b></p><p><b> 源代碼</b></p><p><b> Main類代碼:</b></p><p> package com.tarena.client;</p><p> import com.tarena.en
43、tity.EntityContext;</p><p> import com.tarena.service.ExamService;</p><p> import com.tarena.ui.ClientContext;</p><p> import com.tarena.ui.ExamFrame;</p><p> impor
44、t com.tarena.ui.LoginFrame;</p><p> import com.tarena.ui.MenuFrame;</p><p> import com.tarena.ui.RuleFrame;</p><p> import com.tarena.ui.WelcomeWindow;</p><p><b&
45、gt; //主類</b></p><p> public class Main {</p><p> public static void main(String[] args) {</p><p> ClientContext clientContext=new ClientContext();</p><p><
46、b> //歡迎界面 </b></p><p> WelcomeWindow welcomeWindow=new WelcomeWindow();</p><p><b> //登錄界面 </b></p><p> LoginFrame loginFrame=new LoginFrame();</p>&
47、lt;p><b> //菜單界面 </b></p><p> MenuFrame menuFrame=new MenuFrame();</p><p><b> //考試界面 </b></p><p> ExamFrame examFrame=new ExamFrame();</p><
48、;p> ExamService examService=new ExamService();</p><p> EntityContext entityContext=new EntityContext();</p><p><b> //考試規(guī)則界面</b></p><p> RuleFrame ruleFrame=new Ru
49、leFrame();</p><p> menuFrame.setRuleFrame(ruleFrame);</p><p> loginFrame.setClientContext(clientContext);</p><p> menuFrame.setClientContext(clientContext);</p><p>
50、 examFrame.setClientContext(clientContext);</p><p> examService.setEntityContext(entityContext);</p><p> clientContext.setWelcomeWindow(welcomeWindow);</p><p> clientContext.setL
51、oginFrame(loginFrame);</p><p> clientContext.setMenuFrame(menuFrame);</p><p> clientContext.setExamFrame(examFrame);</p><p> clientContext.setExamService(examService);</p>
52、<p> clientContext.start();</p><p><b> }</b></p><p><b> }</b></p><p> ClientContext類代碼:</p><p> package com.tarena.ui;</p><
53、;p> import java.util.Date;</p><p> import java.util.List;</p><p> import java.util.Timer;</p><p> import java.util.TimerTask;</p><p> import javax.swing.JOption
54、Pane;</p><p> import javax.swing.JPasswordField;</p><p> import javax.swing.JTextField;</p><p> import com.tarena.entity.Question;</p><p> import com.tarena.entity.
55、QuestionInfo;</p><p> import com.tarena.entity.User;</p><p> import com.tarena.service.ExamService;</p><p> import com.tarena.service.IdOrPwdException;</p><p> publ
56、ic class ClientContext {</p><p><b> //歡迎界面 </b></p><p> WelcomeWindow welcomeWindow;//null</p><p><b> //登錄界面 </b></p><p> LoginFrame loginF
57、rame;</p><p><b> //菜單界面 </b></p><p> MenuFrame menuFrame;</p><p><b> //考試界面 </b></p><p> ExamFrame examFrame;</p><p> ExamSe
58、rvice examService;</p><p> QuestionInfo curQuestion;</p><p> JTextField idTextField;</p><p> JPasswordField pwdField;</p><p> User loginUser;</p><p>
59、boolean finish=false;</p><p> int score;</p><p><b> //構(gòu)造方法</b></p><p> public ClientContext(){}</p><p> public ClientContext(WelcomeWindow welcomeWindow
60、, LoginFrame loginFrame,</p><p> MenuFrame menuFrame, ExamFrame examFrame) {</p><p> this.welcomeWindow = welcomeWindow;</p><p> this.loginFrame = loginFrame;</p><p>
61、; this.menuFrame = menuFrame;</p><p> this.examFrame = examFrame;</p><p><b> }</b></p><p><b> /**</b></p><p> * 開始考試,首先進(jìn)入歡迎界面 和 登錄界面</p&
62、gt;<p><b> * */</b></p><p> public void start(){</p><p> welcomeWindow.setVisible(true);</p><p> Timer timer=new Timer();</p><p> timer.schedul
63、e(new TimerTask() {//延時兩秒后歡迎界面消失,登錄界面出現(xiàn)</p><p> public void run() {</p><p> welcomeWindow.setVisible(false);</p><p> loginFrame.setVisible(true);</p><p><b> }
64、</b></p><p><b> }, 2000);</b></p><p><b> }</b></p><p> public void login(){</p><p><b> User u;</b></p><p><
65、;b> try {</b></p><p> int userId=loginFrame.getUserId();</p><p> String userPwd=loginFrame.getUserPwd();</p><p> u = examService.login(userId,userPwd);</p><p
66、> loginUser=u;//登錄成功 將登錄的用戶賦值給loginUser</p><p> loginFrame.setVisible(false);</p><p> menuFrame.updateUserInfo(u.getName());</p><p> menuFrame.setVisible(true);</p>&
67、lt;p> } catch (IdOrPwdException e1) {</p><p> JOptionPane.showMessageDialog(loginFrame, e1.getMessage());</p><p> } catch (NumberFormatException e2) {</p><p> JOptionPane.sho
68、wMessageDialog(loginFrame, "請輸入整數(shù) 編號!");</p><p> } catch (Exception e3){</p><p> JOptionPane.showMessageDialog(loginFrame, "系統(tǒng)錯誤!請聯(lián)系系統(tǒng)管理員!");</p><p><b>
69、 }</b></p><p><b> }</b></p><p> public void startExam(){</p><p><b> //</b></p><p> if(finish){</p><p> JOptionPane.showM
70、essageDialog(menuFrame, "考試已結(jié)束!");</p><p> return;//返回 結(jié)束當(dāng)前方法體</p><p><b> }</b></p><p> examService.startExam();</p><p> curQuestion=examServ
71、ice.getPaper().get(0);</p><p> examFrame.updateView(loginUser,curQuestion);</p><p> startTime();//點(diǎn)擊開始考試按鈕,同時進(jìn)行到計(jì)時</p><p> menuFrame.setVisible(false);</p><p> exam
72、Frame.setVisible(true);</p><p><b> }</b></p><p> public void startTime(){</p><p> long timeLimit=1000*60*1;</p><p> long startTime=System.currentTimeMil
73、lis();</p><p> final long endTime=startTime+timeLimit;</p><p> final Timer timer=new Timer();</p><p> timer.schedule(new TimerTask() {</p><p> public void run() {&l
74、t;/p><p> long time=endTime-System.currentTimeMillis();</p><p> long h=time/1000/60/60;</p><p> long m=time/1000/60;</p><p> long s=time/1000%60;</p><p>
75、 String timeStr=h+":"+m+":"+s;</p><p> examFrame.updateTime(timeStr);</p><p><b> }</b></p><p> }, 0,1000);</p><p> timer.schedule(ne
76、w TimerTask() {</p><p><b> @Override</b></p><p> public void run() {</p><p> timer.cancel();</p><p> JOptionPane.showMessageDialog(examFrame, "考試時間
77、到!");</p><p> send();//考試時間到,自動保存</p><p><b> }</b></p><p> },new Date(endTime));//到指定Date時間執(zhí)行run方法</p><p><b> }</b></p><p>
78、; public void next(){</p><p> saveUserAnswer();//點(diǎn)擊下一題按鈕,保存答案</p><p> QuestionInfo nextQuestion=examService.findQuestionByIndex(curQuestion.getIndex()+1);</p><p> curQuestion=ne
79、xtQuestion;</p><p> examFrame.updateView(loginUser, curQuestion);</p><p><b> }</b></p><p> public void pre(){</p><p> saveUserAnswer();//點(diǎn)擊上一題,保存答案</
80、p><p> QuestionInfo preQuestion=examService.findQuestionByIndex(curQuestion.getIndex()-1);</p><p> curQuestion=preQuestion;</p><p> examFrame.updateView(loginUser, curQuestion);//更新
81、面板內(nèi)容</p><p><b> }</b></p><p> public void send(){</p><p> saveUserAnswer();</p><p> score=examService.getScore();</p><p> JOptionPane.show
82、MessageDialog(examFrame, "分?jǐn)?shù): "+score);</p><p> examFrame.setVisible(false);</p><p> menuFrame.setVisible(true);</p><p> //考試已結(jié)束的狀態(tài)</p><p> finish=true;&l
83、t;/p><p><b> }</b></p><p> public void saveUserAnswer(){</p><p> int curIndex=curQuestion.getIndex();</p><p> List<Integer> userAnswer=examFrame.getU
84、serAnswer();</p><p> examService.saveUserAnswer(curIndex,userAnswer);</p><p><b> }</b></p><p> public void getScore(){</p><p> if(!finish){</p>&
85、lt;p> JOptionPane.showMessageDialog(menuFrame, "考試尚未開啟!");</p><p><b> return;</b></p><p><b> }</b></p><p> JOptionPane.showMessageDialog(men
86、uFrame, "分?jǐn)?shù): "+score);</p><p><b> }</b></p><p> public void examFrameExit(){</p><p> examFrame.setVisible(false);</p><p><b> }</b>
87、</p><p> public WelcomeWindow getWelcomeWindow() {</p><p> return welcomeWindow;</p><p><b> }</b></p><p> public void setWelcomeWindow(WelcomeWindow wel
88、comeWindow) {</p><p> this.welcomeWindow = welcomeWindow;</p><p><b> }</b></p><p> public LoginFrame getLoginFrame() {</p><p> return loginFrame;</p&
89、gt;<p><b> }</b></p><p> public void setLoginFrame(LoginFrame loginFrame) {</p><p> this.loginFrame = loginFrame;</p><p><b> }</b></p><
90、p> public MenuFrame getMenuFrame() {</p><p> return menuFrame;</p><p><b> }</b></p><p> public void setMenuFrame(MenuFrame menuFrame) {</p><p> this
91、.menuFrame = menuFrame;</p><p><b> }</b></p><p> public ExamFrame getExamFrame() {</p><p> return examFrame;</p><p><b> }</b></p><
92、;p> public void setExamFrame(ExamFrame examFrame) {</p><p> this.examFrame = examFrame;</p><p><b> }</b></p><p> public ExamService getExamService() {</p>
93、<p> return examService;</p><p><b> }</b></p><p> public void setExamService(ExamService examService) {</p><p> this.examService = examService;</p><p
94、><b> }</b></p><p> public void menuFrameexit() {</p><p> menuFrame.setVisible(false);</p><p><b> }</b></p><p> public void cancel() {<
95、;/p><p> idTextField.setText(null);</p><p> pwdField.setText(null);</p><p><b> }</b></p><p> public JTextField getIdTextField() {</p><p> ret
96、urn idTextField;</p><p><b> }</b></p><p> public void setIdTextField(JTextField idTextField) {</p><p> this.idTextField = idTextField;</p><p><b>
97、}</b></p><p> public JPasswordField getPwdField() {</p><p> return pwdField;</p><p><b> }</b></p><p> public void setPwdField(JPasswordField pwdFi
98、eld) {</p><p> this.pwdField = pwdField;</p><p><b> }</b></p><p><b> }</b></p><p> WelcomeWindow類代碼:</p><p> package com.taren
99、a.ui;</p><p> import java.awt.BorderLayout;</p><p> import java.awt.Color;</p><p> import java.awt.Dimension;</p><p> import java.awt.Toolkit;</p><p>
100、 import java.net.URL;</p><p> import javax.swing.*;</p><p> import javax.swing.border.LineBorder;</p><p> public class WelcomeWindow extends JWindow{</p><p> int wi
101、dth=430;</p><p> int height=300;</p><p> public WelcomeWindow(){</p><p><b> //</b></p><p><b> init();</b></p><p><b> }&l
102、t;/b></p><p> public void init(){</p><p> setSize(width, height);</p><p> centerWindow();</p><p> setContentPane(createContentPane());</p><p><b&
103、gt; }</b></p><p> public JPanel createContentPane(){</p><p> JPanel p=new JPanel(new BorderLayout());</p><p> URL url=WelcomeWindow.class.getResource("welcome.png&quo
104、t;);</p><p> ImageIcon icon=new ImageIcon(url);</p><p> p.setBorder(new LineBorder(Color.GRAY));</p><p> p.add(BorderLayout.CENTER,new JLabel(icon));</p><p><b>
105、; return p;</b></p><p><b> }</b></p><p> public void centerWindow(){</p><p> Toolkit tk=Toolkit.getDefaultToolkit();</p><p> Dimension screen=tk.
106、getScreenSize();</p><p> this.setLocation((screen.width-width)/2, (screen.height-height)/2);</p><p><b> }</b></p><p><b> }</b></p><p> Login
107、Frame類代碼:</p><p> package com.tarena.ui;</p><p> import javax.swing.*;</p><p> import javax.swing.border.EmptyBorder;</p><p> import java.awt.*;</p><p>
108、; import java.awt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p><b> /**</b></p><p> * 描述一個登錄窗體對象</p><p><b> * */</b
109、></p><p> public class LoginFrame extends JFrame{</p><p><b> //屬性</b></p><p> String title="登錄界面";</p><p> int width=300;</p><p&
110、gt; int height=200;</p><p> ClientContext clientContext;</p><p> JTextField idTextField;</p><p> JPasswordField pwdField;</p><p> //構(gòu)造方法(初始化對象)</p><p>
111、; public LoginFrame(){</p><p><b> //給該窗體初始化</b></p><p><b> init();</b></p><p><b> }</b></p><p><b> //方法</b></p&g
112、t;<p><b> //給窗體初始化</b></p><p> public void init(){</p><p> setTitle(title);//給窗體設(shè)置標(biāo)題</p><p> setSize(width, height);</p><p> centerFrame();</
113、p><p> setContentPane(createContentPane());</p><p><b> }</b></p><p><b> //創(chuàng)建主面板</b></p><p> public JPanel createContentPane(){</p><p
114、> JPanel p = new JPanel(new BorderLayout());//主面板</p><p> p.setBorder(new EmptyBorder(8,8,8,8));//設(shè)置內(nèi)邊距</p><p> //給主面板添加組件</p><p> p.add(BorderLayout.SOUTH,createBottomPane()
115、);</p><p> p.add(BorderLayout.NORTH,new JLabel("登錄系統(tǒng)",JLabel.CENTER));</p><p> p.add(BorderLayout.CENTER,createCenterPane());</p><p><b> return p;</b></p
116、><p><b> }</b></p><p> //創(chuàng)建主面板的中間面板</p><p> public JPanel createCenterPane(){</p><p> JPanel p = new JPanel(new BorderLayout());</p><p> p.ad
117、d(BorderLayout.NORTH,createIdPwdPane());</p><p><b> return p;</b></p><p><b> }</b></p><p> //創(chuàng)建編號、密碼面板</p><p> public JPanel createIdPwdPane
118、(){</p><p> JPanel p = new JPanel(new GridLayout(2,1,0,10));</p><p> p.add(createIdPane());</p><p> p.add(createPwdPane());</p><p><b> return p;</b><
119、/p><p><b> }</b></p><p><b> //創(chuàng)建編號面板</b></p><p> public JPanel createIdPane(){</p><p> JPanel p = new JPanel(new BorderLayout());</p>&l
120、t;p> p.add(BorderLayout.WEST,new JLabel("編號:"));</p><p> idTextField=new JTextField();</p><p> p.add(BorderLayout.CENTER,idTextField);</p><p><b> return p;<
121、;/b></p><p><b> }</b></p><p><b> //創(chuàng)建密碼面板</b></p><p> public JPanel createPwdPane(){</p><p> JPanel p = new JPanel(new BorderLayout());&l
122、t;/p><p> p.add(BorderLayout.WEST,new JLabel("密碼:"));</p><p> pwdField=new JPasswordField();</p><p> p.add(BorderLayout.CENTER,pwdField);</p><p><b> re
123、turn p;</b></p><p><b> }</b></p><p> //創(chuàng)建主面板的底部面板</p><p> public JPanel createBottomPane(){</p><p> JPanel p = new JPanel();</p><p>
124、 JButton loginBtn=new JButton("登錄");</p><p> loginBtn.addActionListener(new ActionListener() {</p><p><b> @Override</b></p><p> public void actionPerformed(
125、ActionEvent e) {</p><p> clientContext.login();</p><p><b> }</b></p><p><b> });</b></p><p> JButton cancelBtn=new JButton("取消");&l
126、t;/p><p> cancelBtn.addActionListener(new ActionListener() {</p><p><b> @Override</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> clientCo
127、ntext.setIdTextField(idTextField);</p><p> clientContext.setPwdField(pwdField);</p><p> clientContext.cancel();</p><p><b> }</b></p><p><b> });<
128、;/b></p><p> p.add(loginBtn);</p><p> p.add(cancelBtn);</p><p><b> return p;</b></p><p><b> }</b></p><p> public void cente
129、rFrame(){</p><p> Toolkit tk=Toolkit.getDefaultToolkit();</p><p> Dimension d=tk.getScreenSize();</p><p> this.setLocation((d.width-width)/2, </p><p> (d.height-hei
130、ght)/2);</p><p><b> }</b></p><p> public int getUserId(){</p><p> return Integer.parseInt(idTextField.getText());</p><p><b> }</b></p>
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開發(fā)
- java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開發(fā)(含代碼)
- java課程設(shè)計(jì)---基于java的坦克大戰(zhàn)
- java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開發(fā)(含代碼)
- 《基于web的java開發(fā)設(shè)計(jì)》課程設(shè)計(jì)-- 網(wǎng)上訂餐系統(tǒng)
- java課程設(shè)計(jì)----基于java的坦克大戰(zhàn)
- Java課程設(shè)計(jì)---JAVA聊天室的系統(tǒng)的設(shè)計(jì)與開發(fā)(含代碼).doc
- 基于java的訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)
- java課程設(shè)計(jì)--基于java的24點(diǎn)游戲
- java課程設(shè)計(jì)--簡單圖書管理系統(tǒng)的設(shè)計(jì)與開發(fā)
- 基于java的網(wǎng)上訂餐系統(tǒng)課程設(shè)計(jì)
- java課程設(shè)計(jì)報告---java實(shí)現(xiàn)畫筆系統(tǒng)
- 基于java的掃雷課程設(shè)計(jì)
- 基于java的掃雷課程設(shè)計(jì)
- java課程設(shè)計(jì)---java程序設(shè)計(jì)
- java課程設(shè)計(jì)--java程序設(shè)計(jì)
- java課程設(shè)計(jì)--基于java的掃雷游戲軟件設(shè)計(jì)
- java課程設(shè)計(jì)報告--java桌面應(yīng)用程序設(shè)計(jì)開發(fā)
- java課程設(shè)計(jì)--標(biāo)準(zhǔn)化在線考試系統(tǒng)
- java課程設(shè)計(jì)
評論
0/150
提交評論