數據結構課程設計說明書(全國交通咨詢模擬系統)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  數 據 結 構</b></p><p>  課 程 設 計 說 明 書</p><p>  2011 年 9月 2 日</p><p> 學 院:電子與計算機科學技術學院</p><p> 專 業(yè):計算機科學與技術</p><p> 題 目:全國交通咨詢模擬系

2、統</p><p> 指導教師:</p><p> 組長姓名:學號</p><p> 組員姓名:學號</p><p> 組員姓名:學號</p><p> 組員姓名:學號</p><p> 組員姓名:學號</p><p><b>  1. 設計目的1</b

3、></p><p>  1.1 項目說明1</p><p>  1.2 設計目標1</p><p>  1.3 項目設計進度說明1</p><p><b>  2. 需求分析1</b></p><p>  2.1 項目需求1</p><p>  2.2 項目

4、業(yè)務要求1</p><p>  3. 總體設計和分工說明1</p><p>  3.1 總體設計1</p><p>  3.2 分工說明1</p><p>  4. 設計內容和要求1</p><p>  5.功能模塊詳細設計2</p><p>  5.1本設計所采用的數據結構2&l

5、t;/p><p>  5.2詳細設計思想2</p><p><b>  5.3源代碼2</b></p><p>  6.功能模塊詳細設計2</p><p>  6.1本設計所采用的數據結構2</p><p>  6.2詳細設計思想2</p><p><b>

6、  6.3源代碼2</b></p><p>  7.功能模塊詳細設計2</p><p>  7.1本設計所采用的數據結構3</p><p>  7.2詳細設計思想3</p><p><b>  7.3源代碼3</b></p><p>  8.功能模塊詳細設計3</p&

7、gt;<p>  8.1本設計所采用的數據結構3</p><p>  8.2詳細設計思想3</p><p><b>  8.3源代碼3</b></p><p>  9.程序完整源代碼及圖示..............................................3</p><p> 

8、 (正文宋體五號字,1.5倍行距)(打印時刪除本行)</p><p><b>  1. 設計目的</b></p><p><b>  1.1 項目說明</b></p><p>  由于不同目的旅客對交通工具有不同的要求,應自己的要求可能是需要用最短的時間達到目的地,也可能是用最少的費用,本程序就是通過編制一個全國幾大城市的

9、交通咨詢系統來實</p><p>  現不同旅客對自己的不同需求。利用鄰接矩陣存儲航班、列次、時間等信息,使用迪杰斯特拉算法編寫程序算出最短路徑得出最快或最省錢的路徑,從而達到滿足廣大客戶交通咨詢的要求。</p><p><b>  1.2 設計目標</b></p><p>  能對有關城市信息進行編輯,并且在火車和飛機兩種交通工具中能夠提供相

10、應的火車或飛機</p><p>  的航班車次以及相關的線路等基本信息編輯功能,能夠實現用戶花費最少和用戶所需時間最</p><p>  少的需求等基本目標。</p><p>  1.3 項目設計進度說明</p><p>  首先在2011年8月22日到8月23日下午討論本課程設計的相關需求分析由組員各個發(fā)表自己的意見來實現對全國交通咨詢模擬

11、系統的相關想法,以求使程序盡可能完善全面;</p><p>  在2011年8月24全組討論本課程設計所需要用到的數據結構,全程序的主要思路,以及全程序的思路分析以及各個思路可能用到的數據結構,然后畫出程序的主體思路,以及各個組員的詳細分工任務;</p><p>  8月25日到28日由各個組員來負責編輯自己的分配的任務,通過查詢書本網上資料或是圖書館一些課外資料或向值班老師詢問來盡可能完

12、善的編輯自己的程序;</p><p>  8月29到9月1日上午將各個組員編輯的程序進行整合糾錯,來實現完整程序的編輯以及輸出結果。然后打印相關的課程設計說明書,將說明書進行整合。</p><p><b>  2. 需求分析</b></p><p><b>  2.1 項目需求</b></p><p&g

13、t;  1、設計最短路徑的算法及其需要信息的存儲:本設計中最短路徑的算法利用迪杰斯特拉算法,存儲方法利用鄰接矩陣存儲。</p><p>  2、 該程序所做的工作的是模擬全國交通咨詢,為旅客提供種最優(yōu)決策的交通咨詢。此程序規(guī)定:</p><p>  在程序中輸入城市名稱時,需輸入10個字母以內的字母串;輸入列車或飛機編號時需輸入一個字符串類型;輸入列車或飛機的費用時需輸入一個實型數據;輸入

14、列車或飛機開始時間和到達時間時均需輸入一個整型數據,在選擇功能時,應輸入與所選功能對應的一個整型數據。</p><p>  程序的輸出信息主要是:最快需要多少時間才能到達,或最少需要多少旅費才能到達,說明在途中經過的城市名稱;</p><p>  程序的功能包括:提供對城市信息的編輯,提供列車時刻表和飛機航班表的編輯,提供兩種最優(yōu)決策:最快到達、最省錢到達。</p><

15、p>  2.2 項目業(yè)務要求</p><p>  模擬全國交通咨詢模擬系統,能實現現實生活中對火車和飛機以及旅客的各種需求做出相應的程序;能實現選擇功能。 </p><p><b>  3.1 總體設計</b></p><p>  本系統整體上分為存儲系統和求最短路徑兩部分,存儲系統運用到數組和結構體。該系統分別存儲火車列次,航班,出發(fā)點

16、與目的地以及所需要走的路程和所用費用。最短路徑使用迪杰斯特拉算法編程求算得出最近或最便宜路徑。該算法主要分為三步:1、起始點(V0)與其相鄰點的權值(即當前最短路徑)。2、求出當前最短路徑中的最小值即是該起始點(V0)與另一點(Vi)的最短路徑。3、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當前最短路徑,循環(huán)第二、三步。如此得到V0到各點的最短路徑,進而可以得到想要的一條。&

17、lt;/p><p><b>  3.2 分工說明</b></p><p>  易棟:用迪杰斯特拉算法設計查找最短路徑的程序。</p><p>  吳會敏:設計編輯地圖、火車、飛機、出游路線、返回等信息存儲程序。</p><p>  趙佳:設計結構體存儲及查找函數的程序。</p><p>  李益:主頁

18、面地整理及設計界面。</p><p>  4. 設計內容和要求</p><p> ?。?)設計若干個城市的平面圖,所含城市不少于7個。以圖中頂點表示城市,存放城市的名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度和行程費用等相關信息。</p><p> ?。?)為來訪客人提供圖中任意城市相關信息的查詢。</p><p> ?。?)查詢從任一

19、給定城市到其他任意城市之間的最短路徑、或費用最低路徑(Dijkstra算法)。</p><p> ?。?)查詢任意兩個城市之間的最短路徑、或費用最低路徑(Floyd算法)。</p><p>  …………………………</p><p>  5.功能模塊詳細設計</p><p>  界面以及主函數功能板塊</p><p> 

20、 5.1本設計所采用的數據結構</p><p>  本設計采用的是在界面上通過輸入相應的字符表示的要求來實現對于不同目的不同函數的調用,主要用到的數據結構有圖中的交通網的各種信息的鄰接矩陣的存儲。</p><p><b>  5.2詳細設計思想</b></p><p>  通過顧客輸入不同的字符來實現不同的功能,主界面上注釋著這個程序的系統名稱

21、,組員以及指導老師等基本學生信息,用星號來加以修飾;然后就是用一個swich語句來實現多功能的選取以及程序的退出;主要有一:1:修改地圖 2:編輯火車時刻表 \t3:編輯飛機航班表 \t4:選擇出游路線 t5:退出;繼而通過選中其中的數字來實現自己的目的;然后再引用程序再用一個switch case語句來實現1 2 3選項中的添加刪除以及退出功能,然后在4中再用if語句來實現自己的需求考慮。可以隨時退出程序。最后再經調用函數再

22、來輸出結果;</p><p><b>  ;5.3源代碼</b></p><p>  # include<stdio.h></p><p>  #include<string.h></p><p>  #include<float.h></p><p>  co

23、nst float max=FLT_MAX;</p><p>  };void main ()</p><p><b>  { </b></p><p>  int i,j,k,m,n,cn=5,tn=6,fn=6;</p><p>  printf("\t\t**********************

24、********************\n");</p><p>  printf("\t\t* *\n");</p><p>  printf("\t\t* 歡迎使用全國交通查詢系統 *\n");</p><p&

25、gt;  printf("\t\t* 制作人:甲、乙、丙、丁 *\n");</p><p>  printf("\t\t* TIME:2011.8.20----2011.9.1 *\n");</p><p>  printf("\t\t*

26、*\n");</p><p>  printf("\t\t******************************************\n");</p><p><b>  loop1:</b></p><p>  printf("\t請選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:

27、編輯火車時刻表 \n\t\t3:編輯飛機航班表 \n\t\t4:選擇出游路線 \n\t\t5:退出");</p><p>  switch(i) //switch語句</p><p><b>  {</b></p><p>  case 1:{ //第一種情況,修改地圖*****</p><p

28、>  while(j!=1&&j!=2&&j!=3)</p><p><b>  {</b></p><p>  case 2:{ //修改火車時間表</p><p>  case 3:{//修改飛機航班表,和列車相似</p><p><b>  case 4:{</

29、b></p><p>  printf("\t\t請選擇交通工具(1.火車 2.飛機):");</p><p>  scanf("%d",&j);</p><p>  printf("\n");</p><p>  if(j==1&&k==1)short

30、_path(train,city[m-1],city[n-1],city,6,5,0);</p><p>  if(j==1&&k==2) short_path(train,city[m-1],city[n-1],city,6,5,1);</p><p>  if(j==2&&k==1) short_path(flight,city[m-1],city[n-

31、1],city,6,5,0);</p><p>  if(j==2&&k==2) short_path(flight,city[m-1],city[n-1],city,6,5,1);</p><p>  goto loop1;//回到主菜單</p><p>  case5:return;//退出系統}</p><p>  6.

32、功能模塊詳細設計</p><p>  查找函數以及在部分子函數以及主函數中調用函數的功能模塊</p><p>  6.1本設計所采用的數據結構</p><p>  應用二維數組來實現對城市名稱的編輯,應用數組來實現對城市的調用;利用圖的信息對輸入的函數信息進行查找以便再后面的程序中加以應用;</p><p><b>  6.2詳細設

33、計思想</b></p><p>  首先定義一個火車或者飛機的結構體,在主程序中便于輸出交通網上各個頂點的相關的邊的權值信息,利用一個for循環(huán)語句,通過客戶輸入一個城市信息來在所有保存的城市信息中進行查找,應用庫函數,strcmp來進行比較;成功則輸出用戶輸入的城市的位置,并且將這個位置進行返回;然后以便后面的程序引用;不成功則返回—1。</p><p><b> 

34、 .3源代碼</b></p><p>  # include<stdio.h></p><p>  #include<string.h></p><p>  #include<float.h></p><p>  const float max=FLT_MAX;</p><

35、p>  struct Tra{ </p><p>  char cc[20]; </p><p>  char start[20]; </p><p>  char destination[20];</p><p>  float time; </p&g

36、t;<p>  float price; </p><p><b>  };</b></p><p>  char city[15][20]={"北京","上海","天津","武漢","廣州"};//現有城市,最多15個城市</p>&

37、lt;p>  struct Tra train[20]={</p><p>  {"T1","武漢","北京",10,90},</p><p>  {"T2","上海","北京",8,70},</p><p>  {"T3"

38、;,"北京","天津",3,30},</p><p>  {"T4","廣州","北京",25,200}, </p><p>  {"T5","廣州","武漢",14,120},</p><p>  {&qu

39、ot;T6","武漢","上海",8,80}</p><p><b>  };</b></p><p>  struct Tra flight[20]={</p><p>  {"F1","武漢","北京",3,500},</p&

40、gt;<p>  {"F2","上海","北京",2.5,400},</p><p>  {"F3","北京","天津",1,200},</p><p>  {"F4","廣州","北京",6,14

41、00},</p><p>  {"F5","廣州","武漢",5,700},</p><p>  {"F6","武漢","上海",3,450}</p><p><b>  };</b></p><p>

42、  int search(char citytable[][20],char* city,int cn) { </p><p><b>  int i;</b></p><p>  for(i=0;i<cn;i++)</p><p>

43、;<b>  {</b></p><p>  if(strcmp(citytable[i],city)==0)</p><p><b>  return i;</b></p><p><b>  }</b></p><p>  return -1;</p><

44、;p><b>  }</b></p><p>  for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b>  {</b></p><p>  j=search(city,timetable[i].start,cn);</p><p>  k=search(

45、city,timetable[i].destination,cn);</p><p>  st=search(city,start,cn);</p><p>  et=search(city,dest,cn);</p><p>  printf("\t\t現有城市"); </p><p>  for(j=0;

46、j<cn;j++)</p><p>  printf("%d.%s\t",j+1,city[j]);</p><p>  printf("\n\n");</p><p>  7.功能模本設計所采用的數據結構</p><p>  7.1本設計所采用的數據結構</p><p>

47、  本設計采用的數據結構有圖中的最短路徑。</p><p><b>  7.2詳細設計思想</b></p><p>  (1、)開始-----</p><p>  (2)、得到存儲最少花費或最短時間信息的鄰接矩陣------</p><p>  (3)、得到起始點與相鄰的點的權值(即當前最短路徑)并記錄點-----<

48、;/p><p>  (4)、求出當前最短路徑中的最小值即是該起始點(V0)與另一點(Vi)的最短路徑-----</p><p>  (5)、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當前最短路徑并且記錄前一個點。</p><p>  (6)、重復(4),(5)步得到所有點最短路徑。</p>&l

49、t;p> ?。?)、以終點開始逐步向前賦值得到所需路徑并輸出該路徑的權值。</p><p><b>  7.3源代碼</b></p><p>  void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)</p&

50、gt;<p><b>  { </b></p><p>  int i,j,k,st,et;</p><p>  float min,t;</p><p>  char pcity[10][20];</p><p>  float edge[15][15],dist[15];</p><

51、;p>  int path[15],s[15];</p><p>  for(i=0;i<cn;i++)</p><p>  for(j=0;j<cn;j++)</p><p><b>  { </b></p><p>  edge[i][j]=max;</p><p>&l

52、t;b>  } </b></p><p>  for(i=0;i<tn;i++) {</p><p>  j=search(city,timetable[i].start,cn);</p><p>  k=search(city,timetable[i].destination,cn);</p><p>  

53、if(choice==0)</p><p>  { t=timetable[i].time;</p><p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  else </b></p&g

54、t;<p>  {t=timetable[i].price;</p><p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  st=search(city,

55、start,cn);</p><p>  et=search(city,dest,cn);</p><p>  for(i=0;i<cn;i++){</p><p>  dist[i]=edge[st][i];</p><p><b>  s[i]=0;</b></p><p>  if(i

56、!=st&&dist[i]<max) path[i]=st;</p><p>  else path[i]=-1;</p><p><b>  }</b></p><p>  s[st]=1; dist[st]=0;</p><p>  for(i=0;i<cn-1;i++){</p&g

57、t;<p><b>  min=max;</b></p><p><b>  k=st;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&dist[j]<min)</p><p>  {k=j;min=

58、dist[j];}</p><p><b>  s[k]=1;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</p><p>

59、;  dist[j]=dist[k]+edge[k][j]; path[j]=k;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  k=et;</b></p><p><b>  i=0;</b>

60、</p><p>  if(path[k]==-1){</p><p>  printf("\t\t對不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b>  return;</b></p><p><b>  }</b></p

61、><p>  while(path[k]!=-1)</p><p><b>  {</b></p><p>  strcpy(pcity[i++],city[k]);</p><p>  k=path[k];</p><p><b>  }</b></p><

62、p>  strcpy(pcity[i++],city[st]);</p><p>  printf("\t\t最佳路線為:\n\t\t");</p><p>  for(j=i-1;j>=0;j--)</p><p>  printf("%s ",pcity[j]);</p><p>  

63、printf("\n");</p><p>  if(choice==0) printf("\t\t所需總時間為:%5.1f小時\n",dist[et]);</p><p>  else printf("\t\t所需的總費用為:%7.2f元\n",dist[et]);</p><p>  printf(&q

64、uot;\n");</p><p><b>  }</b></p><p>  8.功能模塊詳細設計</p><p>  主程序中的火車飛機各種車次航班情況,并且可以進行對于火車飛機的各種添加刪除以及返回功能,以及選擇出游路線和最終系統的返回功能模塊;。</p><p>  8.1本設計所采用的數據結構<

65、/p><p>  本部分主要引用到數據結構中的數組部分的數據以及相關部分的數據引用。</p><p><b>  8.2詳細設計思想</b></p><p>  本程序主要利用一個大的switch case 以及if else 和while語句來實現對于火車飛機的添加,刪除以及因為輸入錯誤可以退出的不同功能的實現。在添加城市或者火車車次或者飛機航班

66、中主要用到一個if語句,然后再添加,使得城市或者火車車次或者飛機航班次數增加一;刪除中可以用將刪除這個名稱之后的所有數據都用循環(huán)語句向上依次賦值。</p><p><b>  8.3源代碼</b></p><p>  …printf("\t請選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時刻表 \n\t\t3:編輯飛機航班表 \n\

67、t\t4:選擇出游路線 \n\t\t5:退出");</p><p>  printf("\n\t請選擇:");</p><p>  scanf("%d",&i);</p><p>  while(i!=1&&i!=2&&i!=3&&i!=4&&

68、i!=5)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&i);</p><p><b>  } </b></p><

69、p>  switch(i) //switch語句</p><p><b>  {</b></p><p>  case 1:{ //,修改地圖*****</p><p><b>  loop2:</b></p><p>  printf("\t現有城市:\n\t\t&

70、quot;);</p><p>  for(j=0;j<cn;j++)</p><p>  printf("%d.%s ",j+1,city[j]);</p><p>  printf("\n\n");</p><p>  printf("\t\t功能:\n\t\t 1:添加 **

71、2:刪除 ** 3:返回\n");</p><p>  printf("\t\t請選擇:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>  

72、{</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&j);</p><p><b>  } </b></p><p>  printf("\n");</p

73、><p><b>  if(j==1)</b></p><p><b>  {</b></p><p>  printf("\t請輸入城市名:");</p><p>  scanf("%s",city[cn]);</p><p><b

74、>  cn++;</b></p><p>  goto loop2;</p><p><b>  } </b></p><p><b>  if(j==2) </b></p><p><b>  {</b></p><p>  prin

75、tf("\t請選擇要刪除的城市的編號:");</p><p>  scanf("%d",&k);</p><p>  while(k>cn||k<1)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新

76、輸入:");</p><p>  scanf("%d",&k);</p><p><b>  } </b></p><p>  if(k==cn) cn--;</p><p><b>  else { </b></p><p> 

77、 for(int m=k-1;m<cn-1;m++) </p><p>  strcpy(city[m],city[m+1]); </p><p>  cn--; }//else</p><p>  goto loop2; </p><p>  else goto loop1; //回到主菜單</p&

78、gt;<p><b>  }</b></p><p>  case 2:{ //修改火車時間表</p><p><b>  loop3:</b></p><p>  printf("\n\t\t現有火車時刻表:\n");</p><p>  printf("

79、;\t\t 車次 起點站 終點站 路途時間(h) 票價(元)\n"); //輸出各火車時刻表</p><p>  for(j=0;j<tn;j++)</p><p>  printf("\t\t%d: %s\t%s\t%s\t%5.1f\t\t%5.2f\t\n",j+1,train[j].cc,train[j].start,train[

80、j].destination,train[j].time,train[j].price);</p><p>  printf("\n\n");</p><p>  printf("\t功能:1.添加\t2.刪除\t3.返回\n");</p><p>  printf("\t請選擇:");</p>

81、<p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p>&l

82、t;p>  scanf("%d",&j);</p><p>  } printf("\n");</p><p><b>  if(j==1)</b></p><p><b>  {</b></p><p>  printf("

83、\t\t現有城市:\n\t\t");</p><p>  for(k=0;k<cn;k++)</p><p>  printf("%d.%s ",k+1,city[k]);</p><p>  printf("\n");</p><p>  printf("\t請分別輸入下列

84、數據:\n");</p><p>  printf("\n\t\t車次:");</p><p>  scanf("%s",train[tn].cc);</p><p>  printf("\n\t\t起點站:");</p><p>  scanf("%s"

85、;,train[tn].start);</p><p>  printf("\n\t\t終點站:");</p><p>  scanf("%s",train[tn].destination);</p><p>  printf("\n\t\t路途時間(h):");</p><p> 

86、 scanf("%f",&train[tn].time);</p><p>  printf("\n\t\t票價(元):");</p><p>  scanf("%f",&train[tn].price);</p><p>  tn++; //火車車次加一</p>&

87、lt;p>  goto loop3; //,查看修改后的列車信息</p><p><b>  }</b></p><p>  else if(j==2)</p><p><b>  {</b></p><p>  printf("\t請選擇所需刪除車次編號:");<

88、/p><p>  scanf("%d",&k);</p><p>  while(k>tn||k<1)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  sc

89、anf("%d",&k);</p><p><b>  } </b></p><p>  if(k==tn) tn--; //火車車次減一</p><p><b>  else{</b></p><p>  for(m=k-1;m<tn-1;m++) <

90、;/p><p>  train[m]=train[m+1];</p><p><b>  tn--; </b></p><p><b>  }</b></p><p>  goto loop3; //回到loop3,查看修改后的列車信息</p><p><b> 

91、 }</b></p><p>  else goto loop1; //回到主菜單</p><p>  }//case 2 ,修改火車時刻表</p><p>  case 3:{//修改飛機航班表,和列車相似</p><p><b>  loop4:</b></p><p>  pr

92、intf("\t\t現有飛機航班表:\n");</p><p>  printf("\t\t 班次 起點 終點 路途時間(h) 票價(元)\n");</p><p>  for(j=0;j<fn;j++)</p><p>  printf("\t\t%d: %s\t%s\t%s\t%5.1

93、f\t\t%5.2f\t\n",j+1,flight[j].cc,flight[j].start,flight[j].destination,</p><p>  flight[j].time,flight[j].price);</p><p>  printf("\n\n");</p><p>  printf("\t\t功

94、能:1.添加\t2.刪除\t3.返回\n");</p><p>  printf("\t\t請選擇:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b

95、>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&j);</p><p>  } //避免按錯而導致程序錯誤</p><p>  printf("\n");</

96、p><p><b>  if(j==1){</b></p><p>  printf("\t\t現有城市:");</p><p>  for(k=0;k<cn;k++)</p><p>  printf("%d.%s ",k+1,city[k]);</p><

97、;p>  printf("\n");</p><p>  printf("\t請分別輸入下列數據:\n");</p><p>  printf("\n\t\t班次:");</p><p>  scanf("%s",flight[fn].cc);</p><p&g

98、t;  printf("\n\t\t起點站:");</p><p>  scanf("%s",flight[fn].start);</p><p>  printf("\n\t\t終點站:");</p><p>  scanf("%s",flight[fn].destination);&

99、lt;/p><p>  printf("\n\t\t路途時間(h):");</p><p>  scanf("%f",&flight[fn].time);</p><p>  printf("\n\t\t票價(元):");</p><p>  scanf("%f&quo

100、t;,&flight[fn].price);</p><p>  fn++; //班次加一</p><p>  goto loop4;</p><p><b>  }</b></p><p>  else if(j==2) </p><p><b>  {</b>

101、;</p><p>  printf("\t\t請選擇所要刪除的編號:");</p><p>  scanf("%d",&k);</p><p>  while(k>fn||k<1)</p><p><b>  {</b></p><p>

102、;  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  } //避免按錯而導致程序錯誤</p><p>  if(k==fn) fn--;</p><p><b>  else{</b><

103、;/p><p>  for(m=k-1;m<fn-1;m++) </p><p>  flight[m]=flight[m+1];</p><p><b>  fn--;</b></p><p><b>  }//else</b></p><p>  goto loop4;

104、</p><p>  }//else if</p><p>  else goto loop1;</p><p>  }//case 3,修改飛機航班表</p><p><b>  case 4:{</b></p><p>  printf("\t\t請選擇交通工具(1.火車 2.飛機)

105、:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p>

106、;<p>  scanf("%d",&j);</p><p>  } printf("\t\t請選擇決策方案(1.最短時間 2.最少花費):");</p><p>  scanf("%d",&k);</p><p>  while(k!=1&&k!=2)&

107、lt;/p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  } printf("\t現有城市:\n");</p&g

108、t;<p>  for(i=0;i<cn;i++)</p><p>  printf("\t\t%d.%s\n",i+1,city[i]);</p><p>  printf("\n");</p><p>  printf("\t\t出發(fā)地編號:");</p><p&

109、gt;  scanf("%d",&m);</p><p>  while(m>cn||m<1) //cn為現有城市數目</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scan

110、f("%d",&m);</p><p>  } printf("\t\t目的地編號:");</p><p>  scanf("%d",&n);</p><p>  while(n>cn||n<1) //cn為現有城市數目</p><p><b

111、>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&n);</p><p>  }printf("\n");</p><p>  case 5: return;}

112、 </p><p><b>  9.程序完整源代碼</b></p><p>  # include<stdio.h></p><p>  #include<string.h></p><p>  #include<float.h></p><p>  const

113、 float max=FLT_MAX;</p><p>  struct Tra{ //火車或飛機的存儲結構</p><p>  char cc[20]; //用"車次"的前兩個字母表示火車或飛機航班的代碼</p><p>  char start[20]; //出發(fā)點</p>

114、;<p>  char destination[20]; //目的地</p><p>  float time; //路途時間</p><p>  float price; //價錢</p><p><b>  };</b></p><p>  int search(char

115、 citytable[][20],char* city,int cn) //在城市數中查找某個城市</p><p>  { </p><p><b>  int i;</b></p><p>  for(i=0;i<cn;i++)

116、</p><p><b>  {</b></p><p>  if(strcmp(citytable[i],city)==0)</p><p><b>  return i;</b></p><p><b>  }</b></p><p>  retur

117、n -1;</p><p><b>  }</b></p><p>  void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)</p><p><b>  {//最優(yōu)路線</b&g

118、t;</p><p>  //start表示出發(fā)地,dest表示目的地,tn表示表示航班或車次的總次數,cn表示城市的總數</p><p>  //choice=0表示求最短時間路線,choice=1表示求最少花費路線</p><p>  int i,j,k,st,et;</p><p>  float min,t;</p>&

119、lt;p>  char pcity[10][20];</p><p>  float edge[15][15],dist[15];</p><p>  int path[15],s[15];</p><p>  for(i=0;i<cn;i++)</p><p>  for(j=0;j<cn;j++)</p>

120、<p><b>  { </b></p><p>  edge[i][j]=max;</p><p><b>  } </b></p><p>  for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b>  {</b>&l

121、t;/p><p>  j=search(city,timetable[i].start,cn);</p><p>  k=search(city,timetable[i].destination,cn);</p><p>  if(choice==0)</p><p><b>  {/*最短時間*/</b></p>

122、;<p>  t=timetable[i].time;</p><p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {/*最少花費*

123、/</b></p><p>  t=timetable[i].price;</p><p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  

124、st=search(city,start,cn);</p><p>  et=search(city,dest,cn);</p><p>  for(i=0;i<cn;i++){</p><p>  dist[i]=edge[st][i];</p><p><b>  s[i]=0;</b></p>

125、<p>  if(i!=st&&dist[i]<max) path[i]=st;</p><p>  else path[i]=-1;</p><p><b>  }</b></p><p>  s[st]=1; dist[st]=0;</p><p>  for(i=0;i<cn-

126、1;i++){</p><p><b>  min=max;</b></p><p><b>  k=st;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&dist[j]<min)</p><p

127、>  {k=j;min=dist[j];}</p><p><b>  s[k]=1;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</

128、p><p>  dist[j]=dist[k]+edge[k][j]; path[j]=k;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  k=et;</b></p><p><b> 

129、 i=0;</b></p><p>  if(path[k]==-1){</p><p>  printf("\t\t對不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b>  return;</b></p><p><b>  }&

130、lt;/b></p><p>  while(path[k]!=-1)</p><p><b>  {</b></p><p>  strcpy(pcity[i++],city[k]);</p><p>  k=path[k];</p><p><b>  }</b>&

131、lt;/p><p>  strcpy(pcity[i++],city[st]);</p><p>  printf("\t\t最佳路線為:\n\t\t");</p><p>  for(j=i-1;j>=0;j--)</p><p>  printf("%s ",pcity[j]);</p&g

132、t;<p>  printf("\n");</p><p>  if(choice==0) printf("\t\t所需總時間為:%5.1f小時\n",dist[et]);</p><p>  else printf("\t\t所需的總費用為:%7.2f元\n",dist[et]);</p><p

133、>  printf("\n");</p><p><b>  }</b></p><p>  void main ()</p><p><b>  { </b></p><p>  int i,j,k,m,n,cn=5,tn=6,fn=6;</p><

134、;p>  printf("\t\t******************************************\n");</p><p>  printf("\t\t* *\n");</p><p>  printf("\t\t* 歡

135、迎使用全國交通查詢系統 *\n");</p><p>  printf("\t\t* 制作人:易;吳 ;趙;李 *\n");</p><p>  printf("\t\t* TIME:2011.8.20----2011.9.1 *\n");</p><p>  printf(&qu

136、ot;\t\t* *\n");</p><p>  printf("\t\t******************************************\n");</p><p>  char city[15][20]={"北京","上海&quo

137、t;,"天津","武漢","廣州"};//現有城市,最多15個城市</p><p>  struct Tra train[20]={</p><p>  {"T1","武漢","北京",10,90},</p><p>  {"T2&quo

138、t;,"上海","北京",8,70},</p><p>  {"T3","北京","天津",3,30},</p><p>  {"T4","廣州","北京",25,200}, </p><p>  {&quo

139、t;T5","廣州","武漢",14,120},</p><p>  {"T6","武漢","上海",8,80}</p><p><b>  };</b></p><p>  struct Tra flight[20]={</p&

140、gt;<p>  {"F1","武漢","北京",3,500},</p><p>  {"F2","上海","北京",2.5,400},</p><p>  {"F3","北京","天津",1,20

141、0},</p><p>  {"F4","廣州","北京",6,1400},</p><p>  {"F5","廣州","武漢",5,700},</p><p>  {"F6","武漢","上海&q

142、uot;,3,450}</p><p><b>  };</b></p><p>  printf("\t\t現有城市"); //輸出現有地圖上的城市,便于后面的輸入和修改</p><p>  for(j=0;j<cn;j++)</p><p>  printf("

143、%d.%s\t",j+1,city[j]);</p><p>  printf("\n\n");</p><p><b>  loop1:</b></p><p>  printf("\t請選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時刻表 \n\t\t3:編輯飛機航班表 \n

144、\t\t4:選擇出游路線 \n\t\t5:退出");</p><p>  printf("\n\t請選擇:");</p><p>  scanf("%d",&i);</p><p>  while(i!=1&&i!=2&&i!=3&&i!=4&&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論