版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》
課程設(shè)計(jì)任務(wù)書(shū)
題目校園導(dǎo)游程序
學(xué)生姓名黃濤學(xué)號(hào)專業(yè)班級(jí)數(shù)學(xué)1001
【問(wèn)題描述】
如今的大學(xué)校園占地面積廣,建造物繁多,對(duì)目生人在校園很容易迷失方向或者不
易找到自己的目的地。為了解決這一問(wèn)題,我為我校本部校區(qū)建立校園導(dǎo)游圖,以此
給新生和來(lái)訪客人提供方便快捷的咨詢引導(dǎo)服務(wù)。
【課程設(shè)計(jì)目的】
本程序涉及的類(lèi)容涉及:數(shù)據(jù)結(jié)構(gòu)(圖),java程序設(shè)計(jì),UML設(shè)計(jì)等。通過(guò)該
程序能很好的復(fù)習(xí)以前學(xué)過(guò)的知識(shí),也能促進(jìn)對(duì)剛學(xué)過(guò)的圖知識(shí)進(jìn)一步加深理解,還
能根據(jù)需要學(xué)習(xí)新知識(shí)。提高用知識(shí)解決實(shí)際問(wèn)題的綜合能力,達(dá)到學(xué)以致用的目的。
【軟件功能】
1.可以瀏覽我校本部整體的校園平面圖。圖中顯示所有景點(diǎn)及其道路連通情況。采用人
設(shè)機(jī)交互方式實(shí)現(xiàn)圖形化界面景點(diǎn)介紹。
計(jì)2.為來(lái)訪客人提供任意景點(diǎn)相關(guān)信息的查詢。
內(nèi)3.為來(lái)訪客人提供任意景點(diǎn)的問(wèn)路查詢。
容
與【算法思想】
要本程序中用到的數(shù)據(jù)結(jié)構(gòu):圖。主要算法:迪杰斯特拉算法。
ADTGraph{
求
數(shù)據(jù)對(duì)象V:景點(diǎn)頂點(diǎn)集
數(shù)據(jù)關(guān)系R:R={VR}VR={<v,w>|v,w£V且P(v,w),<v,表示從v
到w的弧,謂詞P(v,w)定義了弧<v,w>的意義或者信息}
基本操作P:
CreateGraph(&G,V,VR);初始條件:V是圖的頂點(diǎn)集,VR是圖中弧的集合。
操作結(jié)果:按V和VR的定義構(gòu)造圖Go
DestroyGraph(&(;);初始條件:圖G存在。操作結(jié)果:銷(xiāo)毀圖G,
ShortestPath(&G,vl,v2);初始條件:圖G存在,給定起點(diǎn)vl和終點(diǎn)v2°
操作結(jié)果:返回起點(diǎn)vl和終點(diǎn)v2的最短距離和路徑。
)
【提交成果】
1.”《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》課程設(shè)計(jì)任務(wù)書(shū)”一份,打印裝袋:
2.”《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》課程設(shè)計(jì)報(bào)告”一份,打印裝袋;
3.上面兩項(xiàng)內(nèi)容的word文檔,通過(guò)電子郵件交到指導(dǎo)教師。
起止時(shí)間2022年6月3日至2022年6月14日
指導(dǎo)教師簽名2022年6月3日
系(教研室)主任簽名2022年6月3日
學(xué)生簽名年月日
數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程設(shè)計(jì)
專業(yè):數(shù)學(xué)與應(yīng)用數(shù)學(xué)班級(jí):數(shù)學(xué)1001學(xué)號(hào):
姓名:黃濤完成日期:指導(dǎo)教師:
1、程序設(shè)計(jì)說(shuō)明書(shū)
【設(shè)計(jì)題目】校園導(dǎo)游程序
【問(wèn)題描述】
如今的大學(xué)校園占地面積廣.建造物繁多,對(duì)目生人在校園很容易迷失方向或者不易找到自己的
目的地。為了解決這一問(wèn)題,我為我校本部校區(qū)建立校園導(dǎo)游圖,以此給新生和來(lái)訪客人提供方
便快捷的咨詢引導(dǎo)服務(wù)。
【軟件功能】
1.能夠?qū)π@整體平面示意圖進(jìn)行瀏覽。
2.能夠?qū)θ5闹饕包c(diǎn)的托撲圖進(jìn)行一個(gè)整體情況的預(yù)覽查詢。
3.能夠?qū)崿F(xiàn)對(duì)每一個(gè)景點(diǎn)詳細(xì)信息的查詢。
4.能夠?qū)崿F(xiàn)景點(diǎn)與景點(diǎn)間最短路線的查詢,采用Dijkstra最短路徑算法。
【算法思想】
1.為各個(gè)功能模塊用類(lèi)封裝。
2.采用數(shù)據(jù)結(jié)構(gòu)有權(quán)圖的知識(shí)來(lái)存儲(chǔ)各個(gè)景點(diǎn)。
3.兩個(gè)景點(diǎn)之間的最短路徑采用Dijkstra算法求最短路徑。即由迪杰斯特拉(Dijkstra)提出的一個(gè)
按路徑長(zhǎng)度遞增的次序產(chǎn)生最短路徑的算法。該算法的基本思想是:設(shè)置兩個(gè)頂點(diǎn)的集合S和T=V
-S,集合S中存放已找到最短路徑的頂點(diǎn),集合T存放當(dāng)前還未找到最短路徑的頂點(diǎn)。初始狀態(tài)
時(shí),集合S中只包含源點(diǎn)v0,然后不斷從集合T中選取到頂點(diǎn)v0路徑長(zhǎng)度最短的頂點(diǎn)u加入到集
合S中,集合S每加入一個(gè)新的頂點(diǎn)u,都要修改頂點(diǎn)v0到集合T中剩余頂點(diǎn)的最短路徑長(zhǎng)度值,
集合T中各頂點(diǎn)新的最短路徑長(zhǎng)度值為原來(lái)的最短路徑長(zhǎng)度值與頂點(diǎn)u的最短路徑長(zhǎng)度值加之u到
該頂點(diǎn)的路徑長(zhǎng)度值中的較小值。此過(guò)程不斷重復(fù),直到集合T的頂點(diǎn)全部加入到S中為止。
4.本實(shí)驗(yàn)中用到的數(shù)據(jù)結(jié)構(gòu):圖
ADTGraph{
數(shù)據(jù)對(duì)象V:景點(diǎn)頂點(diǎn)集
數(shù)據(jù)關(guān)系R:
R={VR}
VR={<v,w>|v,w£V且P(v,w),<v,w>表示從v到w的弧,
謂詞P(v,w)定義了弧<v,w>的意義或者信息}
基本操作P:
CreateGraph(&G,V,VR);
初始條件:V是圖的頂點(diǎn)集,VR是圖中弧的集合。
操作結(jié)果:按V和VR的定義構(gòu)造圖G,
DestroyGraph(&G);
初始條件:圖G存在。
操作結(jié)果:銷(xiāo)毀圖Go
ShortestPathi&G.v1,v2):
初始條件:圖G存在,給定起點(diǎn)v1和終點(diǎn)v20
操作結(jié)果:返回起點(diǎn)v1和終點(diǎn)v2的最短距離和路徑。
)
【類(lèi)的設(shè)計(jì)】
1.
classAll();景點(diǎn)拓?fù)鋱D界面。
classPlan0;校園平面示意圖。
classChaXun0:景點(diǎn)詳細(xì)信息查詢界面。
classLuJing0:?jiǎn)卧醋疃搪窂讲樵兘缑妗?/p>
publicclassjiemian();主界面。
2.GraphPath.java
classGraphPath()類(lèi)。最短路徑算法類(lèi)。
主要成員變量有:
staticintMaxEdges=50;最大邊數(shù)。
staticintMaxVertices=10;最大頂點(diǎn)數(shù)。
staticdoubleMaxValue=9999.9:最大值
privatecharVerticesList[]=newchar[MaxVertices];存放頂點(diǎn)的數(shù)組。
privatedoubleEdge[][]=newdouble[MaxVertices][MaxVertices];鄰接矩陣(存放兩個(gè)頂點(diǎn)
權(quán)值)。
privateintCurrentEdges;現(xiàn)有邊數(shù)
privateintCurrentvertices;現(xiàn)有頂點(diǎn)數(shù)
publicintpath[]=newint[MaxVertices];存放最短路徑上的最后?個(gè)經(jīng)由點(diǎn)。
publicdoubledist[]=newdouble[MaxVertices];存放最短路徑的權(quán)值。
主要成員方法:
publicGraphPath():構(gòu)造函數(shù)建立空的鄰接矩陣。
publicintFindVertex(charvertex):杳找指定的頂點(diǎn)的序號(hào)。
publicbooleanIsGraphEmpty():判斷圖是否為空。
publicbooleanIsGraphFull():判斷圖是否為滿。
publicintNumberOfVertices():取得頂點(diǎn)數(shù)。
publicintNumberOfEdges():取得邊數(shù)。
publiccharGetValue(inti):按序號(hào)取得頂點(diǎn)值。參數(shù)為頂點(diǎn)序號(hào)。
publicdoubleGetWeight(intvl,intv2):取得一條邊的權(quán)值,參數(shù)為該邊的頂點(diǎn)。
publicintGetFirstNeighbor(intv):取得第一個(gè)鄰接點(diǎn)的序號(hào)。
publicintInsertVertex(charvertex):插入?個(gè)頂點(diǎn),參數(shù)為頂點(diǎn)數(shù)據(jù)。
publicbooleanInsertEdge(intvl,intv2,doubleweight):插入一條邊,參數(shù)為連接該
邊的兩個(gè)頂點(diǎn)及邊上的權(quán)值。
publicbooleanRemoveVertex(intv):刪除?個(gè)頂點(diǎn)。
publicbooleanRemoveEdge(intvl,intv2):刪除一條邊,參數(shù)為所刪除邊的兩個(gè)頂點(diǎn),
既刪除vl,v2頂點(diǎn)之間的連接邊。
publicvoiddisplay():打印鄰接矩陣。
publicvoidDijkstra(intv0,intvj):最短路徑的ijkstra算法,參數(shù)為起點(diǎn)和目的點(diǎn)。
publicvoidPutpath(intvO):輸出Dijkstra算法的結(jié)果。
【存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)】
圖狀結(jié)構(gòu)是一種比樹(shù)形結(jié)構(gòu)更復(fù)雜的非線性結(jié)構(gòu)。在樹(shù)狀結(jié)構(gòu)中,結(jié)點(diǎn)間具有分支層次關(guān)系,每一
層上的結(jié)點(diǎn)只能和上一層中的至多一個(gè)結(jié)點(diǎn)相關(guān),但可能和下一層的多個(gè)結(jié)點(diǎn)相關(guān)。而在圖狀結(jié)構(gòu)
中,任意兩個(gè)結(jié)點(diǎn)之間都可能相關(guān),即結(jié)點(diǎn)之間的鄰接關(guān)系可以是任意的。因此,圖狀結(jié)構(gòu)被用于
描述各種復(fù)雜的數(shù)據(jù)對(duì)象,在自然科學(xué)、社會(huì)科學(xué)和人文科學(xué)等許多領(lǐng)域有著非常廣泛的應(yīng)用。
數(shù)據(jù)存儲(chǔ):
采用字符串?dāng)?shù)組,一維數(shù)組,二維數(shù)值來(lái)存儲(chǔ)圖中景點(diǎn)及其各邊的信息。
1.景點(diǎn)查詢圖片數(shù)組存儲(chǔ):
Stringtu[]={"img/00.png",nimg/01.png",nimg/02.png",nimg/03.png",
"img/04.pn,g"*lmg/05.pngH,"img/06.png",'*img/07.png",
"img/08.pn,g"'lmg/09.png","img/10.png","img/11.png”,};
2.景點(diǎn)查詢圖片信息數(shù)組存儲(chǔ):
StringXX西安石油大學(xué)校本部南大門(mén),位于西安市電子二路18號(hào)!”
”一號(hào)教學(xué)樓建于上個(gè)世紀(jì),老的教學(xué)樓,現(xiàn)在主要用著實(shí)驗(yàn)“,“校本部圖書(shū)館,
圖書(shū)館藏行大量圖書(shū)”,”校本部室內(nèi)體育館”,“利學(xué)超市”,“校本部學(xué)生食堂”,
”校本部室外體育場(chǎng)地,包括足球場(chǎng),籃球場(chǎng),游泳館和旱冰場(chǎng)等室外運(yùn)動(dòng)場(chǎng)地!
“,“西安石油大學(xué)校本部北門(mén),位于西安”+“市電子?路!石油大學(xué)校醫(yī)院”,
”東門(mén)主要機(jī)動(dòng)車(chē)出入大門(mén)二號(hào)教學(xué)樓,與西階教學(xué)樓,西階會(huì)議室,東街教學(xué)”+
”樓為一體建造,建于本世紀(jì)初期!”};
3.最短路徑景點(diǎn)圖片存儲(chǔ):
StringCXT[]={"","img/01.jpg",nimg/02.jpg",nimg/03.jpg",**img/04.jpg”,
n
"img/05.jpg"zimg/06.jpg",'*img/07.jpg","img/08.jpg”,
nn
"img/09.jpg","img/lO.jpgz"img/ll.jpgz};
4.頂點(diǎn)儲(chǔ)存:
Stringc[]={“01“,“02“,”03“,“04“,“05“,“06“,”07“,“08“,“09“,“10“,“11”};5.
邊的存儲(chǔ):
intv[][]={//弧
{0,1},{0,2},{1,0},{1,2},{1,8},{1,10},{2,0},{2,1},{2,3},
[2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},{5,4},{5,6},
{5,8},{5,10},{6,3},{6,5},{6,7},{7,6},{8,1},{8,5},{8,9},
{8,10},{9,8},{10,1},{10,5},{10,8)
};
6.邊上權(quán)的存儲(chǔ)
Doubled[]={15,10,15,10z130,280z10,10,80,100,80z150,250,100,20,
150,20,100,300z150,250,100,200,200,130,300,100,100z
100,280,150,100
);〃權(quán)
【模塊劃分及調(diào)用關(guān)系】
退出
2.主要模塊之間的調(diào)用關(guān)系及各自功能:
<1>.主要模塊:
模塊一:顯示校院平面示意圖;
模塊二:主要景點(diǎn)拓?fù)鋱D查詢:
模塊三:景點(diǎn)詳細(xì)信息杳詢:
模塊四:景點(diǎn)最短路徑查詢:
模塊五:?jiǎn)卧醋疃搪窂讲樵儯珼ijkstra算法。
<2>.主要模塊之間的調(diào)用關(guān)系:
【模塊流程圖】
返回返回
1.主界面
2.平面示意圖界面3.景點(diǎn)拓?fù)鋱D界面
A?0?:
.flliua
■am—
?enetmrv
△.景點(diǎn)詳細(xì)查詢界面5.景點(diǎn)之間最短路徑查詢
【用戶手冊(cè)】
1.安裝運(yùn)行myeclipse850c
2.在myeclipse中新建校院導(dǎo)游為項(xiàng)目名的java項(xiàng)目,將程序打包放入src中,再在項(xiàng)目下創(chuàng)建img
文件件存放需要用到的圖片。
'PackageE■凝■七Hierarchy=B
3.運(yùn)行jiemian.java程序,運(yùn)行程序進(jìn)入主界面;
4.通過(guò)主界面的功能鍵相互調(diào)用其它程序?qū)崿F(xiàn)其相應(yīng)功能:
2、程序上機(jī)調(diào)試報(bào)告
【語(yǔ)法錯(cuò)誤及其排除】
1.關(guān)于static關(guān)鍵字修飾類(lèi)方法的問(wèn)題,用static修飾方法稱為類(lèi)方法,不用static修飾的稱為實(shí)例
方法.類(lèi)方法可以相互調(diào)用,但不能調(diào)用實(shí)例的方法.
2.在編寫(xiě)類(lèi)方法時(shí),方法明后忘記“()”,導(dǎo)致編譯錯(cuò)誤。
3.在輸程序過(guò)程中,由于不斷的中英文切換,導(dǎo)致一些標(biāo)點(diǎn)符號(hào)不合法。在復(fù)查程序時(shí)也特殊注意
到此環(huán)節(jié)。
4.在程序輸入時(shí)單詞的拼寫(xiě)錯(cuò)誤如Panel容易寫(xiě)成Panle等。在復(fù)查時(shí)我也特殊注意到此環(huán)節(jié)。
5.在添加圖片時(shí),沒(méi)有輸入正詢的路徑和名稱,導(dǎo)致程序無(wú)法顯示運(yùn)行圖片。
【算法錯(cuò)誤及其排除】
1.〃最短路徑的ijkstra算法的修正:
publicvoidDijkstra(intvO)(
ints[]=newint[MaxVertices];
intv,i,j,w;
/*初始化s、dist和path*/
for(v=0;v<CurrentVertices;v++)(
s[v]=0;/*。表示還未求出最短路徑*/
/*一開(kāi)始假定取直達(dá)珞徑最短*/
dist[v]=Edge[vO](v];
/*直達(dá)情況下的最后經(jīng)由點(diǎn)就是出發(fā)點(diǎn)*/
if(dist[v]<MaxValue&&v!=v0)path[v]=v0;
elsepath[v]=-l;/*無(wú)直達(dá)路徑*/
)
/*初始時(shí)源點(diǎn)VOWS集,表示vO到vO的最短路徑已經(jīng)找到*/
dist[vO]=0;s[vO]=1;
//下來(lái)假設(shè)經(jīng)由一個(gè)點(diǎn)中轉(zhuǎn)到達(dá)其余各點(diǎn),會(huì)近些,驗(yàn)證之.
〃再假設(shè)經(jīng)由兩個(gè)點(diǎn)中轉(zhuǎn),會(huì)更近些,驗(yàn)證之,.....
//直到窮舉完所有可能的中轉(zhuǎn)點(diǎn).
doublemin;
for(i=l;i<CurrentVertices;i++){
//挑一個(gè)距離最近經(jīng)由點(diǎn),下標(biāo)裝入v
min=MaxValue;
for(v;=0;w<CurrentVertices;w++)
/*頂點(diǎn)w不屬于S集且離vO更近*/
if(s[w]==0&&dist[w]<min)(
v=w;/*經(jīng)由頂點(diǎn)翼中轉(zhuǎn)則距離更短*/
min=dist[w];
}
s[v]=l;/*頂點(diǎn)v并入S,
由vO到達(dá)v頂點(diǎn)的最短路徑為3*/
/*假定由vO到v,再由v直達(dá)其余各點(diǎn),
更新當(dāng)前最后一個(gè)經(jīng)由點(diǎn)及距離*/
for(j=0;j<CurrentVertices;j++)
if(s[j]==0&&(min+Edge[v][j]<dist[j])){
/*如果多經(jīng)由一個(gè)v點(diǎn)到達(dá)j點(diǎn)的
最短路徑反而要短,就更新J/
dist[j]=min+Edge[v][j];
path[j]=v;/*經(jīng)由點(diǎn)的序號(hào)*/
}/*循環(huán)fori*/
}/*Dijkstra算法結(jié)束*/
3、程序測(cè)試結(jié)果
【測(cè)試數(shù)據(jù)】
1.主界面。
2.校園平面示意圖瀏覽。
3.校院主要景點(diǎn)編號(hào)及拓?fù)鋱D瀏覽。
4.景點(diǎn)看詢,查詢景點(diǎn)04的信息。
5.路徑查詢,查詢景點(diǎn)03到04的最短路徑。
6.菜單測(cè)試。
【輸出結(jié)果】
1.主界面
開(kāi)始進(jìn)入該程序顯示主界面如下:
2.校院平面示意圖瀏覽。
3.校園主要景點(diǎn)拓?fù)鋱D瀏覽。
顯示了校園的拓補(bǔ)圖和景點(diǎn)的代號(hào)和名稱。如卜.:
3.景點(diǎn)查詢,查詢景點(diǎn)04的詳細(xì)信息。
輸入景點(diǎn)的代號(hào)或者名稱,顯示景點(diǎn)的圖片和簡(jiǎn)介。如下
7.路徑查詢,查詢景點(diǎn)03到04的最短路徑。
輸入起點(diǎn)和終點(diǎn),顯示起點(diǎn)和終點(diǎn)的景點(diǎn)圖片,還有起點(diǎn)到終點(diǎn)的最短距離和路徑。如下:
8.菜單測(cè)試。
2>匡助菜單。
【程序性能評(píng)價(jià)】
本程序能夠利用UML設(shè)計(jì)良好的人機(jī)交互界面,采用數(shù)據(jù)庫(kù)提數(shù)據(jù)支持,方便數(shù)據(jù)的存儲(chǔ)和靈
活的應(yīng)用。使用起來(lái)較為方便直觀,維護(hù)期來(lái)也比較容易。
【性能改進(jìn)方向】
固然本程序還存在很大的改善空間,所以的路線及景點(diǎn)杳詢都可以集結(jié)于一張?jiān)敿?xì)的平面地圖
上,固然也可以是一維其至多維的空間上,對(duì)查詢景點(diǎn),人們查詢時(shí)只需將鼠標(biāo)放置所需了解的景
點(diǎn)處,自動(dòng)彈出該景點(diǎn)的所有詳細(xì)信息及其周邊景點(diǎn)信息等。時(shí)路徑查詢,非但提示所查最短路徑
及其該如何到達(dá),還在地圖上畫(huà)出最短路線及其最佳行駛方案和可供選其它方案。類(lèi)似于現(xiàn)有的百
度,搜搜地圖等。
【收獲及體味】
通過(guò)本次數(shù)據(jù)結(jié)構(gòu)與算法謖程設(shè)計(jì),我順便把原有的基礎(chǔ)溫故了下,并且向新的知識(shí)擴(kuò)展了下。
學(xué)到的東西不少,并且很實(shí)用。本次設(shè)計(jì)用到了,PS,PPT,word,java、數(shù)據(jù)結(jié)構(gòu)、軟件工程、
UML設(shè)計(jì)、數(shù)據(jù)庫(kù)等知識(shí)。首先利用java的可視化創(chuàng)建窗口框架,確保界面看起來(lái)簡(jiǎn)潔并且易操作。
再創(chuàng)建數(shù)據(jù)庫(kù)和表,優(yōu)化表的表現(xiàn)形式,易于操作,進(jìn)行相關(guān)的查詢等。從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)存入
暫時(shí)的數(shù)據(jù)結(jié)構(gòu)中,進(jìn)行無(wú)向圖的最短路徑操作。本次課設(shè)都是個(gè)人完成,覺(jué)得受益匪淺。
遺憾的是想在其基礎(chǔ)上擴(kuò)展下相關(guān)的功能,如:利用TCP/IP協(xié)議實(shí)現(xiàn)服務(wù)器端和客戶端的鏈接,
進(jìn)行多線程的操作,杳詢等可以同步進(jìn)行,管理員可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行添加景點(diǎn)、刪除景點(diǎn)和修改景
點(diǎn)信息等操作。但由于時(shí)間的關(guān)系,沒(méi)有對(duì)這些任務(wù)進(jìn)行擴(kuò)展。
4、源程序代碼
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
//景點(diǎn)拓?fù)鋱D界面
classAllextendsJFrame{
JLabellabel;
JPanelpanel;
Imageicon背景;//背景為整個(gè)界面的背景,通過(guò)添加圖片設(shè)置為背景
A11O(
super(“西安石油大學(xué)校本部校院拓?fù)鋱D“);
//添加背景,添加標(biāo)題,設(shè)置按鈕圖標(biāo)
背景=new]!^96工<:。11("-9/1233i119”);//設(shè)置背景圖片
label=newJLabel(背景);
label.setBounds(0.0,背景.get工conWidth(),背景.getIconHeight());
this.getLayeredPane().setLayout(null);
JPanela=newCPanel();〃添加背景,并把窗口大小設(shè)置為背景圖
片的大小
panel=(JPanel)this.getContentPane();
panel.setopaque(false);
FlowLayoutf=newFlowLayout();
panel.setLayout(f);
getLayeredPane().setLayout(null);
getLayeredPane().add(label,newInteger(Integer.MIN_VALUE));
seESize(背景.getlconWidth()z背景.getlconHeight());
setBounds(350z160,背景.get工conWidth(),背景.getlconHeight());
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
//校園平面示意圖界面
classPlanextendsJFrame(
JLabellabel;
JPanelpanel;
Imageicon背景;//背景為整個(gè)界面的背景,通過(guò)添加圖片設(shè)置為力F
Plan(){
supeC西安石油大學(xué)校本部平面圖”);
//添加背景,添加標(biāo)題,設(shè)置按鈕圖標(biāo)
背景=new工mage工con("img/333.png");//設(shè)置背景圖片
label=newJLabel(背景);
label.setBounds(01.0,背景.get■工conWidth(),背景.getlconHeight());
this.getLayeredPane().setLayout(null);
JPanel£1=newCPanel();//添加背景,并把窗口大小設(shè)置為背景圖
片的大小
panel=(JPanel)this.getContentPane();
panel.setOpaque(false);
FlowLayoutf=newFlowLayout();
panel.setLayout(f);
getLayeredPane().setLayout(null);
getLayeredPane().add(label,newInteger(Integer.MIN_VALUE));
setSize(背景.getlconWidth()z背景.getlconHeight());
setBounds(250,160,背景.get工conWidth(),背景.getlconHeight());
eetVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
)
)
〃查詢界面
classChaXunextendsJFrameimplementsActionListener{
inti=0;
JLabellabel;
JLabellabell=newJLabel(“景點(diǎn)(編號(hào)或者名稱)”);
//JLabellabe12=newJLabel("開(kāi)始”);
JLabellabel3=newJLabel("簡(jiǎn)介”);
JLabellabel4=newJLabel("景點(diǎn)名");
JTextAreatextl-newJTextArea1,20);
JTextAreatext2=newJTextArea(""z3,40);
JPanelpanel;
JButtonbuttonl=newJButton(“返回“);//按鈕組件
JButtonbutton2=newJButton(“查詢")”/按鈕組件;
〃添加背景
Stringtu[]={"img/00.png,',"img/01.png","img/'O2.png",uimg/03.png”,
"img/04.png","img/05.png'\"img/06.pngn,nimg/07.png",
nimg/08.p,n"gi"mg/09.png","img/10.png",Mimg/ll.png",};
StringXX[]={”",“西安石油大學(xué)校本部南大門(mén),位于西安市電子二路18號(hào)!”,
”一號(hào)教學(xué)樓建于上個(gè)世紀(jì),老的教學(xué)樓,"+
“現(xiàn)在土要用著實(shí)驗(yàn)”,“校本部圖書(shū)館,圖書(shū)館藏有大量圖書(shū)”,
”校本部室內(nèi)體育館“,“利學(xué)超市“,“校本部學(xué)生.食堂”,
”校本部室外體育場(chǎng)地,包括足球場(chǎng),籃球場(chǎng),游泳館和旱冰場(chǎng)等室外運(yùn)動(dòng)場(chǎng)地!”,
”西安石油大學(xué)校本部北門(mén),位于西安”+
”市電子一路!石油大學(xué)校醫(yī)院“,“東門(mén)主要機(jī)劭車(chē)出入大門(mén)”,
”二號(hào)教學(xué)樓,與西階教學(xué)樓,西階會(huì)議室,東街教學(xué)”+
”樓為一體建造,建于本世紀(jì)初期!“};
Imageiconpicture=newImageicon(tu[i]);;//背景為整個(gè)界面的背景,通過(guò)添加圖
片設(shè)置為背景
ChaXun(inti)(
super("景點(diǎn)查詢”);
setsize(561,495);
setLocation(350,110);
setResizablet(rue);
setVisiblet(rue);
setLayoutn(ewFlowLayout());
textl.setBackground(Color.LIGHT_GRAY);//文本框顏色設(shè)為亮灰
text2.setBackground(Color.lightGray);//文本柄顏色設(shè)為亮灰
text2.setEditable(false);
Fontfontn=ewFont("華文行楷”,
Font.BOLD+Font.TRUETYPE_FONT+Font.LAYOUT_LEFT_TO_RIGHTZ20);
label3.setFont(font)”/為標(biāo)題添加字體
labcl3.octForeground(newColor(255,2,2));
picture=newImage1con(tu[i]);;//背景為整個(gè)界面的背景,通過(guò)添加圖片設(shè)置為
背景
label=newJLabel(picture);
text2.append(XX[i]);
addl(abell);
addt(extl);
addb(utton2);
addl(abel);
addl(abel3);
addt(ext2);
addb(uttonl);
buttonl.addActionListener(this);//為每一個(gè)按鈕設(shè)置監(jiān)視器
button2.addActionListener(this)〃/為每“個(gè)按鈕改置監(jiān)視器
)
publicvoidactionPerformed(ActionEvente){〃事件響應(yīng)
if(e.getSource()==button2){
this.dispose();
inti=Integer.parselnt(textl.getText());
newChaXun(i);
}
if(e.getSourca()==buttonl)
this.dispose();
)
)
//單源最短路徑查詢界面
classLuJingextendsJFrameimplementsActionListener{
GraphPathG=newGraphPath();
JLabeltul,tu2,tu3;
Stringt;
JLabellabell=newJLmbel("起點(diǎn)(編號(hào)或者名稱);
JLabellabe12=newJLmbel("終點(diǎn)(編號(hào)或者名稱):;
JLabellabel3=newJLabel("路徑顯示+距離
JTextAreatextl=newJTextArea("",1,36);
u
JTextAreatext2=newJTextArea("zlz30);
JTextAreatext3=newJTextArea("”,4,45);
JPanelpanel;
Strings=H00";
JButtonbuttonl=newJButton("查詢");//按鈕組件
JButtonbutton2=new【Button("返回”);//按鈕組件:
//添力□背景
工mage:[8n'pl,p2,p3;〃背景為整個(gè)界面的背景,通過(guò)添加圖片設(shè)置為背景
StringCXT[]={"'*,uinig/01.jpg"/"img/02.jpg","img/03.jpg",
"img/04.jpg","img/05.jpg","img/06.jpg'',
"img/07.jpg","img/08.jpg","img/09.jpg",
"img/10.jpg'1/"img/ll.jpg",);
LuJing(inti,intj){
super("路徑查詢");
setSize(561,495);
setLocation(350,110);
setResizablet(rue);
setVisiblet(rue);
setLayoutn(ewFlowLayout());
textl.setBackground(Color.LIGHT_GRAY);//文本框顏色設(shè)為痙灰
text2.setBackground(Color.lightGray);
text3.setBackground(Color.lightGray);//文本框顏色設(shè)為亮灰
Fontfontn=ewFont("華文行梢”,
Font.BOLD+Font.TRUETYPE_FONT+Font.LAYOUT_LEFT_TO_RIGHT,20);
label3.setFont(font);//為標(biāo)題添加字體
label3.setForeground(newColor(255,2,2));
pl=newImageicon(CXT[i]);//設(shè)置背景圖片
p2=newImageicon("img/00.JPG");
p3=newImageicon(CXTFj1);
tul=newJLabel(pl);
tu2=newJLabel(p2);
tu3=newJLabel(p3);
text3.append(G.Putpath(i,j));
addl(abell);
addt(extl);
addl(abel2);
addt(ext2);
addb(uttonl);
addt(ul);
addt(u2);
addt(u3);
addl(abel3);
addt(ext3);
addb(utton2);
buttonl.addActionListener(this);//為每一個(gè)按仃I設(shè)置監(jiān)
視器button2.addActionListener(this);
)
publicvoidactionPerformed(ActionEvente)(//事件響應(yīng)
if(e.getSource()==buttonl){
dispose();
//text3.append(CXT[1]);
inti-工ntcgor.parse工nt(tcxtl.gotTcxt());
intj=Integer.parselnt(text2.getText());
//text3.append("hungtao");
newLuJing(i,j);
//準(zhǔn)備有向圖(網(wǎng))數(shù)據(jù)
,,nnH
Stringc[]={01,02"z"03","04,"05","06",
“07“,“08“,”09”,“10“,“11”};//頂點(diǎn)
intv[][]={〃弧
{0,1)/(0,2),{lz0)z{1,2},{1,8},.:1,10},{2,0},{2,1},
[2,3},{2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},
{5,4},{5,6},{5,8},{5,10},{6,3},{6,5},{6,7},{7,6},
18,1},18,5},18,9},{8,101,19,81,f10,1},{10,51,110,81
};
Doubled[]=(15z10,15,L0,130,280,10,10,80,100,80,150,250,
100,20,150,20,100,300,150,250,130,200,200,130,300,
100,100,100,280,150,100
};:/權(quán)
//插入頂點(diǎn)
for(intk=0;i<ll;k++)
G.Insertvertex(c[k]);
//插入弧
for(intm=0;i<32;m++)
G.InsertEdge(v[m][0]zv[m][l]zd[m]);
G.Dijkstra(i);
}
if(e.getSource()==button2)
dispose();
)
}
///主界面
publicclassjiemianextendsJFrameimplementsActionListener{
JLabellabel;
JMenumSystem=newJMenu("系統(tǒng)");//系統(tǒng)菜單
JMenuItemmAdd=newJMenu工tem("添力口景點(diǎn)”);
JMenuItemmAlter=newJMenu工tem("修改景點(diǎn)信息,');
JMenuItemmRemove=newJMenu工tem("刪除景點(diǎn)”);
JMenuItemmExit=newJMenu工tem("退出");
JMenuItemmSave=newJMenu工tem("保存");
JMenumHelp=newJMenu("[Gift");//匡助菜單
JMenuItemmAbout=newJMenu工tem("軟件信息”);
JMenuBarmBar=newJMenuBar();
JPanelpanel;
JButtonbuttonl=newJButton("景點(diǎn)拓?fù)鋱D”);
JButtonbutton2=newJButton(“景點(diǎn)查詢”);
JButtonbutton3=newJButton(“路徑查詢”);
JButtonbutton4=newJButton("退出");
JButtonbutton5=newJButton("校院平面圖”);
Imageicon背景;//背景為整個(gè)界面的背景,通過(guò)添加圖片設(shè)置為背景
publicjiemian(){
super(“西安石油大學(xué)校本部導(dǎo)游”);
//setSize(561,495);
setLocation(350,110);
setLayoutn(ull);
mSystcm.add(mAdd);//為菜單添加菜單項(xiàng)II
mSystem.add(mAlter);
mSystem.add(mRemove);
mSystem.add(mSave);
mSystem.add(mExit);
mHelp.add(mAbout);
mBar.add(mSystem);//將菜單添加到菜單條
mBar.add(mHelp);
setJMenuBarm(Bar,;//設(shè)置菜單條
mExit.addActi。nListener(this);//為菜單按鈕添力11監(jiān)聽(tīng)事件
mAbout.addActionListener(this);
mSave.addActionListener(this);
setResizablet(rue);
背景=new工mage工con("img/127.jpg");〃設(shè)置背景圖片
label=newJLabel(背景);
label.setBounds(0.0,背景.get工conWidth(),背景.getlconHeight());
this.getLayeredPane().setLayout(null);
JPanel屈1=newCPanelO;//添加背景,并把窗口大小設(shè)置為背景圖
片的大小
panel=(JPanel)this.getContentPane();
panel.setOpaque(false);
getLayeredPane().setLayout(null);
getLayeredPane().add(label,newInteger(Integer.MIN_VALUE));
setSize(背景.getlconWidth(),背景.getlconHeight());
setBounds(350,150,背景.get■工conWidth(),背景.getlconHeight());
setvisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
button1.setBounds(245,210,100,40);
button?.setBounds(245,260,100,40);
button3.setBounds(245,310,100,40);
button4.setBounds(245,360,100,40);
buttons.setBounds(245z160,100,40);
getContentPane().addb(utton5);
getContentPane().addb(uttonl);
getContentPane().addb(utton2);
getContentPane().addb(utton3);
getContentPane().addb(utton4);
buttonl.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
buttons.addActionListener(this);
)
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==mExit)
Systemx.it(0);
elseif(e.getSource()==mAbout)
JOptionPaneh.ovzMessageDialog(this,"校本部導(dǎo)游圖程序\n\n西安石油大學(xué)
\n理學(xué)院\n數(shù)學(xué)與應(yīng)用數(shù)學(xué)”+
”\n黃濤\n2022年05月軟件信息
",JOptionPane.INFORMATION_MESSAGE);
elseif(e.getSource()==buttonl)
newAll();
elseif(e.getSource()==button2)
newChaXun(00);
elseif(e.getSource()==button3)
newLuJing(0,0);
elseif(e.getSource()==button4)
System.exit(0J;
elseif(e.getSource()==button5)
newPlan();
}
//主函數(shù)程序開(kāi)始
publicstaticvoidmain(String(]args){
jiemianlog=newjiemian();
log.setVisible(true);
)
GraphPath.java
//求圖中某一點(diǎn)到其余各點(diǎn)
〃最短路徑的Dijkstra算法
//“令國(guó)鑒.
classGraphPath(
st.at.icint.MaxRdgAS=50;
staticintMaxVertices=15;
staticd
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南新鄉(xiāng)長(zhǎng)垣市外國(guó)語(yǔ)學(xué)校教師招聘?jìng)淇脊P試試題及答案解析
- 《世界文化遺產(chǎn)知識(shí)普及:中國(guó)古建筑學(xué)習(xí)教案》
- 北師大版九年級(jí)初中的英語(yǔ)完形填空
- 福建省審計(jì)廳招聘考試真題2024
- 2025年中國(guó)社會(huì)科學(xué)院工業(yè)經(jīng)濟(jì)研究所非事業(yè)編制人員招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2025年湖南省中西醫(yī)結(jié)合醫(yī)院湖南省中醫(yī)藥研究院附屬醫(yī)院高層次人才公開(kāi)招聘13人備考題庫(kù)及答案詳解1套
- 2025年安寧市人民政府國(guó)有資產(chǎn)監(jiān)督管理委員會(huì)公開(kāi)遴選市屬國(guó)有企業(yè)外部董事專家?guī)斐蓡T10人備考題庫(kù)及一套參考答案詳解
- 臨沂市公安機(jī)關(guān)2025年第四季度招錄警務(wù)輔助人員備考題庫(kù)及1套完整答案詳解
- 2025年宿松縣人民政府龍山街道辦事處選調(diào)工作人員備考題庫(kù)帶答案詳解
- 2025年興業(yè)銀行總行社會(huì)招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 地雷戰(zhàn)課件教學(xué)課件
- 2025年汽車(chē)后市場(chǎng)服務(wù)連鎖經(jīng)營(yíng)可行性研究報(bào)告
- 甲醛治理合同范本
- 基于國(guó)家智慧教育云平臺(tái)的農(nóng)村小學(xué)科學(xué)實(shí)驗(yàn)課創(chuàng)新教學(xué)模式實(shí)踐與反思教學(xué)研究課題報(bào)告
- 2026年電商活動(dòng)策劃實(shí)戰(zhàn)培訓(xùn)課件
- 防范非計(jì)劃性拔管
- 2025年考研政治《馬克思主義基本原理》模擬卷
- (新教材)部編人教版三年級(jí)上冊(cè)語(yǔ)文 第25課 手術(shù)臺(tái)就是陣地 教學(xué)課件
- 2026天津農(nóng)商銀行校園招聘考試歷年真題匯編附答案解析
- 2025重慶市環(huán)衛(wèi)集團(tuán)有限公司招聘27人筆試歷年參考題庫(kù)附帶答案詳解
- 鉆井安全操作規(guī)程
評(píng)論
0/150
提交評(píng)論