![数据结构全国交通咨询模拟系统实习报告_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-8/17/3be75187-8cbc-4632-afb6-6e8e0a442274/3be75187-8cbc-4632-afb6-6e8e0a4422741.gif)
![数据结构全国交通咨询模拟系统实习报告_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-8/17/3be75187-8cbc-4632-afb6-6e8e0a442274/3be75187-8cbc-4632-afb6-6e8e0a4422742.gif)
![数据结构全国交通咨询模拟系统实习报告_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-8/17/3be75187-8cbc-4632-afb6-6e8e0a442274/3be75187-8cbc-4632-afb6-6e8e0a4422743.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、全国交通咨询模拟管理系统数据 构课 设计 告学院:计算机学院姓名:班级:学号:指导老师日期:1. 需求分析出于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。要求:(1)提供对城市信息进行编辑(如添加或删除)的功能。(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。(4)旅途中耗费的总时间应该包括中转站的
2、等候时间。(5)咨询以用户和计算机的对话方式进行。2. 设计2.1 设计思想(1)数据结构设计该系统存储结构运用到数组和结构体。该结构分别存储火车列次,航班,出发点与目的地以及所需要走的路程和所用费用。主要用到的数据结构有图中的交通网的各种信息的邻接矩阵的存储。最短路径使用迪杰斯特拉算法编程求算得出最近或最便宜路径。火车列次,航班的存储结构:struct Tvaval II火车或飞机的存储结构IIchar id20;/火车或飞机航班的代码/char start20;/出发地/char en d20;/目的地/float time;/路途时间/float price;/价钱/;(2 )算法设计在
3、求最短路径使用到的算法是迪杰斯特拉算法,算法步骤如下:1、 起始点(V0)与其相邻点的权值(即当前最短路径)。2、 求出当前最短路径中的最小值即是该起始点(V0)与另一点(Vi)的最短路径。3、 V0到Vi的距离加上 Vi到Vj的距离小于 V0到Vj则将V0到Vi的距离加上 Vi 到Vj的距离记为V0到Vj当前最短路径,循环第二、三步。如此得到V0到各点 的最短路径,进而可以得到想要的一条。系统主干功能的实现是用一个swich语句来实现多功能的选取以及程序的退出;主要有:1:修改地图,2:编辑火车时刻表,3:编辑飞机航班表,4:选择出游路线 ,5:退出;继而通 过选中其中的数字来实现自己的目的
4、;然后再引用程序再用一个switch case语句来实现1 23选项中的添加删除以及退出功能,然后在4中再用if语句来实现自己的需求考虑。可以随时退出程序。最后再经调用函数再来输出结果。系统设计中包括的函数模块:1. 查找模块int search(char citytable20, char* city, i nt number)在城市数中查找某个城市2. 寻找最优路线模块void the_best_path(struct Tvaval* timetable, char* start, char* end, charcity20, i nt times, i nt number, i nt c
5、hoice) /寻找最优路线先得到存储最少花费或最短时间信息的邻接矩阵,接着得到起始点与相邻的点的权值(即当前最短路径)并记录点,再求出当前最短路径中的最小值即是该起始点(V0)与另一点(Vi)的最短路径,V0到Vi的距离加上Vi到Vj的距离小于 V0到Vj则将V0到Vi的距离加 上Vi到Vj的距离记为V0到Vj当前最短路径并且记录前一个点。然后重复(4),(5)步得到所有点最短路径。最后以终点开始逐步向前赋值得到所需路径并输出该路径的权值。3. 主函数模块void mai n()主函数本设计采用的是在界面上通过输入相应的字符表示的要求来实现对于不同目的不同函数的调用,主要用到的数据结构有图中
6、的交通网的各种信息的邻接矩阵的存储。通过顾客输入不同的字符来实现不同的功能,主界面上注释着这个程序的系统名称,组员以及指导老师等基本学生信息,用星号来加以修饰;然后就是用一个swich语句来实现多功能的选取以及 程序的退出;主要有一:1:修改地图2:编辑火车时刻表t3:编辑飞机航班表t4:选择出游路线 t5:退出;继而通过选中其中的数字来实现自己的目的;然后再引用程序再用一个 switch case语句来实现1 2 3选项中的添加删除以及退出功能,然后在 4中再用if语句来实 现自己的需求考虑。可以随时退出程序。2.2 设计表示(1)函数调用关系图编辑火车时刻表编辑飞机航班表选择出游路线主函数
7、修改地图退出2.3 详细设计(1 )查找模块int search(char citytable20, char* city, int nu mber) / 个城市/在城市数中查找某int i;for (i = 0; inu mber; i+)if (strcmp(citytablei, city) = 0) return i;return -1;(2)最优路径算法模块void the_best_path(struct Tvaval* timetable, char* start, char* end, char city20, int times, int number, int choice
8、)/最优路线/start表示出发地,end表示目的地,times表示表示航班或车次的总次数,number表示城市的总数/choice=0表示求最短时间路线,int i, j, k, st, et;float min, t;char pcity1020;float edge1515, dist15;/15*15choice=1表示求最少花费路线/的数组储存的是权值/in t path15, s15;for (i = 0; inu mber; i+)for (j = 0; j nu mber; j+)edgeij = max;for (i = 0; itimes; i+)/dijkstra算法 /
9、j = search(city, timetablei.start, number);/寻找出发地 /k = search(city, timetablei.end, number);/寻找目的地 /if (choice = 0)/最短时间/t = timetablei.time; if (tedgejk) edgejk = t;else/最少花费IIt = timetablei.price; if (tedgejk) edgejk = t;st = search(city, start, nu mber);et = search(city, end, nu mber);for (i = 0;
10、 inu mber; i+)disti = edgesti;si = 0;if (i != st&distimax) pathi = st;else pathi = -1;sst = 1; distst = 0;for (i = 0; inu mber - 1; i+)min = ma x;k = st;for (j = 0; j nu mber; j+)if (!sj & distjmi n)k = j;min = distj;sk = 1;for (j = 0; j nu mber; j+)if (!sj & edgekjmax&distk + edgekj= 0; j-)printf(%
11、s , pcityj);prin tf(n);if (choice = 0)printf(tt 所需总时间为:5.1f 小时n, distet); elseprintf(tt 所需的总费用为:%7.2f 元n, distet); prin tf(n);(3)主函数模块void mai n()int i, j, k, m, n, number = 5, train_number = 6, fly_number = 6;prin tf(tt* n);prin tf(tt*欢迎使用全国交通查询系统*n ”);prin tf(tt* n);char city1520 = 最多15个城市II北京,昆明,
12、曲靖,重庆,武汉;/现有城市, T1,北京,武汉,10, 90 , T2,北京,昆明,8, 70 , T3,昆明,曲靖,3, 30 , T4,昆明,重庆,25, 200 , T5,武汉,重庆,14, 120 , T6,昆明,武汉,8, 80 struct Tvaval flight20 = F1,北京,武汉,3, 500 , F2,北京,昆明, 2.5, 400 F3,昆明,曲靖,1,200 , F4,昆明,重庆,6, 1400 , F5,武汉,重庆,5, 700 , F6,昆明,武汉,3, 450 ;prin tf(tt现有城市); /struct Tvaval train 20 = 输出现
13、有地图上的城市,便于后面的输入和修改/for (j = 0; j nu mber; j+)prin tf(%d.%st, j + 1, cityj); prin tf(nn);loopl:printf(t请选 择所需 功能:ntt1:修 改地图ntt2:ntt3:编辑飞机航班表ntt4:选择出游路线ntt5:退出”);printf(nt请选择:);scanf(%d, &i);while (i != 1 & i != 2 & i != 3 & i != 4 & i != 5)prin tf(tt输入有误,请重新输入:);scan f(%d, & i); /避免按错而导致程序错误/switch (
14、i) /switch语句 /case 1: /第一种情况,修改地图*/Ioop2:prin tf(t现有城市:ntt);for (j = 0; jnu mber | k1)prin tf(tt输入有误,请重新输入:);scan f(%d, &k); /避免按错而导致程序错误/if (k = nu mber) nu mber-;编辑火车时刻表返回n);elsefor (m = k - 1; mnu mber - 1; m+)strcpy(citym, citym + 1);nu mber-; /elsegoto Ioop2; /城市总数减少一个/ifelse goto loop1; / case
15、 1,修改地图/case 2: /修改火车时间表Ioop3:prin tf(nttprin tf(tt/输出各火车时刻表/回到主菜单/现有火车时刻表:n);车次起点站终点站路途时间(h)for (j = 0; jtra in_nu mber; j+)prin tf(tt%d:%st%st%st%5.1ftt%5.2ftn.票价(元)n);j + 1,查看修改后的地图,便于判断或是再次修改 train j.id, train j.start, train j.e nd, train j.time, train j.price);prin tf(nn);printf(t功能:1.添加 t2.删除t
16、3.返回 n);prin tf(t请选择:);scan f(%d, &j);while (j != 1 & j != 2 & j != 3)prin tf(tt输入有误,请重新输入:”);scan f(%d, &j); /避免按错而导致程序错误/ prin tf(n);if (j = 1) prin tf(现有城市:n);for (k = 0; ktra in_nu mber | k1)prin tf(tt输入有误,请重新输入:);scan f(%d, &k); /避免按错而导致程序错误/if (k = train_number) train_number-; /火车车次减一 /elsefor
17、 (m = k - 1; mtra in_nu mber - 1; m+)trai nm = trai nm + 1;train _nu mber-;goto Ioop3; / 回到Ioop3,查看修改后的列车信息/else goto loop1; /回到主菜单 /case 2 ,修改火车时刻表/case 3:/修改飞机航班表,和列车相似/Ioop4:prin tf(tt现有飞机航班表:n);printf(tt班次t起点t终点t路途时间t票价n);for (j = 0; jfly_ nu mber; j+)prin tf(tt%d:%st%st%st%5.1ftt%5.2ft n,j +1,f
18、lightj.id, flightj.start, flightj.e nd,flightj.time, flightj.price);prin tf(nn);printf(tt功能:1.添加 t2.删除 t3.返回 n);prin tf(tt请选择:”);scan f(%d, &j);while (j != 1 & j != 2 & j != 3)prin tf(tt输入有误,请重新输入:”);scan f(%d, &j); /避免按错而导致程序错误/prin tf(n);if (j = 1)prin tf(现有城市:n);for (k = 0; kfly_number | k1)prin
19、tf(tt输入有误,请重新输入:”);scan f(%d, &k); /避免按错而导致程序错误/if (k = fly_nu mber) fly_nu mber-;elsefor (m = k - 1; mfly_ nu mber - 1; m+)flightm = flightm + 1;fly_nu mber-;/elsegoto loop4;/else ifelse goto loop1;/case 3,修改飞机航班表/case 4:printf(tt请选择交通工具(1.火车2.飞机):);scan f(%d, &j);while (j != 1 & j != 2)prin tf(tt输
20、入有误,请重新输入:”);scan f(%d, &j); /避免按错而导致程序错误/printf(tt请选择决策方案(1.最短时间2.最少花费):);scan f(%d, &k);while (k != 1 & k != 2)prin tf(tt输入有误,请重新输入:”);scan f(%d, &k); /避免按错而导致程序错误/prin tf(t 现有城市:n);for (i = 0; inumber | mnumber | nenTsDebugCppL, ese藕憎仙证回.8 -2.婁点西 市数別起亠 战杲八叭年 至输军讣 现请久上一r?路连对I永s .e3 -EJ25.B14 .0S.Q3.0淸矍牡电-叟伺添加新的火车班次删除火车车次(3)飞机时刻表中的编辑与删除八C:Duuumems wd 5ettihsAJinistctcrMY DocucrrtsPelmijC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度数字化夫妻离婚协议书(简单版)
- 2025年度水产养殖设施设备租赁合同范本
- 2025年中国休闲游憩行业市场调查研究及发展战略规划报告
- 2025年中国浓缩型液体洗涤剂行业市场调查研究及投资前景预测报告
- 2025年度广告牌广告位租赁代理服务合同
- 2025年度文化艺术品交易合同-@-2
- 2025年度建筑工程劳务合同风险防范协议
- 2025年程控电话交换机市场调研报告
- 推动职业教育信息化教学手段的应用实施方案
- 天然林保护修复的基本原则
- 2024年长沙卫生职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2025届高考数学一轮专题重组卷第一部分专题十四立体几何综合文含解析
- 福建省泉州市南安市2024-2025学年九年级上学期期末考试语文试题(无答案)
- 2025年中国电子烟行业发展前景与投资战略规划分析报告
- 医疗器材申请物价流程
- 人教PEP版2025年春季小学英语三年级下册教学计划
- 华为研发部门绩效考核制度及方案
- 2025年蛇年年度营销日历营销建议【2025营销日历】
- 摄影入门课程-摄影基础与技巧全面解析
- 司法考试2024年知识点背诵版-民法
- 冀少版小学二年级下册音乐教案
评论
0/150
提交评论