遼寧工程技術(shù)大學(xué)大學(xué)軟件項(xiàng)目實(shí)訓(xùn)報(bào)告_第1頁(yè)
遼寧工程技術(shù)大學(xué)大學(xué)軟件項(xiàng)目實(shí)訓(xùn)報(bào)告_第2頁(yè)
遼寧工程技術(shù)大學(xué)大學(xué)軟件項(xiàng)目實(shí)訓(xùn)報(bào)告_第3頁(yè)
遼寧工程技術(shù)大學(xué)大學(xué)軟件項(xiàng)目實(shí)訓(xùn)報(bào)告_第4頁(yè)
遼寧工程技術(shù)大學(xué)大學(xué)軟件項(xiàng)目實(shí)訓(xùn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

大型軟件項(xiàng)目實(shí)訓(xùn)報(bào)告

一、實(shí)訓(xùn)目的

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

業(yè)對(duì)人才的具體需求,針對(duì)軟件學(xué)院應(yīng)屆畢業(yè)生,開(kāi)展以大型軟件工程項(xiàng)目為目的

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

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

二、實(shí)訓(xùn)時(shí)間和地點(diǎn)

1.實(shí)訓(xùn)時(shí)間:2012年12月17~2013年1月25日

2.實(shí)訓(xùn)地點(diǎn):遼寧省沈陽(yáng)市達(dá)內(nèi)職業(yè)培訓(xùn)學(xué)校

三、實(shí)訓(xùn)單位簡(jiǎn)介

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

IDGVCPartners和集富亞洲JAFCOASIA投資,由來(lái)自SUN、IBM、亞信、華為、

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

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

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

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

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

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

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

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

陽(yáng)、深圳、南京、武漢、杭州、西安、蘇州、成都、大連、太原、長(zhǎng)沙、重慶等20

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

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

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

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

個(gè)行業(yè)。

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

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

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

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

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

國(guó)計(jì)算機(jī)報(bào)》評(píng)選的"最具影響力培訓(xùn)機(jī)構(gòu)獎(jiǎng)”,被搜狐評(píng)為“中國(guó)十大教育集團(tuán)”,

被騰訊評(píng)為“中國(guó)大學(xué)生心目中最具影響力的IT品牌”等等。

四、實(shí)訓(xùn)內(nèi)容

1.實(shí)訓(xùn)期間完成的學(xué)習(xí)任務(wù)

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

首先,我們學(xué)習(xí)了最基礎(chǔ)的系統(tǒng)操作指令。因?yàn)樵趯W(xué)習(xí)過(guò)程中C和C++代碼的編

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

命令:

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

Rebootexitfindgrepfind[目錄列表]匹配標(biāo)準(zhǔn)-namesize-type-atime

通配符:

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

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

Is-11teea.txt

In硬連接軟連接

Infile02fileIn-sfile02sfile

users:

who:

whoami:

whoami:

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

psu:詳細(xì)方式顯示當(dāng)前終端下的進(jìn)程的信息

ps-e:當(dāng)前正在運(yùn)行的所有進(jìn)程

sleep10&

killPID

jobs:查看任務(wù)

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

man幫助手冊(cè)

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

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

(c)庫(kù)函數(shù)fopen

(d)管理員的命令ifconfigserviceifconfig

ip地址:netmask:默認(rèn)網(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語(yǔ)言的風(fēng)格進(jìn)行自動(dòng)縮進(jìn)。

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

行號(hào)+回車(chē)

字符串nN

/n個(gè)空格%s/string/replace/g

wfilename

#1,#2wfilename

qq!wq

geditkate

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

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

(b)對(duì)代碼中的指令進(jìn)行預(yù)處理,以#開(kāi)頭的

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

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

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

(f)執(zhí)行

gcc的選項(xiàng):

-C只編譯不連接

-E只作預(yù)處理

-S匯編代碼

-std=c89/c99

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

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

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

1)while

a格式

while(表達(dá)式){

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

)

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

退出循環(huán)

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

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

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

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

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

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

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

驗(yàn)證碼條碼共13位,代表了一件商品編碼,前12位

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

01...

步驟算出來(lái)的:

第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é)果的個(gè)位數(shù)(對(duì)10取余):

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

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

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

String:字符串,簡(jiǎn)化對(duì)char的操作,引用類(lèi)型,表示一串字符(包含很多的

char)

2)Stringstr="692116851128";

下標(biāo):01234567891011

0——》6

1——》9

2——》2

str.charAt(i)//i指的下標(biāo),取出下標(biāo)是i的單個(gè)字符

06

19

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

'6'!=6

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

'6'-'0'=6

for2.demo4

4)do{

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

}while(表達(dá)式)

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

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

直接退出循環(huán)

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

一次循環(huán)體

5)退出循環(huán)

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

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

6)循環(huán)嵌套

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

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

2.2數(shù)組

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

大小必須固定

1)聲明數(shù)組

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

eg:int[]a;

2)數(shù)組初始化

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

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

int[]ary=newint[5];

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

3)訪問(wèn)數(shù)組

數(shù)組的下標(biāo):就是為了區(qū)分?jǐn)?shù)組中的每個(gè)元素(變量)

下標(biāo):數(shù)組的下標(biāo)永遠(yuǎn)都從0開(kāi)始

訪問(wèn)數(shù)組元素的格式:數(shù)組名[下標(biāo)值]

4)數(shù)組的長(zhǎng)度(數(shù)組中元素的個(gè)數(shù))

數(shù)組名.length--------->當(dāng)前數(shù)組中元素的個(gè)數(shù)

數(shù)組的第1個(gè)元素的下標(biāo):0

數(shù)組的最后1個(gè)元素的下標(biāo)是:length-1

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

publicstaticvoidmain(String[]args){}

1)格式

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

方法體

void:沒(méi)有任何的返回值

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

輸出一句話

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

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

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

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

方法體

return返回值

}

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

5)java中棧的變量分布

java程序啟動(dòng)的時(shí)候,會(huì)在內(nèi)存中開(kāi)辟兩個(gè)區(qū)域,其中一個(gè)

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

整個(gè)區(qū)域我們叫做棧,用來(lái)保存引用類(lèi)型對(duì)象,叫做堆。

棧:后進(jìn)先出

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

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

copyOf(目標(biāo),新數(shù)組的長(zhǎng)度)

2.5排序

1)冒泡排序

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

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

2)選擇排序

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

前面,而且是i和j比較

2.6常用工具的方法

1)Random:隨機(jī)

2)時(shí)間問(wèn)題

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

2.7雙色球

1)案例:實(shí)現(xiàn)隨機(jī)生成雙色球號(hào)碼**

實(shí)現(xiàn)隨機(jī)生成雙色球號(hào)碼:

[022213161812][12]

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

藍(lán)球16個(gè)球(01-16)取一個(gè)

提示:

0101

0

truefalse...

0

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

藍(lán)球池{"01","02","03","04",..."16")

使用標(biāo)記{f,f,f,f,...f)

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

“球號(hào)”,處理邏輯參考如下過(guò)程:

a.隨機(jī)生成紅球序號(hào)

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

第1步

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

d.判斷是否取出了6個(gè)紅球,如果沒(méi)有到6個(gè),返回第1步

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

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

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

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

3.1Object>東西,Java程序員:想著對(duì)象寫(xiě)代碼

class類(lèi)名{

屬性

構(gòu)造方法

方法

}

類(lèi):事物的類(lèi)型,人類(lèi),車(chē)類(lèi)

類(lèi)名:對(duì)象名=new構(gòu)造方法;

對(duì)象:事物的實(shí)例,劉詩(shī)詩(shī),門(mén)口劉老師的那輛28自行車(chē)

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

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

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

花一>花朵,花錢(qián),花心

美女一>鳳姐,劉詩(shī)詩(shī),高圓圓,班主任

繼承:代碼的重復(fù)利用

3.2類(lèi):

定義:代表一類(lèi)事物.Eg:人類(lèi)

類(lèi):

特征--—>基本屬性

行為--->活動(dòng)

3.3java中的類(lèi):

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

行為——>方法

class類(lèi)名{

屬性

方法

3.4對(duì)象:

1)類(lèi)跟對(duì)象之間的關(guān)系:

類(lèi)是一類(lèi)事物,類(lèi)就是一個(gè)模板.eg:人類(lèi)

對(duì)象是一個(gè)事物的實(shí)例.eg:劉英謙

2)java開(kāi)發(fā)的特點(diǎn):

a)設(shè)計(jì)類(lèi)------------模板

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

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

聲明:類(lèi)名對(duì)象名;

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

4)對(duì)對(duì)象屬性和方法的訪問(wèn):

對(duì)象名.屬性名

對(duì)象名?方法名

5)引用類(lèi)型的變量值:

引用類(lèi)型的變量值:堆當(dāng)中對(duì)象的地址的值,是通過(guò)引用類(lèi)型

的變量來(lái)找到堆中的對(duì)象

3.5設(shè)id個(gè)長(zhǎng)方體類(lèi)(Box):

屬性:長(zhǎng),寬,高

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

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

長(zhǎng)方體對(duì)象的體積。

3.6構(gòu)造方法:

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

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

2)構(gòu)造方法沒(méi)有返回值類(lèi)型

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

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

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

this.屬性:當(dāng)前對(duì)象的屬性

classBox{

int1;

publicBox(int1)

this.l=1;

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

當(dāng)new對(duì)象的時(shí)候,根據(jù)參數(shù)的不同,來(lái)調(diào)用不同的

構(gòu)造方法

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

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

(4)JavaBean規(guī)范

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

原因:一般企業(yè)開(kāi)發(fā)的時(shí)候,屬性一般都是定義為私有,通過(guò)方法來(lái)簡(jiǎn)介訪問(wèn)

1)屬性私有(盡可能)

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

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

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

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

4.2static:靜態(tài)

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

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

象無(wú)關(guān)

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

該屬性跟對(duì)象無(wú)關(guān),跟類(lèi)有關(guān),而且所有的對(duì)象都可以去。

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

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

訪問(wèn)的方式:類(lèi)名.屬性名。

案例:統(tǒng)計(jì)一個(gè)班級(jí)的學(xué)生人數(shù)

分析:

classStudent{

Stringname;〃實(shí)例變量

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

publicStudent(Stringname){

=name;

count++;

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

態(tài)變量只跟類(lèi)有關(guān),跟對(duì)象無(wú)關(guān)。

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

來(lái)訪問(wèn)靜態(tài)變量。

2)代碼塊:

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

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

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

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

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

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

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

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

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

4.3final:

最終的final可以修飾屬性,方法,類(lèi)。

1)final來(lái)修飾類(lèi):

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

類(lèi)型的,egStringo

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

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

(jdk/cglib)

2)final修飾方法:

用final修飾的方法,不能讓子類(lèi)再去重寫(xiě)該方法。

3)final修飾變量:

a用final修飾局部變量。

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

c用final對(duì)象o

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

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

java中常量一定是所有字母全部大寫(xiě)(一般),常量一定要放到類(lèi)當(dāng)中,不

要放到main方法,因?yàn)槌A渴墙?jīng)常需要使用的。

4.4抽象類(lèi):

不是一個(gè)具體類(lèi),有些方法沒(méi)有實(shí)現(xiàn),需要靠子類(lèi)繼承,這個(gè)抽象類(lèi)來(lái)實(shí)

現(xiàn)其方法。

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

類(lèi)來(lái)實(shí)現(xiàn)其方法。

2)抽象類(lèi)不能實(shí)例化,因?yàn)橛形磳?shí)現(xiàn)的抽象方法。

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

方法。

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

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

6)可以使用父類(lèi)聲明執(zhí)行子類(lèi)對(duì)象去實(shí)例化

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

7)案例:設(shè)計(jì)車(chē)(抽象類(lèi))

屬性:name,color,speed,money

方法:?jiǎn)?dòng),剎車(chē),運(yùn)行-》均沒(méi)有實(shí)現(xiàn)

Taxi(子類(lèi)繼承抽象類(lèi))

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

2.實(shí)訓(xùn)期間完成的實(shí)踐項(xiàng)目

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

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

(1)功能介紹

(1.1)用戶登錄:

程序首頁(yè)在用戶第一次訪問(wèn)時(shí)會(huì)判斷用戶是否登錄,未登錄則顯示用戶登錄窗

口,提示用戶登錄或注冊(cè).對(duì)于已經(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;

/**

*登陸界面是一個(gè)具體的窗口框

*布局規(guī)劃:

*JPanel(BorderLayout)contentPane

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

*1—(中)JPanel(BorderLayout)centerPane

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

*II—JPanel(BorderLayout)

*IIl--(西)JLable(編號(hào):)

*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í)行的時(shí)候執(zhí)行這個(gè)actionPerformed方法

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

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

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

//clientContext變量必須引用控制器對(duì)象

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(“編號(hào):"));

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;

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

publicvoidsetClientContext(ClientContextclientContext){

this.clientContext=clientContext;

)

privateJTextFieldidField;

privateJPasswordFieldpwdField;

privateJLabelmessage;

publicintgetUserId(){

returnInteger.parseInt(idField.getText());

)

publicStringgetPwd(){

returnnewString(pwdField.getPassword());

)

/**在界面上顯示一個(gè)消息,一般是錯(cuò)誤消息*/

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同學(xué)…)

*I1—(中)JPanel(FlowLayout)

*II-[Button(開(kāi)始)

*Il--JButton(分?jǐn)?shù))

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

*Il-JButton(離開(kāi))

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

*/

publicclassMenuFrameextendsJFrame{

publicMenuFrame(){

init();

)

privatevoidinit(){

setTitle("遼寧工程技術(shù)大學(xué)在線測(cè)評(píng))

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引用到界面控件對(duì)象

JLabelinfo=

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

〃重要!

this.userlnfo=info;

pane.add(BorderLayout.NORTH,info);

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

returnpane;

)

privateJPanelcreateBtnPane(){

JPanelpane=newJPanel(newFlowLayout());

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

JButtonresult=createImgBtn(”result.png",“分?jǐn)?shù))

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

msg.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

Guizheguizhe=newGuizhe();

guizhe.setVisible(true);

//setVisible(false);

});

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

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);

〃垂直文本對(duì)齊位置

button.setVerticalTextPosition(

JButton.BOTTOM);

//水平文本對(duì)齊位置

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(題號(hào))

*1—(中)JPaneI(FlowLayout)

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

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

*Il--JButton(“交卷”)

*I-(東)JLabel(時(shí)間)

*/

publicclassExamFrameextendsJFrame{

〃選項(xiàng)集合,方便答案讀取的處理

privateOptionf]options=newOption[4];

publicExamFrameO{

init();

)

privatevoidinit(){

setTitle("i±內(nèi)科技在線測(cè)評(píng))

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考試時(shí)間: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(“題目"));〃標(biāo)題框

//注意!

questionArea=newJlextArea();

questionArea.setText("問(wèn)題\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("剩余時(shí)間: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)部類(lèi)擴(kuò)展了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);

/**更新選項(xiàng)框*/

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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論