版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 PAGE27 / NUMPAGES32 本科生畢業(yè)設(shè)計(jì)報告 課 題: 基于java的在線考試系統(tǒng) 作 者: 專 業(yè): 班 級: 指導(dǎo)教師: 2012 年 04 月 02 日摘 要在線考試系統(tǒng)與傳統(tǒng)考試相比,可以實(shí)現(xiàn)考務(wù)工作的全自動化管理,并有效地利用校園網(wǎng)的軟硬件資源,實(shí)現(xiàn)考試的客觀性和公證性;自動化組卷、閱卷、判分的流程更是大大的減輕教師的工作強(qiáng)度。在線考試系統(tǒng)旨在實(shí)現(xiàn)考試的無紙化管理,基于計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)進(jìn)行在線考試系統(tǒng)的使用,方便校方對考試的管理。本程序是基于eclipse的在線考試系統(tǒng),利用MVC架構(gòu)編寫,將功能分為3個模塊,分別是視圖,模型和控制器。將數(shù)據(jù)分為3個層次,分別為UI層
2、,業(yè)務(wù)層,實(shí)體數(shù)據(jù)層,各層之間模塊獨(dú)立化,便于數(shù)據(jù)管理,易于系統(tǒng)維護(hù)關(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è)計(jì)4HYPERLINK l _Toc1374533503.1系統(tǒng)需求分析4HYPERLINK
7、 l _Toc1374533513.2系統(tǒng)概要設(shè)計(jì)4HYPERLINK l _Toc1374533523.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)4HYPERLINK l _Toc1374533533.2.2 Swing設(shè)計(jì)5HYPERLINK l _Toc1374533543.3 系統(tǒng)詳細(xì)設(shè)計(jì)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è)計(jì)8HYPERLINK
8、l _Toc1374533564.1 用戶層界面的實(shí)現(xiàn)8HYPERLINK l _Toc1374533574.1.1 布局的實(shí)現(xiàn)9HYPERLINK l _Toc1374533584.1.2 welcomeWindow的實(shí)現(xiàn)9HYPERLINK l _Toc1374533594.1.3 loginFrame的實(shí)現(xiàn)10HYPERLINK l _Toc1374533604.1.4 menuFrom的實(shí)現(xiàn) PAGEREF _Toc137453360 h 19HYPERLINK l _Toc1374533614.1.5 examFrame的實(shí)現(xiàn) PAGEREF _Toc137453361 h 21HY
9、PERLINK l _Toc1374533624.1.6 clientContext的實(shí)現(xiàn) PAGEREF _Toc137453362 h 22HYPERLINK l _Toc1374533644.2 業(yè)務(wù)層界面的實(shí)現(xiàn) PAGEREF _Toc137453364 h 23HYPERLINK l _Toc1374533654.2.1 ExamService的實(shí)現(xiàn) PAGEREF _Toc137453365 h 23HYPERLINK l _Toc1374533664.2.2 用戶登錄的實(shí)現(xiàn) PAGEREF _Toc137453366 h 24HYPERLINK l _Toc1374533674.
10、2.3 開始考試的實(shí)現(xiàn) PAGEREF _Toc137453367 h 25HYPERLINK l _Toc1374533684.2.4 獲得考卷的實(shí)現(xiàn)HYPERLINK l _To4.2.5 保存用戶答案的實(shí)現(xiàn)274.2.6 判分的實(shí)現(xiàn)27HYPERLINK l _Toc1374533694.3 數(shù)據(jù)層的實(shí)現(xiàn)27HYPERLINK l _Toc1374533604.3.1線性表HashMap27HYPERLINK l _Toc1374533604.3.2Users集合的實(shí)現(xiàn)27HYPERLINK l _Toc1374533614.3.3Questions集合的實(shí)現(xiàn)2
11、8HYPERLINK l _Toc137453370致29HYPERLINK l _Toc137453370參考文獻(xiàn) PAGEREF _Toc137453370 h 301. 序言1.1 系統(tǒng)描述在線考試系統(tǒng)主要是學(xué)生通過客戶機(jī)登陸自己的賬號,然后完成課程科目的考試,提交,判分的過程。系統(tǒng)主要分成兩個部分,分別是服務(wù)器端和客戶端,兩者通過線程的連接來完成考試的各項(xiàng)功能。在服務(wù)器端,服務(wù)器先啟動,讀取配置文件,然后將試卷和學(xué)生的信息,包括學(xué)號,密碼,讀取到服務(wù)器中。這些信息的讀取,會被封裝在其他的類中,等待客戶端發(fā)送數(shù)據(jù)連接請求,一旦發(fā)現(xiàn)有請求,就創(chuàng)建一個服務(wù)線程與之保持連接,等待考試完成的數(shù)據(jù)
12、請求發(fā)送過來,再斷開連接。過程中服務(wù)器是一直處于監(jiān)聽客戶端請求連接的運(yùn)行狀態(tài)??蛻舳瞬糠?,為了方便操作,應(yīng)用到圖形界面swing的技術(shù),這里一共有三個部分的界面,第一個就是學(xué)生登錄的界面,學(xué)生要輸入學(xué)號和密碼登錄服務(wù)器;其次是學(xué)生選擇考試科目的界面,要注意先將前面一個窗口銷毀,然后再創(chuàng)建新的窗口;最后是學(xué)生考試界面的窗口,功能較多,設(shè)計(jì)也稍顯復(fù)雜。最后用戶點(diǎn)擊交卷完成考試過程,并且顯示得分,最后關(guān)閉窗口,服務(wù)器同時要斷開連接,線程結(jié)束。1.2 結(jié)構(gòu)框圖圖12. 所用開發(fā)工具簡介2.1 Eclipse簡介Eclipse 是一個開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一
13、個框架和一組服務(wù),用于通過HYPERLINK :/baike.baidu /view/18979.htm插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴(kuò)展 Eclipse 的軟件開發(fā)人員,因?yàn)樗试S他們構(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è)計(jì)語言
15、,它繼承了 C+ 語言面向?qū)ο蠹夹g(shù)的核心,多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對象所占據(jù)的存空間,使得程序員不用再為存管理而擔(dān)憂。Java具有以下鮮明特點(diǎn):平臺無關(guān)性平臺無關(guān)性是指Java能運(yùn)行于不同的平臺。Java引進(jìn)虛擬機(jī) 原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺的Java接口之間。使用Java編寫的程序能在世界圍共享。 2.安全性Java對程序提供了安全管理器,防止程序的非法訪問。 面向?qū)ο?Java吸取了C+面向?qū)ο蟮母拍睿瑢YPERLINK :/baike.baidu /view/262940.htm數(shù)據(jù)封裝于 類中,利用類的優(yōu)點(diǎn),實(shí)現(xiàn)了程序的簡潔性和便
16、于維護(hù)性。類的封裝性、繼承性等有關(guān)對象的特性,使程序代碼只需一次編譯,然后通過上述特性反復(fù)利用。程序員 只需把主要精力用在類和接口的設(shè)計(jì)和應(yīng)用上。Java提供了眾多的一般對象的類,通過繼承即可使用父類的方法。分布式Java建立在擴(kuò)展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ò)上的文件和使用本機(jī)文件一樣容易。 健壯性Java致力于檢查程序在編譯和運(yùn)行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。HYPERLINK :/baike.baidu /view/29.htmJava自己操縱存減少了存出錯的可能性。Java還實(shí)現(xiàn)了真HYPERLINK :/baike.baidu /view/209670.htm數(shù)組,避免了覆蓋數(shù)據(jù)的可能,這些功能特征大大提高了開發(fā)Java應(yīng)用程序的周期。并且Java還提供了Null指針檢測、數(shù)組邊界檢測、異常出口、Byte code校驗(yàn)等功能。 6.動態(tài) java程序的基本組成單元就是類,有些類是自己編寫的
18、,有些是從類庫中引入的,而類又是運(yùn)行 時動態(tài)裝載的,這就使得Java可以在分部環(huán)境中動態(tài)的維護(hù)程序與分類,而不像C+那樣,沒檔期類庫升級以后,如果想讓程序具有新類庫提供的功能,就需 要修改程序,重新編譯。2.3 Java語言在Eclipse中的應(yīng)用 Eclipse是Java語言的開發(fā)工具,通過Eclipse工具可以實(shí)現(xiàn)Java面向?qū)ο蟮乃枷?,Java中的接口用于實(shí)際編程中,定義一定的接口,并用Java實(shí)現(xiàn)類來實(shí)現(xiàn)特定的接口。 具體步驟:1、安裝JDK,并在高級設(shè)置里面配置環(huán)境變量,打開Eclipse開發(fā)工具, 并在Eclipse里面講安裝好的JDK配置進(jìn)去。 2、在Eclipse中新建一個Ja
19、va Project,在src目錄下新建包。(注意:包名一定要有意義。)在包里面新建類,同樣的,類名聲明也要有意義。3、調(diào)試的時候要在main里面調(diào)試。3. 系統(tǒng)總體設(shè)計(jì)3.1 系統(tǒng)需求分析在傳統(tǒng)的學(xué)校教學(xué)中,進(jìn)行一場考試,要求老師刻試卷、印試卷、安排考試、監(jiān)考、收集試卷、評改試卷、講評試卷和分析試卷,這是一個繁雜的過程,需要大量人力、物力與時間的投入,已經(jīng)越來越不適應(yīng)學(xué)校信息化建設(shè)與現(xiàn)代教學(xué)的需要。因此,開發(fā)基于eclipse的在線考試系統(tǒng)。3.2 系統(tǒng)概要設(shè)計(jì)3.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)三層架構(gòu)(整體架構(gòu))DataLayer-BisnussLayer-ViewLayer數(shù)據(jù)訪問層-業(yè)務(wù)邏輯層界
20、面層,三層架構(gòu),是當(dāng)今軟件開發(fā)的一種流行架構(gòu),有點(diǎn):使得數(shù)據(jù)與業(yè)務(wù)邏輯的分離,業(yè)務(wù)邏輯與用戶界面的分離,但是三者相互依賴,用戶界面層依賴業(yè)務(wù)邏輯層依賴數(shù)據(jù)訪問層。 1) 表現(xiàn)層(數(shù)據(jù)呈現(xiàn)/用戶交互)在ui包中 的 用戶界面和控制器(ClientContext) 如:當(dāng)點(diǎn)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方法。因?yàn)镋xamService是接口,必須要有具體實(shí)現(xiàn)類來實(shí)現(xiàn)它,所以就定義了ExamServiceImpl來具體實(shí)現(xiàn)ExamService中的方法。而業(yè)務(wù)層的id和password是通過實(shí)體數(shù)據(jù)層得到的。3) 數(shù)據(jù)管理層(數(shù)據(jù)持久化層),是提供數(shù)據(jù)的CRUD管理,增刪改查數(shù)據(jù)管理層:只關(guān)心數(shù)據(jù)操作,不涉與業(yè)務(wù)功能 如: 查找用戶。當(dāng)業(yè)務(wù)層想實(shí)體數(shù)據(jù)層發(fā)送請求時,實(shí)體數(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è)計(jì)1)AWT使java成功的技術(shù):Applet AWT 具有強(qiáng)大的繪圖功能 AWT 的應(yīng)用控件很少(按鈕, 菜單) AWT 時候開發(fā)圖形,不適合開發(fā)應(yīng)用 2) Swing 是利用AWT繪圖功能, 完整的重新繪制了一套控件系統(tǒng) 包括:表格,Tree,等 JFrame 代表有框的窗口,中必須放置一個面板 JPanel 代表空白矩形區(qū)域面板, 在面板上可以添加控件/繪制圖形3.3 系統(tǒng)詳細(xì)設(shè)計(jì)3.3
23、.1 MVC設(shè)計(jì)模式MVC是三個單詞的縮寫,分別為:模型(Module),HYPERLINK :/baike.baidu /view/71981.htm視圖(View) 和控制Controller)。 MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的職能分工。 Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯。 View層用于與用戶的交互,通常用JSP來實(shí)現(xiàn)。 Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示。Model-View-Control模型-視圖-控制器。MVC的優(yōu)點(diǎn):低耦合性 2)高重用性和可適用性 3)較低的生命周期成本 4)可維護(hù)性分離使得界面設(shè)計(jì)
24、和業(yè)務(wù)邏輯分離。說的更通俗點(diǎn)就是,將前臺設(shè)計(jì)和后臺編碼分離,便于美工和代碼工的合作,已達(dá)到更能完善,用戶體驗(yàn)好的軟件設(shè)計(jì)。 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具體實(shí)例(汽油) 相當(dāng)于汽車和汽油。創(chuàng)建控制器類ClientContext類,中添加界面對象引用和注入方法。 達(dá)到控制器能夠操作這些對象的目的 ,以防空指針異常的出現(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 簡單工廠模式簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式,可以理解為是不同工廠模式的一個特殊實(shí)現(xiàn)。工廠類是整個模式的關(guān)鍵,包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象。通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對象就可以了。而不必管這些對象究竟如何創(chuàng)建與如何組織的。明確了各自的職責(zé)和權(quán)利,有利于整個HYPERLINK :/baike.baidu /view
27、/1317046.htm軟件體系結(jié)構(gòu)的優(yōu)化。 其實(shí),簡單工廠的核心思想就是并不在方法體實(shí)現(xiàn)特定的方法,而是在方法外部實(shí)現(xiàn)了特定定義的方法,所以如果在調(diào)用該方法的時候,簡單工廠就會實(shí)現(xiàn)方法。就是我給你一個方法名,你直接返回給我結(jié)果,我并不在這個方法考慮結(jié)果是怎么來的。總之,簡單工廠方法就是用來封裝復(fù)雜的對象創(chuàng)建過程, 提供簡單的方法界面。4. 系統(tǒng)應(yīng)用程序設(shè)計(jì)4.1 系統(tǒng)各窗體模塊組成與實(shí)現(xiàn)4.1.1 布局的實(shí)現(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 的默認(rèn)布局是FlowLayout,多個元素順序排序,一行滿了,再接著排下一行。 | OKOKOKOKOKOK | | OKOKOK | | | 3)GridLayout (表格布局)指定行數(shù)、列數(shù)、元素按照等寬的行列表格進(jìn)行布局,Swi
29、ng界面是一層套一層實(shí)現(xiàn)的,先把要嵌入的元素聲明出來,比如說JFrame(框架),utton(按鈕)。BorderLayout是實(shí)現(xiàn)布局管理器,JFrame frame =new JFrame(布局實(shí)現(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 實(shí)例獲得: a. String.class b. str.getClass() c. Class.forName(java.lang.String) 1) 獲得類的Class實(shí)例 2) 利用Cl
31、ass實(shí)例的方法 getResource() 方法獲得資源 的URL, 可以進(jìn)一步打開流。 如: 類 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的實(shí)現(xiàn)創(chuàng)建容面板,在容面板里面創(chuàng)建中間面板和Button面板,中間面板主要是顯示用戶名和密碼框,是用來得到用戶輸入的。按鈕面板上嵌入2個按鈕,分別是login按鈕,cancel
33、按鈕。1)創(chuàng)建容面板,在容面板里面有中間面板和按鈕面板,并用邊框布局將面板放在特定的位置,邊框布局的北邊設(shè)置一個標(biāo)簽,用來顯示用戶界面的標(biāo)題,中間面板放在邊框布局的中間,按鈕面板放在邊框布局的南邊。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)實(shí)現(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)實(shí)現(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才能實(shí)現(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的實(shí)現(xiàn)創(chuàng)建
39、容面板,在容面板實(shí)現(xiàn)菜單面板,在菜單面板更新考試信息和創(chuàng)建按鈕面板,在按鈕面板創(chuàng)建4個按鈕,分別為開始按鈕,分?jǐn)?shù)按鈕,消息按鈕,退出按鈕。1)容面板,容面板里面有2個標(biāo)簽和一個菜單面板,其中,一個標(biāo)簽用來顯示圖片,另外一個標(biāo)簽用來顯示信息,菜單面板的具體設(shè)置在另外一個面板實(shí)現(xiàn),這里就實(shí)現(xiàn)了簡單工廠的方法。不在這個面板具體實(shí)現(xiàn),而是在別的面板聲明,這個簡單工廠的方法在別的窗體里面同樣可以實(shí)現(xiàn)。另外,在菜單面板中創(chuàng)建一個標(biāo)簽,用來顯示用戶信息,因?yàn)楫?dāng)用戶登錄用戶登錄成功后,就會返回一個登錄用戶,將這個登錄用戶在界面上顯示,用來表達(dá)友好的效果。其次,在菜單面板中在創(chuàng)建一個按鈕面板,最后將創(chuàng)建好的按鈕
40、和標(biāo)簽返回給菜單面板。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)實(shí)現(xiàn)在菜單面板中定義的按鈕面板,開始按鈕是用來讓用戶考試的,當(dāng)用戶點(diǎn)擊開始按鈕的時候,就會跳到考試窗體具體考試;當(dāng)用戶點(diǎn)分?jǐn)?shù)按鈕的時候,就會用一個消息框顯示用戶考試的成績,注意,只有當(dāng)用戶已經(jīng)考完試了
42、才會有具體的分?jǐn)?shù),這在業(yè)務(wù)邏輯里面具體判斷;當(dāng)用戶點(diǎn)考試規(guī)則按鈕的時候,就會用一個消息框來具體顯示考試規(guī)則;當(dāng)用戶點(diǎn)退出按鈕的時候,就會顯示一個確定框提示用戶,真的退出嗎?。若用戶點(diǎn)是,則表示退出系統(tǒng),若用戶點(diǎn)否,則表示用戶需要停留在該頁面,則保持頁面不動。private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();utton start=createImgBtn(exam.png,開始);utton result=createImgBtn(result.png,分?jǐn)?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)用戶點(diǎn)開始按鈕的時候,就去ClientContext調(diào)用start()方法 當(dāng)用戶點(diǎn)分?jǐn)?shù)按鈕的時候,就去ClientContext調(diào)用sresult()方法 當(dāng)用戶點(diǎn)考試規(guī)則按鈕的時候,就去ClientContext調(diào)用msg()方法 當(dāng)用戶點(diǎn)
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)前是哪個用戶在考試,顯示歡迎界面,以達(dá)到有好的界面效果,更新用戶界面信息,以便于用戶考試。 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)在考試的時候,若用戶點(diǎn)關(guān)閉按鈕,就會調(diào)用交卷方法,增加控制器響應(yīng)按鈕,而不是實(shí)際關(guān)閉,以保證業(yè)務(wù)的合理性。this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent
48、e)clientContext.send(););2)創(chuàng)建容面板,其中包含考試面板和工具面板。首先,要用IamgeIcon類將圖片顯示,其中,考試面板是用于顯示考題,選項(xiàng);工具面板用來嵌套用戶的需求,比如說,上一題,下一題,交卷等。同樣的,它們都是用邊框布局來布局的,分別用東、西、南、北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)建一個選項(xià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ù)量標(biāo)簽;在工具面板邊框布局的東面加入
51、定時器標(biāo)簽;在工具面板邊框布局的中間創(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)用戶點(diǎn)擊上一個或下一個按鈕時,需要先得到當(dāng)前
54、用戶的答案,然后在找到用戶想要的特定題目的下標(biāo)。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)得到用戶答案,判斷這個選項(xiàng)框是否被選中,若該選項(xiàng)框被選中,就把這個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中最重要的就是對界面對象的引用,因?yàn)樗鼈兓ハ嘀g 是相互依賴的,如果不注意
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)用戶開始的時候,啟動定時器,開始計(jì)時功能,提示用戶考試時間。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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南生物機(jī)電職業(yè)技術(shù)學(xué)院《酒店?duì)I銷實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 【物理】《同一直線上二力的合成》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教版(2024)初中物理八年級下冊
- 高考物理總復(fù)習(xí)《計(jì)算題》專項(xiàng)測試卷含答案
- 重慶醫(yī)藥高等??茖W(xué)?!毒G色設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶公共運(yùn)輸職業(yè)學(xué)院《算法分析與設(shè)計(jì)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州電子商務(wù)職業(yè)學(xué)院《人文地理學(xué)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江科技學(xué)院《工程地質(zhì)與地基基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國青年政治學(xué)院《第二外語日語》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州汽車工程職業(yè)學(xué)院《走近微電子》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)“三定一聘”工作實(shí)施方案
- 財經(jīng)素養(yǎng)知識考試題及答案
- 2024年云南大理州鶴慶縣農(nóng)業(yè)農(nóng)村局招聘農(nóng)技人員6人歷年高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- -長峰醫(yī)院火災(zāi)事故教育
- 《經(jīng)濟(jì)法基礎(chǔ)》全套教學(xué)課件
- 2024年618調(diào)味品銷售數(shù)據(jù)解讀報告-星圖數(shù)據(jù)x味動中國組委會-202406
- 雙方結(jié)清賠償協(xié)議書
- 2024年河北省中考物理試卷附答案
- 安徽省安慶四中學(xué)2024年中考猜題數(shù)學(xué)試卷含解析
- GB/T 44052-2024液壓傳動過濾器性能特性的標(biāo)識
- PLM項(xiàng)目產(chǎn)品全生命周期建設(shè)方案
評論
0/150
提交評論