![java實(shí)訓(xùn)標(biāo)準(zhǔn)化考試系統(tǒng)cs版_第1頁](http://file4.renrendoc.com/view/7bbfbe7cd18d3ebc18584c7efad86578/7bbfbe7cd18d3ebc18584c7efad865781.gif)
![java實(shí)訓(xùn)標(biāo)準(zhǔn)化考試系統(tǒng)cs版_第2頁](http://file4.renrendoc.com/view/7bbfbe7cd18d3ebc18584c7efad86578/7bbfbe7cd18d3ebc18584c7efad865782.gif)
![java實(shí)訓(xùn)標(biāo)準(zhǔn)化考試系統(tǒng)cs版_第3頁](http://file4.renrendoc.com/view/7bbfbe7cd18d3ebc18584c7efad86578/7bbfbe7cd18d3ebc18584c7efad865783.gif)
![java實(shí)訓(xùn)標(biāo)準(zhǔn)化考試系統(tǒng)cs版_第4頁](http://file4.renrendoc.com/view/7bbfbe7cd18d3ebc18584c7efad86578/7bbfbe7cd18d3ebc18584c7efad865784.gif)
![java實(shí)訓(xùn)標(biāo)準(zhǔn)化考試系統(tǒng)cs版_第5頁](http://file4.renrendoc.com/view/7bbfbe7cd18d3ebc18584c7efad86578/7bbfbe7cd18d3ebc18584c7efad865785.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.**工程學(xué)院實(shí)習(xí)(實(shí)訓(xùn))說明書題目名稱:標(biāo)準(zhǔn)化考試系統(tǒng)(C/S版)系部:計(jì)算機(jī)工程系專業(yè)班級(jí):00000學(xué)生:0000000**:00000000指導(dǎo)教師:完成日期:2017年6月9日(第二頁)**工程學(xué)院實(shí)習(xí)(實(shí)訓(xùn))評(píng)定意見設(shè)計(jì)題目:標(biāo)準(zhǔn)化考試系統(tǒng)(C/S版)學(xué)生:00000評(píng)定意見:評(píng)定成績:指導(dǎo)教師(簽名):年月日(此頁背書)評(píng)定意見參考提綱:1.學(xué)生完成的工作量與容是否符合任務(wù)書的要求。2.學(xué)生的勤勉態(tài)度。3.設(shè)計(jì)或說明書的優(yōu)缺點(diǎn),包括:學(xué)生對(duì)理論知識(shí)的掌握程度、實(shí)踐工作能力、表現(xiàn)出的創(chuàng)造性和綜合應(yīng)用能力等。**工程學(xué)院實(shí)習(xí)(實(shí)訓(xùn))任務(wù)書2016-2017學(xué)年2學(xué)期2017年6月9日專業(yè)信息管理班級(jí)15-1課程名稱Java程序設(shè)計(jì)設(shè)計(jì)題目標(biāo)準(zhǔn)化考試系統(tǒng)(C/S版)指導(dǎo)教師衛(wèi)東、杰起止時(shí)間周數(shù)1設(shè)計(jì)地點(diǎn)B504機(jī)房設(shè)計(jì)目的:本次實(shí)訓(xùn)是通過Java語言編制一個(gè)標(biāo)準(zhǔn)化考試系統(tǒng)。而Java語言是當(dāng)今較為流行的網(wǎng)絡(luò)編程語言,它具有面向?qū)ο蟆⒖缙脚_(tái)、分布應(yīng)用等特點(diǎn)。這次實(shí)訓(xùn),還有利于加深對(duì)Java課程的進(jìn)一步了解,也可以鞏固所學(xué)Java語言基本知識(shí),增進(jìn)Java語言編輯基本功,掌握J(rèn)DK開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。使學(xué)生通過該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。設(shè)計(jì)任務(wù)或主要技術(shù)指標(biāo):采用客戶端用戶可以呼叫服務(wù)器,建立套接字連接。和服務(wù)器建立連接后,可以將服務(wù)器端試題文件的名字顯示在客戶端界面的下拉式列表中。用戶選擇*套試題后,單擊“開始考試”按鈕,開始考試。通過客戶端界面從服務(wù)器讀取試題以及考試的用時(shí),該界面提供計(jì)時(shí)功能,如果傭金考試用時(shí),用戶將不能再讀取任何題目。用戶完成一個(gè)題目后,可以查看該題目的正確答案和目前所得分?jǐn)?shù)。運(yùn)用的操作系統(tǒng)是MicrosoftWindows7,使用的開發(fā)工具為jdk1.6,實(shí)現(xiàn)上機(jī)考試和分?jǐn)?shù)查詢。設(shè)計(jì)進(jìn)度與要求:1、第1天領(lǐng)取任務(wù),小組分工,查找標(biāo)準(zhǔn)考試系統(tǒng)c\s版的資料;2、第2-3天實(shí)現(xiàn)程序標(biāo)準(zhǔn)化考試功能并調(diào)試成功;3、編寫文檔4、答辯主要參考書及參考資料:[1]耿祥義,躍平.Java2實(shí)用教程(第三版).:清華大學(xué),2006
[2]耿祥義.Java課程設(shè)計(jì)(第四版).:清華大學(xué),2014目錄TOC\o"1-3"\h\u1概述21.1實(shí)訓(xùn)目的21.2實(shí)訓(xùn)容22系統(tǒng)需求分析22.1系統(tǒng)目標(biāo)22.2主體功能22.3開發(fā)環(huán)境23系統(tǒng)概要設(shè)計(jì)24系統(tǒng)詳細(xì)設(shè)計(jì)24.1系統(tǒng)的功能模塊劃分24.2系統(tǒng)類圖24.3系統(tǒng)流程圖25測(cè)試25.1測(cè)試方案25.2測(cè)試結(jié)果2小結(jié)2參考文獻(xiàn)2附錄2-.z.標(biāo)準(zhǔn)化考試系統(tǒng)1概述1.1實(shí)訓(xùn)目的本次實(shí)訓(xùn)是通過Java語言編制一個(gè)標(biāo)準(zhǔn)化考試系統(tǒng)。而Java語言是當(dāng)今較為流行的網(wǎng)絡(luò)編程語言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。這次實(shí)訓(xùn),還有利于加深對(duì)Java課程的進(jìn)一步了解,也可以鞏固所學(xué)Java語言基本知識(shí),增進(jìn)Java語言編輯基本功,掌握J(rèn)DK開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。使學(xué)生通過該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。1.2實(shí)訓(xùn)容系統(tǒng)界面如下圖:(1)提示框顯示輸入服務(wù)器的IP或域名,(2)輸入后點(diǎn)擊呼叫服務(wù)器,顯示呼叫成功。(3)選擇試題并開始考試。圖1-1系統(tǒng)界面設(shè)計(jì)2.程序編寫并運(yùn)行(1)程序的編寫實(shí)現(xiàn)標(biāo)準(zhǔn)化考試系統(tǒng)的呼叫服務(wù)器,選擇試卷開始考試,查看考試剩余時(shí)間及試卷的正確答案及考生的分?jǐn)?shù)。(2)①用DOS命令運(yùn)行時(shí),先運(yùn)行服務(wù)端,在運(yùn)行客戶端。②程宇完成打包后,可以直接運(yùn)行jar文件運(yùn)行程序。編寫文檔并答辯編寫標(biāo)準(zhǔn)化考試系統(tǒng)的報(bào)告,介紹本系統(tǒng)制作的過程和使用過程的詳細(xì)說明。編寫完成報(bào)告后將報(bào)告發(fā)給老師,報(bào)告合格后,即可打印并進(jìn)行答辯。2系統(tǒng)需求分析2.1系統(tǒng)目標(biāo)1.客戶端用戶可以呼叫服務(wù)器。2.和服務(wù)器建立連接后,將客戶端試題添加到下拉列表中,并選擇試題。3.用戶選擇*套試題后,單擊“開始考試”按鈕,開始考試。4.考試開始后,頁面顯示考試剩余時(shí)間,考試題??荚囃瓿珊?,考試剩余時(shí)間會(huì)停止計(jì)時(shí),計(jì)時(shí)結(jié)束后,考生不能答題。5.用戶完成一個(gè)題目后,可以查看該題目的正確答案和目前所得分?jǐn)?shù)。完成試卷后,可以查看考試剩余時(shí)間和試卷正確答案、所得分?jǐn)?shù)。2.2主體功能1.客戶端用戶可以呼叫服務(wù)器,建立套接字連接。2.和服務(wù)器建立連接后,可以將服務(wù)器端試題文件的名字顯示在客戶端界面的下拉式列表中。3.用戶選擇*套試題后,單擊“開始考試”按鈕,開始考試。4.通過客戶端界面從服務(wù)器讀取試題以及考試的用時(shí),該界面提供計(jì)時(shí)功能,如果傭金考試用時(shí),用戶將不能再讀取任何題目。5.用戶完成一個(gè)題目后,可以查看該題目的正確答案和目前所得分?jǐn)?shù)。2.3開發(fā)環(huán)境操作系統(tǒng):MicrosoftWindows7開發(fā)工具:jdk1.73系統(tǒng)概要設(shè)計(jì)在標(biāo)準(zhǔn)化考試系統(tǒng)時(shí),需要編寫5個(gè)java源文件:Client.java、ChoiceFile.java、ClientTestArea.java、Server.java、RedTestquestion.java。(1)Client.java類模塊該java文件生成的類負(fù)責(zé)創(chuàng)建標(biāo)準(zhǔn)化考試客戶端的主窗口。該類含有main方法,程序從該類開始執(zhí)行。主窗口首先顯示輸入服務(wù)器IP地址的界面,如果和服務(wù)器連接成功,將提示該用戶連接成功,并在窗口中顯示選擇試題界面;如果和服務(wù)器連接失敗,將提示無法連接,不出現(xiàn)選擇試題的界面。(2)ChoiceFile.java類模塊該類創(chuàng)建的對(duì)象是Client窗口的一個(gè)成員變量——選擇試題文件界面,負(fù)責(zé)獲取服務(wù)器上試題文件的名字,并將名字添加到客戶端界面的下拉式列表中。(3)ClientTestArea.java類模塊負(fù)責(zé)客戶端窗口中的考試界面,該界面可以讀取服務(wù)器端的試題、顯示試題、向服務(wù)器提交答案、顯示考試所剩時(shí)間等等。(4)Server.java類模塊負(fù)責(zé)監(jiān)聽客戶的呼叫,為每個(gè)發(fā)出呼叫的客戶啟動(dòng)一個(gè)線程,在該線程中和客戶交流信息。(5)RedTestquestion.java類模塊該類對(duì)象負(fù)責(zé)讀取試題文件和計(jì)算考試分?jǐn)?shù)。4系統(tǒng)詳細(xì)設(shè)計(jì)4.1系統(tǒng)的功能模塊劃分(1)Client.java類模塊該java文件生成的類負(fù)責(zé)創(chuàng)建標(biāo)準(zhǔn)化考試客戶端的主窗口。該類含有main方法,程序從該類開始執(zhí)行。主窗口首先顯示輸入服務(wù)器IP地址的界面,如果和服務(wù)器連接成功,將提示該用戶連接成功,并在窗口中顯示選擇試題界面;如果和服務(wù)器連接失敗,將提示無法連接,不出現(xiàn)選擇試題的界面。Client類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述,Client類主要成員變量(屬性)和主要方法如表4-1,4-2所示。表4-1Client.java主要成員變量成員變量描述變量類型名稱輸入服務(wù)器IP的文本框負(fù)責(zé)呼叫負(fù)責(zé)文本考試先是提示信息客戶端套接字對(duì)象負(fù)責(zé)選擇試題文件顯示考試界面Te*tField 輸入呼叫地址Button 開始呼叫Button 開始測(cè)試Lable 提示條1,提示條2,提示條3Socket SocketChoiceFile 選擇試題文件界面ClientTestArea 客戶考試界面表4-2Client.java主要方法名稱功能備注ClientactionPerformedmain創(chuàng)建客戶端窗口構(gòu)造方法處理ActionEvent事件接口方法客戶端程序開始運(yùn)行(2)ChoiceFile.java類模塊ChoiceFile類創(chuàng)建的對(duì)象是ChoiceFile類最重要的成員之一,代表“選擇試題”。該類的成員變量中有5種重要類型的對(duì)象:得到試題文件、List、Socket、thread。ChoiceFile類類主要成員變量(屬性)和主要方法如表4-3,4-4所示。表4-3主要成員變量(屬性)描述變量類型名稱觸發(fā)試題文件名的獲取負(fù)責(zé)顯示試題文件名字客戶端套接字負(fù)責(zé)讀取服務(wù)器發(fā)來的試題文件名的線程Button 得到試題文件Choice ListSocket SocketThread thread表4-4主要方法名稱功能備注ChoiceFilesetSocketConnectionrunactionPerformeditemStateChanged得到選擇的文件名getSuccess創(chuàng)建選擇試題界面構(gòu)造方法和服務(wù)器建立連接讀取服務(wù)器發(fā)來的信息接口方法處理ActionEvent事件接口方法處理ItemEvnent事件接口方法得到用戶選擇的試題文件的名字判斷選擇試題界面是否得到了服務(wù)器端全部試題文件的名字(3)ClientTestArea.java類模塊負(fù)責(zé)客戶端窗口中的考試界面,該界面可以讀取服務(wù)器端的試題、顯示試題、向服務(wù)器提交答案、顯示考試所剩時(shí)間等等。ClientTestArea.java類主要成員變量(屬性)和主要方法如表4-5,4-6所示。表4-5主要成員變量(屬性)描述變量類型名稱客戶端套接字試題顯示區(qū)答案顯示區(qū)讀取服務(wù)器信息的線程選擇答案用的Checkbo*組件數(shù)組計(jì)時(shí)器考試用時(shí)顯示考試剩余時(shí)間的文本條負(fù)責(zé)提交答案,讀取試題,查看得分的按鈕Socket socketTe*tArea 試題顯示區(qū)Te*tArea 答案顯示區(qū)Thread threadMessageCheckbo*[] Bo*Timer 計(jì)時(shí)器long timeTe*tField 考試用時(shí)提示條Button提交該題答案,讀取下一題,查看得分表4-6主要方法名稱功能備注ClientTestAreagetTimesetSocketConnectionset試題顯示區(qū)runactionPerformed創(chuàng)建考試界面對(duì)象構(gòu)造方法獲取考試用時(shí)和服務(wù)器建立套接字連接設(shè)置試題顯示區(qū)的文本容讀取服務(wù)器端發(fā)送的信息接口方法處理ActionEvent事件接口方法(4)Server.java類模塊負(fù)責(zé)監(jiān)聽客戶的呼叫,為每個(gè)發(fā)出呼叫的客戶啟動(dòng)一個(gè)線程,在該線程中和客戶交流信息。Server.java類主要成員變量(屬性)和主要方法如下表:表4-7主要成員變量(屬性)描述變量類型名稱監(jiān)聽客戶端呼叫ServerSocketserver與客戶端套接字建立起連接Socketsocket的服務(wù)器端套接字為處理客戶端請(qǐng)求而啟動(dòng)Server_thread(無)的線程表4-8主要方法名稱功能備注main啟動(dòng)服務(wù)器端程序(5)RedTestquestion.java模塊該類對(duì)象負(fù)責(zé)讀取試題文件和計(jì)算考試分?jǐn)?shù)。RedTestquestion.java類主要成員變量(屬性)和主要方法如表4-9,4-10所示。注意:本系統(tǒng)沒有考慮用戶提交兩個(gè)或兩個(gè)以上答案的情況,讀者可作為練習(xí)添加相應(yīng)處理。表4-9主要成員變量(屬性)描述變量類型名稱文件名字正確答案試題容用戶提交的答案用戶得分試題用時(shí)讀取試題的字符流String filenameString correctAnswerString testContentString selectionint scorelong timeFileReader in表4-10主要方法名稱功能備注setFilenamegetFilenamegetTimeset完成考試get完成考試getTestContentsetSelectiongetScoregetMessages設(shè)置試題文件的名字獲取試題文件的名字獲取考試用時(shí)設(shè)置是否已完成考試判斷是否已完成考試獲取下一道試題的容排列用戶提交的答案計(jì)算用戶得分查閱分?jǐn)?shù)和正確答案4.2系統(tǒng)類圖標(biāo)準(zhǔn)化考試系統(tǒng)UML類圖如下:4-1UML類圖4.3系統(tǒng)流程圖(1)根據(jù)對(duì)標(biāo)準(zhǔn)化考試系統(tǒng)的功能分析,設(shè)計(jì)得到標(biāo)準(zhǔn)化考試系統(tǒng)流程,如圖4-2所示:標(biāo)準(zhǔn)化考試系統(tǒng)標(biāo)準(zhǔn)化考試系統(tǒng)客戶端窗口客戶端窗口呼叫服務(wù)端成功呼叫將試卷加入列表查詢分?jǐn)?shù)呼叫服務(wù)端成功呼叫將試卷加入列表查詢分?jǐn)?shù)計(jì)時(shí)停止完成試卷計(jì)時(shí)開始選擇試卷退出系統(tǒng)圖4-2系統(tǒng)流程圖(2)根據(jù)對(duì)標(biāo)準(zhǔn)化考試系統(tǒng)的功能分析,設(shè)計(jì)得到標(biāo)準(zhǔn)化考試系統(tǒng)詳細(xì)流程,如圖4-3所示:開始開始輸入IP地址輸入IP地址呼叫服務(wù)器呼叫服務(wù)器完成試卷計(jì)時(shí)開始選擇試題添加試題呼叫成功查看分?jǐn)?shù)計(jì)時(shí)停止回答試卷開始考試圖4-3系統(tǒng)詳細(xì)流程圖結(jié)束考試YNYN5測(cè)試完成試卷計(jì)時(shí)開始選擇試題添加試題呼叫成功查看分?jǐn)?shù)計(jì)時(shí)停止回答試卷開始考試圖4-3系統(tǒng)詳細(xì)流程圖結(jié)束考試YNYN5.1測(cè)試方案在DOS環(huán)境里對(duì)程序進(jìn)行打包,具體操作如下:(1)用文本編輯器編寫一個(gè)清單文件(Manifestfiles):Manifest-Version:1.0Main-Class:ClientCreated-By:1.7清單文件命名為moon.mf,保存C:\Users\Administrator\Desktop\enlish。注意:在編寫清單文件時(shí),在“Manifest-Version:”和“1.0”之間、“Main-Class:”和主類“Client”之間,以及“Created-By:”和“1.7”之間必須有且只有一個(gè)空格。5-1編寫清單文件(2)生成JAR文件:在DOS命令進(jìn)入C:\Users\Administrator\Desktop\enlish并輸入命令行如下:jarcfmClient.jarmoon.mf*.class圖5-2生成JAR文件界面圖5-3生成JAR文件界面現(xiàn)在可以將Client.jar以及若干試題文件拷貝到任何一個(gè)安裝了java運(yùn)行環(huán)境(版本號(hào)需高于1.7)的計(jì)算機(jī)上,只要用鼠標(biāo)雙擊該文件就可以運(yùn)行本java應(yīng)用程序了,如果已運(yùn)行相應(yīng)的服務(wù)器端程序,用戶就可以進(jìn)行標(biāo)準(zhǔn)化考試了。注意:如果機(jī)器上沒有安裝過中文版WinRAR解壓縮軟件,則Client.jar的文件類型是E*ecutableJarFile。如果機(jī)器上安裝過中文版WinRAR解壓縮軟件,并將jar文件與該解壓縮軟件做了關(guān)聯(lián),則Client.jar的文件類型是WinRAR,在這種情況下,當(dāng)鼠標(biāo)雙擊該文件時(shí),WinRAR解壓縮軟件會(huì)自動(dòng)運(yùn)行進(jìn)行解壓縮操作,使得我們的java程序無法運(yùn)行。因此,在發(fā)布本程序時(shí),還應(yīng)該創(chuàng)建一個(gè)有如下容的bat文件Client.bat(用文本編譯器)。Javaw-jarClient.jar另創(chuàng)建一個(gè)幫助文件help.t*t,容如下:您可以用鼠標(biāo)雙擊Client.jar或Client.bat來運(yùn)行本軟件,但是,如果您的計(jì)算機(jī)上安裝了中文版的WinRAR解壓縮文件,并將jar文件與該解壓壓縮軟件做了關(guān)聯(lián),則。用鼠標(biāo)雙擊Client.jar文件時(shí),WinRAR解壓縮軟件會(huì)自動(dòng)運(yùn)行進(jìn)行解壓縮操作,這是您可以雙擊Client.bat來運(yùn)行我們的軟件。最后,將.bat文件、.jar文件和幫助文件一同發(fā)布。用發(fā)布客戶端應(yīng)用程序同樣的辦法來發(fā)布服務(wù)器端應(yīng)用程序。5.2測(cè)試結(jié)果(1)鼠標(biāo)雙擊該jar文件就可以運(yùn)行java應(yīng)用程序,用戶就可以進(jìn)行標(biāo)準(zhǔn)化考試。如下圖:圖5-4運(yùn)行jar文件界面(2)輸入服務(wù)器的IP地址或域名,呼叫成功后,點(diǎn)擊將試題文件添加到下拉列表中獲取試題文件,選擇一個(gè)文件后,單機(jī)開始考試按鈕,開始考試。如下圖:圖5-5呼叫成功并添加試題界面(3)選擇試題后,點(diǎn)擊開始考試,系統(tǒng)會(huì)提醒選擇的試題文件名和考試剩余時(shí)間。在考試時(shí)間的圍答題,考試時(shí)間停止不能繼續(xù)答題。(沒做的題不能重新做)圖5-6選擇試題后點(diǎn)擊開始考試后界面(4)試題容為空,考試結(jié)束,系統(tǒng)會(huì)提示考試剩余時(shí)間,用戶可以查看此次考試的得分,系統(tǒng)會(huì)顯示正確答案、用戶回答的答案、以及用戶的分?jǐn)?shù)。最后用完后點(diǎn)擊關(guān)閉退出系統(tǒng)。圖5-7考試結(jié)束查看正確答案和成績小結(jié)這次Java實(shí)訓(xùn)我們做的是“標(biāo)準(zhǔn)化考試系統(tǒng)”,當(dāng)實(shí)訓(xùn)任務(wù)分配下來的時(shí)候,我們組的所有成員在一起認(rèn)真討論,每人分配一個(gè)模塊的設(shè)計(jì),遇到困難了,大家一起研究討論,解決不了就詢問老師,在老師的幫助下我們順利運(yùn)行了程序。通過一個(gè)星期的努力,終于完成了整個(gè)系統(tǒng)的設(shè)計(jì)與制作。通過這次的實(shí)訓(xùn),我不僅拓寬了自己的知識(shí)面,還在實(shí)踐過程中鞏固和加深了自己所學(xué)的理論知識(shí),使自己的技術(shù)素質(zhì)和實(shí)踐能力有了進(jìn)一步的提高,同時(shí)我的專業(yè)水平也有了很大的進(jìn)步。通過實(shí)訓(xùn)過程的鍛煉,自己分析問題和解決問題的能力都得到了鍛煉和提高,完善了自己的知識(shí)結(jié)構(gòu),加深了對(duì)所學(xué)知識(shí)的理解。還有在這次實(shí)訓(xùn)中,我深刻感受到了面向?qū)ο笳Z言中類庫的強(qiáng)大功能,掌握了運(yùn)用Java中的類實(shí)現(xiàn)*些基本功能,并學(xué)會(huì)了自己查詢使用類的方法,為以后的面向?qū)ο笳Z言的自學(xué)奠定了基礎(chǔ)。我也感受到了網(wǎng)絡(luò)通信中服務(wù)器和客戶相互通信的特點(diǎn),加深了對(duì)網(wǎng)絡(luò)通信知識(shí)的理解。參考文獻(xiàn)[1]耿祥義,躍平.Java2實(shí)用教程(第三版).:清華大學(xué),2006
[2]耿祥義.Java課程設(shè)計(jì)(第四版).:清華大學(xué),2014小組成員**負(fù)責(zé)模塊靳超南2015232801ClientTestArea、Server代碼霞2015232797Client、ChoiceFile代碼邴云飛2015232796RedTestquestion代碼附錄代碼:(1)Client.javaimportjava.awt.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassCliente*tendsFrameimplementsActionListener{Te*tField輸入呼叫地址=null;Button開始呼叫,開始測(cè)試=null;Label提示條1=null,提示條2,提示條3;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;ChoiceFile選擇試題文件界面=null;ClientTestArea用戶考試界面=null;Panelwest,center;publicClient(){super("英語標(biāo)準(zhǔn)化考試系統(tǒng)");輸入呼叫地址=newTe*tField(16);開始呼叫=newButton("呼叫");開始測(cè)試=newButton("開始考試");開始呼叫.addActionListener(this);開始測(cè)試.addActionListener(this);選擇試題文件界面=newChoiceFile();選擇試題文件界面.setVisible(false);用戶考試界面=newClientTestArea();用戶考試界面.setVisible(false);提示條1=newLabel("輸入服務(wù)器的IP或域名,如18");提示條2=newLabel("提示是否連接成功的標(biāo)簽");提示條3=newLabel("選擇一個(gè)文件后,單擊"+開始測(cè)試.getLabel()+"按鈕");提示條3.setVisible(false);PanelH1=newPanel();H1.add(提示條1);PanelH2=newPanel();H2.add(輸入呼叫地址);H2.add(開始呼叫);PanelH3=newPanel();H3.add(提示條2);PanelH4=newPanel();H4.add(提示條3);PanelH5=newPanel();H5.add(選擇試題文件界面);west=newPanel();center=newPanel();west.setLayout(newGridLayout(5,1));west.add(H1);west.add(H2);west.add(H3);west.add(H4);west.add(H5);center.setLayout(newBorderLayout());center.add(開始測(cè)試,BorderLayout.NORTH);center.add(用戶考試界面,BorderLayout.CENTER);add(west,BorderLayout.WEST);add(center,BorderLayout.CENTER);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.e*it(0); }});setVisible(true);setBounds(60,40,660,460);validate();}publicvoidactionPerformed(ActionEvente){if(e.getSource()==開始呼叫){if(socket!=null&&in!=null&&out!=null)//清除以往的連接信息try{socket.close();in.close();out.close();用戶考試界面.setVisible(false);}catch(E*ceptionee){}Stringip=輸入呼叫地址.getTe*t().trim();try{socket=newSocket(ip,6666);in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOE*ceptionee){//如果連接失敗輸入呼叫地址.setTe*t("呼叫失敗");提示條2.setTe*t("您呼叫沒有成功");}if(socket!=null){//如果連接成功InetAddressaddress=socket.getInetAddress();提示條2.setEnabled(true);提示條2.setTe*t("您呼叫:"+address+"成功");選擇試題文件界面.setVisible(true);選擇試題文件界面.validate();選擇試題文件界面.setSocketConnection(socket,in,out);提示條3.setVisible(true);west.validate();validate();}}if(e.getSource()==開始測(cè)試){if(選擇試題文件界面.getSuccess()){用戶考試界面.setSocketConnection(socket,in,out);用戶考試界面.setVisible(true);用戶考試界面.set試題顯示區(qū)("你選擇了試題:"+選擇試題文件界面.得到選擇的文件名());center.validate();validate();}}}publicstaticvoidmain(Stringargs[]){newClient();}}(2)ChoiceFile.javaimportjava.awt.*;importjava*.swing.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassChoiceFilee*tendsPanelimplements ItemListener,ActionListener,Runnable{Button得到試題文件=null;Choicelist=null;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;Threadthread=null;booleansuccess=false,isSelected=false;intn=0;publicChoiceFile(){得到試題文件=newButton("將試題文件添加到下拉列表中");得到試題文件.setEnabled(false);得到試題文件.addActionListener(this);list=newChoice();list.add("**********");add(得到試題文件);add(list);list.addItemListener(this);thread=newThread(this);}publicvoidsetSocketConnection(Socketsocket,DataInputStream in,DataOutputStreamout){this.socket=socket;this.in=in;this.out=out;try{thread.start();}catch(E*ceptionee){}if(this.socket!=null){得到試題文件.setEnabled(true);}}publicvoidactionPerformed(ActionEvente){try{out.writeUTF("列出考試文件");}catch(IOE*ceptionee){success=false;}}publicvoiditemStateChanged(ItemEvente){n=list.getItemCount();if(n>=1&&isSelected==true){StringlistItem=list.getSelectedItem();try{out.writeUTF("考試文件的名字:"+listItem);out.writeUTF("請(qǐng)通知考試界面考試用時(shí):");}catch(IOE*ceptionee){}}}publicString得到選擇的文件名(){returnlist.getSelectedItem();}publicvoidrun(){Strings=null;list.removeAll();while(true){try{s=in.readUTF();//等待(堵塞本線程,直到收到信息)服務(wù)器端發(fā)來的信息if(s.startsWith("考試文件:")){StringlistItem=s.substring(s.inde*Of(":")+1);list.add(listItem);isSelected=true;}if(s.startsWith("已經(jīng)全部列出:")){success=true;break;}catch(E*ceptionee){} }}publicbooleangetSuccess(){n=list.getItemCount();if(n>0&&success==true)returntrue;elsereturnfalse;}}(3)ClientTestArea.javaimportjava.awt.*;importjava*.swing.*;importjava.awt.event.*;importjava.io.*;import.*;publicclassClientTestAreae*tendsPanelimplements ActionListener,Runnable{Socketsocket=null;//和服務(wù)器所建立的連接的套接字。DataInputStreamin=null;//讀取服務(wù)器信息的輸入流。DataOutputStreamout=null;//向服務(wù)器發(fā)送信息的輸出流。ThreadthreadMessage=null;//讀取服務(wù)器端信息的線程。Te*tArea試題顯示區(qū)=null,答案顯示區(qū)=null;Checkbo*bo*[];//答案選項(xiàng)。Stringanswer="""; //設(shè)置答案的缺省值。longtime=0;//試題文件的考試用時(shí)(單位:毫秒)。Timer計(jì)時(shí)器=null;//計(jì)時(shí)器。Button提交該題答案,讀取下一題,查看得分;Te*tField考試用時(shí)提示條=null;publicClientTestArea(){threadMessage=newThread(this);//創(chuàng)建讀取服務(wù)器信息的線程。試題顯示區(qū)=newTe*tArea("",16,5,Te*tArea.SCROLLBARS_BOTH);答案顯示區(qū)=new Te*tArea("",3,5,Te*tArea.SCROLLBARS_VERTICAL_ONLY);答案顯示區(qū).setFont(newFont("TimesRoman",Font.PLAIN,14));試題顯示區(qū).setFont(newFont("TimesRoman",Font.PLAIN,14));試題顯示區(qū).setForeground(Color.blue);試題顯示區(qū).setTe*t(null);答案顯示區(qū).setForeground(newColor(255,100,100));答案顯示區(qū).setTe*t("單擊查看得分按鈕,可以在這里看到得分和正確答案");計(jì)時(shí)器=newTimer(1000,this);//創(chuàng)建計(jì)時(shí)器,該計(jì)時(shí)器每隔1秒“振鈴”一次。Strings[]={"A","B","C","D"};bo*=newCheckbo*[4];for(inti=0;i<4;i++){bo*[i]=newCheckbo*(s[i]);}提交該題答案=newButton("提交該題答案");讀取下一題=newButton("讀取下一題");查看得分=newButton("查看得分");考試用時(shí)提示條=newTe*tField("顯示考試用時(shí)(倒計(jì)時(shí))",28);考試用時(shí)提示條.setForeground(Color.red);考試用時(shí)提示條.setEditable(false);讀取下一題.setEnabled(true);提交該題答案.setEnabled(false);讀取下一題.setEnabled(false);讀取下一題.addActionListener(this);提交該題答案.addActionListener(this);查看得分.addActionListener(this);PanelpAddbo*=newPanel();for(inti=0;i<4;i++){pAddbo*.add(bo*[i]);}setLayout(newBorderLayout());PanelpCenter=newPanel();pCenter.setLayout(newBorderLayout());pCenter.add(試題顯示區(qū),BorderLayout.CENTER);pCenter.add(答案顯示區(qū),BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);Panelp1=newPanel();p1.add(pAddbo*);p1.add(提交該題答案);p1.add(讀取下一題);p1.add(查看得分);Panelp2=newPanel();p2.add(考試用時(shí)提示條);PanelpSouth=newPanel();pSouth.setLayout(newGridLayout(2,1));pSouth.add(p1);pSouth.add(p2);add(pSouth,BorderLayout.SOUTH);}publiclonggetTime(){returntime;}publicvoidsetSocketConnection(Socketsocket,DataInputStream in,DataOutputStreamout){this.socket=socket;this.in=in;this.out=out;try{threadMessage.start();}catch(E*ceptione){}if(this.socket!=null){讀取下一題.setEnabled(true);提交該題答案.setEnabled(false);計(jì)時(shí)器.stop();考試用時(shí)提示條.setTe*t("顯示考試用時(shí)(倒計(jì)時(shí))");}}publicvoidset試題顯示區(qū)(Strings){試題顯示區(qū).setTe*t(s);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==計(jì)時(shí)器){time=time-1000;if(time<=0){//如果考試時(shí)間用盡。則用戶停止答題。計(jì)時(shí)器.stop();讀取下一題.setEnabled(false);提交該題答案.setEnabled(false);}longleftTime=time/1000;//剩余的考試時(shí)間(秒)。longleftHour=leftTime/3600;//剩余的“時(shí)”。longleftMinute=(leftTime-leftHour*3600)/60;//剩余的“分”。longleftSecond=leftTime%60;//剩余的“秒”??荚囉脮r(shí)提示條.setTe*t("剩余時(shí)間:"+leftHour+"小時(shí)"+leftMinute+"分"+leftSecond+"秒");}if(e.getSource()==讀取下一題){讀取下一題.setLabel("讀取下一題");提交該題答案.setEnabled(true);讀取下一題.setEnabled(false);try{out.writeUTF("讀取下一題");}catch(E*ceptionevent){}}if(e.getSource()==提交該題答案){讀取下一題.setEnabled(true);提交該題答案.setEnabled(false);for(inti=0;i<4;i++){if(bo*[i].getState()==true){answer=bo*[i].getLabel();bo*[i].setState(false);break;}}try{out.writeUTF("提交的答案:"+answer);}catch(IOE*ceptionee){}}if(e.getSource()==查看得分){try{out.writeUTF("查看得分");}catch(IOE*ceptionee){}}}publicvoidrun(){while(true){Strings=null;try{s=in.readUTF();//等待(堵塞本線程。直到收到信息)服務(wù)器端發(fā)送的信息。if(s.startsWith("試題容:")){//讀取服務(wù)器端發(fā)來的一道試題。Stringcontent=s.substring(s.inde*Of(":")+1);試題顯示區(qū).setTe*t(s);}if(s.startsWith("分?jǐn)?shù)")){答案顯示區(qū).setTe*t("\n"+s);}if(s.startsWith("考試用時(shí):")){Stringstr=s.substring(s.inde*Of(":")+1);time=Long.parseLong(str);考試用時(shí)提示條.setTe*t(""+time);計(jì)時(shí)器.start();//計(jì)時(shí)器開啟,每隔1000毫秒“振鈴”一次。//導(dǎo)致ActionEvent事件。}if(s.startsWith("考試結(jié)束:")){計(jì)時(shí)器.stop();//停止計(jì)時(shí)。}Thread.sleep(5);}catch(E*ceptione){試題顯示區(qū).setTe*t("和服務(wù)器的連接已中斷");}}}}(4)Server.javaimportjava.io.*;import.*;importjava.util.*;classFileNameimplementsFilenameFilter{//列出指定擴(kuò)展名的文件。Stringstr=null;FileName(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}publicclassServer{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;Socketyou=null;while(true){try{server=newServerSocket(6666);}catch(IOE*ceptione1){System.out.println("正在監(jiān)聽");}try{you=server.accept();//建立與客戶端連接的套接字。InetAddressaddress=you.getInetAddress();System.out.println("客戶端的IP:"+address);}catch(IOE*ceptione){}if(you!=null){newServer_thread(you).start();}else{continue;}}}}classServer_threade*tendsThread{inti=0;Socketsocket=null;Filefile=null;DataOutputStreamout=null;DataInputStreamin=null;ReadTestquestion讀取試題=null;boolean通知考試界面考試用時(shí)=true;Server_thread(Sockett){socket=t;try{in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOE*ceptione){}讀取試題=newReadTestquestion();}publicvoidrun(){while(true){Strings=null;try{s=in.readUTF();//等待(堵塞本線程,直到收到消息)客戶端發(fā)來的信息。if(s.startsWith("列出考試文件")){//如果客戶端要求列出試題文件的名字,String當(dāng)前目錄=System.getProperty("user.dir");Filedir=newFile(當(dāng)前目錄);FileNamefileT*t=newFileName("t*t");StringfileName[]=dir.list(fileT*t);//列出當(dāng)前目錄下的所有//文本文件,即試題文件。for(inti=0;i<fileName.length;i++){out.writeUTF("考試文件:"+fileName[i]);//將試題文件名字依次發(fā)送給客戶端。}out.writeUTF("已經(jīng)全部列出:");}elseif(s.startsWith("考試文件的名字:")){StringfileName=s.substring(s.inde*Of(":")+1);//獲取客戶端選擇的試題文件名。讀取試題.setFilename(fileName);讀取試題.set完成考試(false);通知考試界面考試用時(shí)=true;//服務(wù)器需通知客戶端新試題文件的考試用時(shí)。}elseif(s.startsWith("讀取下一題")){StringcontentTest=讀取試題.getTestContent();//讀取一道試題。out.writeUTF("試題容:"+contentTest);//將試題的容發(fā)送給客戶端。if(通知考試界面考試用時(shí)==true){longtime=讀取試題.getTime();//將當(dāng)前試題文件的考試用時(shí)發(fā)給客戶端。out.writeUTF("考試用時(shí):"+time);通知考試界面考試用時(shí)=false;}if(讀取試題.get完成考試()){out.writeUTF("考試結(jié)束:");}}elseif(s.startsWith("提交的答案:")){//獲取用戶提交的答案。Stringanswer=s.substring(s.inde*Of(":")+1);//將用戶提交的答案依次尾加到selection。讀取試題.setSelection(answer);}elseif(s.startsWith("查看得分")){intscore=讀取試題.getScore();Stringmessages=讀取試題.getMessages();out.writeUTF("分?jǐn)?shù):"+score+"\n"+messages);}}catch(IOE*ceptionee){try{socket.close();}catch(E*ceptioneee){}System.out.println("客戶離開了");break;} } }}(5)ReadTestquestion.javaimportjava.io.*;importjava.util.*;publicclassReadTestquestion{Stringfilename="",//存放試題文件名的字符串。correctAnswer="",//存放正確答案的字符串。testContent="",//試題容。selection="";//存放用戶提交的答案。intscore=0;//用戶的得分。longtime=0;//該試題文件的考試用時(shí)。boolean完成考試=false;//判斷是否已完成全部試題。Filef=null;FileReaderin=null;BufferedReader讀取=null;publicvoidsetFilename(Stringname{filename=name;score=0;//用戶選擇了新的試題文件后,將用戶的答案字符串清空,并將分?jǐn)?shù)重置為0。selection="";try{if(in!=null&&讀取!=null){in.close();//關(guān)閉此前的連接。讀取.close();}f=newFile(filename);in=newFileReader(f);讀取=newBufferedReader(in);//讀取試題文件的第1行:correctAnswer=(讀取.readLine()).trim();//標(biāo)準(zhǔn)答案,并除去前后空格。Stringtemp=(讀取.readLine()).
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度影視作品拍攝制作合同影視
- 2025年度家居建材廣告代理服務(wù)合同
- 2025年度建筑工程勞務(wù)分包合同安全教育培訓(xùn)與考核
- 2025年度市政工程索賠管理與糾紛解決合同
- 2025年CT球管項(xiàng)目投資可行性研究分析報(bào)告-20241226-172951
- 免租期 申請(qǐng)書
- 2025年度可再生能源發(fā)電站施工勞務(wù)合同
- 2025年度酒店股份收益權(quán)信托合同范本
- 2025年度房地產(chǎn)投資融資合同
- 2025年度考試試卷保密打印與分發(fā)服務(wù)合同
- 2025年熱管換熱氣行業(yè)深度研究分析報(bào)告
- 華為采購質(zhì)量優(yōu)先及三化一穩(wěn)定推進(jìn)
- 職業(yè)學(xué)院學(xué)生晚出、晚歸、不歸管理辦法
- 《安利蛋白質(zhì)粉》課件
- 護(hù)理三基三嚴(yán)習(xí)題+參考答案
- 2025門診護(hù)理工作計(jì)劃
- 員工互評(píng)表(含指標(biāo))
- 電氣領(lǐng)域知識(shí)培訓(xùn)課件
- 山東省部分學(xué)校2024-2025學(xué)年高一上學(xué)期12月選科指導(dǎo)聯(lián)合測(cè)試地理試題( 含答案)
- focus-pdca改善案例-提高護(hù)士對(duì)糖尿病患者胰島素注射部位正確輪換執(zhí)行率
- 八年級(jí)物理下冊(cè)全冊(cè)課課練【全冊(cè)每課齊全】
評(píng)論
0/150
提交評(píng)論