版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、cheng太原工业学院计算机工程系数据结构课程设计设计题目:全国交通网络咨询系统1班级:计算机科学与技术学号:132054103姓名:陈敏指导教师:刘海静年月日chengcheng目录1、 课程设计题目12、 需求分析13、 测试数据2四、概要设计2五、调用关系图3六、程序代码3七、测试结果14八、心得体会及总结14chengcheng数据结构课程设计一、课程设计题目全国交通网络咨询系统二、需求分析1、实现功能对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;对城市间的交通工具:火车。对列车时刻表进行编辑:里程、和列车班次的添加、修改、删除;提供两种最优决策:最快到达或最省
2、钱到达。全程只考虑一种交通工具,可以不考虑回程;咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟列车何时到达何地。2、设计思路(1)数据存储。城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。在实验中本想用文本储存数据,但操作不熟悉,而是改用图的邻接矩阵储存原始信息,而后用数组进行添加删改(2)数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为
3、无向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的时间)或旅费。(3)数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,这里建议采用邻接矩阵作为数据的存储结构。(4)用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。这些工作有不小的工作量。(5)最优决策功能模块读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存
4、放与该元素所代表的城市有交通联系的城市(代码、里程、列车车次)。根据具体最优决策的要求,用floyd算法求出出发城市到其它各城市的最优值(最短时间chengcheng或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其目的城市所代表的元素中就保存了所需的最优决策结果。其相应的初始值可为8,并在表头数组对应的城市元素中保存响应的信息。主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。四、概要设计本程序运用了关于图这种数据结构。它的抽象数据类型定义如下:typedefstructunDiGraph(intnumVerts
5、;/结点costAdjcost;令口接矩阵unDiGraph,*UNG;基本操作:unDiGraph*CreateCostG()操作结果:构造带权(费用)图。unDiGraph*CreateTimeG()操作结果:构造带权(时间)图。构造飞机带权(费用)图。PathMat*Floyed(unDiGraph*D)操作结果:Floyed函数求任意两点的最短路径。chengcheng五、调用关系图unDiGraph(图)Floyed函数求任意两点的最短路径CreateCostG(构造带权费用)CreateTimeG(构造带权时间)六、程序代码#include<windows.h>#inc
6、lude<stdio.h>#include<crtdbg.h>#include<string.h>#include<iostream.h>#include<malloc.h>#defineINF10000/定义一个最大数定为无穷值#defineMAX7staticintcnumber=7;staticintk=0;staticintv=0,z=0;/定义静态变量typedefstructzhu/定义结构体zhu(intccost;/定义结构变量intctime;zhu;zhum20,x20,n20;/定义数组为structzhu类型数
7、组,且三个数组分别储存添加后的数据,且表示花费m,起点n,和终点xtypedefintcostAdjMAX+1MAX+1;/定义图的邻接矩阵,并从1开始intPathMAX+1MAX+1;/路程矩阵,表示经过存放的点ktypedefstructunDiGraph(intnumV;/结点costAdjcost;/邻接矩阵unDiGraph,*UNG;chengchengtypedefstructcedit(chara10;cedit;ceditadd10;costAdjB,L;/功能一输出相应的城市信息intpr(inti,intj)/pr(inth=0;if(j=0)(h=i;elseif(j
8、=1)(cin>>addi.a;switch(h)case(0):cout<<""break;case(1) :cout<<”break;case(2) :cout<<”break;case(3) :cout<<”break;case(4) :cout<<”break;case(5) :cout<<”break;case(6) :cout<<”break;case(7) :cout<<”break;return1;voidpri()/声明pri函数表输出功能广州&qu
9、ot;上海徐州郑州西安北京函数,即利用pr函数输出代码为i的城市信息inti;cout<<"城市以及其代码"<<endl;cout<<"*"<<endl;for(i=1;i<=cnumber;i+)chengchengcout<<i<<"."pr(i.0);)cout<<"*''<<endl;)/构造CostG图,表示其费用unDiGraph*CreateCostG(into)/火车的花费的存贮和编辑功能(u
10、nDiGraph*G;inti;intj;/定义的i,j做循环变量inta=0,b=0,f=1,h=1;/f变量初始为1,h初始值为1,a=0,b=0临时表示开始城市代码以及目的城市代码if(!(G=(unDiGraph*)malloc(sizeof(unDiGraph)/为G图分配存储空间。(return(NULL);)for(i=1;i<=cnumber;i+)(for(j=1;j<=cnumber;j+)(G->costij=INF;/初始化矩阵cost每一项,使其无穷大)G->numV=cnumber;G->cost16=G->cost61=90;G
11、->cost12=G->cost21=84;G->cost23=G->cost32=51;G->cost25=G->cost52=67;G->cost34=G->cost43=53;G->cost45=G->cost54=40;G->cost47=G->cost74=88;G->cost56=G->cost65=90;G->cost57=G->cost75=67;G->cost67=G->cost76=60;if(o)(while(h=1)/h初始值为1(v=v+1;/V为全局静态变量,
12、初始值为0,v表示编辑的火车花费的组数,三个编辑数组中的存放代码chengchengpri();cout<<"火车花费编辑"<<endl;cout<<"请输入开始城市的代码"<<endl;cin>>a;cout<<”请输入目的城市的代码"<<endl;cin>>b;cout<<”请输入你的两地花费"<<endl;cin>>mv.ccost;nv.ccost=a;xv.ccost=b;cout<<
13、;"请选择"<<endl;cout<<"*”<<endl;cout<<"1:继续更改城市费用"<<endl;cout<<"0:返回上一级菜单"<<endl;cout<<"*”<<endl;cin>>h;switch(h)case1:h=1;break;case0:h=0;break;default:cout<<"选择出错"<<endl;f=v+1;/初始
14、定义变量f为1,全局变量v为0,即1=0+1while(v+)/v+代表的意思G->costnv.ccostxv.ccost=mv.ccost;v=f;return(G);/构造TimeG图,表示其花费时间unDiGraph*CreateTimeG(into)/火车的时间的存贮和编辑功能chengchengunDiGraph*G;inti,j;/循环变量为G分配存储空为无穷inta=0,b=0,f,h=1;/a,b表增加城市的代码if(!(G=(unDiGraph*)malloc(sizeof(unDiGraph)/o(return(NULL);for(i=1;i<=cnumber
15、+1;i+)(for(j=1;j<=cnumber+1;j+)(G->costij=INF;/初始化使G->costijG->numV=cnumber;G->cost16=G->cost61=9;G->cost12=G->cost21=8;G->cost23=G->cost32=5;G->cost25=G->cost52=3;G->cost34=G->cost43=5;G->cost45=G->cost54=4;G->cost47=G->cost75=6;G->cost56=G-&
16、gt;cost65=9;G->cost57=G->cost75=6;G->cost67=G->cost76=6;if(o)(while(h=1)(z=z+1;/全局静态变量,初始值为0.即1=0+1pri();cout<<”火车时间编辑"<<endl;cout<<"请输入开始城市的代码"<<endl;cin>>a;cout<<"请输入结尾城市的代码"<<endl;cin>>b;cout<<"请输入你的两地
17、时间"<<endl;cin>>mz.ctime;nz.ctime=a;xz.ctime=b;cout<<"请选择"<<endl;*”chengcheng<<endl;cout<<"1:继续更改城市时间"<<endl;cout<<"0:返回上一级菜单"<<endl;cout<<"*”<<endl;cin>>h;switch(h)case1:h=1;break;case0:h=
18、0;break;default:cout<<"选择出错"<<endl;f=z+1;/全局静态变量z,初始值为0while(z+)G->costnz.ctimexz.ctime=mz.ctime;z=f;return(G);/Floyed函数求任意两点的最短路径:voidFloyed(unDiGraph*D,unDiGraph*M)/图DMinti,j,k,n;/i,j为循环变量,k表中间节点的变量costAdjA,C;/AC为图,临时表示两种最佳路线组成的矩阵,定义costAdjBLn=cnumber;for(i=1;i<=n;i+)fo
19、r(j=1;j<=n;j+)Aij=D->costij;/初始化矩阵A,CoCij=M->costij;Path皿=-1;/初始化权矩阵pfor(k=1;k<=n;k+)/k为逐步加入的中间结点chengcheng(for(i=1;i<=n;i+)/i代表矩阵A中行号(for(j=1;j<=n;j+)(if(Aik+Akj<Aij)(Aij=Aik+Akj;Cij=Cik+Ckj;Pathij=k;/若i经过k到j比i到j小,则选择经过K个中间点之后,i,j两点的最佳路径。Bij=Aij;/构造AC两个任意节点上的最优路径所建造的矩阵,并分别赋给BL代
20、表时间与花费Lij=Cij;else(Bij=Aij;Lij=Cij;/endfor循环cout<<"n最短路径为:"<<endl;/end-Floyed/为了求从i至”的最短路径,只需要调用如下的过程:voidprn_pass(inti,intj)(.if(Pathij!=-1)(prn_pass(i,Pathij);/输出最短路径经过的所有点个数kpr(Pathij,0);/求最少时间路径。voidtime()(intBcity,Ecity;/起始成市号码和终点城市号码intl,h=1;/定义变量lhdopri();/输出城市列表及相应代码。co
21、ut<<”请输入起始城市和目的城市的代码,中间以空格隔开"<<endl;cin>>Bcity;cin>>Ecity;/输入起始城市和终点城市的代码。chengchengif(!(0<Bcity&&Bcity<cnumber+1)&&(0<Ecity&&Ecity<cnumber+1)&&Bcity!=Ecity)(cout<<"n出错啦!!输入城市号码请在1-7之间,且两城市代码不能相等!"<<endl;F
22、loyed(CreateTimeG(0),CreateCostG(0);调用Floyed函数。pr(Bcity,0);/显示起始城市。prn_pass(Bcity,Ecity);/调用prn_pass函数,显示最短路径经过的城市。pr(Ecity,0);/显示终点城市。if(BBcityEcity>8000|LBcityEcity>8000)(cout<<"两地间还没有线路通过"<<endl;else(cout<<"火车花的时间是"<<BBcityEcity<<"小时&qu
23、ot;<<endl;cout<<"输入0.返回主菜单"<<endl;scanf("%d",&l);/h=l;while(h=1);/求最少花费路径。voidmoney()(intBcity,Ecity;/起始成市号码和终点城市号码charl,h=1;dopri();/输出城市列表及相应代码。cout<<"请输入起始城市和目的城市的代码,中间以空格隔开"<<endl;cin>>Bcity;cin>>Ecity;/输入起始城市和终点城市的代码。if
24、(!(0<Bcity&&Bcity<cnumber+1)&&(0<Ecity&&Ecity<cnumber+1)&&Bcity!=Ecity)cout<<"n出错啦!!输入城市号码请在1-7之间,且两城市代码不能相等!"<<endl;/输入出错Floyed(CreateCostG(0),CreateTimeG(0);/调用Floyed函数。pr(Bcity,0);/显示起始城市。prn_pass(Bcity,Ecity);/调用prn_pass函数,显示最短路径经
25、过的城市。chengchengpr(Ecity,0);/显示终点城市。if(LBcityEcity>8000|BBcityEcity>8000)(cout<<"两地间还没有线路通过"<<endl;else(cout<<”火车花的钱是"<<BBcityEcity<<"元"<<endl;cout<<"输入0.返回主菜单"<<endl;scanf("%d",&l);/h=l;while(h=1);
26、voidadd_city()/对城市的增加(.staticinti=1;intj;cout<<"请输入你要增加的城市的个数"<<endl;cin>>j;for(i=1;i<=j;i+)(cout<<"请输入你要增加的城市名"<<endl;pr(i,1);/将添加的内容放置于add数组中,并以i为代码cnumber=cnumber+1;cout<<"城市增加完毕"<<endl;voidchose()/选择最少时间或最小花费(inth;cout<
27、;<"1:最小花费"<<endl;cout<<"2:最小时间"<<endl;cout<<"请选择:"<<endl;cin>>h;if(h=1)money();elsetime();voidedit_line()/增加编辑火车的费用chengchengCreateCostG(l);)voidedit_hour()/增加编辑火车的时间(.CreateTimeG(1);)voidadministrator()/管理员功能(inth=1;while(h)cout&l
28、t;<"*"<<endl;cout<<"1:增加城市"<<endl;cout<<"2:添加或编辑火车费用"<<endl;cout<<"3:添加或编辑火车时间"<<endl;cout<<"0:返回主菜单"<<endl;cout<<"*"<<endl;cout<<"请选择"<<endl;cin>
29、>h;switch(h)case 1 :add_city();break;case 2 edit_line();break;case3:edit_hour();break;case0:h=0;break;default:cout<<"选择出错!"<<endl;)/主函数voidmain()charn;intx;while(x!=0)chengcheng(cout<<endl;cout<<"输入你希望查询的种类代码,你将得到最佳方案!"<<endl;cout<<"*全国交通网络模拟系统*”<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- QC/T 1206.4-2026电动汽车动力蓄电池热管理系统第4部分:加热器
- 2026事业单位工勤技能-江西-江西下水道养护工五级(初级工)历年参考题库含答案详解3套试卷
- G6PD缺乏症的护理
- 《我的眼睛》学前教育健康领域说课稿
- 2026下半年小学教师资格证考试学科全真自测试卷及解析
- 心理疲劳的辨析与治疗
- 医院院长年度智慧医院建设与患者就医体验提升工作总结(3篇)
- 学校食堂大宗食材采购验收管理工作指引+中小学校“点餐日”活动方案
- 便秘人群健康调理
- 下肢血肿康复指导
- DB44-T 2350-2022 临床医疗输送运行管理规范
- 职工上下班途中交通安全培训
- 高二数学开学第一课(高教版2023修订版)-【开学第一课】2025年春季中职开学指南之爱上数学课
- 上海学前教育课程指南
- 先天性心脏病介入封堵术护理
- 现代(HYUNDAI)N300系列变频器使用说明书
- 人际交往与人际沟通
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- 彩钢板房安装合同
- 第二届北京市全民国防知识技能大赛知识考试总题库(含答案)
- 注射用艾普拉唑钠-临床用药解读
评论
0/150
提交评论