java校園導(dǎo)游程序課程設(shè)計_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論