




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 PAGE27 / NUMPAGES32 本科生畢業(yè)設(shè)計報告 課 題: 基于java的在線考試系統(tǒng) 作 者: 專 業(yè): 班 級: 指導(dǎo)教師: 2012 年 04 月 02 日摘 要在線考試系統(tǒng)與傳統(tǒng)考試相比,可以實現(xiàn)考務(wù)工作的全自動化管理,并有效地利用校園網(wǎng)的軟硬件資源,實現(xiàn)考試的客觀性和公證性;自動化組卷、閱卷、判分的流程更是大大的減輕教師的工作強度。在線考試系統(tǒng)旨在實現(xiàn)考試的無紙化管理,基于計算機和網(wǎng)絡(luò)技術(shù)進行在線考試系統(tǒng)的使用,方便校方對考試的管理。本程序是基于eclipse的在線考試系統(tǒng),利用MVC架構(gòu)編寫,將功能分為3個模塊,分別是視圖,模型和控制器。將數(shù)據(jù)分為3個層次,分別為UI層
2、,業(yè)務(wù)層,實體數(shù)據(jù)層,各層之間模塊獨立化,便于數(shù)據(jù)管理,易于系統(tǒng)維護關(guān)鍵詞: Eclipse,MVC架構(gòu),Java語言,三層結(jié)構(gòu)。AbstractCompared with the traditional test, online examination can realize the automation management work of the thesis, and effective use of the software and hardware of the campus network resources, realizing the objectivity of the e
3、xam and real; Automation group rolls, scoring, the process is the scores were greatly reduce teachers working strength. On-line examination system designed to achieve examination of the paperless management, based on the computer and network technology online examination system use, convenient to sc
4、hool examination management.The program is based on the eclipse of the online examination system, with the MVC framework to write, will function is divided into three modules, respectively is the view, model and the controller. Data is divided into three levels, respectively UI layer, business layer
5、, the entity data layer, between each layer DuLiHua module, facilitate data management, and is easy to maintain the system.Keywords: Eclipse, MVC framework, Java language,the Three-tier Structure目 錄 TOC o 1-4 h z u HYPERLINK l _Toc1374533421.序言 PAGEREF _Toc137453342 h 1HYPERLINK l _Toc1374533431.1 系
6、統(tǒng)描述 PAGEREF _Toc137453343 h 1HYPERLINK l _Toc1374533441.2 結(jié)構(gòu)框圖1HYPERLINK l _Toc1374533452.所用開發(fā)工具簡介2HYPERLINK l _Toc1374533462.1Eclipse簡介2HYPERLINK l _Toc1374533472.2 Java 簡介2HYPERLINK l _Toc1374533482.3 Java語言在Eclipse中的應(yīng)用3HYPERLINK l _Toc1374533493.系統(tǒng)總體設(shè)計4HYPERLINK l _Toc1374533503.1系統(tǒng)需求分析4HYPERLINK
7、 l _Toc1374533513.2系統(tǒng)概要設(shè)計4HYPERLINK l _Toc1374533523.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計4HYPERLINK l _Toc1374533533.2.2 Swing設(shè)計5HYPERLINK l _Toc1374533543.3 系統(tǒng)詳細設(shè)計5HYPERLINK l _Toc1374533533.3.1MVC架構(gòu)5HYPERLINK l _Toc1374533533.3.2對象依賴注入(IOC)6HYPERLINK l _Toc1374533533.3.3簡單工廠方法6HYPERLINK l _Toc1374533554.系統(tǒng)應(yīng)用程序設(shè)計8HYPERLINK
8、l _Toc1374533564.1 用戶層界面的實現(xiàn)8HYPERLINK l _Toc1374533574.1.1 布局的實現(xiàn)9HYPERLINK l _Toc1374533584.1.2 welcomeWindow的實現(xiàn)9HYPERLINK l _Toc1374533594.1.3 loginFrame的實現(xiàn)10HYPERLINK l _Toc1374533604.1.4 menuFrom的實現(xiàn) PAGEREF _Toc137453360 h 19HYPERLINK l _Toc1374533614.1.5 examFrame的實現(xiàn) PAGEREF _Toc137453361 h 21HY
9、PERLINK l _Toc1374533624.1.6 clientContext的實現(xiàn) PAGEREF _Toc137453362 h 22HYPERLINK l _Toc1374533644.2 業(yè)務(wù)層界面的實現(xiàn) PAGEREF _Toc137453364 h 23HYPERLINK l _Toc1374533654.2.1 ExamService的實現(xiàn) PAGEREF _Toc137453365 h 23HYPERLINK l _Toc1374533664.2.2 用戶登錄的實現(xiàn) PAGEREF _Toc137453366 h 24HYPERLINK l _Toc1374533674.
10、2.3 開始考試的實現(xiàn) PAGEREF _Toc137453367 h 25HYPERLINK l _Toc1374533684.2.4 獲得考卷的實現(xiàn)HYPERLINK l _To4.2.5 保存用戶答案的實現(xiàn)274.2.6 判分的實現(xiàn)27HYPERLINK l _Toc1374533694.3 數(shù)據(jù)層的實現(xiàn)27HYPERLINK l _Toc1374533604.3.1線性表HashMap27HYPERLINK l _Toc1374533604.3.2Users集合的實現(xiàn)27HYPERLINK l _Toc1374533614.3.3Questions集合的實現(xiàn)2
11、8HYPERLINK l _Toc137453370致29HYPERLINK l _Toc137453370參考文獻 PAGEREF _Toc137453370 h 301. 序言1.1 系統(tǒng)描述在線考試系統(tǒng)主要是學(xué)生通過客戶機登陸自己的賬號,然后完成課程科目的考試,提交,判分的過程。系統(tǒng)主要分成兩個部分,分別是服務(wù)器端和客戶端,兩者通過線程的連接來完成考試的各項功能。在服務(wù)器端,服務(wù)器先啟動,讀取配置文件,然后將試卷和學(xué)生的信息,包括學(xué)號,密碼,讀取到服務(wù)器中。這些信息的讀取,會被封裝在其他的類中,等待客戶端發(fā)送數(shù)據(jù)連接請求,一旦發(fā)現(xiàn)有請求,就創(chuàng)建一個服務(wù)線程與之保持連接,等待考試完成的數(shù)據(jù)
12、請求發(fā)送過來,再斷開連接。過程中服務(wù)器是一直處于監(jiān)聽客戶端請求連接的運行狀態(tài)??蛻舳瞬糠郑瑸榱朔奖悴僮?,應(yīng)用到圖形界面swing的技術(shù),這里一共有三個部分的界面,第一個就是學(xué)生登錄的界面,學(xué)生要輸入學(xué)號和密碼登錄服務(wù)器;其次是學(xué)生選擇考試科目的界面,要注意先將前面一個窗口銷毀,然后再創(chuàng)建新的窗口;最后是學(xué)生考試界面的窗口,功能較多,設(shè)計也稍顯復(fù)雜。最后用戶點擊交卷完成考試過程,并且顯示得分,最后關(guān)閉窗口,服務(wù)器同時要斷開連接,線程結(jié)束。1.2 結(jié)構(gòu)框圖圖12. 所用開發(fā)工具簡介2.1 Eclipse簡介Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發(fā)平臺。就其本身而言,它只是一
13、個框架和一組服務(wù),用于通過HYPERLINK :/baike.baidu /view/18979.htm插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發(fā)人員,因為它允許他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。由于 Eclipse 中的每樣?xùn)|西都是插件,對于給 Eclipse 提供插件,以與給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境
14、而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。 2.2 JAVA簡介 Java是一種簡單的,跨平臺的,HYPERLINK :/baike.baidu /view/125370.htm面向?qū)ο蟮?,分布式的,解釋的,健壯的安全的,結(jié)構(gòu)的中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言。當(dāng)1995年SUN推出Java語言之后,全世界的目光都被這個神奇的語言所吸引。Java 編程語言的風(fēng)格十分接近HYPERLINK :/baike.baidu /view/10075.htmC、HYPERLINK :/baike.baidu /view/824.htmC+語 言。Java是一個純的面向?qū)ο蟮某绦蛟O(shè)計語言
15、,它繼承了 C+ 語言面向?qū)ο蠹夹g(shù)的核心,多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對象所占據(jù)的存空間,使得程序員不用再為存管理而擔(dān)憂。Java具有以下鮮明特點:平臺無關(guān)性平臺無關(guān)性是指Java能運行于不同的平臺。Java引進虛擬機 原理,并運行于虛擬機,實現(xiàn)不同平臺的Java接口之間。使用Java編寫的程序能在世界圍共享。 2.安全性Java對程序提供了安全管理器,防止程序的非法訪問。 面向?qū)ο?Java吸取了C+面向?qū)ο蟮母拍?,將HYPERLINK :/baike.baidu /view/262940.htm數(shù)據(jù)封裝于 類中,利用類的優(yōu)點,實現(xiàn)了程序的簡潔性和便
16、于維護性。類的封裝性、繼承性等有關(guān)對象的特性,使程序代碼只需一次編譯,然后通過上述特性反復(fù)利用。程序員 只需把主要精力用在類和接口的設(shè)計和應(yīng)用上。Java提供了眾多的一般對象的類,通過繼承即可使用父類的方法。分布式Java建立在擴展HYPERLINK :/baike.baidu /view/7729.htmTCP/IP網(wǎng)絡(luò)平臺上。HYPERLINK :/baike.baidu /view/905012.htm庫函數(shù)提供了用HYPERLINK :/baike.baidu /view/9472.htm和HYPERLINK :/baike.baidu /view/369.htmFTP協(xié)議傳送和接受信
17、息的方法。這使得程序員使用網(wǎng)絡(luò)上的文件和使用本機文件一樣容易。 健壯性Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。HYPERLINK :/baike.baidu /view/29.htmJava自己操縱存減少了存出錯的可能性。Java還實現(xiàn)了真HYPERLINK :/baike.baidu /view/209670.htm數(shù)組,避免了覆蓋數(shù)據(jù)的可能,這些功能特征大大提高了開發(fā)Java應(yīng)用程序的周期。并且Java還提供了Null指針檢測、數(shù)組邊界檢測、異常出口、Byte code校驗等功能。 6.動態(tài) java程序的基本組成單元就是類,有些類是自己編寫的
18、,有些是從類庫中引入的,而類又是運行 時動態(tài)裝載的,這就使得Java可以在分部環(huán)境中動態(tài)的維護程序與分類,而不像C+那樣,沒檔期類庫升級以后,如果想讓程序具有新類庫提供的功能,就需 要修改程序,重新編譯。2.3 Java語言在Eclipse中的應(yīng)用 Eclipse是Java語言的開發(fā)工具,通過Eclipse工具可以實現(xiàn)Java面向?qū)ο蟮乃枷?,Java中的接口用于實際編程中,定義一定的接口,并用Java實現(xiàn)類來實現(xiàn)特定的接口。 具體步驟:1、安裝JDK,并在高級設(shè)置里面配置環(huán)境變量,打開Eclipse開發(fā)工具, 并在Eclipse里面講安裝好的JDK配置進去。 2、在Eclipse中新建一個Ja
19、va Project,在src目錄下新建包。(注意:包名一定要有意義。)在包里面新建類,同樣的,類名聲明也要有意義。3、調(diào)試的時候要在main里面調(diào)試。3. 系統(tǒng)總體設(shè)計3.1 系統(tǒng)需求分析在傳統(tǒng)的學(xué)校教學(xué)中,進行一場考試,要求老師刻試卷、印試卷、安排考試、監(jiān)考、收集試卷、評改試卷、講評試卷和分析試卷,這是一個繁雜的過程,需要大量人力、物力與時間的投入,已經(jīng)越來越不適應(yīng)學(xué)校信息化建設(shè)與現(xiàn)代教學(xué)的需要。因此,開發(fā)基于eclipse的在線考試系統(tǒng)。3.2 系統(tǒng)概要設(shè)計3.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計三層架構(gòu)(整體架構(gòu))DataLayer-BisnussLayer-ViewLayer數(shù)據(jù)訪問層-業(yè)務(wù)邏輯層界
20、面層,三層架構(gòu),是當(dāng)今軟件開發(fā)的一種流行架構(gòu),有點:使得數(shù)據(jù)與業(yè)務(wù)邏輯的分離,業(yè)務(wù)邏輯與用戶界面的分離,但是三者相互依賴,用戶界面層依賴業(yè)務(wù)邏輯層依賴數(shù)據(jù)訪問層。 1) 表現(xiàn)層(數(shù)據(jù)呈現(xiàn)/用戶交互)在ui包中 的 用戶界面和控制器(ClientContext) 如:當(dāng)點loginFrame的login按鈕時,就會觸發(fā)clientContext.login()方法,控制器就會處理由用戶界面發(fā)來的請求??刂破鲿I(yè)務(wù)層處理由用戶界面發(fā)來的數(shù)據(jù)。 2) 業(yè)務(wù)層(業(yè)務(wù)模型),是軟件的核心功能在service包中, 核心接口ExamService 如: 登錄系統(tǒng),開始系統(tǒng)。業(yè)務(wù)層是在線考試系統(tǒng)的核心功能
21、,它主要是為了處理控制器傳來數(shù)據(jù)。比如說登錄功能,先要由控制器從用戶界面的得到用戶輸入的id和password。然后就會調(diào)用ExamService的login方法。因為ExamService是接口,必須要有具體實現(xiàn)類來實現(xiàn)它,所以就定義了ExamServiceImpl來具體實現(xiàn)ExamService中的方法。而業(yè)務(wù)層的id和password是通過實體數(shù)據(jù)層得到的。3) 數(shù)據(jù)管理層(數(shù)據(jù)持久化層),是提供數(shù)據(jù)的CRUD管理,增刪改查數(shù)據(jù)管理層:只關(guān)心數(shù)據(jù)操作,不涉與業(yè)務(wù)功能 如: 查找用戶。當(dāng)業(yè)務(wù)層想實體數(shù)據(jù)層發(fā)送請求時,實體數(shù)據(jù)層就會尋找特定的id和password,若找到相應(yīng)的id和pass
22、word就將結(jié)果返回給業(yè)務(wù)層,業(yè)務(wù)層再將結(jié)果返回給用戶界面。在entity包中, 核心類:EntityContext, 管理Users 和 Questions。 圖.2 系統(tǒng)層次圖3.2.2 Swing設(shè)計1)AWT使java成功的技術(shù):Applet AWT 具有強大的繪圖功能 AWT 的應(yīng)用控件很少(按鈕, 菜單) AWT 時候開發(fā)圖形,不適合開發(fā)應(yīng)用 2) Swing 是利用AWT繪圖功能, 完整的重新繪制了一套控件系統(tǒng) 包括:表格,Tree,等 JFrame 代表有框的窗口,中必須放置一個面板 JPanel 代表空白矩形區(qū)域面板, 在面板上可以添加控件/繪制圖形3.3 系統(tǒng)詳細設(shè)計3.3
23、.1 MVC設(shè)計模式MVC是三個單詞的縮寫,分別為:模型(Module),HYPERLINK :/baike.baidu /view/71981.htm視圖(View) 和控制Controller)。 MVC模式的目的就是實現(xiàn)Web系統(tǒng)的職能分工。 Model層實現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯。 View層用于與用戶的交互,通常用JSP來實現(xiàn)。 Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示。Model-View-Control模型-視圖-控制器。MVC的優(yōu)點:低耦合性 2)高重用性和可適用性 3)較低的生命周期成本 4)可維護性分離使得界面設(shè)計
24、和業(yè)務(wù)邏輯分離。說的更通俗點就是,將前臺設(shè)計和后臺編碼分離,便于美工和代碼工的合作,已達到更能完善,用戶體驗好的軟件設(shè)計。 1) Module 業(yè)務(wù)模型:軟件核心功能的抽象,封裝軟件核心功能。 如:注冊,登錄,開始考試,交卷。 2) View 視圖 (表現(xiàn)): 軟件的界面視圖, 用來呈現(xiàn)用戶數(shù)據(jù)狀態(tài), 接受用戶請求, 界面中只包含界面顯示處理邏輯。 3) Controller(控制器):耦合界面與業(yè)務(wù)模型,響應(yīng)處理用戶請求, 將用戶數(shù)據(jù)和請求轉(zhuǎn)發(fā)給業(yè)務(wù)模型,根據(jù)業(yè)務(wù)模型的處理結(jié)果更新 轉(zhuǎn)發(fā)視圖界面。 4) MVC 請求流程:用戶訪問View,發(fā)起請求,請求由控制器處理, 控制器請求業(yè)務(wù)模型完成
25、業(yè)務(wù)處理,控制器根據(jù)業(yè)務(wù)處理結(jié)果更新用戶 界面。3.3.2 對象依賴注入(IOC)依賴注入(IOC)這里注入的是loginFrame具體實例(汽油) 相當(dāng)于汽車和汽油。創(chuàng)建控制器類ClientContext類,中添加界面對象引用和注入方法。 達到控制器能夠操作這些對象的目的 ,以防空指針異常的出現(xiàn)。用戶界面創(chuàng)建對控制器的引用 。 如: private ClientContext clientContext; public void setClientContext(ClientContext context) this.clientContext = context; 在控制器引用創(chuàng)建的界面對
26、象。public void setLoginFrame(LoginFrame loginFrame)this.loginFrame=loginFrame; 3.3.3 簡單工廠模式簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現(xiàn)。工廠類是整個模式的關(guān)鍵,包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象。通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負責(zé)“消費”對象就可以了。而不必管這些對象究竟如何創(chuàng)建與如何組織的。明確了各自的職責(zé)和權(quán)利,有利于整個HYPERLINK :/baike.baidu /view
27、/1317046.htm軟件體系結(jié)構(gòu)的優(yōu)化。 其實,簡單工廠的核心思想就是并不在方法體實現(xiàn)特定的方法,而是在方法外部實現(xiàn)了特定定義的方法,所以如果在調(diào)用該方法的時候,簡單工廠就會實現(xiàn)方法。就是我給你一個方法名,你直接返回給我結(jié)果,我并不在這個方法考慮結(jié)果是怎么來的??傊?,簡單工廠方法就是用來封裝復(fù)雜的對象創(chuàng)建過程, 提供簡單的方法界面。4. 系統(tǒng)應(yīng)用程序設(shè)計4.1 系統(tǒng)各窗體模塊組成與實現(xiàn)4.1.1 布局的實現(xiàn) A 空布局 (絕對位置布局) 絕對布局管理, 是指定位置和寬高的布局 JFrame (w:574, H:390) |- JPanel (W:568, H:357) |- utton O
28、K (x:369 ,y:327 , w:92 ,H:21 ) |- utton Cancel (x:466 ,y:327 , w:92 ,H:21 ) B 布局管理器(相對位置布局,組件的大小和位置有布局管理器控制)1) BorderLayout (邊框布局) 將一個面板,分為東南西北中,每個位置只能放一個控件2)FlowLayout (流布局) JPanel 的默認布局是FlowLayout,多個元素順序排序,一行滿了,再接著排下一行。 | OKOKOKOKOKOK | | OKOKOK | | | 3)GridLayout (表格布局)指定行數(shù)、列數(shù)、元素按照等寬的行列表格進行布局,Swi
29、ng界面是一層套一層實現(xiàn)的,先把要嵌入的元素聲明出來,比如說JFrame(框架),utton(按鈕)。BorderLayout是實現(xiàn)布局管理器,JFrame frame =new JFrame(布局實現(xiàn));JPanel content=new JPanel(new BorderLayout();JPanel bottom=new JPanel(new BorderLayout();JPanel btnPanel=new JPanel(new FlowLayout();utton ok=new utton(OK);utton cancel=new utton(Cancel);btnPanel.a
30、dd(ok);btnPanel.add(cancel);bottom.add(BorderLayout.WEST,btnPanel);content.add(BorderLayout.SOUTH,bottom);frame.setContentPane(content);frame.setSize(300,500);frame.setVisible(true);4.1.2 包中資源的加載: Class 實例獲得: a. String.class b. str.getClass() c. Class.forName(java.lang.String) 1) 獲得類的Class實例 2) 利用Cl
31、ass實例的方法 getResource() 方法獲得資源 的URL, 可以進一步打開流。 如: 類 MenuFrame.class 的同包中有圖片title.png URL url = getClass().getResourse(title.png) URL url = MenuFrame.class.getResourse(title.png) 其中title.png 表示相對路徑訪問, title.png和Class 在同一個包下, 如果參數(shù)以/ 表示絕對路徑,訪問其中/ CLASSPATH的根,如:/tarena/elts/gui/title.png 3) 打開圖片 ImageIco
32、n ico = new ImageIcon(url); 4) 可以利用InputStream in = url.openStream(); 打開為流 5) 從package(classpath 上)中 打開文本文件 new BufferedReader(new InputStreamReader( getClass().getReaource(test.txt).openStream() 4.1.3 loginFrame的實現(xiàn)創(chuàng)建容面板,在容面板里面創(chuàng)建中間面板和Button面板,中間面板主要是顯示用戶名和密碼框,是用來得到用戶輸入的。按鈕面板上嵌入2個按鈕,分別是login按鈕,cancel
33、按鈕。1)創(chuàng)建容面板,在容面板里面有中間面板和按鈕面板,并用邊框布局將面板放在特定的位置,邊框布局的北邊設(shè)置一個標簽,用來顯示用戶界面的標題,中間面板放在邊框布局的中間,按鈕面板放在邊框布局的南邊。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,8,8,8);/4個方向空白邊框p.add(BorderLayout.NORTH,(new JLabel(登錄系統(tǒng),JLabel.CENTER);p.add(BorderLayout.CENTER
34、,createCenterPane();p.add(BorderLayout.SOUTH,createBtnPane();return p;2)實現(xiàn)在容面板中定義的中間面板,先設(shè)置一個空白邊框,并在邊框布局的北邊創(chuàng)建Id和Pwd面板,將登錄得錯誤信息顯示在邊框布局的中間,最后將設(shè)置好的面板返回,用于用戶操作。 private JPanel createCenterPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,0,0,0);p.add(BorderLayout.NORTH,createIdPw
35、dPane();message=new JLabel(,JLabel.CENTER);p.add(BorderLayout.CENTER,message);return p;3)實現(xiàn)在容面板中定義的按鈕面板,創(chuàng)建2個按鈕,分別是Login和Cancel,login按鈕是為了得到用戶的登錄請求, cancel按鈕是為了得到用戶的取消請求,將按鈕添加到面板中。 private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();utton login=new utton(Login);utton cancel=new utton(C
36、ancel);getRootPane().setDefaultButton(login);p.add(login);p.add(cancel);this.idField=idField;p.add(BorderLayout.CENTER,idField);return p; 4)為登錄界面增加方法,用來獲取用戶的ID(getUserId()和PWD(getPwd(),用來判斷是否在設(shè)備文件中。private JTextField idField;private JPasswordField pwdField;private JLabel message;public int getUserId
37、()return Integer.parseInt(idField.getText();public String getPassword()char pwd=pwdField.getPassword();return new String(pwd);public void showMessage(String message)this.message.setText(message);5)若用戶名或密碼錯誤,設(shè)置錯誤提示消息,拋出自定義異常 IdOrPwdException,自定義異常的聲明必須繼承自它的父類Exception才能實現(xiàn),原本的id:1002和pwd:1234,在這里輸錯密碼,
38、用于執(zhí)行密碼異常,最后將這個錯誤信息在邊框布局的中間顯示。(測試的Id:1002;pwd:3456)6)為loginFrame增加對控制器對象的引用, LoginFrame 界面增加 (ClientContext) 的引用和對象注入代碼 。一定要這樣做,不然會產(chǎn)生空指針異常。private ClientContext clientContext;public void setClientContext(ClientContext clientContext)this.clientContext=clientContext;圖.3 loginFrame窗體4.1.4 menuFrame的實現(xiàn)創(chuàng)建
39、容面板,在容面板實現(xiàn)菜單面板,在菜單面板更新考試信息和創(chuàng)建按鈕面板,在按鈕面板創(chuàng)建4個按鈕,分別為開始按鈕,分數(shù)按鈕,消息按鈕,退出按鈕。1)容面板,容面板里面有2個標簽和一個菜單面板,其中,一個標簽用來顯示圖片,另外一個標簽用來顯示信息,菜單面板的具體設(shè)置在另外一個面板實現(xiàn),這里就實現(xiàn)了簡單工廠的方法。不在這個面板具體實現(xiàn),而是在別的面板聲明,這個簡單工廠的方法在別的窗體里面同樣可以實現(xiàn)。另外,在菜單面板中創(chuàng)建一個標簽,用來顯示用戶信息,因為當(dāng)用戶登錄用戶登錄成功后,就會返回一個登錄用戶,將這個登錄用戶在界面上顯示,用來表達友好的效果。其次,在菜單面板中在創(chuàng)建一個按鈕面板,最后將創(chuàng)建好的按鈕
40、和標簽返回給菜單面板。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();ImageIcon icon=new ImageIcon(this.getClass().getResource(title.png);p.add(BorderLayout.NORTH,new JLabel(icon);p.add(BorderLayout.CENTER,createMenuPane();p.add(BorderLayout.SOUTH,new JLabel(所有,違版必究!,JLabel.RIGHT);retu
41、rn p; private JPanel createMenuPane()JPanel p=new JPanel(new BorderLayout();userInfo=new JLabel(,JLabel.CENTER);p.add(BorderLayout.NORTH,userInfo);p.add(BorderLayout.CENTER,createBtnPane();return p;2)實現(xiàn)在菜單面板中定義的按鈕面板,開始按鈕是用來讓用戶考試的,當(dāng)用戶點擊開始按鈕的時候,就會跳到考試窗體具體考試;當(dāng)用戶點分數(shù)按鈕的時候,就會用一個消息框顯示用戶考試的成績,注意,只有當(dāng)用戶已經(jīng)考完試了
42、才會有具體的分數(shù),這在業(yè)務(wù)邏輯里面具體判斷;當(dāng)用戶點考試規(guī)則按鈕的時候,就會用一個消息框來具體顯示考試規(guī)則;當(dāng)用戶點退出按鈕的時候,就會顯示一個確定框提示用戶,真的退出嗎?。若用戶點是,則表示退出系統(tǒng),若用戶點否,則表示用戶需要停留在該頁面,則保持頁面不動。private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();utton start=createImgBtn(exam.png,開始);utton result=createImgBtn(result.png,分數(shù));utton msg=createImgBtn(me
43、ssage.png,考試規(guī)則);utton exit=createImgBtn(exit.png,退出);p.add(start);p.add(result);p.add(msg);p.add(exit);getRootPane().setDefaultButton(start);3)分別為start,result,msg,exit按鈕添加觸發(fā)事件, 當(dāng)用戶點開始按鈕的時候,就去ClientContext調(diào)用start()方法 當(dāng)用戶點分數(shù)按鈕的時候,就去ClientContext調(diào)用sresult()方法 當(dāng)用戶點考試規(guī)則按鈕的時候,就去ClientContext調(diào)用msg()方法 當(dāng)用戶點
44、退出按鈕的時候,就去ClientContext調(diào)用exit()方法 start .addActionListener(new ActionListener()public void actionPerformed(ActionEvent a)clientContext.start();); result.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.result();); msg.addActionListener(new ActionListener(
45、)public void actionPerformed(ActionEvent e)clientContext.msg(););4)更新用戶界面若登錄成功,就會返回一個用戶對象,務(wù)必將userInfo 引用到界面控件對象用戶顯示當(dāng)前是哪個用戶在考試,顯示歡迎界面,以達到有好的界面效果,更新用戶界面信息,以便于用戶考試。 private JLabel userInfo; public void updateView(User user)String str=歡迎+user+參加考試!;userInfo.setText(str);utton btn=new utton(txt,icon);btn
46、.setVerticalTextPosition(utton.BOTTOM);btn.setHorizontalTextPosition(utton.CENTER);5)為menuFrame添加對控制器對象的引用, LoginFrame 界面增加 控制器(ClientContext) 的引用和對象注入代碼 。一定要這樣做,不然會產(chǎn)生空指針異常。private ClientContext clientContext;public void setClientContext(ClientContext clientContext) this.clientContext = clientContex
47、t;6)當(dāng)用戶關(guān)閉窗口是增加確定按鈕 this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)clientContext.exit(LoginFrame.this););圖.4 menuFrame窗體ExamFrame窗體1)在考試的時候,若用戶點關(guān)閉按鈕,就會調(diào)用交卷方法,增加控制器響應(yīng)按鈕,而不是實際關(guān)閉,以保證業(yè)務(wù)的合理性。this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent
48、e)clientContext.send(););2)創(chuàng)建容面板,其中包含考試面板和工具面板。首先,要用IamgeIcon類將圖片顯示,其中,考試面板是用于顯示考題,選項;工具面板用來嵌套用戶的需求,比如說,上一題,下一題,交卷等。同樣的,它們都是用邊框布局來布局的,分別用東、西、南、北4個方位來分布,最后將創(chuàng)建好的面板返回。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,8,8,8);ImageIcon icon=new ImageIc
49、on(this.getClass().getResource(title.png);p.add(BorderLayout.NORTH,new JLabel(icon);p.add(BorderLayout.CENTER,createExamPane();p.add(BorderLayout.SOUTH,createToolsPane();return p;3)創(chuàng)建考試面板,首先在考試面板邊框布局的北邊顯示考試信息,比如說編號,考試時間,考試科目等;另外,在考試面板邊框布局的中間創(chuàng)建一個考題面板;在考試面板邊框布局的南邊創(chuàng)建一個選項面板。最后,將創(chuàng)建好的對象返回,用于在考試界面顯示。privat
50、e JPanel createExamPane()JPanel p=new JPanel(new BorderLayout();examInfo=new JLabel(,JLabel.CENTER);p.add(BorderLayout.NORTH,examInfo);p.add(BorderLayout.CENTER,createQuestionPane();p.add(BorderLayout.SOUTH,createOptionsPane();return p;4)創(chuàng)建工具面板,首先,在周圍邊框嵌入一個空白邊框;其次,在工具面板邊框布局的西邊加入題目數(shù)量標簽;在工具面板邊框布局的東面加入
51、定時器標簽;在工具面板邊框布局的中間創(chuàng)建按鈕面板;private JPanel createToolsPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(0,10,0,10);questionCount =new JLabel(,JLabel.LEFT); timer =new JLabel(); p.add(BorderLayout.WEST,questionCount);p.add(BorderLayout.EAST,timer);p.add(BorderLayout.CENTER,createB
52、tnPane();return p;5)創(chuàng)建按鈕面板,上一個按鈕,下一個按鈕,交卷按鈕,并分別為上一個,下一個,交卷按鈕增加觸發(fā)事件。private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();prev=new utton(上一個);prev.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.prev(););next=new utton(下一個);next.addActionList
53、ener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.next(););utton send=new utton(交卷);send.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.send(););p.add(prev);p.add(next);p.add(send);return p;6)更新考試界面,當(dāng)用戶點擊上一個或下一個按鈕時,需要先得到當(dāng)前
54、用戶的答案,然后在找到用戶想要的特定題目的下標。public void updateView(ExamInfo examInfo, QuestionInfo questionInfo) this.examInfo.setText(examInfo.toString();this.questionArea.setText(questionInfo.toString();this.questionCount.setText(題目:+examInfo.getQuestionCount()+的+(questionInfo.getQuestionIndex()+1)+題);this.updateOpti
55、ons(questionInfo.getUserAnswers();this.updateQuestionCount(examInfo.getQuestionCount(),questionInfo.getQuestionIndex();this.updateButtons(examInfo.getQuestionCount(), questionInfo.getQuestionIndex();7)得到用戶答案,判斷這個選項框是否被選中,若該選項框被選中,就把這個value寫到UserAnswers集合中。public List getUserAnswers()List ans=new Arr
56、ayList();for(Option o:options)if(o.isSelected()ans.add(o.value);return ans;圖.5 examFrame的窗體4.1.6 ClientContext控制器 ClientContext是非常重要的,它充當(dāng)用戶界面和業(yè)務(wù)層的橋梁,每當(dāng)用戶層有請求的時候,都是由控制器捕獲請求,然后控制器在去業(yè)務(wù)層尋找特定的方法處理。等到業(yè)務(wù)層處理好數(shù)據(jù)后,也將結(jié)果返回給控制器ClientContext,并由控制器將用戶請求的數(shù)據(jù)返回給用戶層。 在ClientContext中最重要的就是對界面對象的引用,因為它們互相之間 是相互依賴的,如果不注意
57、這個問題就會發(fā)生空指針異常。如:public void setLoginFrame(LoginFrame loginFrame)this.loginFrame=loginFrame;1)處理用戶層的登錄請求,先調(diào)用業(yè)務(wù)層的登錄方法,若登錄成功,就以新用戶更新菜單界面 (UpdateView),將登錄界面顯示為false,考試界面設(shè)置為true,這樣做就是為了跳轉(zhuǎn)到MenuFrame,并為MenuFrame界面增加更新用戶信息的方法,加入trycatch模塊 public void login()tryint id=loginFrame.getUserId();String pwd=loginF
58、rame.getPassword();User user=examService.login(id,pwd);menuFrame.updateView(user); loginFrame.setVisible(false);menuFrame.setVisible(true);catch(IdOrPwdException e)e.printStackTrace();loginFrame.showMessage(登錄失敗+e.getMessage();/JOptionPane.showMessageDialog(loginFrame, e.getMessage();catch(NumberFor
59、matException e)loginFrame.showMessage(ID只能為數(shù)字);catch(Exception e)e.printStackTrace();loginFrame.showMessage(登錄失敗+e.getMessage();2)處理菜單界面的開始考試功能,更新考試界面,將menuFrame設(shè)置為不可見,將ExamFrame設(shè)置為可見,這樣就可以顯示考試界面了,當(dāng)用戶開始的時候,啟動定時器,開始計時功能,提示用戶考試時間。public void start()tryexamInfo=examService.start();QuestionInfo question
60、Info=examService.getQuestions(0);this.currentQuestion=questionInfo;examFrame.updateView(examInfo,questionInfo);menuFrame.setVisible(false);examFrame.setVisible(true);startTimer();catch(Exception e)e.printStackTrace();JOptionPane.showMessageDialog(menuFrame, e.getMessage();3)上一題,下一題的處理事件 當(dāng)用戶調(diào)用下一題按鈕時,
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 定點幫扶活動方案
- 尋訪老街巷活動方案
- 實踐活動視頻活動方案
- 寢室會議活動策劃方案
- 小學(xué)晨讀活動方案
- 小學(xué)復(fù)述課文活動方案
- 家居清倉甩賣活動方案
- 小吃地攤活動方案
- 小吃評比活動方案
- 賓館打折促銷活動方案
- 如何根據(jù)三視圖畫軸測圖及補視圖缺線課件
- 《水產(chǎn)養(yǎng)殖前沿講座》課程教學(xué)大綱
- 漁業(yè)成品油價格補助專項資金管理暫行辦法
- 水庫工程建設(shè)征地移民安置監(jiān)測評估本底調(diào)查報告
- 2023年06月新疆生產(chǎn)建設(shè)兵團第十二師“三支一扶”招募高校畢業(yè)生筆試題庫含答案解析
- 基于C#的WinForm程序設(shè)計學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 十堰市張灣區(qū)紅衛(wèi)街道社區(qū)工作者考試真題2022
- 突發(fā)性耳聾培訓(xùn)課件
- DB65T 3558-2013多浪羊飼養(yǎng)管理技術(shù)規(guī)程
- 計算機組成原理(山東科技大學(xué))知到章節(jié)答案智慧樹2023年
- 如何打造優(yōu)秀團隊
評論
0/150
提交評論