版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客戶關(guān)系維護(hù)的總結(jié)與改進(jìn)計(jì)劃
- 2024秋三年級(jí)英語(yǔ)上冊(cè) Unit 4 We love animals Part B第一課時(shí)教學(xué)實(shí)錄 人教PEP
- 藥劑科藥品管理優(yōu)化方案計(jì)劃
- 績(jī)效提升的激勵(lì)機(jī)制計(jì)劃
- 2024年某科技公司與某小型創(chuàng)業(yè)公司關(guān)于人工智能技術(shù)研發(fā)的合同
- 2024年度資產(chǎn)包清收及處置合作意向書(shū)3篇
- 2025版高考數(shù)學(xué)一輪總復(fù)習(xí)2.6函數(shù)與方程及函數(shù)的綜合應(yīng)用習(xí)題
- 北京市西城區(qū)2024-2025學(xué)年高二歷史上學(xué)期期末試題
- 2024年度國(guó)際能源工程建設(shè)的勞務(wù)合同3篇
- 全國(guó)粵教版信息技術(shù)八年級(jí)上冊(cè)第一單元第六課《圖像效果的處理》教學(xué)實(shí)錄
- 民辦學(xué)校教職工入職背景審查制度
- 二級(jí)公立醫(yī)院績(jī)效考核三級(jí)手術(shù)目錄(2020版)
- 6人小品《沒(méi)有學(xué)習(xí)的人不傷心》臺(tái)詞完整版
- 讀《讓兒童在問(wèn)題中學(xué)數(shù)學(xué)》有感范文三篇
- 陳述句改成雙重否定句(課堂PPT)
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)總復(fù)習(xí)教案
- 勞動(dòng)合同法測(cè)試題含答案
- 自閉癥兒童行為檢核表學(xué)前版
- 五年級(jí)上冊(cè)數(shù)學(xué)專(zhuān)項(xiàng)練習(xí)高的畫(huà)法 全國(guó)通用
- 民警個(gè)人季度小結(jié)范文(3篇)
- 商場(chǎng)商戶裝修入駐工作流程
評(píng)論
0/150
提交評(píng)論