版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計》</p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計課程設(shè)計</p><p><b> 程序設(shè)計說明書</b></p><p> 【設(shè)計題目】 校園導(dǎo)游程序</p><p><b&
2、gt; 【問題描述】</b></p><p> 如今的大學(xué)校園占地面積廣,建筑物繁多,對陌生人在校園很容易迷失方向或不易找到自己的目的地。為了解決這一問題,我為我校本部校區(qū)建立校園導(dǎo)游圖,以此給新生和來訪客人提供方便快捷的咨詢引導(dǎo)服務(wù)。</p><p><b> 【軟件功能】 </b></p><p> 1. 能夠?qū)π@整體
3、平面示意圖進行瀏覽。</p><p> 2. 能夠?qū)θ5闹饕包c的拓?fù)鋱D進行一個整體情況的預(yù)覽查詢。</p><p> 3. 能夠?qū)崿F(xiàn)對每個景點詳細(xì)信息的查詢。</p><p> 4. 能夠?qū)崿F(xiàn)景點與景點間最短路線的查詢,采用Dijkstra最短路徑算法。</p><p><b> 【算法思想】</b><
4、/p><p> 為各個功能模塊用類封裝。</p><p> 采用數(shù)據(jù)結(jié)構(gòu)有權(quán)圖的知識來存儲各個景點。</p><p> 兩個景點之間的最短路徑采用Dijkstra算法求最短路徑。即由迪杰斯特拉(Dijkstra)提出的一個按路徑長度遞增的次序產(chǎn)生最短路徑的算法。該算法的基本思想是:設(shè)置兩個頂點的集合S和T=V-S,集合S中存放已找到最短路徑的頂點,集合T存放當(dāng)前還
5、未找到最短路徑的頂點。初始狀態(tài)時,集合S中只包含源點v0,然后不斷從集合T中選取到頂點v0路徑長度最短的頂點u加入到集合S中,集合S每加入一個新的頂點u,都要修改頂點v0到集合T中剩余頂點的最短路徑長度值,集合T中各頂點新的最短路徑長度值為原來的最短路徑長度值與頂點u的最短路徑長度值加上u到該頂點的路徑長度值中的較小值。此過程不斷重復(fù),直到集合T的頂點全部加入到S中為止。</p><p> 4. 本實驗中用到的
6、數(shù)據(jù)結(jié)構(gòu):圖</p><p> ADT Graph {</p><p> 數(shù)據(jù)對象 V:景點頂點集</p><p><b> 數(shù)據(jù)關(guān)系R:</b></p><p><b> R = {VR}</b></p><p> VR = {<v,w>| v,w∈V
7、 且 P(v,w),<v,w>表示從v到w的弧,</p><p> 謂詞P(v,w)定義了弧<v,w>的意義或信息}</p><p><b> 基本操作 P:</b></p><p> CreateGraph(&G,V,VR);</p><p> 初始條件:V是圖的頂點集,VR是圖
8、中弧的集合。</p><p> 操作結(jié)果:按V和VR的定義構(gòu)造圖G。</p><p> DestroyGraph(&G);</p><p> 初始條件:圖G存在。</p><p> 操作結(jié)果:銷毀圖G。</p><p> ShortestPath(&G,v1,v2);</p>&
9、lt;p> 初始條件:圖G存在,給定起點v1和終點v2。</p><p> 操作結(jié)果:返回起點v1和終點v2的最短距離和路徑。</p><p><b> }</b></p><p><b> 【類的設(shè)計】</b></p><p> Jiemian.java</p>&l
10、t;p> class All();景點拓?fù)鋱D界面。</p><p> class Plan ():校園平面示意圖。</p><p> class ChaXun():景點詳細(xì)信息查詢界面。</p><p> class LuJing():單源最短路徑查詢界面。</p><p> public class jiemian();主界
11、面。</p><p> GraphPath.java</p><p> class GraphPath()類。最短路徑算法類。</p><p><b> 主要成員變量有:</b></p><p> static int MaxEdges = 50;最大邊數(shù)。</p><p> stati
12、c int MaxVertices = 10;最大頂點數(shù)。</p><p> static double MaxValue=9999.9; 最大值無。</p><p> private char VerticesList[]=new char[MaxVertices];存放頂點的數(shù)組。</p><p> private double Edge[][]=new
13、double[MaxVertices][MaxVertices];鄰接矩陣(存放兩個頂點權(quán)值)。</p><p> private int CurrentEdges; 現(xiàn)有邊數(shù)。</p><p> private int CurrentVertices; 現(xiàn)有頂點數(shù)。</p><p> public int path[]=new int[MaxVertices
14、]; 存放最短路徑上的最后一個經(jīng)由點。</p><p> public double dist[]=new double[MaxVertices];存放最短路徑的權(quán)值。</p><p><b> 主要成員方法:</b></p><p> public GraphPath ( ) :構(gòu)造函數(shù)建立空的鄰接矩陣。</p><
15、p> public int FindVertex (char vertex):查找指定的頂點的序號。</p><p> public boolean IsGraphEmpty ( ):判斷圖是否為空。</p><p> public boolean IsGraphFull ( ):判斷圖是否為滿。</p><p> public int NumberO
16、fVertices ( ):取得頂點數(shù)。</p><p> public int NumberOfEdges ( ):取得邊數(shù)。</p><p> public char GetValue ( int i ):按序號取得頂點值。參數(shù)為頂點序號。</p><p> public double GetWeight ( int v1, int v2 ):取得一條邊
17、的權(quán)值,參數(shù)為該邊的頂點。</p><p> public int GetFirstNeighbor ( int v ):取得第一個鄰接點的序號。</p><p> public int InsertVertex ( char vertex ):插入一個頂點,參數(shù)為頂點數(shù)據(jù)。</p><p> public boolean InsertEdge( int v1
18、, int v2, double weight):插入一條邊,參數(shù)為連接該邊的兩個頂點及邊上的權(quán)值。</p><p> public boolean RemoveVertex ( int v ):刪除一個頂點。</p><p> public boolean RemoveEdge ( int v1, int v2 ):刪除一條邊,參數(shù)為所刪除邊的兩個頂點,既刪除v1,v2頂點之間的
19、連接邊。</p><p> public void display():打印鄰接矩陣。</p><p> public void Dijkstra(int v0,int vj):最短路徑的ijkstra算法,參數(shù)為起點和目的點。</p><p> public void Putpath(int v0):輸出Dijkstra算法的結(jié)果。</p>&
20、lt;p><b> 【存儲結(jié)構(gòu)設(shè)計】</b></p><p> 圖狀結(jié)構(gòu)是一種比樹形結(jié)構(gòu)更復(fù)雜的非線性結(jié)構(gòu)。在樹狀結(jié)構(gòu)中,結(jié)點間具有分支層次關(guān)系,每一層上的結(jié)點只能和上一層中的至多一個結(jié)點相關(guān),但可能和下一層的多個結(jié)點相關(guān)。而在圖狀結(jié)構(gòu)中,任意兩個結(jié)點之間都可能相關(guān),即結(jié)點之間的鄰接關(guān)系可以是任意的。因此,圖狀結(jié)構(gòu)被用于描述各種復(fù)雜的數(shù)據(jù)對象,在自然科學(xué)、社會科學(xué)和人文科學(xué)等許多領(lǐng)
21、域有著非常廣泛的應(yīng)用。</p><p><b> 數(shù)據(jù)存儲:</b></p><p> 采用字符串?dāng)?shù)組,一維數(shù)組,二維數(shù)值來存儲圖中景點及其各邊的信息。</p><p> 1. 景點查詢圖片數(shù)組存儲:</p><p> String tu[]={"img/00.png","img/0
22、1.png","img/02.png","img/03.png",</p><p> "img/04.png","img/05.png","img/06.png","img/07.png",</p><p> "img/08.png",&
23、quot;img/09.png","img/10.png","img/11.png",};</p><p> 2. 景點查詢圖片信息數(shù)組存儲:</p><p> String XX[]={"","西安石油大學(xué)校本部南大門,位于西安市電子二路18號!",</p><p>
24、"一號教學(xué)樓建于上個世紀(jì),老的教學(xué)樓," +"現(xiàn)在主要用著實驗","校本部圖書館,</p><p> 圖書館藏有大量圖書","校本部室內(nèi)體育館","利學(xué)超市","校本部學(xué)生食堂",</p><p> "校本部室外體育場地,包括足球場,籃球場,游泳館和旱冰場等
25、室外運動場地!</p><p> ","西安石油大學(xué)校本部北門,位于西安" +"市電子一路!","石油大學(xué)校醫(yī)院",</p><p> "東門主要機動車出入大門","二號教學(xué)樓,與西階教學(xué)樓,西階會議室,東街教學(xué)" +</p><p> "樓
26、為一體建筑,建于本世紀(jì)初期!"};</p><p> 3. 最短路徑景點圖片存儲:</p><p> String CXT[]={"","img/01.jpg","img/02.jpg","img/03.jpg","img/04.jpg",</p><p&g
27、t; "img/05.jpg","img/06.jpg","img/07.jpg","img/08.jpg",</p><p> "img/09.jpg","img/10.jpg","img/11.jpg",};</p><p><b>
28、 4. 頂點儲存:</b></p><p> String c[]={"01","02","03","04","05","06","07","08","09","10","11"}
29、; 5. 邊的存儲:</p><p> int v[][]={ //弧</p><p> {0,1},{0,2},{1,0},{1,2},{1,8},{1,10},{2,0},{2,1},{2,3},</p><p> {2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},{5,4},{5,6},</p><
30、;p> {5,8},{5,10},{6,3},{6,5},{6,7},{7,6},{8,1},{8,5},{8,9},</p><p> {8,10},{9,8},{10,1},{10,5},{10,8}</p><p><b> };</b></p><p><b> 6. 邊上權(quán)的存儲</b></
31、p><p> Double d[]={15,10,15,10,130,280,10,10,80,100,80,150,250,100,20,</p><p> 150,20,100,300,150,250,100,200,200,130,300,100,100,</p><p> 100,280,150,100</p><p><b&
32、gt; }; //權(quán)</b></p><p> 【模塊劃分及調(diào)用關(guān)系】</p><p><b> 模塊劃分:</b></p><p> 主要模塊之間的調(diào)用關(guān)系及各自功能:</p><p><b> <1>.主要模塊:</b></p><p&g
33、t; 模塊一:顯示校院平面示意圖;</p><p> 模塊二:主要景點拓?fù)鋱D查詢;</p><p> 模塊三:景點詳細(xì)信息查詢;</p><p> 模塊四:景點最短路徑查詢;</p><p> 模塊五:單源最短路徑查詢,Dijkstra算法。</p><p> <2>.主要模塊之間的調(diào)用關(guān)系:&
34、lt;/p><p><b> 【模塊流程圖】</b></p><p><b> 【界面設(shè)計】</b></p><p><b> 1. 主界面</b></p><p> 2. 平面示意圖界面 3. 景點拓?fù)鋱D界面&l
35、t;/p><p> 4. 景點詳細(xì)查詢界面 5. 景點之間最短路徑查詢</p><p><b> 【用戶手冊】</b></p><p> 安裝運行myeclipse8.5.0。</p><p> 在myeclipse中新建校院導(dǎo)游為項目名的java項目,將程序
36、打包放入src中,再在項目下創(chuàng)建img文件件存放需要用到的圖片。</p><p> 運行jiemian.java程序,運行程序進入主界面;</p><p> 通過主界面的功能鍵相互調(diào)用其它程序?qū)崿F(xiàn)其相應(yīng)功能;</p><p><b> 程序上機調(diào)試報告</b></p><p> 【語法錯誤及其排除】</p&
37、gt;<p> 1. 關(guān)于static關(guān)鍵字修飾類方法的問題,用static修飾方法稱為類方法,不用static修飾的稱為實例方法。類方法可以相互調(diào)用,但不能調(diào)用實例的方法。</p><p> 2. 在編寫類方法時,方法明后忘記“()”,導(dǎo)致編譯錯誤。</p><p> 3. 在輸程序過程中,由于不斷的中英文切換,致使一些標(biāo)點符號不合法。在復(fù)查程序時也特別注意到此環(huán)節(jié)。
38、</p><p> 4. 在程序輸入時單詞的拼寫錯誤如Panel容易寫成Panle等。在復(fù)查時我也特別注意到此環(huán)節(jié)。</p><p> 5.在添加圖片時,沒有輸入正確的路徑和名稱,導(dǎo)致程序無法顯示運行圖片。</p><p> 【算法錯誤及其排除】</p><p> 1. //最短路徑的ijkstra算法的修正:</p>
39、<p> public void Dijkstra(int v0) {</p><p> int s[]=new int[MaxVertices];</p><p> int v,i,j,w;</p><p> /*初始化s、dist和path*/</p><p> for(v=0; v<CurrentVertice
40、s; v++){ </p><p> s[v]=0; /* 0表示還未求出最短路徑 */</p><p> /* 一開始假定取直達(dá)路徑最短 */</p><p> dist[v]=Edge[v0][v]; </p><p> /* 直達(dá)情況下的最后經(jīng)由點就是出發(fā)點 */</p><p> if(dist[
41、v]<MaxValue&&v!=v0) path[v]=v0; </p><p> else path[v]=-1; /* 無直達(dá)路徑 */</p><p><b> }</b></p><p> /*初始時源點v0∈S集,表示v0到v0的最短路徑已經(jīng)找到*/</p><p> dist
42、[v0]=0;s[v0]=1; </p><p> //下來假設(shè)經(jīng)由一個點中轉(zhuǎn)到達(dá)其余各點,會近些,驗證之.</p><p> //再假設(shè)經(jīng)由兩個點中轉(zhuǎn),會更近些,驗證之,.....</p><p> //直到窮舉完所有可能的中轉(zhuǎn)點.</p><p> double min;</p><p> for(i=1
43、;i<CurrentVertices ;i++) {</p><p> //挑一個距離最近經(jīng)由點,下標(biāo)裝入v</p><p> min=MaxValue;</p><p> for(w=0;w<CurrentVertices;w++)</p><p> /*頂點w不屬于S集且離v0更近*/</p><p
44、> if(s[w]==0 && dist[w]<min){ </p><p> v=w; /* 經(jīng)由頂點w中轉(zhuǎn)則距離更短 */</p><p> min=dist[w];</p><p><b> }</b></p><p> s[v]=1; /*頂點v并入S,</p>
45、<p> 由v0到達(dá)v頂點的最短路徑為min*/</p><p> /*假定由v0到v,再由v直達(dá)其余各點,</p><p> 更新當(dāng)前最后一個經(jīng)由點及距離*/</p><p> for(j=0;j<CurrentVertices;j++) </p><p> if(s[j]==0 && (min
46、+Edge[v][j]<dist[j])){</p><p> /* 如果多經(jīng)由一個v點到達(dá)j點的</p><p> 最短路徑反而要短,就更新.*/</p><p> dist[j]=min+Edge[v][j]; </p><p> path[j]=v; /* 經(jīng)由點的序號 */</p><p>&
47、lt;b> }/*if*/</b></p><p> }/*循環(huán)for i */</p><p> }/*Dijkstra算法結(jié)束*/</p><p><b> 程序測試結(jié)果</b></p><p><b> 【測試數(shù)據(jù)】</b></p><p>
48、<b> 主界面。</b></p><p> 校園平面示意圖瀏覽。</p><p> 校院主要景點編號及拓?fù)鋱D瀏覽。</p><p> 景點查詢,查詢景點04的信息。</p><p> 路徑查詢,查詢景點03到04的最短路徑。</p><p><b> 菜單測試。</b
49、></p><p><b> 【輸出結(jié)果】</b></p><p><b> 主界面</b></p><p> 開始進入該程序顯示主界面如下:</p><p> 校院平面示意圖瀏覽。</p><p> 3.校園主要景點拓?fù)鋱D瀏覽。</p><
50、;p> 顯示了校園的拓補圖和景點的代號和名稱。如下:</p><p> 景點查詢,查詢景點04的詳細(xì)信息。</p><p> 輸入景點的代號或名稱,顯示景點的圖片和簡介。如下</p><p> 路徑查詢,查詢景點03到04的最短路徑。</p><p> 輸入起點和終點,顯示起點和終點的景點圖片,還有起點到終點的最短距離和路徑。
51、如下:</p><p><b> 菜單測試。</b></p><p><b> 1>系統(tǒng)菜單</b></p><p><b> 2>幫助菜單。</b></p><p><b> 【程序性能評價】</b></p><p
52、> 本程序能夠利用UML設(shè)計良好的人機交互界面,采用數(shù)據(jù)庫提數(shù)據(jù)支持,方便數(shù)據(jù)的存儲和靈活的應(yīng)用。使用起來較為方便直觀,維護期來也比較容易。</p><p><b> 【性能改進方向】</b></p><p> 當(dāng)然本程序還存在很大的改善空間,所以的路線及景點查詢都可以集結(jié)于一張詳細(xì)的平面地圖上,當(dāng)然也可以是三維甚至多維的空間上,對查詢景點,人們查詢時只需
53、將鼠標(biāo)放置所需了解的景點處,自動彈出該景點的所有詳細(xì)信息及其周邊景點信息等。對路徑查詢,不但提示所查最短路徑及其該如何到達(dá),還在地圖上畫出最短路線及其最佳行駛方案和可供選其它方案。類似于現(xiàn)有的百度,搜搜地圖等。</p><p><b> 【收獲及體會】</b></p><p> 通過本次數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計,我順便把原有的基礎(chǔ)溫故了下,并且向新的知識擴展了下。學(xué)
54、到的東西很多,并且很有用。本次設(shè)計用到了,PS,PPT,word,java、數(shù)據(jù)結(jié)構(gòu)、軟件工程、UML設(shè)計、數(shù)據(jù)庫等知識。首先利用java的可視化創(chuàng)建窗口框架,確保界面看起來簡潔并且易操作。再創(chuàng)建數(shù)據(jù)庫和表,優(yōu)化表的表現(xiàn)形式,易于操作,進行相關(guān)的查詢等。從數(shù)據(jù)庫中提取數(shù)據(jù)存入臨時的數(shù)據(jù)結(jié)構(gòu)中,進行無向圖的最短路徑操作。本次課設(shè)都是個人完成,覺得受益匪淺。</p><p> 遺憾的是想在其基礎(chǔ)上擴展下相關(guān)的功能,
55、如:利用TCP/IP協(xié)議實現(xiàn)服務(wù)器端和客戶端的鏈接,進行多線程的操作,查詢等可以同步進行,管理員可以對數(shù)據(jù)庫進行添加景點、刪除景點和修改景點信息等操作。但由于時間的關(guān)系,沒有對這些任務(wù)進行擴展。</p><p><b> 源程序代碼</b></p><p> Jiemian.java</p><p> import java.awt.*;
56、</p><p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p><b> //景點拓?fù)鋱D界面</b></p><p> class All extends JFrame {</p><p> JLabel
57、 label;</p><p> JPanel panel;</p><p> ImageIcon 背景;//背景為整個界面的背景,通過添加圖片設(shè)置為背景</p><p><b> All() {</b></p><p> super("西安石油大學(xué)校本部校院拓?fù)鋱D");</p>
58、<p> //添加背景,添加標(biāo)題,設(shè)置按鈕圖標(biāo)</p><p> 背景 = new ImageIcon("img/1233.png");//設(shè)置背景圖片</p><p> label = new JLabel(背景);</p><p> label.setBounds(0, 0, 背景.getIconWidth(),背景.ge
59、tIconHeight());</p><p> this.getLayeredPane().setLayout(null);</p><p> JPanel p1 = new JPanel(); //添加背景,并把窗口大小設(shè)置為背景圖片的大小</p><p> panel = (JPanel) this.getContentPane();<
60、;/p><p> panel.setOpaque(false);</p><p> FlowLayout f = new FlowLayout();</p><p> panel.setLayout(f);</p><p> getLayeredPane().setLayout(null);</p><p> g
61、etLayeredPane().add(label, new Integer(Integer.MIN_VALUE));</p><p> setSize(背景.getIconWidth(), 背景.getIconHeight());</p><p> setBounds(350, 160,背景.getIconWidth(),背景.getIconHeight());</p>
62、<p> setVisible(true); </p><p> setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);</p><p><b> }</b></p><p><b> }</b></p><p> //校園
63、平面示意圖界面</p><p> class Plan extends JFrame {</p><p> JLabel label;</p><p> JPanel panel;</p><p> ImageIcon 背景;//背景為整個界面的背景,通過添加圖片設(shè)置為背景</p><p><b>
64、 Plan() {</b></p><p> super("西安石油大學(xué)校本部平面圖");</p><p> //添加背景,添加標(biāo)題,設(shè)置按鈕圖標(biāo)</p><p> 背景 = new ImageIcon("img/333.png");//設(shè)置背景圖片</p><p> label
65、= new JLabel(背景);</p><p> label.setBounds(0, 0, 背景.getIconWidth(),背景.getIconHeight());</p><p> this.getLayeredPane().setLayout(null);</p><p> JPanel p1 = new JPanel(); //
66、添加背景,并把窗口大小設(shè)置為背景圖片的大小</p><p> panel = (JPanel) this.getContentPane();</p><p> panel.setOpaque(false);</p><p> FlowLayout f = new FlowLayout();</p><p> panel.setLayo
67、ut(f);</p><p> getLayeredPane().setLayout(null);</p><p> getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));</p><p> setSize(背景.getIconWidth(), 背景.getIconHeight());</
68、p><p> setBounds(250, 160,背景.getIconWidth(),背景.getIconHeight());</p><p> setVisible(true); </p><p> setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);</p><p><b&
69、gt; }</b></p><p><b> }</b></p><p><b> //查詢界面</b></p><p> class ChaXun extends JFrame implements ActionListener{</p><p><b> int
70、i=0;</b></p><p> JLabel label;</p><p> JLabel label1=new JLabel("景點(編號或名稱)");</p><p> //JLabel label2=new JLabel("開始");</p><p> JLabel lab
71、el3=new JLabel("簡介");</p><p> JLabel label4=new JLabel("景點名");</p><p> JTextArea text1=new JTextArea("",1,20);</p><p> JTextArea text2=new JTextArea
72、("",3,40);</p><p> JPanel panel;</p><p> JButton button1=new JButton("返回");//按鈕組件</p><p> JButton button2=new JButton("查詢");//按鈕組件;</p><p
73、><b> //添加背景</b></p><p> String tu[]={"img/00.png","img/01.png","img/02.png","img/03.png",</p><p> "img/04.png", "img/05.p
74、ng","img/06.png","img/07.png",</p><p> "img/08.png","img/09.png","img/10.png","img/11.png",};</p><p> String XX[]={""
75、,"西安石油大學(xué)校本部南大門,位于西安市電子二路18號!",</p><p> "一號教學(xué)樓建于上個世紀(jì),老的教學(xué)樓," +</p><p> "現(xiàn)在主要用著實驗","校本部圖書館,圖書館藏有大量圖書",</p><p> "校本部室內(nèi)體育館","利學(xué)
76、超市","校本部學(xué)生食堂",</p><p> "校本部室外體育場地,包括足球場,籃球場,游泳館和旱冰場等室外運動場地!",</p><p> "西安石油大學(xué)校本部北門,位于西安" +</p><p> "市電子一路!","石油大學(xué)校醫(yī)院","
77、;東門主要機動車出入大門",</p><p> "二號教學(xué)樓,與西階教學(xué)樓,西階會議室,東街教學(xué)" +</p><p> "樓為一體建筑,建于本世紀(jì)初期!"};</p><p> ImageIcon picture= new ImageIcon(tu[i]);;//背景為整個界面的背景,通過添加圖片設(shè)置為背景&
78、lt;/p><p> ChaXun(int i) {</p><p> super("景點查詢");</p><p> setSize(561,495);</p><p> setLocation(350,110);</p><p> setResizable(true);</p>
79、<p> setVisible(true);</p><p> setLayout(new FlowLayout());</p><p> text1.setBackground(Color.LIGHT_GRAY);//文本框顏色設(shè)為亮灰</p><p> text2.setBackground(Color.lightGray);//文本框顏色
80、設(shè)為亮灰</p><p> text2.setEditable(false);</p><p> Font font=new Font("華文行楷",</p><p> Font.BOLD+Font.TRUETYPE_FONT+Font.LAYOUT_LEFT_TO_RIGHT,20);</p><p> labe
81、l3.setFont(font);//為標(biāo)題添加字體</p><p> label3.setForeground(new Color(255,2,2));</p><p> picture= new ImageIcon(tu[i]);;//背景為整個界面的背景,通過添加圖片設(shè)置為背景</p><p> label = new JLabel(picture);&
82、lt;/p><p> text2.append(XX[i]);</p><p> add(label1);</p><p> add(text1);</p><p> add(button2);</p><p> add(label);</p><p> add(label3);<
83、/p><p> add(text2);</p><p> add(button1);</p><p> button1.addActionListener(this);//為每個按鈕設(shè)置監(jiān)視器</p><p> button2.addActionListener(this);//為每個按鈕設(shè)置監(jiān)視器</p><p&g
84、t;<b> }</b></p><p> public void actionPerformed(ActionEvent e) {//事件響應(yīng)</p><p> if(e.getSource()==button2){</p><p> this.dispose(); </p><p> int i=Integ
85、er.parseInt(text1.getText());</p><p> new ChaXun(i); </p><p> } </p><p> if(e.getSource()==button1)</p><p> this.dispose();</p><p&g
86、t;<b> }</b></p><p><b> }</b></p><p> //單源最短路徑查詢界面</p><p> class LuJing extends JFrame implements ActionListener{</p><p> GraphPath G=new Gr
87、aphPath();</p><p> JLabel tu1,tu2,tu3;</p><p><b> String t;</b></p><p> JLabel label1=new JLabel("起點(編號或名稱):");</p><p> JLabel label2=new JLab
88、el("終點(編號或名稱):");</p><p> JLabel label3=new JLabel("路徑顯示+距離: ");</p><p> JTextArea text1=new JTextArea("",1,36);&
89、lt;/p><p> JTextArea text2=new JTextArea("",1,30);</p><p> JTextArea text3=new JTextArea("",4,45);</p><p> JPanel panel;</p><p> String s="00&
90、quot;;</p><p> JButton button1=new JButton("查詢");//按鈕組件</p><p> JButton button2=new JButton("返回");//按鈕組件;</p><p><b> //添加背景</b></p><p&g
91、t; ImageIcon p1,p2,p3;//背景為整個界面的背景,通過添加圖片設(shè)置為背景</p><p> String CXT[]={"","img/01.jpg","img/02.jpg","img/03.jpg",</p><p> "img/04.jpg","im
92、g/05.jpg","img/06.jpg",</p><p> "img/07.jpg","img/08.jpg","img/09.jpg",</p><p> "img/10.jpg","img/11.jpg",};</p><p&g
93、t; LuJing(int i,int j) {</p><p> super("路徑查詢");</p><p> setSize(561,495);</p><p> setLocation(350,110);</p><p> setResizable(true);</p><p>
94、 setVisible(true);</p><p> setLayout(new FlowLayout());</p><p> text1.setBackground(Color.LIGHT_GRAY);//文本框顏色設(shè)為亮灰</p><p> text2.setBackground(Color.lightGray);</p><p&g
95、t; text3.setBackground(Color.lightGray);//文本框顏色設(shè)為亮灰</p><p> Font font=new Font("華文行楷",</p><p> Font.BOLD+Font.TRUETYPE_FONT+Font.LAYOUT_LEFT_TO_RIGHT,20);</p><p> labe
96、l3.setFont(font);//為標(biāo)題添加字體</p><p> label3.setForeground(new Color(255,2,2));</p><p> p1 = new ImageIcon(CXT[i]);//設(shè)置背景圖片</p><p> p2 = new ImageIcon("img/00.JPG");</p
97、><p> p3 = new ImageIcon(CXT[j]);</p><p> tu1 = new JLabel(p1);</p><p> tu2 = new JLabel(p2);</p><p> tu3 = new JLabel(p3);</p><p> text3.append(G.Putpat
98、h(i,j));</p><p> add(label1);</p><p> add(text1);</p><p> add(label2);</p><p> add(text2);</p><p> add(button1);</p><p><b> add(tu
99、1);</b></p><p><b> add(tu2);</b></p><p><b> add(tu3);</b></p><p> add(label3);</p><p> add(text3);</p><p> add(button2);
100、</p><p> button1.addActionListener(this);//為每個按鈕設(shè)置監(jiān)視器</p><p> button2.addActionListener(this);</p><p><b> }</b></p><p> public void actionPerformed(Acti
101、onEvent e) {//事件響應(yīng)</p><p> if(e.getSource()==button1){</p><p> dispose();</p><p> //text3.append(CXT[1]) ;</p><p> int i=Integer.parseInt(text1.getText());</p>
102、;<p> int j=Integer.parseInt(text2.getText());</p><p> //text3.append("hungtao") ;</p><p> new LuJing(i,j);</p><p> //準(zhǔn)備有向圖(網(wǎng))數(shù)據(jù)</p><p> String c[
103、]={"01","02","03","04","05","06",</p><p> "07","08","09","10","11"}; //頂點</p><p>
104、 int v[][]={ //弧</p><p> {0,1},{0,2},{1,0},{1,2},{1,8},{1,10},{2,0},{2,1},</p><p> {2,3},{2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},</p><p> {5,4},{5,6},{5,8},{5,10},{6,3},{6,5},
105、{6,7},{7,6},</p><p> {8,1},{8,5},{8,9},{8,10},{9,8},{10,1},{10,5},{10,8}</p><p><b> };</b></p><p> Doubled[]={15,10,15,10,130,280,10,10,80,100,80,150,250,</p>
106、<p> 100,20,150,20,100,300,150,250,100,200,200,130,300,</p><p> 100,100,100,280,150,100</p><p><b> }; //權(quán)</b></p><p><b> //插入頂點</b></p>&l
107、t;p> for(int k=0;i<11;k++) </p><p> G.InsertVertex(c[k]);</p><p><b> //插入弧</b></p><p> for(int m=0;i<32;m++)</p><p> G.InsertEdge(v[m][0],v[m]
108、[1],d[m]);</p><p> G.Dijkstra(i);</p><p><b> }</b></p><p> if(e.getSource()==button2)</p><p> dispose(); </p><p><b> }</b>&l
109、t;/p><p><b> }</b></p><p><b> ///主界面</b></p><p> public class jiemian extends JFrame implements ActionListener{</p><p> JLabel label;</p>
110、<p> JMenu mSystem=new JMenu("系統(tǒng)");//系統(tǒng)菜單</p><p> JMenuItem mAdd=new JMenuItem("添加景點");</p><p> JMenuItem mAlter=new JMenuItem("修改景點信息");</p><p
111、> JMenuItem mRemove=new JMenuItem("刪除景點");</p><p> JMenuItem mExit=new JMenuItem("退出");</p><p> JMenuItem mSave=new JMenuItem("保存");</p><p> JMe
112、nu mHelp=new JMenu("幫助");//幫助菜單</p><p> JMenuItem mAbout=new JMenuItem("軟件信息");</p><p> JMenuBar mBar=new JMenuBar();</p><p> JPanel panel;</p><p&g
113、t; JButton button1=new JButton("景點拓?fù)鋱D");</p><p> JButton button2=new JButton("景點查詢");</p><p> JButton button3=new JButton("路徑查詢");</p><p> JButton
114、button4=new JButton("退出");</p><p> JButton button5=new JButton("校院平面圖");</p><p> ImageIcon 背景;//背景為整個界面的背景,通過添加圖片設(shè)置為背景</p><p> public jiemian(){</p>&l
115、t;p> super("西安石油大學(xué)校本部導(dǎo)游");</p><p> //setSize(561,495);</p><p> setLocation(350,110);</p><p> setLayout(null);</p><p> mSystem.add(mAdd);//為菜單添加菜單項目<
116、;/p><p> mSystem.add(mAlter);</p><p> mSystem.add(mRemove);</p><p> mSystem.add(mSave);</p><p> mSystem.add(mExit);</p><p> mHelp.add(mAbout);</p>
117、<p> mBar.add(mSystem);//將菜單添加到菜單條</p><p> mBar.add(mHelp);</p><p> setJMenuBar(mBar);//設(shè)置菜單條</p><p> mExit.addActionListener(this);//為菜單按鈕添加監(jiān)聽事件</p><p> mAb
118、out.addActionListener(this);</p><p> mSave.addActionListener(this);</p><p> setResizable(true);</p><p> 背景 = new ImageIcon("img/127.jpg");//設(shè)置背景圖片</p><p>
119、 label = new JLabel(背景);</p><p> label.setBounds(0, 0, 背景.getIconWidth(),背景.getIconHeight());</p><p> this.getLayeredPane().setLayout(null);</p><p> JPanel p1 = new JPanel();
120、 //添加背景,并把窗口大小設(shè)置為背景圖片的大小</p><p> panel = (JPanel) this.getContentPane();</p><p> panel.setOpaque(false);</p><p> getLayeredPane().setLayout(null);</p><p> getLay
121、eredPane().add(label, new Integer(Integer.MIN_VALUE));</p><p> setSize(背景.getIconWidth(), 背景.getIconHeight());</p><p> setBounds(350, 150,背景.getIconWidth(),背景.getIconHeight());</p><
122、p> setVisible(true); </p><p> setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);</p><p> button1.setBounds(245, 210, 100, 40);</p><p> button2.setBounds(245, 260, 100, 40
123、);</p><p> button3.setBounds(245, 310, 100, 40);</p><p> button4.setBounds(245, 360, 100, 40);</p><p> button5.setBounds(245, 160, 100, 40);</p><p> getContentPane(
124、).add(button5);</p><p> getContentPane().add(button1);</p><p> getContentPane().add(button2);</p><p> getContentPane().add(button3);</p><p> getContentPane().add(bu
125、tton4);</p><p> button1.addActionListener(this);</p><p> button2.addActionListener(this);</p><p> button3.addActionListener(this);</p><p> button4.addActionListener
126、(this);</p><p> button5.addActionListener(this);</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> if(e.getSource()==mExit)&
127、lt;/p><p> System.exit(0);</p><p> else if(e.getSource()==mAbout)</p><p> JOptionPane.showMessageDialog(this,"校本部導(dǎo)游圖程序\n\n西安石油大學(xué)\n理學(xué)院\n數(shù)學(xué)與應(yīng)用數(shù)學(xué)" +</p><p> &qu
128、ot;\n黃 濤\n2013年05月","軟件信息",JOptionPane.INFORMATION_MESSAGE);</p><p> else if(e.getSource()==button1)</p><p> new All();</p><p> else if(e.getSource()==button2
129、)</p><p> new ChaXun(00);</p><p> else if(e.getSource()==button3)</p><p> new LuJing(0,0);</p><p> else if(e.getSource()==button4)</p><p> System.exit
130、(0);</p><p> else if(e.getSource()==button5)</p><p> new Plan();</p><p><b> }</b></p><p> //主函數(shù) 程序開始</p><p> public static void main(Strin
131、g[] args) {</p><p> jiemian log=new jiemian();</p><p> log.setVisible(true);</p><p><b> }</b></p><p><b> }</b></p><p> GraphPa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-校園導(dǎo)游程序
- 校園導(dǎo)游系統(tǒng)程序__課程設(shè)計_報告
- 校園導(dǎo)游課程設(shè)計
- 校園導(dǎo)游系統(tǒng)程序課程設(shè)計匯本報告
- java課程設(shè)計---java程序設(shè)計
- java課程設(shè)計--java程序設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--校園導(dǎo)游的咨詢程序
- java課程設(shè)計--java面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- java課程設(shè)計-聊天程序
- java抽獎程序課程設(shè)計
- 校園導(dǎo)游系統(tǒng)課程設(shè)計報告
- 校園導(dǎo)游系統(tǒng)課程設(shè)計報告
- 校園導(dǎo)游咨詢系統(tǒng)課程設(shè)計
- java課程設(shè)計聊天小程序
- 超市收銀程序java課程設(shè)計
評論
0/150
提交評論