遼寧工程技術(shù)大學大學軟件項目實訓報告_第1頁
遼寧工程技術(shù)大學大學軟件項目實訓報告_第2頁
遼寧工程技術(shù)大學大學軟件項目實訓報告_第3頁
遼寧工程技術(shù)大學大學軟件項目實訓報告_第4頁
遼寧工程技術(shù)大學大學軟件項目實訓報告_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

遼寧工程技術(shù)大學

大型軟件項目實訓報告

一、實訓目的

通過外出實訓提高自己的實戰(zhàn)能力,對軟件編程項目有更深刻的理解。根據(jù)企

業(yè)對人才的具體需求,針對軟件學院應(yīng)屆畢業(yè)生,開展以大型軟件工程項目為目的

的實戰(zhàn)訓練,有效提升學生的項目實戰(zhàn)能力和適應(yīng)市場的能力,最終實現(xiàn)學生比較

理想的就業(yè)率和就業(yè)質(zhì)量。

二、實訓時間和地點

1.實訓時間:2012年12月17~2013年1月25日

2.實訓地點:遼寧省沈陽市達內(nèi)職業(yè)培訓學校

三、實訓單位簡介

沈陽達內(nèi)科技有限公司是中國高端IT培訓行業(yè)領(lǐng)導品牌,由美國國際數(shù)據(jù)集團

IDGVCPartners和集富亞洲JAFCOASIA投資,由來自SUN、IBM、亞信、華為、

東軟、用友等國際知名IT公司的技術(shù)骨干、海外留學生和加拿大專業(yè)技術(shù)人員創(chuàng)辦,

直接引進北美rr技術(shù),結(jié)合中國rr企業(yè)的現(xiàn)狀,定制化培養(yǎng)高端rr人才。

經(jīng)過9年運營,沈陽達內(nèi)科技有限公司在大學生rr就業(yè)培訓領(lǐng)域積累了豐富的

專業(yè)經(jīng)驗與就業(yè)資源,實現(xiàn)了95%的專業(yè)就業(yè)率,78%的口碑入學率,學員平均畢

業(yè)薪資3800元/首月平均薪資。目前,達內(nèi)IT培訓團已經(jīng)發(fā)展成為集培訓、咨詢、

開發(fā)、人才服務(wù)于一體的高新技術(shù)集團公司,公司下設(shè)達內(nèi)高端IT培訓、達內(nèi)軟件

人才服務(wù)中心、達內(nèi)軟件研發(fā)中心。

沈陽達內(nèi)科技有限公司先后在中國軟件業(yè)發(fā)達城市——北京、上海、廣州、沈

陽、深圳、南京、武漢、杭州、西安、蘇州、成都、大連、太原、長沙、重慶等20

多個城市,建立了30多家培訓中心,年培養(yǎng)1萬多名軟件人才。已累計為IBM、微

軟、摩托羅拉、華為、中軟、用友、Yahoo、阿里巴巴、TOM、新浪、搜狐、百度、

聯(lián)想、神州數(shù)碼、大唐電信、亞信等知名IT企業(yè)培養(yǎng)輸送7萬多名中高級軟件人才,

跨越電信、金融、電子政務(wù)(商務(wù))、電力、通訊、搜索、歐美外包及對日外包等十數(shù)

個行業(yè)。

由于沈陽達內(nèi)科技有限公司優(yōu)秀的教學效果和行業(yè)領(lǐng)先的經(jīng)營模式贏得了社會

各界的廣泛贊譽和好評,近年來達內(nèi)榮獲了各界權(quán)威機構(gòu)的頒獎:達內(nèi)成為業(yè)界唯

一的一家2006、2007、2008、2009連續(xù)4年入選德勤評選的“中國高科技高成長

50強公司”、“亞太地區(qū)高科技高成長500強公司”,中關(guān)村管理委員會指定的“軟

件人才培養(yǎng)示范基地”,被《計算機世界》評選的“就業(yè)服務(wù)杰出貢獻獎”,被《中

國計算機報》評選的"最具影響力培訓機構(gòu)獎”,被搜狐評為“中國十大教育集團”,

被騰訊評為“中國大學生心目中最具影響力的IT品牌”等等。

四、實訓內(nèi)容

1.實訓期間完成的學習任務(wù)

(1)Linux系統(tǒng)操作命令

首先,我們學習了最基礎(chǔ)的系統(tǒng)操作指令。因為在學習過程中C和C++代碼的編

程和修改在linux系統(tǒng)下,所以我們集中精力花費了3天時間學習指令操作。

命令:

文檔統(tǒng)計:wc日期:datecal關(guān)機poweroffwindows:shutdown

Rebootexitfindgrepfind[目錄列表]匹配標準-namesize-type-atime

通配符:

操作目錄下有需要通配的內(nèi)容的時候采使用通配符。*,[],?,!,{};1將上一

個命令的輸出作為下一個命令的輸入:cat/etc/passwdIgrep-nroottee

Is-11teea.txt

In硬連接軟連接

Infile02fileIn-sfile02sfile

users:

who:

whoami:

whoami:

系統(tǒng)進程信息ps

psu:詳細方式顯示當前終端下的進程的信息

ps-e:當前正在運行的所有進程

sleep10&

killPID

jobs:查看任務(wù)

kill%nfg%nbg%nstop%nctrl+c/z

man幫助手冊

(a)系統(tǒng)命令

(b)系統(tǒng)調(diào)用open

(c)庫函數(shù)fopen

(d)管理員的命令ifconfigserviceifconfig

ip地址:netmask:默認網(wǎng)關(guān):

域名解析netstatpingipexport

HOME:PWD:PATH:LANG:CC:CCC:PSI:PS2

exportPS1=""

-/.bashrcsource-/.bashrcxxx.sh

#!/bin/bashcaldateIsvi

命令模式:iahjklctrl+bfshift+90web$0x5xX5Xdd5dd

ywyyprRu:undo#G

底行命令模式:setnu

setcindent:按照C語言的風格進行自動縮進。

settabstop=4:設(shè)置tab按鍵的長度

行號+回車

字符串nN

/n個空格%s/string/replace/g

wfilename

#1,#2wfilename

qq!wq

geditkate

C程序的開發(fā)執(zhí)行次序:

(a)寫源文件,后綴名.c

(b)對代碼中的指令進行預處理,以#開頭的

(c)代碼編譯,生成xx.o/xx.obj

(d)代碼的連接生成可執(zhí)行文件a.out/xx.exe

(e)加載文件,把文件從硬盤讀入內(nèi)存

(f)執(zhí)行

gcc的選項:

-C只編譯不連接

-E只作預處理

-S匯編代碼

-std=c89/c99

-o改變最后的可執(zhí)行文件的名字

(2)Linux下Java程序開發(fā)

2.1循環(huán)語句(反復去做一件事)

1)while

a格式

while(表達式){

語句(循環(huán)體)

)

b當表達式為真的,執(zhí)行循環(huán)體語句,如果表達式為假,

退出循環(huán)

c如果第1次執(zhí)行循環(huán)的時候,表達式為假,則一次循環(huán)

都不執(zhí)行,直接退出

d如何控制循環(huán)的次數(shù)?

循環(huán)變量,用來控制循環(huán)次數(shù)的變量,是非常重要的資源

2)for循環(huán)(企業(yè)開發(fā)最為常見的循環(huán))

for(初始化表達式;boolean表達式;自增表達式){

循環(huán)體語句

驗證碼條碼共13位,代表了一件商品編碼,前12位

(692116851128)有具體代表含義,第13位是通過如下

01...

步驟算出來的:

第1步:取出該數(shù)的奇數(shù)位和,

cl=6+2+1+8+1+2=20

第2步:取出該數(shù)的偶數(shù)位和,

c2=9+1+6+5+14-8=30

第3步:將"奇數(shù)和"與"偶數(shù)和的三倍"相加,

cc=cl+c2*3=20+30*3=110

第4步:取結(jié)果的個位數(shù)(對10取余):

110的個位數(shù)為(110%10=0)

第5步:用10減去這個個位數(shù):10-0=10

第6步:對得到的數(shù)再取個位數(shù)(對10取余):10%10=0

String:字符串,簡化對char的操作,引用類型,表示一串字符(包含很多的

char)

2)Stringstr="692116851128";

下標:01234567891011

0——》6

1——》9

2——》2

str.charAt(i)//i指的下標,取出下標是i的單個字符

06

19

3)char--------》int

'6'!=6

0~9在編碼級是連續(xù)

'6'-'0'=6

for2.demo4

4)do{

循環(huán)體語句

}while(表達式)

a首先執(zhí)行一次循環(huán)體語句,再來判斷表達式是true

還是false,如果true,繼續(xù)執(zhí)行循環(huán)體,如果false

直接退出循環(huán)

bdo{}while()不管表達式真還是假,都會執(zhí)行

一次循環(huán)體

5)退出循環(huán)

abreak:退出整個循環(huán)

bcontinue:退出本次循環(huán)

6)循環(huán)嵌套

//java基礎(chǔ)難點:循環(huán)嵌套,冒泡排序,選擇排序,插入排序

一個循環(huán)的內(nèi)部又包含一個循環(huán)

2.2數(shù)組

定義:一些相同類型的變量集合在了--起,就是數(shù)組,數(shù)組

大小必須固定

1)聲明數(shù)組

數(shù)據(jù)類型口數(shù)組名字/數(shù)據(jù)類型數(shù)組名字口

eg:int[]a;

2)數(shù)組初始化

a靜態(tài)初始化:int[]a={1,2,5,123,78);

b動態(tài)初始化:

int[]ary=newint[5];

int[]ary=newint[]{56,78,90);

3)訪問數(shù)組

數(shù)組的下標:就是為了區(qū)分數(shù)組中的每個元素(變量)

下標:數(shù)組的下標永遠都從0開始

訪問數(shù)組元素的格式:數(shù)組名[下標值]

4)數(shù)組的長度(數(shù)組中元素的個數(shù))

數(shù)組名.length--------->當前數(shù)組中元素的個數(shù)

數(shù)組的第1個元素的下標:0

數(shù)組的最后1個元素的下標是:length-1

2.3方法(函數(shù)):具有一定功能的代碼塊

publicstaticvoidmain(String[]args){}

1)格式

修飾詞返回值類型方法名(形式參數(shù)列表)(

方法體

void:沒有任何的返回值

2)沒有參數(shù)沒有返回值的方法

輸出一句話

調(diào)用方法:方法名();

3)沒有參數(shù)有返回值的方法

如果一個方法有返回值的話,必須要指明該返回值的數(shù)據(jù)類型

修飾詞返回值類型方法名(形式參數(shù)列表)(

方法體

return返回值

}

4)含有參數(shù)的方法(值傳遞)

5)java中棧的變量分布

java程序啟動的時候,會在內(nèi)存中開辟兩個區(qū)域,其中一個

用來保存局部變量(基本數(shù)據(jù)類型/引用類型對象地址值),

整個區(qū)域我們叫做棧,用來保存引用類型對象,叫做堆。

棧:后進先出

2.4數(shù)組中的一些常用的方法

arraycopy(aryl,0,ary2,0,aryl.length)

copyOf(目標,新數(shù)組的長度)

2.5排序

1)冒泡排序

特點:永遠把最大的數(shù)放在后面,i只是比較輪次,

每次比較都是兩兩比較(5與U+1]比較)

2)選擇排序

特點:永遠是把最小的數(shù)放在前面,每輪都把小的數(shù)放到

前面,而且是i和j比較

2.6常用工具的方法

1)Random:隨機

2)時間問題

3)針對數(shù)組最好的排序方法

2.7雙色球

1)案例:實現(xiàn)隨機生成雙色球號碼**

實現(xiàn)隨機生成雙色球號碼:

[022213161812][12]

紅球33個球(01-33)取六個

藍球16個球(01-16)取一個

提示:

0101

0

truefalse...

0

紅球池{"01","02","03","04",..."33")

藍球池{"01","02","03","04",..."16")

使用標記{f,f,f,f,...f)

結(jié)果采用一個數(shù)組存儲,數(shù)組可以利用數(shù)組擴容追加新的

“球號”,處理邏輯參考如下過程:

a.隨機生成紅球序號

b.檢查"紅球序號”是否使用過(取出過),如果使用過返回

第1步

C.取出?個紅球,設(shè)置使用標記為true

d.判斷是否取出了6個紅球,如果沒有到6個,返回第1步

e.對紅球結(jié)果排序

f.取出一個籃球放入結(jié)果中

g.輸出結(jié)果6+1(紅+蘭)

(3)面向?qū)ο蟾拍?/p>

3.1Object>東西,Java程序員:想著對象寫代碼

class類名{

屬性

構(gòu)造方法

方法

}

類:事物的類型,人類,車類

類名:對象名=new構(gòu)造方法;

對象:事物的實例,劉詩詩,門口劉老師的那輛28自行車

面向?qū)ο笕筇卣鳎悍庋b,多態(tài),繼承,(抽象)

封裝:對數(shù)據(jù)對代碼盡可能不讓外界看到

多態(tài):事物在不同的情況下有不同的表現(xiàn)

花一>花朵,花錢,花心

美女一>鳳姐,劉詩詩,高圓圓,班主任

繼承:代碼的重復利用

3.2類:

定義:代表一類事物.Eg:人類

類:

特征--—>基本屬性

行為--->活動

3.3java中的類:

特征——>屬性——>變量

行為——>方法

class類名{

屬性

方法

3.4對象:

1)類跟對象之間的關(guān)系:

類是一類事物,類就是一個模板.eg:人類

對象是一個事物的實例.eg:劉英謙

2)java開發(fā)的特點:

a)設(shè)計類------------模板

b)實例化------------實現(xiàn)

3)聲明/創(chuàng)建對象(實例化):

聲明:類名對象名;

創(chuàng)建:對象名=new構(gòu)造方法;

4)對對象屬性和方法的訪問:

對象名.屬性名

對象名?方法名

5)引用類型的變量值:

引用類型的變量值:堆當中對象的地址的值,是通過引用類型

的變量來找到堆中的對象

3.5設(shè)id個長方體類(Box):

屬性:長,寬,高

方法:求體積(長*寬*高)

創(chuàng)建一個長方體的對象,給長寬高分別賦值,最后求該

長方體對象的體積。

3.6構(gòu)造方法:

(方便我們創(chuàng)建對象)

1)構(gòu)造方法在new的時候,自動調(diào)用的(給屬性賦值)

2)構(gòu)造方法沒有返回值類型

3)構(gòu)造方法的名字跟類名一樣

4)this:指示代詞,指代一當前(對象),構(gòu)造方法當中參數(shù),按照企業(yè)開

發(fā)的規(guī)范,參數(shù)的名字,必須跟屬性名保持一致,通過this來區(qū)分屬性名和參數(shù)名

this.屬性:當前對象的屬性

classBox{

int1;

publicBox(int1)

this.l=1;

5)構(gòu)造方法重載(構(gòu)造方法的參數(shù)不同,方法名相同):

當new對象的時候,根據(jù)參數(shù)的不同,來調(diào)用不同的

構(gòu)造方法

6)使用this()去調(diào)用一個類中其他構(gòu)造方法:

this(參數(shù)):參數(shù)要跟調(diào)用的構(gòu)造方法中的參數(shù)保持一致

(4)JavaBean規(guī)范

4.1javaBean不是sun語法規(guī)定,是企業(yè)開發(fā)中約定俗成.為了,使用方便.

原因:一般企業(yè)開發(fā)的時候,屬性一般都是定義為私有,通過方法來簡介訪問

1)屬性私有(盡可能)

2)一定要有空參的構(gòu)造方法

3)javaBean一定要放到一個包內(nèi)

4)為私有的屬性,提供get/set方法

5)要實現(xiàn)序列化接口

4.2static:靜態(tài)

修飾:方法,屬性,代碼塊,內(nèi)部類

含義:static修飾任何部分(方法,屬性,代碼塊,內(nèi)部類),該部分只跟類有關(guān),跟對

象無關(guān)

1)靜態(tài)屬性:static修飾屬性

該屬性跟對象無關(guān),跟類有關(guān),而且所有的對象都可以去。

訪問靜態(tài)屬性:

定義的格式:static數(shù)據(jù)類型變量名。

訪問的方式:類名.屬性名。

案例:統(tǒng)計一個班級的學生人數(shù)

分析:

classStudent{

Stringname;〃實例變量

staticintcount;〃靜態(tài)變量

publicStudent(Stringname){

=name;

count++;

總結(jié):靜態(tài)變量是在堆單獨開辟一塊內(nèi)存區(qū)域,用類名.靜態(tài)變量名來訪問,靜

態(tài)變量只跟類有關(guān),跟對象無關(guān)。

實例變量:跟對象有關(guān),是屬于這個對象的,但是可以通過對象.靜態(tài)變量名

來訪問靜態(tài)變量。

2)代碼塊:

在一個類里面,用{代碼},就是代碼塊,每次實例化的時候,都會執(zhí)行一次,企業(yè)開

發(fā)中現(xiàn)在已經(jīng)很少很少很少使用,功能很像構(gòu)造方法。

3)靜態(tài)代碼塊:

用static修飾一個代碼塊,static{代碼塊},創(chuàng)建對象(類加載)只執(zhí)行一次。

4)靜態(tài)方法:

用static修飾的方法,叫做靜態(tài)方法,靜態(tài)方法是類的方法。

調(diào)用方法:類名?方法名。

強調(diào):靜態(tài)不能調(diào)用實例變量。

靜態(tài)方法:經(jīng)常作為工具方法。

4.3final:

最終的final可以修飾屬性,方法,類。

1)final來修飾類:

用final修飾的類,都不用使用子類去繼承,sun提供的工具類很多都是final

類型的,egStringo

總結(jié):企業(yè)開發(fā)中,盡量不要使用final來修飾我們自己的類,

struts2.x/strutsl.x,hibernate,spring,基于。反射實現(xiàn),內(nèi)部會頻繁使用動態(tài)代理技術(shù)

(jdk/cglib)

2)final修飾方法:

用final修飾的方法,不能讓子類再去重寫該方法。

3)final修飾變量:

a用final修飾局部變量。

b用final修飾形式參數(shù)。

c用final對象o

4)java中常量的表達方法:

finalstatic數(shù)據(jù)類型變量名=值;

java中常量一定是所有字母全部大寫(一般),常量一定要放到類當中,不

要放到main方法,因為常量是經(jīng)常需要使用的。

4.4抽象類:

不是一個具體類,有些方法沒有實現(xiàn),需要靠子類繼承,這個抽象類來實

現(xiàn)其方法。

1)抽象類有未實現(xiàn)的方法,需要靠子類繼承這個抽象

類來實現(xiàn)其方法。

2)抽象類不能實例化,因為有未實現(xiàn)的抽象方法。

3)抽象類跟一般類只有一個區(qū)別,就是多了一個抽象

方法。

4)抽象類適合作為系統(tǒng)的分析和設(shè)計的工具。

5)判斷題:含有抽象方法的類就是抽象類。

6)可以使用父類聲明執(zhí)行子類對象去實例化

格式:抽象類對象名=new子類構(gòu)造方法

7)案例:設(shè)計車(抽象類)

屬性:name,color,speed,money

方法:啟動,剎車,運行-》均沒有實現(xiàn)

Taxi(子類繼承抽象類)

方法:全部實現(xiàn)(方法重寫)

2.實訓期間完成的實踐項目

我在達內(nèi)老師的帶領(lǐng)下,學習了java基礎(chǔ)之后,做了一個在線考試系統(tǒng),雖然

程序比較簡略,但是基本功能已經(jīng)實現(xiàn)。

(1)功能介紹

(1.1)用戶登錄:

程序首頁在用戶第一次訪問時會判斷用戶是否登錄,未登錄則顯示用戶登錄窗

口,提示用戶登錄或注冊.對于已經(jīng)登錄的用戶,在用戶登錄窗口將顯示用戶的相關(guān)信

圖1登錄界面

代碼如下:

packagecom.tarena.elts.ui;//UserInterface用戶界面包

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.FlowLayout;

importjava.awt.GridLayout;

importjava.awt.Point;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowListener;

importjava.util.Timer;

importjava.util.TimerTask;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JPasswordField;

importjavax.swing.JTextField;

importjavax.swing.border.EmptyBorder;

/**

*登陸界面是一個具體的窗口框

*布局規(guī)劃:

*JPanel(BorderLayout)contentPane

*1-(北)JLabel。登陸系統(tǒng)”)

*1—(中)JPanel(BorderLayout)centerPane

*Il-(4t)JPanel(GridLayout(2行,1歹ij))

*II—JPanel(BorderLayout)

*IIl--(西)JLable(編號:)

*IIl--(中)JTextField()

*II—JPanel(BorderLayout)

*H西)JLable(密碼:)

*1—(中)JPasswordField

*1一(南)JPanel(FlowLayout)

*l-JButton(nLoginn)

*"JButton(”Cancel”)

*/

publicclassLoginFrameextendsJFrame{

publicLoginFrame(){

//super(“登陸");〃newJFrame(String)

init();

)

privatevoidinit(){〃初始化方法

setTitle("登陸)

this.setSize(3OO,220);

setLocationRelativeTo(null);//^中

add(createContentPane());

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

//setContentPane(createContentPane());

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

clientContext.exit(LoginFrame.this);

)

});

)

privateJPanelcreateContentPane(){〃創(chuàng)建內(nèi)容面板

JPanelp=newJPanel(newBorderLayoutO);

p.setBorder(newEmptyBorder(l0,10,10,10));

p.add(BorderLayout.NORTH,

newJLabel("登陸系統(tǒng)",JLabel.CENTER));

p.add(BorderLayout.CENTER,createCenterPane());

p.add(BorderLayout.SOUTH,createBottomPane());

returnp;

privateJPanelcreateBottomPane(){

JPanelp=newJPanel(newFlowLayout());

JButtonlogin=newJButton(nLoginn);

JButtoncancel=newJButton("Canceln);

p.add(login);

p.add(cancel);

getRootPane().setDefaultButton(login);

login.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventargO){

〃在login按鈕執(zhí)行的時候執(zhí)行這個actionPerformed方法

〃這種在什么情況下執(zhí)行一個方法的現(xiàn)象叫:事件方法

//System.out.println("Loginclick!");

〃調(diào)用控制器對象的login。方法,啟動登錄流程

//clientContext變量必須引用控制器對象

clientContext.login();〃口J,能發(fā)生空指針異常

)

});

cancel.addActionListener(newActionListenerQ{

publicvoidactionPerformed(ActionEventargO){

clientContext.exit(LoginFrame.this);

)

});

returnp;

privateJPanelcreateCenterPane(){

JPanelp=newJPanel(newBorderLayout());

p.setBorder(newEmptyBorder(8,8,8,8));

p.add(BorderLayout.NORTH,createldPwdPaneO);

〃重要!

message=newJLabel(',n,JLabeLCENTER);

p.add(BorderLayout.CENTER,message);

returnp;

)

privateJPanelcreateIdPwdPane(){

JPanelp=newJPanel(newGridLayout(2,1,6,6));

p.add(createIdPane());

p.add(createPwdPane());

returnp;

)

privateJPanelcreateIdPane(){

JPanelp=newJPanel(newBorderLayout());

p.add(BorderLayout.WEST,newJLabel(“編號:"));

JTextFieldidField=newJTextField();

//重要!

this.idField=idField;

p.add(BorderLayout.CENTER,idField);

returnp;

)

privateJPanelcreatePwdPane(){

JPanelp=newJPanel(newBorderLayout());

p.add(BorderLayout.WEST,newJLabel("密碼:

JPasswordFieldpwdField=newJPasswordField();

〃重要!

this.pwdField=pwdField;

pwdField.enablelnputMethods(true);

p.add(BorderLayout.CENTER,pwdField);

returnp;

)

privateClientContextclientContext;

/**依賴注入(IOC),就是給變量賦值,使變量不再null*/

publicvoidsetClientContext(ClientContextclientContext){

this.clientContext=clientContext;

)

privateJTextFieldidField;

privateJPasswordFieldpwdField;

privateJLabelmessage;

publicintgetUserId(){

returnInteger.parseInt(idField.getText());

)

publicStringgetPwd(){

returnnewString(pwdField.getPassword());

)

/**在界面上顯示一個消息,一般是錯誤消息*/

publicvoidshowMessage(Stringmsg){

Colorcol=Color.red;

finalPointlocation=this.getLocation();

message.setForeground(col);

message.setText(msg);

finalTimertimer=newTimer();

timer.schedule(newTimerTask(){

int[]off={0,0};

inti=0;

publicvoidrun(){

setLocation(location.x4-off[i++%off.length],

location.y);

)

},0,1000/20);

timer.schedule(newTimerTask(){

publicvoidrun(){

Colorcolor=message.getForeground();

inta=color.getAlpha();

a=a==0?0:(int)(a*80.0/100);

Colorc=newColor(color.getRed(),

color.getGreen(),color.getBlue(),a);

message.setForeground(c);

)

),2000,200);

timer.schedule(newTimerTask(){

publicvoidrun(){

message.setText(,H,);

timer.cancel();

setLocation(location);

)

),4000);

(1.2)主登陸界面:

圖2主登陸界面

代碼如下:

packagecom.tarena.elts.ui;

importjava.awt.BorderLayout;

importjava.awt.FlowLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjavax.swing.Imagelcon;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importcom.tarena.elts.entity.User;

*主菜單界面

*JPanel(BorderLayout)contentPane

*I—(北)JLabel(圖片)

*1—(中)JPanel(BorderLayout)

*Il--(北)JLabeI(XXX同學…)

*I1—(中)JPanel(FlowLayout)

*II-[Button(開始)

*Il--JButton(分數(shù))

*I"JButton(規(guī)則)

*Il-JButton(離開)

*I-(南)JLabel(版權(quán)信息)

*/

publicclassMenuFrameextendsJFrame{

publicMenuFrame(){

init();

)

privatevoidinit(){

setTitle("遼寧工程技術(shù)大學在線測評)

setSize(600,400);

setContentPane(createContentPane());

setLocationRelativeTo(null);

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

clientContext.exit(MenuFrame.this);

});

}

privateJPanelcreateContentPane(){

JPanelpane=newJPanel(newBorderLayout());

Imageiconicon=newImageIcon(

this.getClass().getResource("title.png"));

//MenuFrame.class.getResource(ntitle.pngn);

pane.add(BorderLayout.NORTH,newJLabel(icon));

pane.add(BorderLayout.CENTER,createMenuPane());

pane.add(BorderLayout.SOUTH,

newJLabel("遼寧工大-!?。 ?

JLabel.RIGHT));

returnpane;

)

privateJPanelcreateMenuPane(){

JPanelpane=newJPanel(newBorderLayoutQ);

〃務(wù)必將info引用到界面控件對象

JLabelinfo=

newJLabel("XXX同學您好!",JLabel.CENTER);

〃重要!

this.userlnfo=info;

pane.add(BorderLayout.NORTH,info);

pane.add(BorderLayout.CENTER,createBtnPane());

returnpane;

)

privateJPanelcreateBtnPane(){

JPanelpane=newJPanel(newFlowLayout());

JButtonstart=createImgBtn("exam.png",”開始");

JButtonresult=createImgBtn(”result.png",“分數(shù))

JButtonmsg=createImgBtn(”message.png”,”考試規(guī)則)

msg.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

Guizheguizhe=newGuizhe();

guizhe.setVisible(true);

//setVisible(false);

});

JButtonexit=createImgBtn("exit.png",”離開)

pane.add(start);

pane.add(result);

pane.add(msg);

pane.add(exit);

getRootPane().setDefaultButton(start);

start.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventargO){

clientContext.start();

)

});

result.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventargO){

clientContext.result();

)

});

exit.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventargO){

〃全限定名

com.tarena.elts.ui.MenuFrame.this.

clientContext.exit(

com.tarena.elts.ui.MenuFrame.this);

}

});

returnpane;

)

//創(chuàng)建圖片按鈕的方法

privateJButtoncreateImgBtn(

Stringimg,Stringtxt){

Imageiconico=newImagelcon(

this.getClass().getResource(img));

JButtonbutton=newJButton(txt,ico);

//button.setlcon(ico);

〃垂直文本對齊位置

button.setVerticalTextPosition(

JButton.BOTTOM);

//水平文本對齊位置

button.setHorizontalTextPosition(

JButton.CENTER);

returnbutton;

}

privateJLabeluserinfo;

publicvoidupdateView(Useruser){

Stringstr="歡迎n+user.getName()+”參加考試U

userlnfo.setText(str);

)

privateClientContextclientContext;

publicvoidsetClientContext(ClientContextclientContext){

this.clientContext=clientContext;

)

(1.3)考試界面:

圖3考試界面

代碼如下:

packagecom.tarena.elts.ui;

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.FlowLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.util.ArrayList;

importjava.util.List;

importjavax.swing.Imagelcon;

importjavax.swing.JButton;

importjavax.swing.JCheckBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JScrollPane;

importjavax.swing.JlextArea;

importjavax.swing.border.EmptyBorder;

importjavax.swing.border.TitledBorder;

importcom.tarena.elts.entity.Examlnfo;

importcom.tarena.elts.entity.Questionlnfo;

/**

*考試界面

*

*JPanel(BorderLayout)

*1-(北)JLabel(圖片)

*l--(中)JPanel(BorderLayout)

*I1-(北)JLabel(考試信息)

*Il--(中)JScorHPane

*III—JTextArea

*Il--(南)JPanel(FlowLayout)

*Il-JCheckBox(A)->0

*Il-JCheckBox(B)->1

*Il-JCheckBox(C)->2

*Il-JCheckBox(D)->3

*l--(南)JPanel(BorderLayout)

*1—(西)JLabel(題號)

*1—(中)JPaneI(FlowLayout)

*Il--JButton("上一題”)

*Il--JButton("下一題”)

*Il--JButton(“交卷”)

*I-(東)JLabel(時間)

*/

publicclassExamFrameextendsJFrame{

〃選項集合,方便答案讀取的處理

privateOptionf]options=newOption[4];

publicExamFrameO{

init();

)

privatevoidinit(){

setTitle("i±內(nèi)科技在線測評)

setSize(600,380);

setContentPane(createContentPane());

setLocationRelativeTo(null);

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

clientContext.sendQ;

)

});

)

privateJPanelcreateContentPane(){

JPanelpane=newJPanel(newBorderLayoutQ);

pane.setBorder(newEmptyBorder(6,6,6,6));

Imageiconicon=newImagelcon(

getClass().getResource("exam_title.pngn));

pane.add(BorderLayout.NORTH,

newJLabel(icon));

pane.add(BorderLayout.CENTER,

createCenterPane());

pane.add(BorderLayout.SOUTH,

createToolsPane());

returnpane;

)

privateJPanelcreateCenterPane(){

JPanelpane=newJPanel(newBorderLayoutO);

//注意!

JLabelexaminfo=

newJLabel("姓名:XXX考試:XXX考試時間:XXX”,

JLabeLCENTER);

//重要!

this.examlnfo=examinfo;

pane.add(BorderLayout.NORTH,examinfo);

pane.add(BorderLayout.CENTER,

createQuestionPane());

pane.add(BorderLayout.SOUTH,

createOptionsPane());

returnpane;

)

privateJPanelcreateOptionsPane(){

JPanelpane=newJPanel();

Optiona=newOption(0,MAH);

Optionb=newOption。JB");

Optionc=newOption(2,nC");

Optiond=newOption(3,nDn);

options[0]=a;

options[l]=b;

options[2]=c;

options[3]=d;

pane.add(a);

pane.add(b);

pane.add(c);

pane.add(d);

returnpane;

}

privateJScrollPanecreateQuestionPane(){

JScrollPanepane=newJScrollPane();

pane.setBorder(newTitledBorder(“題目"));〃標題框

//注意!

questionArea=newJlextArea();

questionArea.setText("問題\11人.\1止.”);

questionArea.setLineWrap(true);〃允許折行顯示

questionArea.setEditable(false);//不能夠編輯內(nèi)容

//JTextArea必須放到JScrollPane的視圖區(qū)域中(Viewport)

pane.getViewport().add(questionArea);

returnpane;

)

privateJPanelcreateToolsPane(){

JPanelpane=newJPanel(newBorderLayout());

pane.setBorder(newEmptyBorder(0,10,0,10));

//注意!

questionCount=

newJLabel("題目:20的1題)

timer=

newJLabel("剩余時間:222秒)

pane.add(BorderLayout.WEST,questionCount);

pane.add(BorderLayout.EAST,timer);

pane.add(BorderLayout.CENTER,createBtnPane());

returnpane;

)

privateJPanelcreateBtnPane(){

JPanelpane=newJPanel(newFlowLayout());

//重要!

prev=newJButton("上一題”);

next=newJButton("T一題)

JButtonsend=newJButton(“交卷”);

pane.add(prev);

pane.add(next);

pane.add(send);

next.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

clientContext.nextO;

)

});

prev.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

clientContext.prev();

)

));

send.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

clientContext.send();

}

});

returnpane;

)

/**使用內(nèi)部類擴展了JCheckBox增加了value屬性,代表答案值*/

classOptionextendsJCheckBox{

intvalue;

publicOption(intval,Stringtxt){

setText(txt);

this.value=val;

privateClientContextclientContext;

publicvoidsetClientContext(ClientContextclientContext){

this.clientContext=clientContext;

)

privateJLabelexaminfo;

privateJlextAreaquestionArea;

/**

*更新考試界面,顯示試題和考試信息

*@paramexaminfo

*@paramquestioninfo

*/

publicvoidupdateView(ExamInfoexaminfo,

Questioninfoquestioninfo){

this.examlnfo.setText(examlnfo.toStringO);

questionArea.setText(questionlnfo.toStringO);

intcount=examInfo.getQuestionCount();

intindex=questioninfo.getQuestionIndex();

updateQuestionIndex(count,index);

updateButtons(count,index);

updateOptions(questionInfo.getUserAnswers());

}

privateJLabelquestionCount;

privatevoidupdateQuestionIndex(intcount,intindex){

Stringstr="題目:n+count+"的"+(index+l)+“題”;

questionCount.setlext(str);

/**更新選項框*/

privatevoidupdateOptions(List<Integer>userAnswers){

for(Optionopt:options){

opt.setSelected(userAnswers.contains(opt.value));

//if(userAnswers.contains(opt.value)){

//opt.setSelected(true);

//}else{

//opt.setSelected(false);

//)

)

)

privateJButtonnext;

privateJButtonprev;

/**更新按鈕狀態(tài)*/

privatevoidupdateButtons(intcount,intindex){

next.setEnabled(index!=count-l);

prev.setEnabled(index!=0);

//next.setEnabled(true);

//prev.setEnabled(true);

//if(index==0){

//prev.setEnabled(false);

//}

//if(index==count-1){

//next.setEnabled(false);

//}

//if(index==0){

//prev.setEnabled(false);

//}else{

//prev.setEnabled(true);

〃}

//if(index==count-1){

//next.setEnabled(false);

//}else{

//next.setEnabled(true);

//}

)

publicList<Integer>getUserAnswers(){

List<Integer>list=newArrayList<Integer>();

for(Optionoption:options){

if(option.isSelected()){

intval=option.value;

list.add(val);

)

}

returnlist;

)

privateJLabeltimer;

publicvoidshowTime(longh,longm,longs){

Stringstr=h+":"+m+n:M+s;

if(h=O&&m<5){

timer.setForeground(Col

溫馨提示

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

最新文檔

評論

0/150

提交評論