數據結構課程設計交通咨詢系統設計_第1頁
數據結構課程設計交通咨詢系統設計_第2頁
數據結構課程設計交通咨詢系統設計_第3頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、設計題目 二 :交通咨詢系統設計 P160 一、設計要求1問題描述 根據不同目的的旅客對交通工具有不同的要求。例如,因公出差的旅客 希望在旅途中的時間盡可能的短, 出門旅行的旅客希望旅費盡可能的少, 而老年 人則要求中轉次數少。 模擬一個全國城市之間的咨詢交通程序, 為旅客提供兩種 或三種最優的交通路線。2需求分析 二、概要設計 1主界面設計圖“交通咨詢系統”主菜單)2存儲結構設計本系統采用圖結構類型存儲抽象交通咨詢系統的信息。typedef struct TrafficNodechar nameMAX_STRIN 主程序模塊M; rainNum; k+)2112無向網操作模塊if (AdjL

2、isttrAdjListtracki.Traink.Cost)endmi89132min = AdjListtracki.Traink.Cost; tmp = k;printf(%s, AdjListtracki.T); printf(%2d:%2d-%2d:%2d,AdjListtracki.Traintmp.StartTime / 60, AdjListtracki.Traintmp.StartTime % 60,AdjListtracki.Traintmp.StopTime / 60, AdjListtracki.Traintmp.StopTime % 60);e

3、lsefor (i-; i0; i-) printf(n%s:, CityNametracki); end = tracki - 1; min = 32767;for (k = 0; kAdjListtracki.Flightk.Cost)min = AdjListtracki.Flightk.Cost;tmp = k;printf(%s, AdjListtracki.F);printf(%2d:%2d-%2d:%2d,AdjListtracki.Flighttmp.StartTime / 60,AdjListtracki.Flighttmp.StartTime %

4、60,AdjListtracki.Flighttmp.StopTime / 60,AdjListtracki.Flighttmp.StopTime % 60);printf(n%s: DESTINATION!, CityNametrack0);printf(nMin Cost : %dn, cost);void Dijkstra(int matxDij_MAXNDij_MAXN, int p_start, int p_end, int TravelType)int PreCityDij_MAXN; 添加城市 在主菜單下,用戶輸入 1,添加城市名稱(圖 添加城市 )2刪除城市在主菜單下,用戶輸入

5、 2,刪除已添加城市名稱(圖 刪除城市 )3添加交通路線在主菜單下,用戶輸入 3,已添加城市名稱。添加起始城市、終點城市名稱、乘 車類型、乘車班次、起始時刻、終點時刻、和票價。圖 添加交通路線 )4刪除交通路線輸入班次號,刪除交通路線(圖刪除交通路線 )5查詢最小費用交通路線(圖 查詢最小費用交通路線 )6查詢最快交通路線(圖 查詢最快交通路線 )7清除屏幕 8退出六、用戶手冊使用本系統時, 用戶需先向程序添加城市后, 在已有城市基礎上添加已有城市的 路線和使用各項功能。七、調試報告程序運行無錯誤, 但當系統輸入其他無儲存內容時程序會意外中斷, 代碼需要優 化。八、程序清單#include #

6、include #include #include #define ERR 0#define OK 1#define Dij_MAXN 100#define MAX_VERTEX_NUM 100#define MAX_STRING_NUM 100#define MAX_TRAFFIC_NUM 100const char CityFile = ;const char TrainFile = ;const char FlightFile = ;typedef short int CityType;rainNum;fprintf(fp, %dn, total); rainNum; j+) rainj

7、.name, CityNamei, CityNameAdjListi.Trainj.EndCity);fprintf(fp, %2d:%2d %2d:%2d %dn,AdjListi.Trainj.StartTime / 60, rainj.StartTime % 60,AdjListi.Trainj.StopTime / 60, AdjListi.Trainj.StopTime % 60, AdjListi.Trainj.Cost);fclose(fp); total = 0;fp = fopen(FlightFile, w);for (i = 0; iCityNum; i+)total +

8、= AdjListi.FlightNum;fprintf(fp, %dn, total);for (i = 0; iCityNum; i+)for (j = 0; jAdjListi.FlightNum; j+)fprintf(fp, %s %s %s , AdjListi.F, CityNamei, CityNameAdjListi.Flightj.EndCity);fprintf(fp, %2d:%2d %2d:%2d %dn,AdjListi.Flightj.StartTime / 60,AdjListi.Flightj.StartTime % 60,AdjList

9、i.Flightj.StopTime / 60,AdjListi.Flightj.StopTime % 60, AdjListi.Flightj.Cost);fclose(fp); return 1;int InsertCity(char *Name) ity = CityNum;AdjListCityNum.FlightNum = 0;AdjListCityNum.TrainNum = 0;CityNum+;return 1;int DelCity(char *Name) lightNum = AdjListi + 1.FlightNum; AdjListi.TrainNum = AdjLi

10、sti + 1.TrainNum;for (j = 0; j AdjListi.FlightNum; j+) lightj.Cost =AdjListi + 1.Flightj.Cost;AdjListi.Flightj.EndCity = AdjListi +1.Flightj.EndCity;strcpy(AdjListi.F, AdjListi +1.F);AdjListi.Flightj.StartTime = AdjListi +1.Flightj.StartTime;AdjListi.Flightj.StopTime = AdjListi

11、 +1.Flightj.StopTime;CityNum-;return 1; int InsertTrain(char *train, char *StartCity, char *EndCity, intStartTime, int EndTime, int cost)int i, j; rainAdjListi.TrainNum.Cost = cost;AdjListi.TrainAdjListi.TrainNum.EndCity = j;AdjListi.TrainAdjListi.TrainNum.StartTime = StartTime;AdjListi.TrainAdjList

12、i.TrainNum.StopTime = EndTime; strcpy(AdjListi.TrainAdjListi.TrainN, train); AdjListi.TrainNum+; lightAdjListi.FlightNum.Cost = cost; AdjListi.FlightAdjListi.FlightNum.EndCity = j;AdjListi.FlightAdjListi.FlightNum.StartTime = StartTime;AdjListi.FlightAdjListi.FlightNum.StopTime = EndTime; str

13、cpy(AdjListi.TrainAdjListi.FlightN, flight); AdjListi.FlightNum+;return 1;int DelPath(char *name)int i, j, flag = 0;for (i = 0; iCityNum; i+)for (j = 0; jAdjListi.FlightNum; j+) , name) = 0)flag = 1; break;if (flag)for (; jAdjListi.FlightNum - 1; j+) lightj.Cost = AdjListi.Flightj

14、+ 1.Cost;AdjListi.Flightj.EndCity = AdjListi.Flightj + 1.EndCity;strcpy(AdjListi.F, AdjListi.Flightj + 1.name);AdjListi.Flightj.StartTime = AdjListi.Flightj + 1.StartTime;AdjListi.Flightj.StopTime = AdjListi.Flightj + 1.StopTime;AdjListi.FlightNum-; break;for (j = 0; jAdjListi.TrainNum; j

15、+)if (strcmp(AdjListi.T, name) = 0)flag = 1; break;if (flag)for (; jAdjListtracki.Traink.Cost)min = AdjListtracki.Traink.Cost;tmp = k;printf(%s, AdjListtracki.T);printf(%2d:%2d-%2d:%2d,AdjListtracki.Traintmp.StartTime / 60,AdjListtracki.Traintmp.StartTime % 60,AdjListtracki.Tra

16、intmp.StopTime / 60,AdjListtracki.Traintmp.StopTime % 60);elsefor (i-; i0; i-) printf(n%s:, CityNametracki); end = tracki - 1; min = 32767;for (k = 0; kAdjListtracki.Flightk.Cost)min = AdjListtracki.Flightk.Cost;tmp = k;printf(%s, AdjListtracki.F); printf(%2d:%2d-%2d:%2d,AdjListtracki.F

17、lighttmp.StartTime / 60, AdjListtracki.Flighttmp.StartTime % 60,AdjListtracki.Flighttmp.StopTime / 60, AdjListtracki.Flighttmp.StopTime % 60);printf(n%s: DESTINATION!, CityNametrack0); printf(nMin Cost : %dn, cost);void Dijkstra(int matxDij_MAXNDij_MAXN, int p_start, int p_end, int TravelType)int Pr

18、eCityDij_MAXN; .n);return -1;fscanf(fp, %d, &CityNum);for (i = 0; iCityNum; i+)fscanf(fp, %s, &CityNamei);AdjListi.city = i;AdjListi.TrainNum = 0;AdjListi.FlightNum = 0;fclose(fp);fp = fopen(TrainFile, r);if (!fp)printf(nError:Cannot Open Train File.n);return -1;fscanf(fp, %d, &num);for (i = 0; inum

19、; i+)fscanf(fp, %s, &stmp1); rainAdjListj.TrainNum.EndCity =SeekCity(stmp3); rainAdjListj.TrainN, stmp1);fscanf(fp, %d:%d, &hour, &minute);AdjListj.TrainAdjListj.TrainNum.StartTime = hour * 60 + minute;fscanf(fp, %d:%d, &hour, &minute);AdjListj.TrainAdjListj.TrainNum.StopTime = hour * 60 + mi

20、nute;fscanf(fp, %d, &cost); AdjListj.TrainAdjListj.TrainNum.Cost = cost; AdjListj.TrainNum+;fclose(fp);fp = fopen(FlightFile, r);if (!fp) printf(nError:Cannot Open Flight File.n); return -1;fscanf(fp, %d, &num);for (i = 0; inum; i+)fscanf(fp, %s, &stmp1); lightAdjListj.FlightNum.EndCity = SeekCity(s

21、tmp3);strcpy(AdjListj.FlightAdjListj.FlightN, stmp1); fscanf(fp, %d:%d, &hour, &minute);AdjListj.FlightAdjListj.FlightNum.StartTime = hour * 60 + minute;fscanf(fp, %d:%d, &hour, &minute);AdjListj.FlightAdjListj.FlightNum.StopTime = hour * 60 + minute;fscanf(fp, %d, &cost);AdjListj.FlightAdjLi

22、stj.FlightNum.Cost = cost; AdjListj.FlightNum+; fclose(fp); return 1;int SearchMinTime(CityType City, CityType EndCity, int CurTime, int curPathNo, int TravelType) ity = Pathi.City;MinPathi.TraNo = Pathi.TraNo; curPath = curPathNo;MinTime = CurTime - StartTime;elsecurPathNo+;PathcurPathNo.City = Cit

23、y;if (!TravelType)for (i = 0; i= (CurTime %1 440)& (AdjListCity.Traini.StopTime + (CurTime / 1440) * 1440 - StartTimeMinTime)PathcurPathNo.TraNo = i;SearchMinTime(AdjListCity.Traini.EndCity, EndCity, AdjListCity.Traini.StopTime + (CurTime / 1440) * 1440, curPathNo, TravelType);if (AdjListCity.Traini

24、.StartTime(CurTime % 1440)& (AdjListCity.Traini.StopTime + (CurTime / 1440) * 1440 - StartTimeMinTime)PathcurPathNo.TraNo = i; SearchMinTime(AdjListCity.Traini.EndCity, EndCity, AdjListCity.Traini.StopTime + (CurTime / 1440 + 1) * 1440, curPathNo, TravelType);elsefor (i = 0; i= CurTime) & (AdjListCi

25、ty.Flighti.StopTime + (CurTime / 1440) * 1440 - StartTimeMinTime)PathcurPathNo.TraNo = i;SearchMinTime(AdjListCity.Flighti.EndCity, EndCity, AdjListCity.Flighti.StopTime + (CurTime / 1440) * 1440, curPathNo, TravelType);if (AdjListCity.Flighti.StartTimeCurTime) & (AdjListCity.Flighti.StopTime + (Cur

26、Time / 1440) * 1440 - StartTimeMinTime)PathcurPathNo.TraNo = i;SearchMinTime(AdjListCity.Flighti.EndCity,EndCity, AdjListCity.Flighti.StopTime + (CurTime / 1440 + 1) * 1440, curPathNo, TravelType);return 1;int CalcMinTime(int StartCity, int EndCity, int TravelType)int i;MinTime = 32767; curPath = 0;

27、Path0.City = StartCity;if (!TravelType)for (i = 0; iAdjListStartCity.TrainNum; i+)Path0.TraNo = i;StartTime = AdjListStartCity.Traini.StartTime;SearchMinTime(AdjListStartCity.Traini.EndCity,AdjListStartCity.Traini.StopTime, 0, TravelType);elsefor (i = 0; i6L( dA_La)e_L -U 一-A 七OPU 山-u 一-Qo七 9ScDlsoo

28、IAP_eoc一-L una) S9 & E 匚l/l -09、E 匚l/l -=pcxl罠 PCXI& 4SOO ELLUr)七d 二 A 七opu 山arEeNA 七o-= .NO_LN_LS5CI 仍&=)七 d 宀S9 &E 匚docoONeL=edu 一巨 U&LW一o.=edu 一!Al=snp -09 _ E 匚docoONeL=edu 一巨 U&LW一o.=edu 一!Al=snp -09 & E 匚七 9sONeL=edu 一巨 U&LW一o.=edu 一!Al=snp -09 _ ELL七 9sONeL=edu 一巨 U&LW一o.=edu 一!Al=snp:七o.=edu

29、 一!Al=snp -W 一o.=edu 一!AIarEeNQo-=s& - s&=)七 dEeuONeL=edu 一巨 U&LW一o.=edu 一!Al=snp -w 一o.=edu 一!AIarEeNQo-=s& - s&=)七 d(殳匕總匕)七(+edno Hv 一o上)O4(三 edur)七 da)E 匚七 9s.aNe-Loedl/IM6=a)E 匚七 9S a NeLoed u 一 IAIC&ouna)-(= .uoleu 匸s p 9 ss ooe ONUrmu 一dint maDij_MAXNDij_MAXN;int i, j, min, end;for (i = 0; iCi

30、tyNum; i+)for (j = 0; jCityNum; j+)maij = -1;if (TravelType = 0)for (i = 0; iCityNum; i+)min = 32767; j = 0;while (jAdjListi.TrainNum)min = 32767;end = AdjListi.Trainj.EndCity;while (end =AdjListi.Trainj.EndCity&jAdjListi.TrainNum)if (AdjListi.Trainj.Costmin)min = AdjListi.Trainj.Cost;j+;maiend = mi

31、n;elsefor (i = 0; iCityNum; i+)min = 32767; j = 0;while (jAdjListi.FlightNum)min = 32767;end = AdjListi.Flightj.EndCity;while (end =AdjListi.Flightj.EndCity&jAdjListi.FlightNum)if (AdjListi.Flightj.Costmin)min = AdjListi.Flightj.Cost;j+;maiend = min;Dijkstra(ma, StartCity, EndCity, TravelType); retu

32、rn 1;/=Main ()=int main()char nameMAX_STRING_NUM; /城市名char s_cityMAX_STRING_NUM; / 始發站char e_cityMAX_STRING_NUM; / 終點站int Command, cost;int startcity, endcity, traveltype;int s_hour, s_minute, e_hour, e_minute;while (1)CopyRight();/ 版權信息ShowMenu(); / 主菜單scanf(%d, &Command);/ 輸入選擇 switch (Command) /

33、對菜單的內容進行選擇 case 0: / 退出return 0;case 1: / 添加城市InitSysData(); / 讀出文檔中已存的信息 printf(n 輸入城市名 :);scanf(%s, &name); / 輸入城市名 InsertCity(name); / 將城市插入到數組中SaveSysInfo(); / 把城市的信息寫入文檔中 printf(System Info Save OK!n);break;case 2: / 刪除城市InitSysData(); / 讀出文檔中已有的信息 printf(n 輸入城市名 :);scanf(%s, &name);DelCity(nam

34、e); / 將城市刪除SaveSysInfo(); / 將處理過的信息寫入文檔中 printf(System Info Save OK!n);break;case 3: / 添加路線InitSysData();printf( 起始站城市名 :); scanf(%s, &s_city); /起始站printf( 終點站城市名 :);scanf(%s, &e_city); /終點站printf( 類型(列車 0,航班 1):); scanf(%d, &traveltype);printf( 輸入列車 / 飛機班次 :); scanf(%s, &name);printf( 起始時刻 (00:00 ,24 小時制 ):); scanf(%2d:%2d, &s_hour, &s_minute);printf( 到達時刻 (00:00 ,24 小時制 ):); scanf(%2d:%2d, &e_hour, &e_minute);printf( 票價 :);scanf(%d, &cost);if (traveltype)InsertFlight(name, s_city, e_city, s_hour * 60 + s_minute, e_hour * 60 + e_minute, cost);elseInsertTrain(name, s_city, e_city, s_ho

溫馨提示

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

評論

0/150

提交評論