畢業(yè)設計論文基于CS模式的小型局域網考試系統(tǒng)(java)_第1頁
畢業(yè)設計論文基于CS模式的小型局域網考試系統(tǒng)(java)_第2頁
畢業(yè)設計論文基于CS模式的小型局域網考試系統(tǒng)(java)_第3頁
畢業(yè)設計論文基于CS模式的小型局域網考試系統(tǒng)(java)_第4頁
畢業(yè)設計論文基于CS模式的小型局域網考試系統(tǒng)(java)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

畢業(yè)設計[論文]題目:基于C/S模式的小型局域網考試系統(tǒng)系別:專業(yè):姓名:學號:指導教師:第1章緒論1.1設計背景隨著計算機技術和網絡技術的迅猛發(fā)展,計算機已經應用到各個領域。利用校園局域網在計算機上進行考試也越來越普遍。傳統(tǒng)的考試從出卷、制卷、評卷、登分工作量極大,而且人工出卷和評卷容易受到教師主觀因素的影響。網絡考試利用計算機自動的出卷和評卷,大大的減輕了教師的工作量。Java語言作為一種網絡編程語言,它具有面向對象、平臺獨立、多線程等特點,非常適合網絡環(huán)境下開發(fā)應用程序。Java提供的Socket技術也大大的簡化了原有的網絡操作過程,使得網絡應用程序在開發(fā)的時候不必再考慮網絡底層的代碼設計,大大的縮短了設計的時間。1.2設計的目的與意義為了適應新形勢的發(fā)展,使其盡快在各類考試中發(fā)揮高效、便捷的作用,把老師從繁重的工作中解脫出來本次畢業(yè)設計我設計了一個簡單的小型局域網考試系統(tǒng)——綠光考試系統(tǒng)。綠光考試系統(tǒng)旨在實現(xiàn)考試的無紙化管理,對一些科目的考試可以通過局域網(校園網)進行,方便校方考務的管理,也方便了考生。為了能使系統(tǒng)適應不同的操作系統(tǒng),我選擇了與平臺無關的開發(fā)語言Java;為了實現(xiàn)考場監(jiān)控等特色功能,我采用了C/S模式,因為B/S無法滿足;為了保障系統(tǒng)通信,我采用了面向連接的TCP協(xié)議;為了讓用戶獲得更方便的操作,我努力使系統(tǒng)最終無需安裝即可使用,如通過對象序列化技術取代數(shù)據庫、增加記憶功能等;為了能使系統(tǒng)容易擴展新的功能我采用優(yōu)秀的設計模式進行系統(tǒng)架構。綠光考試系統(tǒng)以其出色的功能特性為老師和學生帶來更高的工作和學習效率。1.3開發(fā)環(huán)境介紹1.3.1硬件環(huán)境編程工具:JDK+Eclipse+RationalRose+Visio機型:聯(lián)想ThinkPadE40處理器名稱:AMDAthlon(tm)IIP340Dual-CoreProcessor雙核硬盤驅動器:WDCWD1600AAJS-22WAAO系統(tǒng)內存:金士頓內存2GB硬盤:希捷ST9320325AS(320GB)顯示卡: ATIMobilityRadeonHD5400Series(1024MB)網卡:MicrosoftVirtualWiFiMiniportAdapter11b/g/nWirelessLANMini-PCIExpressAdapterIIRealtekPCIeGBEFamilyController顯示器: 通用即插即用監(jiān)視器操作系統(tǒng):MicrosoftWindows7旗艦版ServicePack1(build7601),32-bit1.3.2軟件環(huán)境1.EclipseEclipse是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。雖然大多數(shù)用戶很樂于將Eclipse當作Java集成開發(fā)環(huán)境(IDE)來使用,但Eclipse的目標卻不僅限于此。Eclipse還包括插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個組件主要針對希望擴展Eclipse的軟件開發(fā)人員,因為它允許他們構建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣東西都是插件,對于給Eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。[1]這種平等和一致性并不僅限于Java開發(fā)工具。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言;例如,支持諸如C/C++、COBOL、PHP等編程語言的插件已經可用,或預計將會推出。Eclipse框架還可用來作為與軟件開發(fā)無關的其他應用程序類型的基礎,比如內容管理系統(tǒng)?;贓clipse的應用程序的一個突出例子是IBMRationalSoftwareArchitect,它構成了IBMJava開發(fā)工具系列的基礎。2.JDKJDK(JavaDevelopmentKit)是SunMicrosystems針對Java開發(fā)員的產品。自從Java推出以來,JDK已經成為使用最廣泛的JavaSDK。JDK是整個Java的核心,包括了Java運行環(huán)境、Java工具和Java基礎類庫。JDK是學好Java的第一步。而專門運行在x86平臺的Jrocket在服務端運行效率也要比SunJDK好很多。從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其版本也不斷更新,運行效率得到了非常大的提高。3.RationalRoseRationalRose包括了統(tǒng)一建模語言(UML),OOSE,以及OMT。其中統(tǒng)一建模語言(UML)由Rational公司3位世界級面向對象技術專家GradyBooch、IvarJacobson、和JimRumbaugh通過對早期面向對象研究和設計方法的進一步擴展而得來的,它為可視化建模軟件奠定了堅實的理論基礎。同時這樣的淵源也使RationalRose力挫當前市場上很多基于UML可視化建模的工具,例如Microsoft的Visio2002、Oracle的Designer2000,還有PlayCase、CABPWin、CAERWin、SybasePowerDesigner等等。RationalRose是一個完全的、具有能滿足所有建模環(huán)境(Web開發(fā),數(shù)據建模,VisualStudio和C++)靈活性需求的一套解決方案。Rose允許開發(fā)人員,項目經理,系統(tǒng)工程師和分析人員在軟件開發(fā)周期內在將需求和系統(tǒng)的體系架構轉換成代碼,消除浪費的消耗,對需求和系統(tǒng)的體系架構進行可視化,理解和精練。通過在軟件開發(fā)周期內使用同一種建模工具可以確保更快更好的創(chuàng)建滿足客戶需求的可擴展的、靈活的并且可靠的應用系統(tǒng)。RationalRose的兩個受歡迎的特征是它的提供反復式發(fā)展和來回旅程工程的能力。RationalRose允許設計師利用反復發(fā)展(有時也叫進化式發(fā)展),因為在各個進程中新的應用能夠被創(chuàng)建,通過把一個反復的輸出變成下一個反復的輸入。(這和瀑布式發(fā)展形成對比,在瀑布式發(fā)展中,在一個用戶開始嘗試之前整個工程被從頭到尾的完成。)然后,當開發(fā)者開始理解組件之間是如何相互作用和在設計中進行調整時,RationalRose能夠通過回溯和更新模型的其余部分來保證代碼的一致性,從而展現(xiàn)出被稱為"來回旅程工程"的能力,RationalRose是可擴展的,可以使用可下載附加項和第三方應用軟件,它支持COM/DCOM(ActiveX),JavaBeans和Corba組件標準.4.MicrosoftOfficeVisio2007MicrosoftOfficeVisio2007便于IT和商務專業(yè)人員就復雜信息、系統(tǒng)和流程進行可視化處理、分析和交流的軟件。使用具有專業(yè)外觀的OfficeVisio2007圖表,可以促進對系統(tǒng)和流程的了解,深入了解復雜信息并利用這些知識做出更好的業(yè)務決策。MicrosoftOfficeVisio幫助您創(chuàng)建具有專業(yè)外觀的圖表,以便理解、記錄和分析信息、數(shù)據、系統(tǒng)和過程。大多數(shù)圖形軟件程序依賴于藝術技能。然而,在您使用Visio時,以可視方式傳遞重要信息就像打開模板、將形狀拖放到繪圖中以及對即將完成的工作應用主題一樣輕松。使用OfficeVisio2007,可以通過多種圖表,包括業(yè)務流程圖、軟件界面、網絡圖、工作流圖表、數(shù)據庫模型和軟件圖表等直觀地記錄、設計和完全了解業(yè)務流程和系統(tǒng)的狀態(tài)。通過使用OfficeVisioProfessional2007將圖表鏈接至基礎數(shù)據,以提供更完整的畫面,從而使圖表更智能、更有用。第2章需求分析傳統(tǒng)的學校教學中,進行一場考試,要求老師打印試卷、安排考試、監(jiān)考、收集試卷、評改試卷,這是一個繁雜的過程,需要大量人力、物力與時間的投入,已經越來越不適應學校信息化建設與現(xiàn)代教學的需要。而網絡考試系統(tǒng),正是信息化建設的產物,它是傳統(tǒng)考場的延伸,它可以利用計算機網絡方便地對學生進行考試,大大簡化傳統(tǒng)考試的過程,因此網絡考試是電子化教學的不可缺少的輔助手段。在當今信息時代,計算機技術與網絡技術越來越廣地應用于各個領域,改變著人們的學習、工作、生活乃至思維方式,也引起了教育領域的重大變革。將計算機與網絡技術應用于現(xiàn)代高等教育中,是現(xiàn)代高等教育發(fā)展的需要,也是改革教育模式,提高學校教學效果和教學效率、提高科研和管理水平的必要手段。2.1系統(tǒng)可行性分析可行性分析是對現(xiàn)行系統(tǒng)進行初步調查和研究之后的結論,它反映了新系統(tǒng)開發(fā)策略。下面分別從社會可行性、技術可行性以及經濟可行性三方面進行可行性分析。2.1.1社會可行性分析由于學校學生人數(shù)數(shù)量眾多,因而通過電腦化操作可以減少紙張的使用,同時由于數(shù)據直接通過局域網傳輸,可以減少信息傳遞時間,提高效率,這個系統(tǒng)很大程度上方便了老師和學生。因此從社會可行性分析角度來說,該系統(tǒng)的開發(fā)和設計是可行的。2.1.2技術可行性分析本系統(tǒng)是一個基于C/S結構的小型局域網系統(tǒng),采用面向對象技術、序列化技術、各種Java流行框架的應用等Java先進技術開發(fā)的應用程序,現(xiàn)有的開發(fā)技術已非常成熟,且被廣泛應用于各行各業(yè),利用現(xiàn)有技術完全可以達到功能目標。2.1.3經濟可行性在經濟上,本系統(tǒng)只是針對機房中小型局域網進行設計,旨在減輕教學壓力。除此之外,在可擴充性方面,系統(tǒng)采用生命周期法把一個復雜的系統(tǒng)開發(fā)工作分解成一些相對獨立的部分,可以分階段實施,為以后的擴充提供方便,另外,系統(tǒng)開發(fā)時,充分考慮到,系統(tǒng)以后的可能擴展,因此對于二次開發(fā),將會更加方便,也即是說,系統(tǒng)的適應性很強,可以長期使用。在很大程度上減輕了在考試方面的經濟投入,節(jié)省一部分教育投入。根據分析研究,使用本套住院信息管理系統(tǒng)對于整個住院部門來說并不是一個很大的負擔,因而在經濟上是可行的。2.1.4可行性分析結論通過在社會、技術、經濟三方面的可行性研究分析,發(fā)現(xiàn)系統(tǒng)的開發(fā)滿足這三方面的要求,因此一致認為系統(tǒng)應該立即開發(fā)。2.2系統(tǒng)功能分析在局域網中的考試系統(tǒng)應該滿足服務器端與客戶端的通信,服務器端必須滿足試卷錄入、試卷發(fā)放、試卷評判、考試時間設置等功能;客戶端應該滿足在線答題、提交試卷等功能。第3章系統(tǒng)總體設計3.1系統(tǒng)設計原理系統(tǒng)采用C/S設計模式,運用Socket建立服務器與客戶端的連接。服務器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接??蛻舳?,使用Socket對網絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。Socket接口是TCP/IP網絡的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網絡上的應用程序。要學Internet上的TCP/IP網絡編程,必須理解Socket接口。Socket接口設計者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網絡的Socket數(shù)據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似于打開文件的函數(shù)調用Socket(),該函數(shù)返回一個整型的Socket描述符,隨后的連接建立、數(shù)據傳輸?shù)炔僮鞫际峭ㄟ^該Socket實現(xiàn)的。3.2技術設計方案3.2.1Java網絡編程所謂socket通常也稱作"套接字",應用程序通常通過"套接字"向網絡發(fā)出請求或者應答網絡請求。以J2SDK-1.3為例,Socket和ServerSocket類庫位于包中。ServerSocket用于服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對于一個網絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產生不同級別。一個完整的socket有一個本地唯一的socket號,由操作系統(tǒng)分配。最重要的是,socket是面向客戶/服務器模型而設計的,針對客戶和服務器程序提供不同的socket系統(tǒng)調用??蛻綦S機申請一個socket(相當于一個想打電話的人可以在任何一臺入網電話上撥號呼叫),系統(tǒng)為之分配一個socket號;服務器擁有全局公認的socket,任何客戶都可以向它發(fā)出連接請求和信息請求(相當于一個被呼叫的電話擁有一個呼叫方知道的電話號碼)。socket利用客戶/服務器模式巧妙地解決了進程之間建立通信連接的問題。服務器socket半相關為全局所公認非常重要。假如通信雙方沒有任何一方的socket固定,就好比打電話的雙方彼此不知道對方的電話號碼,要通話是不可能的。根據連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。服務器監(jiān)聽:是服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網絡狀態(tài)。客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。連接確認:是指當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。3.2.2Java對象的序列化對于一個存在Java虛擬機中的對象來說,其內部的狀態(tài)只是保存在內存中。JVM退出之后,內存資源也就被釋放,Java對象的內部狀態(tài)也就丟失了。而在很多情況下,對象內部狀態(tài)是需要被持久化的,將運行中的對象狀態(tài)保存下來(最直接的方式就是保存到文件系統(tǒng)中),在需要的時候可以還原,即使是在Java虛擬機退出的情況下。

對象序列化機制是Java內建的一種對象持久化方式,可以很容易實現(xiàn)在JVM中的活動對象與字節(jié)數(shù)組(流)之間進行轉換,使得Java對象可以被存儲,可以被網絡傳輸,在網絡的一端將對象序列化成字節(jié)流,經過網絡傳輸?shù)骄W絡的另一端,可以從字節(jié)流重新還原為Java虛擬機中的運行狀態(tài)中的對象。3.2.3Java多線程編程在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構為Thread(Runnable)的構造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制(關鍵字為synchronized)。第4章系統(tǒng)詳細設計4.1系統(tǒng)功能設計4.1.1菜單欄主要功能項導入考場設置導入考試試卷導出考試結果為TXT導出考試結果為HTML導出考試結果為EXCEL調用系統(tǒng)工具計算器調用系統(tǒng)工具記事本查看幫助4.1.2工具欄主要功能項試卷錄入考試設置考場監(jiān)控結果查詢系統(tǒng)設置4.1.3監(jiān)考選項卡主要功能項發(fā)放考生信息單發(fā)放試卷發(fā)送即時通知開啟監(jiān)控4.2模塊類設計在系統(tǒng)UI模塊的設計過程中設計了相關的類,具體類的設計如圖4.1所示圖4.1系統(tǒng)UI模塊設計類圖在系統(tǒng)通信/控制模塊的設計過程中設計了相關的類,具體類的設計如圖4.2所示圖4.2系統(tǒng)通信/控制模塊設計類圖在系統(tǒng)實體/資源模塊的設計過程中設計了相關的類,具體類的設計如圖4.3所示圖4.3系統(tǒng)實體/資源模塊設計類圖在系統(tǒng)數(shù)據處理模塊的設計過程中設計了相關的類,具體類的設計如圖4.4所示圖4.4系統(tǒng)數(shù)據處理模塊設計類圖4.3界面設計在界面設計中采用如下的三種原則,界面整體采用菜單欄、工具欄、選項卡、狀態(tài)欄結構設計;軟件具有自動記憶功能,運行后自動填充已保存的設置;設計遵循用戶體驗的KISS原則,操作方便快捷。系統(tǒng)主界面的設計如圖4.5所示圖4.5系統(tǒng)主界面設計圖第5章系統(tǒng)的實現(xiàn)與應用5.1服務器端的實現(xiàn)在服務器剛剛開始運行的時候會彈出一個歡迎界面,顯示結果如圖5.1所示圖5.1系統(tǒng)歡迎界面歡迎界面顯示一定時間后會顯示系統(tǒng)服務器端的登錄界面,顯示結果如圖5.2所示圖5.2服務器端登錄界面登錄成功后進入系統(tǒng)服務器端主界面,顯示結果如圖5.3所示圖5.3系統(tǒng)主界面(考場監(jiān)考界面)在系統(tǒng)主界面可以錄入需要進行考試的試題,試題錄入界面如圖5.4所示圖5.4試卷錄入界面另外在主界面可以對考試進行考試時間限定、發(fā)放及時信息等設置,并且還可以修改系統(tǒng)的登錄密碼如圖5.5所示圖5.5系統(tǒng)設置界面在考試過程中服務器端可以對客戶端的屏幕進行監(jiān)控,監(jiān)控結果如圖5.7所示圖5.7考場監(jiān)控界面考試結束后可以隊參加考試的考生成績進行查詢,查詢界面如圖5.8所示圖5.8結果查詢界面5.2客戶端的實現(xiàn)客戶端安裝成功后可以進入客戶端登錄界面,登錄界面如圖5.9所示圖5.9客戶端登錄界面登錄成功后出現(xiàn)考試信息界面,提示學生在考試中應該注意的問題如圖5.10所示圖5.10考試信息界面考試信息界面顯示結束后學生要填寫考生信息單,填寫界面如圖5.11所示圖5.11考生信息填寫后界面信息單填寫結束就可以進入答題界面進行答題,如圖5.12所示圖5.12答題界面5.3考試結果處理系統(tǒng)測試采用了黑盒測試的方法進行系統(tǒng)測試,各功能點測試結果正常,考試結果成功導出??荚嚱Y果的有效導出是考試系統(tǒng)的一個重要功能,本設計提供了三種考試結果導出方式,分別是TXT(如圖5.13)、HTML(如圖5.14)、EXCEL(如圖5.15)。圖5.13考試結果導出的TXT文檔圖5.14考試結果導出的HTML文檔圖5.15考試結果導出的EXCEL文檔5.4源程序清單5.4.1項目文件組織結構 為了更清晰的了解項目文件的組織結構,現(xiàn)將項目文件的的各個項目截圖如圖5.16、圖5.17所示圖5.16項目源代碼文件組織結構圖5.17項目配置/數(shù)據文件組織結構5.4.2項目模塊關鍵代碼 /** *試卷實體類 */packagecom.vesense.bean;importjava.io.Serializable;publicclassPageimplementsSerializable{ privateStringtitle; privateStringnotice; privateintquestionNum; privateinteachScore; privateQuestion[]questions; publicintgetEachScore(){ returneachScore; } publicvoidsetEachScore(inteachScore){ this.eachScore=eachScore; } publicStringgetNotice(){ returnnotice; } publicvoidsetNotice(Stringnotice){ this.notice=notice; } publicintgetQuestionNum(){ returnquestionNum; } publicvoidsetQuestionNum(intquestionNum){ this.questionNum=questionNum; } publicStringgetTitle(){ returntitle; } publicvoidsetTitle(Stringtitle){ this.title=title; } publicQuestion[]getQuestions(){ returnquestions; } publicvoidsetQuestions(Question[]questions){ this.questions=questions; } } /** *系統(tǒng)資源類 */packagecom.vesense.res;importjavax.swing.ImageIcon;publicclassR{ publicstaticfinalImageIconIMAGE_WELCOME=newImageIcon(R.class.getResource("welcome.jpg")); publicstaticfinalImageIconIMAGE_LOGIN_HEAD=newImageIcon(R.class.getResource("head.jpg")); publicstaticfinalImageIconIMAGE_MANAGER_SEARCH=newImageIcon(R.class.getResource("search.png")); publicstaticfinalImageIconIMAGE_MANAGER_EXAM=newImageIcon(R.class.getResource("exam.png")); publicstaticfinalImageIconIMAGE_MANAGER_PAGE=newImageIcon(R.class.getResource("page.png")); publicstaticfinalImageIconIMAGE_MANAGER_SETUP=newImageIcon(R.class.getResource("setup.png")); publicstaticfinalImageIconIMAGE_MANAGER_RESULT=newImageIcon(R.class.getResource("result.png")); publicstaticfinalImageIconIMAGE_MANAGER_CONF=newImageIcon(R.class.getResource("conf.png")); publicstaticfinalImageIconIMAGE_MANAGER_EXAM2=newImageIcon(R.class.getResource("exam_2.png")); publicstaticfinalImageIconIMAGE_MANAGER_PAGE2=newImageIcon(R.class.getResource("page_2.png")); publicstaticfinalImageIconIMAGE_MANAGER_SETUP2=newImageIcon(R.class.getResource("setup_2.png")); publicstaticfinalImageIconIMAGE_MANAGER_RESULT2=newImageIcon(R.class.getResource("result_2.png")); publicstaticfinalImageIconIMAGE_MANAGER_CONF2=newImageIcon(R.class.getResource("conf_2.png")); publicstaticfinalImageIconIMAGE_STUDENT_CHECKED=newImageIcon(R.class.getResource("checked.png")); publicstaticfinalImageIconIMAGE_STUDENT_NOTCHECKED=newImageIcon(R.class.getResource("not_checked.png")); publicstaticfinalImageIconIMAGE_PAGE_NOTE=newImageIcon(R.class.getResource("note.png")); publicstaticfinalImageIconIMAGE_MANAGER_RUN=newImageIcon(R.class.getResource("running.gif")); publicstaticfinalImageIconIMAGE_EXAM_E1=newImageIcon(R.class.getResource("e1.png")); publicstaticfinalImageIconIMAGE_EXAM_E2=newImageIcon(R.class.getResource("e2.png")); publicstaticfinalImageIconIMAGE_EXAM_E3=newImageIcon(R.class.getResource("e3.png")); publicstaticfinalImageIconIMAGE_EXAM_E4=newImageIcon(R.class.getResource("e4.png")); publicstaticfinalImageIconIMAGE_MONITOR_NO=newImageIcon(R.class.getResource("no.png")); publicstaticfinalStringFILE_LOGIN_CONFIG="conf/perties"; publicstaticfinalStringFILE_NET_CONFIG="conf/perties"; publicstaticfinalStringFILE_DATA_DEFAULT_EXAM="data/exam/default.exam"; publicstaticfinalStringFILE_DATA_DEFAULT_PAGE="data/page/default.page"; publicstaticfinalStringFILE_EXPORT_DEFAULT_TXT="data/export/default.txt"; publicstaticfinalStringFILE_EXPORT_DEFAULT_HTML="data/export/default.htm"; publicstaticfinalStringFILE_EXPORT_DEFAULT_EXCEL="data/export/default.xls"; publicstaticfinalStringFILE_IIB_JXL="lib/jxl.jar";} /** *對象序列化類 */packagecom.vesense.data;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;publicclassObjUtil{ publicstaticObjectread(Stringname){ Objectobj=null; ObjectInputStreaminput=null; try{ input=newObjectInputStream(newFileInputStream(newFile(name))); obj=input.readObject(); }catch(IOExceptione){ e.printStackTrace(); }catch(ClassNotFoundExceptione){ e.printStackTrace(); }finally{ if(input!=null) try{ input.close(); }catch(IOExceptione){ e.printStackTrace(); } } returnobj; } publicstaticvoidwrite(Stringname,Objectobj){ ObjectOutputStreamoutput=null; try{ output=newObjectOutputStream(newFileOutputStream(newFile(name))); output.writeObject(obj); output.flush(); }catch(IOExceptione){ e.printStackTrace(); }finally{ if(output!=null) try{ output.close(); }catch(IOExceptione){ e.printStackTrace(); } } }} /** *文件內容操作類 */packagecom.vesense.util;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;publicclassFileUtil{ publicstaticvoidtoTXT(Stringbuffer,Stringfile){ OutputStreamWriterwriter=null; try{ writer=newOutputStreamWriter(newFileOutputStream(file)); }catch(FileNotFoundExceptione){ e.printStackTrace(); } try{ writer.write(buffer); writer.close(); }catch(IOExceptione){ e.printStackTrace(); } }} /** *系統(tǒng)配置類 */packagecom.vesense.util;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Properties;publicclassConfig{ privateStringname; privatePropertiespro; publicConfig(Stringname){ =name; pro=newProperties(); try{ pro.load(newFileInputStream(name)); }catch(IOExceptione){ e.printStackTrace(); }}publicStringgetProperty(Stringkey){ returnpro.getProperty(key);}publicvoidsetProperty(Stringkey,Stringvalue){ pro.setProperty(key,value); try{ pro.store(newFileOutputStream(name),""); }catch(Exceptione){ e.printStackTrace(); }}}/** *考試結果導出為TXT文檔 */ privatevoidtoTXT(){ if(students.size()<=0){ return; } StringBufferbuffer=newStringBuffer(); buffer.append("學號\t姓名\t院系\t專業(yè)\t班級\t科目\t分數(shù)\r\n"); for(inti=0;i<students.size();i++){ Studentstu=students.get(i); buffer.append(stu.getSno()+"\t"+stu.getName()+"\t" +stu.getDept()+"\t"+stu.getMajor()+"\t" +stu.getCls()+"\t"+stu.getCourse()+"\t" +stu.getScore()+"\r\n"); } FileUtil.toTXT(buffer.toString(),R.FILE_EXPORT_DEFAULT_TXT); JOptionPane.showMessageDialog(this,"考試結果已成功導出至默認目錄!"); } /** *考試結果導出為HTML文檔 */ privatevoidtoHTML(){ if(students.size()<=0){ return; } StringBufferbuffer=newStringBuffer(); buffer.append("<html><head><metacharset=\"GB2312\"/><title>數(shù)據統(tǒng)計報告-綠光考試系統(tǒng)</title><style>body{font-family:'微軟雅黑';}a{color:black;}.bl{color:blue;}.h{background:#ccc;}table{width:80%;}.d{color:green;}.dd{color:red;}</style></head><body><tablealign='center'><strong>數(shù)據統(tǒng)計報告</strong>-VesenseCorporation<hr>"); buffer.append("<trclass='bl'><tdcolspan='7'>考試結果統(tǒng)計</td></tr>"); buffer.append("<trclass='h'><th>學號</th><th>姓名</th><th>院系</th><th>專業(yè)</th><th>班級</th><th>科目</th><th>分數(shù)</th></tr>"); doublejgScore=currentPage.getQuestionNum()*currentPage.getEachScore()*0.6; for(inti=0;i<students.size();i++){ Studentstu=students.get(i); buffer.append("<tr><td>"+stu.getSno()+"</td><td>" +stu.getName()+"</td><td>"+stu.getDept()+"</td><td>" +stu.getMajor()+"</td><td>"+stu.getCls()+"</td><td>" +stu.getCourse()+"</td>"); if(stu.getScore()<jgScore){ buffer.append("<tdtdclass='dd'>"+stu.getScore() +"</td><td><tr>"); }else{ buffer.append("<tdtdclass='d'>"+stu.getScore() +"</td><td><tr>"); } } buffer .append("<tr><td> <td></tr><tr><tdcolspan='9'><small>Copyright©2012綠光考試系統(tǒng)</small></td><tr></table></body></html>"); FileUtil.toTXT(buffer.toString(),R.FILE_EXPORT_DEFAULT_HTML); JOptionPane.showMessageDialog(this,"考試結果已成功導出至默認目錄!"); } /** *考試結果導出為EXCEL文檔 */ privatevoidtoExcel(){ if(students.size()<=0){ return; } WritableWorkbookbook=null; try{ book=Workbook .createWorkbook(newFile(R.FILE_EXPORT_DEFAULT_EXCEL)); }catch(IOExceptione){ e.printStackTrace(); } WritableSheetsheet=book.createSheet("第一頁",0); try{ Labellabel=newLabel(0,0,"學號"); sheet.addCell(label); label=newLabel(1,0,"姓名"); sheet.addCell(label); label=newLabel(2,0,"院系"); sheet.addCell(label); label=newLabel(3,0,"專業(yè)"); sheet.addCell(label); label=newLabel(4,0,"班級"); sheet.addCell(label); label=newLabel(5,0,"科目"); sheet.addCell(label); label=newLabel(6,0,"分數(shù)"); sheet.addCell(label); for(inti=0;i<students.size();i++){ Studentstu=students.get(i); label=newLabel(0,i+1,stu.getSno()); sheet.addCell(label); label=newLabel(1,i+1,stu.getName()); sheet.addCell(label); label=newLabel(2,i+1,stu.getDept()); sheet.addCell(label); label=newLabel(3,i+1,stu.getMajor()); sheet.addCell(label); label=newLabel(4,i+1,stu.getCls()); sheet.addCell(label); label=newLabel(5,i+1,stu.getCourse()); sheet.addCell(label); jxl.write.Numbernumber=newNumber(6,i+1,stu.getScore()); sheet.addCell(number); } }catch(RowsExceededExceptione){ e.printStackTrace(); }catch(Write

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論