ImageVerifierCode 换一换
格式:DOC , 页数:38 ,大小:125.54KB ,
资源ID:2682799      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2682799.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据结构优秀课程设计交通咨询系统标准设计.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构优秀课程设计交通咨询系统标准设计.doc

1、设计题目<二>:7.3.4交通咨询系统设计P160 一、设计要求 1.问题描述 依据不一样目标旅客对交通工含有不一样要求。比如,因公出差旅客期望在旅途中时间尽可能短,出门旅行旅客期望旅费尽可能少,而老年人则要求中转次数少。模拟一个全国城市之间咨询交通程序,为旅客提供两种或三种最优交通路线。 2.需求分析 二、概要设计 1.主界面设计 (图2.1“交通咨询系统”主菜单) 2.存放结构设计 本系统采取图结构类型存放抽象交通咨询系统信息。 typedef struct TrafficNode { char name[MAX_STRING_NUM]; //班次 /

2、/MAX_STRING_NUM最为10 int StartTime, StopTime; //起止时间 int EndCity; //该有向边指向顶点在数组中位置,即该城市编号 int Cost; //票价 } TrafficNodeDat; typedef struct VNode { CityType city; int TrainNum, FlightNum; //标识下面Train数组和Flight数组里元素个数 TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组组员为结构体,统计了抵达城市、起止时间、票价和

3、班次 TrafficNodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时抵达该城市花费(时间或费用) } VNodeDat; typedef struct PNode { int City; int TraNo; } PNodeDat; 3.系统功效设计 (1)添加城市。添加一个城市名称 (2)删除城市。输入一个城市名称,删除该城市。 (3)添加交通路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间和票价 (4) 删除交通路线。输入火车或飞机班次删除该交通路线。 (5)查询最小费用路线。输

4、入起始城市、终点城市、航班或火车、车次、起始时间、终点时间查询最小费用路线。 三、模块设计 1.模块设计 无向网操作模块 工作区模块 主程序模块 (图2.2 模块调用示意图) 2.系统子程序及功效设计 (1)int ShowMenu()//主菜单 (2)void CopyRight() (3)int SeekCity(char *name) //寻求城市 (4)int InsertCity(char *Name) //添加城市 (5)int SaveSysInfo() //向程序输入数据 (6)int DelCity(c

5、har *Name) //删除城市 (7)int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)//添加火车路线 (8)int InsertFlight(char *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost)//添加飞机航线 (9)int DelPath(char *name)//删除路线 (10)void Dijkstra(int m

6、atx[Dij_MAXN][Dij_MAXN], int p_start, int p_end, int TravelType) (11)int InitSysData()//存放数据 (12)int SearchMinTime(CityType City, CityType EndCity, int CurTime, int curPathNo, int TravelType)//查询最短时间 (13)int CalcMinTime(int StartCity, int EndCity, int TravelType) //显示最短时间 (14)int CalcMinCost(int

7、 StartCity, int EndCity, int TravelType)//最少花费 (15)int main()//主函数 3.函数关键调用关系图 15main() 8 9 1 12 7 5 4 13 6 3 6 1 2 2 3 7 1 6 (图2.3函数关键调用关系图) 四、具体设计 1.数据类型定义 (1)全局变量定义 typedef short int CityType;//CityType 定义短整形变量 typedef struct TrafficNode { char

8、name[MAX_STRING_NUM]; //班次 //MAX_STRING_NUM最为10 int StartTime, StopTime; //起止时间 int EndCity; //该有向边指向顶点在数组中位置,即该城市编号 int Cost; //票价 } TrafficNodeDat; typedef struct VNode { CityType city; int TrainNum, FlightNum; //标识下面Train数组和Flight数组里元素个数 TrafficNodeDat Train[MAX_TRAFFIC_NUM];

9、 //数组组员为结构体,统计了抵达城市、起止时间、票价和班次 TrafficNodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时抵达该城市花费(时间或费用) } VNodeDat; typedef struct PNode { int City; int TraNo; } PNodeDat; 2.系统关键子程序具体设计 (1)用户工作区模块设计 int ShowMenu() { printf("\n|******************欢迎使用交通咨询系统*******|\n"); printf

10、"\n|------------------1: 添加城市----------------|"); printf("\n|------------------2: 删除城市----------------|"); printf("\n|------------------3: 添加交通路线------------|"); printf("\n|------------------4: 删除交通路线------------|"); printf("\n|------------------5: 查询最小费用路线--------|"); printf("\n|-------

11、6: 查询最快路线------------|"); printf("\n|------------------7: 清除屏幕----------------|"); printf("\n|------------------0: 退出--------------------|\n"); printf("\n|***********o(∩_∩)o o(∩_∩)o **************|\n"); printf("\n请输入你选择:"); return 1; } (2)用Dijkstra算法求两段旅程最短距离 void Dijkstra_Ou

12、tput(int matx[Dij_MAXN][Dij_MAXN], int PreCity[Dij_MAXN], int p_end, int TravelType) { int track[Dij_MAXN]; int i = 0, j, k, min, tmp, end, cost = 0; j = p_end; track[i++] = j; while (PreCity[j] >= 0) { cost += matx[PreCity[j]][j]; track[i++] = j = PreCity[j]; } printf("\nTrack

13、Way:"); if (!TravelType) { for (i--; i>0; i--) { printf("\n%s:", CityName[track[i]]); end = track[i - 1]; min = 32767; for (k = 0; kAdjList[track[i]].Train[k].Cost) { min = AdjList

14、[track[i]].Train[k].Cost; tmp = k; } printf("%s", AdjList[track[i]].Train[tmp].name); printf("%2d:%2d-%2d:%2d", AdjList[track[i]].Train[tmp].StartTime / 60, AdjList[track[i]].Train[tmp].StartTime % 60, AdjList[track[i]].Train[tmp].StopTime / 60, AdjList[track[i]].Train[tmp].StopTime

15、 % 60); } } else { for (i--; i>0; i--) { printf("\n%s:", CityName[track[i]]); end = track[i - 1]; min = 32767; for (k = 0; kAdjList[track[i]].Flight[k].Cost) { min = AdjList[

16、track[i]].Flight[k].Cost; tmp = k; } printf("%s", AdjList[track[i]].Flight[tmp].name); printf("%2d:%2d-%2d:%2d", AdjList[track[i]].Flight[tmp].StartTime / 60, AdjList[track[i]].Flight[tmp].StartTime % 60, AdjList[track[i]].Flight[tmp].StopTime / 60, AdjList[track[i]].Flight[tmp].Sto

17、pTime % 60); } } printf("\n%s: DESTINATION!", CityName[track[0]]); printf("\nMin Cost : %d\n", cost); } void Dijkstra(int matx[Dij_MAXN][Dij_MAXN], int p_start, int p_end, int TravelType) { int PreCity[Dij_MAXN]; //PreCity[i]==-1,never used; //PreCity>0,the precity of City i

18、int i, j, min, pre, pos; for (i = 0; i0 && (min<0

19、 matx[i][j]

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

21、八、程序清单 #include "stdafx.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[] =

22、"train.txt"; const char FlightFile[] = "flight.txt"; typedef short int CityType;//CityType 定义短整形变量 typedef struct TrafficNode { char name[MAX_STRING_NUM]; //班次 //MAX_STRING_NUM最为10 int StartTime, StopTime; //起止时间 int EndCity; //该有向边指向顶点在数组中位置,即该城市编号 int Cost; //票价 } TrafficNod

23、eDat; typedef struct VNode { CityType city; int TrainNum, FlightNum; //标识下面Train数组和Flight数组里元素个数 TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组组员为结构体,统计了抵达城市、起止时间、票价和班次 TrafficNodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时抵达该城市花费(时间或费用) } VNodeDat; typedef struct PNode {

24、int City; int TraNo; } PNodeDat; VNodeDat AdjList[MAX_VERTEX_NUM]; char CityName[MAX_VERTEX_NUM][MAX_STRING_NUM]; //城市名,采取第一下标为该城市在本程序中编号 int CityNum; //城市数目 PNodeDat Path[MAX_VERTEX_NUM]; //存放临时最小时间路径 PNodeDat MinPath[MAX_VERTEX_NUM]; //存放搜索到目前最小时间路径 int MinTime, StartTime; int

25、 curPath; int ShowMenu() { printf("\n|******************欢迎使用交通咨询系统*******|\n"); printf("\n|------------------1: 添加城市----------------|"); printf("\n|------------------2: 删除城市----------------|"); printf("\n|------------------3: 添加交通路线------------|"); printf("\n|------------------4: 删

26、除交通路线------------|"); printf("\n|------------------5: 查询最小费用路线--------|"); printf("\n|------------------6: 查询最快路线------------|"); printf("\n|------------------7: 清除屏幕----------------|"); printf("\n|------------------0: 退出--------------------|\n"); printf("\n|***********o(∩_∩)o o(∩_∩)o ***

27、\n"); printf("\n请输入你选择:"); return 1; } void CopyRight() { printf("\n"); } int SeekCity(char *name) //寻求城市 { int i; for (i = 0; i

28、Edit Info==================================================== int SaveSysInfo() //向程序输入数据 { FILE *fp; int i, j, total; fp = fopen(CityFile, "w"); //打开CityFile文档 fprintf(fp, "%d\n", CityNum); //往文档中写城市数量 for (i = 0; i

29、CityName[i]); //往文档中写城市名字 } fclose(fp);//将CityFile文档关闭 total = 0; fp = fopen(TrainFile, "w");//打开TrainFile文档 for (i = 0; i

30、jList[i].TrainNum; j++) //往文档中写列车车次、始发城市、终点城市 { fprintf(fp, "%s %s %s ", AdjList[i].Train[j].name, CityName[i], CityName[AdjList[i].Train[j].EndCity]); fprintf(fp, "%2d:%2d %2d:%2d %d\n", AdjList[i].Train[j].StartTime / 60, //往文档中写 AdjList[i].Train[j].StartTime % 60, A

31、djList[i].Train[j].StopTime / 60, AdjList[i].Train[j].StopTime % 60, AdjList[i].Train[j].Cost); } } fclose(fp); total = 0; fp = fopen(FlightFile, "w"); for (i = 0; i

32、) { for (j = 0; j

33、AdjList[i].Flight[j].StopTime / 60, AdjList[i].Flight[j].StopTime % 60, AdjList[i].Flight[j].Cost); } } fclose(fp); return 1; } int InsertCity(char *Name) //添加城市 { strcpy(CityName[CityNum], Name); AdjList[CityNum].city = CityNum; AdjList[CityNum].FlightNum = 0; AdjList[

34、CityNum].TrainNum = 0; CityNum++; return 1; } int DelCity(char *Name) //删除城市 { int city, i, j,o=1,k=1; city = SeekCity(Name); printf("%s",Name); while (true) { while (CityName[k] != Name) { k++; } if (k > CityNum) { o--; printf("未找到此城市,请重新输入!");

35、 return 0; } for (i = city; i < CityNum - 1; i++) //???可能city是从0开始 { strcpy(CityName[i], CityName[i + 1]); AdjList[i].FlightNum = AdjList[i + 1].FlightNum; AdjList[i].TrainNum = AdjList[i + 1].TrainNum; for (j = 0; j < AdjList[i].FlightNum; j++) //为何没有火车?? { AdjLis

36、t[i].Flight[j].Cost = AdjList[i + 1].Flight[j].Cost; AdjList[i].Flight[j].EndCity = AdjList[i + 1].Flight[j].EndCity; strcpy(AdjList[i].Flight[j].name, AdjList[i + 1].Flight[j].name); AdjList[i].Flight[j].StartTime = AdjList[i + 1].Flight[j].StartTime; AdjList[i].Flight[j].StopTi

37、me = AdjList[i + 1].Flight[j].StopTime; } } CityNum--; } return 1; } int InsertTrain(char *train, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost) { int i, j; //InsertTrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost); i = SeekCity(

38、StartCity); j = SeekCity(EndCity); AdjList[i].Train[AdjList[i].TrainNum].Cost = cost; AdjList[i].Train[AdjList[i].TrainNum].EndCity = j; AdjList[i].Train[AdjList[i].TrainNum].StartTime = StartTime; AdjList[i].Train[AdjList[i].TrainNum].StopTime = EndTime; strcpy(AdjList[i].Train[AdjList[

39、i].TrainNum].name, train); AdjList[i].TrainNum++; //火车数加1 return 1; } int InsertFlight(char *flight, char *StartCity, char *EndCity, int StartTime, int EndTime, int cost) { int i, j; i = SeekCity(StartCity); j = SeekCity(EndCity); AdjList[i].Flight[AdjList[i].FlightNum].Cost = cost

40、 AdjList[i].Flight[AdjList[i].FlightNum].EndCity = j; AdjList[i].Flight[AdjList[i].FlightNum].StartTime = StartTime; AdjList[i].Flight[AdjList[i].FlightNum].StopTime = EndTime; strcpy(AdjList[i].Train[AdjList[i].FlightNum].name, flight); AdjList[i].FlightNum++; return 1; } int DelPa

41、th(char *name) { int i, j, flag = 0; for (i = 0; i

42、 AdjList[i].Flight[j].Cost = AdjList[i].Flight[j + 1].Cost; AdjList[i].Flight[j].EndCity = AdjList[i].Flight[j + 1].EndCity; strcpy(AdjList[i].Flight[j].name, AdjList[i].Flight[j + 1].name); AdjList[i].Flight[j].StartTime = AdjList[i].Flight[j + 1].StartTime; AdjList[i].Flight

43、[j].StopTime = AdjList[i].Flight[j + 1].StopTime; } AdjList[i].FlightNum--; break; } for (j = 0; j

44、移一位 { AdjList[i].Train[j].Cost = AdjList[i].Train[j + 1].Cost; AdjList[i].Train[j].EndCity = AdjList[i].Train[j + 1].EndCity; strcpy(AdjList[i].Train[j].name, AdjList[i].Train[j + 1].name); AdjList[i].Train[j].StartTime = AdjList[i].Train[j + 1].StartTime; AdjList[i].Tra

45、in[j].StopTime = AdjList[i].Train[j + 1].StopTime; } AdjList[i].TrainNum--; break; } } return 1; } //==============================================Check Info================================================ void Dijkstra_Output(int matx[Dij_MAXN][Dij_MAXN], int PreCity[Dij_MAXN

46、], int p_end, int TravelType) { int track[Dij_MAXN]; int i = 0, j, k, min, tmp, end, cost = 0; j = p_end; track[i++] = j; while (PreCity[j] >= 0) { cost += matx[PreCity[j]][j]; track[i++] = j = PreCity[j]; } printf("\nTrack Way:"); if (!TravelType) { for (i--; i>0; i--)

47、 { printf("\n%s:", CityName[track[i]]); end = track[i - 1]; min = 32767; for (k = 0; kAdjList[track[i]].Train[k].Cost) { min = AdjList[track[i]].Train[k].Cost; tmp = k; } print

48、f("%s", AdjList[track[i]].Train[tmp].name); printf("%2d:%2d-%2d:%2d", AdjList[track[i]].Train[tmp].StartTime / 60, AdjList[track[i]].Train[tmp].StartTime % 60, AdjList[track[i]].Train[tmp].StopTime / 60, AdjList[track[i]].Train[tmp].StopTime % 60); } } else { for (i--; i>0; i--) {

49、 printf("\n%s:", CityName[track[i]]); end = track[i - 1]; min = 32767; for (k = 0; kAdjList[track[i]].Flight[k].Cost) { min = AdjList[track[i]].Flight[k].Cost; tmp = k; } print

50、f("%s", AdjList[track[i]].Flight[tmp].name); printf("%2d:%2d-%2d:%2d", AdjList[track[i]].Flight[tmp].StartTime / 60, AdjList[track[i]].Flight[tmp].StartTime % 60, AdjList[track[i]].Flight[tmp].StopTime / 60, AdjList[track[i]].Flight[tmp].StopTime % 60); } } printf("\n%s: DESTINATION!", Ci

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服