数据结构课程设计交通咨询系统设计(共36页).doc

上传人:飞****2 文档编号:13530477 上传时间:2022-04-29 格式:DOC 页数:36 大小:125.50KB
返回 下载 相关 举报
数据结构课程设计交通咨询系统设计(共36页).doc_第1页
第1页 / 共36页
数据结构课程设计交通咨询系统设计(共36页).doc_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《数据结构课程设计交通咨询系统设计(共36页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计交通咨询系统设计(共36页).doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上设计题目:7.3.4交通咨询系统设计P160一、设计要求1问题描述根据不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。2需求分析二、概要设计1主界面设计(图2.1“交通咨询系统”主菜单)2存储结构设计本系统采用图结构类型存储抽象交通咨询系统的信息。typedef struct TrafficNodechar nameMAX_STRING_NUM; /班次 /MAX_STRING_NUM最为10int

2、 StartTime, StopTime; /起止时间 int EndCity; /该有向边指向的顶点在数组中的位置,即该城市编号 int Cost; /票价 TrafficNodeDat;typedef struct VNodeCityType city;int TrainNum, FlightNum; /标记下面Train数组和Flight数组里元素个数 TrafficNodeDat TrainMAX_TRAFFIC_NUM; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 TrafficNodeDat FlightMAX_TRAFFIC_NUM;/ int Cost; /遍历时

3、到达该城市的耗费(时间或者费用) VNodeDat;typedef struct PNodeint City;int TraNo; PNodeDat;3系统功能设计(1)添加城市。添加一个城市的名称(2)删除城市。输入一个城市名称,删除该城市。(3)添加交通路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间和票价(4) 删除交通路线。输入火车或飞机的班次删除该交通路线。(5)查询最小费用路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间查询最小费用路线。三、模块设计1模块设计 无向网操作模块工作区模块主程序模块 (图2.2 模块调用示意图)2系统子程序及功能设计

4、(1)int ShowMenu()/主菜单(2)void CopyRight()(3)int SeekCity(char *name) /寻找城市(4)int InsertCity(char *Name) /添加城市(5)int SaveSysInfo() /向程序输入数据(6)int DelCity(char *Name) /删除城市(7)int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)/添加火车路线(8)int InsertFlight(cha

5、r *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)/添加飞机航线(9)int DelPath(char *name)/删除路线(10)void Dijkstra(int matxDij_MAXNDij_MAXN, int p_start, int p_end, int TravelType)(11)int InitSysData()/存储数据(12)int SearchMinTime(CityType City, CityType EndCity, int CurTime, int c

6、urPathNo, int TravelType)/查询最短时间(13)int CalcMinTime(int StartCity, int EndCity, int TravelType) /显示最短时间(14)int CalcMinCost(int StartCity, int EndCity, int TravelType)/最少花费(15)int main()/主函数3函数主要调用关系图15main()89112754136361223716(图2.3函数主要调用关系图)四、详细设计1数据类型定义(1)全局变量的定义typedef short int CityType;/CityTyp

7、e 定义短整形的变量 typedef struct TrafficNodechar nameMAX_STRING_NUM; /班次 /MAX_STRING_NUM最为10int StartTime, StopTime; /起止时间 int EndCity; /该有向边指向的顶点在数组中的位置,即该城市编号 int Cost; /票价 TrafficNodeDat;typedef struct VNodeCityType city;int TrainNum, FlightNum; /标记下面Train数组和Flight数组里元素个数 TrafficNodeDat TrainMAX_TRAFFIC

8、_NUM; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 TrafficNodeDat FlightMAX_TRAFFIC_NUM;/ int Cost; /遍历时到达该城市的耗费(时间或者费用) VNodeDat;typedef struct PNodeint City;int TraNo; PNodeDat; 2系统主要子程序详细设计(1)用户工作区模块的设计int ShowMenu() printf(n|*欢迎使用交通咨询系统*|n);printf(n|-1: 添加城市-|);printf(n|-2: 删除城市-|);printf(n|-3: 添加交通路线-|);printf

9、(n|-4: 删除交通路线-|); printf(n|-5: 查询最小费用路线-|);printf(n|-6: 查询最快路线-|);printf(n|-7: 清除屏幕-|);printf(n|-0: 退出-|n);printf(n|*o(_)o o(_)o *|n);printf(n请输入你的选择:);return 1;(2)用Dijkstra算法求两段路程的最短距离void Dijkstra_Output(int matxDij_MAXNDij_MAXN, int PreCityDij_MAXN, int p_end, int TravelType)int trackDij_MAXN;int

10、 i = 0, j, k, min, tmp, end, cost = 0;j = p_end; tracki+ = j;while (PreCityj = 0)cost += matxPreCityjj;tracki+ = j = PreCityj;printf(nTrack Way:);if (!TravelType)for (i-; i0; i-)printf(n%s:, CityNametracki);end = tracki - 1; min = 32767;for (k = 0; kAdjListtracki.Traink.Cost)min = AdjListtracki.Trai

11、nk.Cost;tmp = k;printf(%s, AdjListtracki.Traintmp.name);printf(%2d:%2d-%2d:%2d, AdjListtracki.Traintmp.StartTime / 60, AdjListtracki.Traintmp.StartTime % 60, AdjListtracki.Traintmp.StopTime / 60, AdjListtracki.Traintmp.StopTime % 60);elsefor (i-; i0; i-)printf(n%s:, CityNametracki);end = tracki - 1;

12、 min = 32767;for (k = 0; kAdjListtracki.Flightk.Cost)min = AdjListtracki.Flightk.Cost;tmp = k;printf(%s, AdjListtracki.Flighttmp.name);printf(%2d:%2d-%2d:%2d, AdjListtracki.Flighttmp.StartTime / 60, AdjListtracki.Flighttmp.StartTime % 60, AdjListtracki.Flighttmp.StopTime / 60, AdjListtracki.Flighttm

13、p.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; /PreCityi=-1,never used; /PreCity0,the precity of City i int i, j, min, pre, pos;for (i = 0; iCityNum; i+)PreCi

14、tyi = -1;PreCityp_start = -2;while (PreCityp_end = -1)min = -1;for (i = 0; iCityNum; i+)if (PreCityi != -1)for (j = 0; j0 & (min0 | matxijmin)pre = i; pos = j; min = matxij;PreCitypos = pre;Dijkstra_Output(matx, PreCity, p_end, TravelType);五、测试分析1. 添加城市在主菜单下,用户输入1,添加城市名称。(图2.4添加城市)2删除城市在主菜单下,用户输入2,删

15、除已添加城市名称。(图2.5删除城市)3添加交通路线在主菜单下,用户输入3,已添加城市名称。添加起始城市、终点城市名称、乘车类型、乘车班次、起始时刻、终点时刻、和票价。 (图2.6添加交通路线)4删除交通路线输入班次号,删除交通路线(图2.7删除交通路线)5查询最小费用交通路线(图2.8 查询最小费用交通路线)6查询最快交通路线(图2.9查询最快交通路线)7清除屏幕8退出六、用户手册使用本系统时,用户需先向程序添加城市后,在已有城市基础上添加已有城市的路线和使用各项功能。 七、调试报告程序运行无错误,但当系统输入其他无储存内容时程序会意外中断,代码需要优化。八、程序清单#include std

16、afx.h#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 100 const char CityFile = city.txt;const char TrainFile = train.txt;const char FlightFile = flight.txt;typedef short int CityType;/CityType 定义短

17、整形的变量 typedef struct TrafficNodechar nameMAX_STRING_NUM; /班次 /MAX_STRING_NUM最为10int StartTime, StopTime; /起止时间 int EndCity; /该有向边指向的顶点在数组中的位置,即该城市编号 int Cost; /票价 TrafficNodeDat;typedef struct VNodeCityType city;int TrainNum, FlightNum; /标记下面Train数组和Flight数组里元素个数 TrafficNodeDat TrainMAX_TRAFFIC_NUM;

18、 /数组成员为结构体,记录了到达城市、起止时间、票价和班次 TrafficNodeDat FlightMAX_TRAFFIC_NUM;/ int Cost; /遍历时到达该城市的耗费(时间或者费用) VNodeDat;typedef struct PNodeint City;int TraNo; PNodeDat;VNodeDat AdjListMAX_VERTEX_NUM; char CityNameMAX_VERTEX_NUMMAX_STRING_NUM; /城市名,采用第一下标为该城市在本程序中的编号 int CityNum; /城市数目 PNodeDat PathMAX_VERTEX_

19、NUM; /存储临时最小时间路径 PNodeDat MinPathMAX_VERTEX_NUM; /存储搜索到当前的最小时间路径 int MinTime, StartTime;int curPath;int ShowMenu() printf(n|*欢迎使用交通咨询系统*|n);printf(n|-1: 添加城市-|);printf(n|-2: 删除城市-|);printf(n|-3: 添加交通路线-|);printf(n|-4: 删除交通路线-|); printf(n|-5: 查询最小费用路线-|);printf(n|-6: 查询最快路线-|);printf(n|-7: 清除屏幕-|);pr

20、intf(n|-0: 退出-|n);printf(n|*o(_)o o(_)o *|n);printf(n请输入你的选择:);return 1;void CopyRight()printf(n);int SeekCity(char *name) /寻找城市int i;for (i = 0; iCityNum; i+)if (strcmp(name, CityNamei) = 0) /比较函数,若相等,则返回i值return i;return -1;/=Edit Info= int SaveSysInfo() /向程序输入数据FILE *fp; int i, j, total;fp = fope

21、n(CityFile, w); /打开CityFile文档fprintf(fp, %dn, CityNum); /往文档中写城市的数量for (i = 0; iCityNum; i+)fprintf(fp, %sn, CityNamei); /往文档中写城市的名字fclose(fp);/将CityFile文档关闭total = 0;fp = fopen(TrainFile, w);/打开TrainFile文档 for (i = 0; iCityNum; i+) /计算列车班次的数量total += AdjListi.TrainNum;fprintf(fp, %dn, total); /往文档中

22、写列车班次的数量for (i = 0; iCityNum; i+) /for (j = 0; jAdjListi.TrainNum; j+) /往文档中写列车的车次、始发城市、终点城市fprintf(fp, %s %s %s , AdjListi.Trainj.name,CityNamei,CityNameAdjListi.Trainj.EndCity);fprintf(fp, %2d:%2d %2d:%2d %dn, AdjListi.Trainj.StartTime / 60, /往文档中写AdjListi.Trainj.StartTime % 60,AdjListi.Trainj.Sto

23、pTime / 60,AdjListi.Trainj.StopTime % 60,AdjListi.Trainj.Cost);fclose(fp); total = 0;fp = fopen(FlightFile, w);for (i = 0; iCityNum; i+)total += AdjListi.FlightNum;fprintf(fp, %dn, total);for (i = 0; iCityNum; i+)for (j = 0; j CityNum)o-;printf(未找到此城市,请重新输入!);return 0;for (i = city; i CityNum - 1; i

24、+) /?可能city是从0开始的strcpy(CityNamei, CityNamei + 1);AdjListi.FlightNum = AdjListi + 1.FlightNum;AdjListi.TrainNum = AdjListi + 1.TrainNum;for (j = 0; j AdjListi.FlightNum; j+) /为什么没有火车的?AdjListi.Flightj.Cost = AdjListi + 1.Flightj.Cost;AdjListi.Flightj.EndCity = AdjListi + 1.Flightj.EndCity;strcpy(Adj

25、Listi.Flightj.name, AdjListi + 1.Flightj.name);AdjListi.Flightj.StartTime = AdjListi + 1.Flightj.StartTime;AdjListi.Flightj.StopTime = AdjListi + 1.Flightj.StopTime;CityNum-;return 1;int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)int i, j; /InsertTr

26、ain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost);i = SeekCity(StartCity);j = SeekCity(EndCity);AdjListi.TrainAdjListi.TrainNum.Cost = cost;AdjListi.TrainAdjListi.TrainNum.EndCity = j;AdjListi.TrainAdjListi.TrainNum.StartTime = StartTime;AdjListi.TrainAdjListi.TrainNum.StopTime = En

27、dTime;strcpy(AdjListi.TrainAdjListi.TrainNum.name, train);AdjListi.TrainNum+; /火车的数加1return 1;int InsertFlight(char *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)int i, j; i = SeekCity(StartCity);j = SeekCity(EndCity);AdjListi.FlightAdjListi.FlightNum.Cost = cost;AdjL

28、isti.FlightAdjListi.FlightNum.EndCity = j;AdjListi.FlightAdjListi.FlightNum.StartTime = StartTime;AdjListi.FlightAdjListi.FlightNum.StopTime = EndTime;strcpy(AdjListi.TrainAdjListi.FlightNum.name, flight);AdjListi.FlightNum+;return 1;int DelPath(char *name)int i, j, flag = 0;for (i = 0; iCityNum; i+

29、)for (j = 0; jAdjListi.FlightNum; j+) /注意j是从0开始的if (strcmp(AdjListi.Flightj.name, name) = 0)flag = 1; break;if (flag)for (; jAdjListi.FlightNum - 1; j+) /把删除的航班后的每个航班向前移一位AdjListi.Flightj.Cost = AdjListi.Flightj + 1.Cost;AdjListi.Flightj.EndCity = AdjListi.Flightj + 1.EndCity;strcpy(AdjListi.Flightj

30、.name, 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+)if (strcmp(AdjListi.Trainj.name, name) = 0)flag = 1; break;if (flag)for (; j= 0)cost +

31、= matxPreCityjj;tracki+ = j = PreCityj;printf(nTrack Way:);if (!TravelType)for (i-; i0; i-)printf(n%s:, CityNametracki);end = tracki - 1; min = 32767;for (k = 0; kAdjListtracki.Traink.Cost)min = AdjListtracki.Traink.Cost;tmp = k;printf(%s, AdjListtracki.Traintmp.name);printf(%2d:%2d-%2d:%2d, AdjList

32、tracki.Traintmp.StartTime / 60, AdjListtracki.Traintmp.StartTime % 60, AdjListtracki.Traintmp.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.Flighttmp.name);printf(%2d:%2d-%2d:%2d, AdjListtracki.Flighttmp.StartTime / 60, AdjListtracki.Flighttmp.StartTime % 60, AdjListtracki.Flighttmp.StopTime / 60, AdjListtracki.Flightt

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁