数据结构 交通模拟Word文件下载.docx
《数据结构 交通模拟Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构 交通模拟Word文件下载.docx(86页珍藏版)》请在冰豆网上搜索。
4.2.1初始化交通系统10
4.2.2城市编辑11
4.2.3飞机航班编辑12
4.2.4列车航班编辑13
4.3用户咨询14
4.3.1用户咨询界面14
4.3.2查询最小费用14
4.3.3最小时间15
4.3.4最少中转次数15
4.4显示交通系统16
4.4.1显示系统界面16
4.4.2.显示城市信息17
4.4.3显示飞机航班17
4.4.3显示列车车次18
第5章总结19
参考文献20
附录21
设计总说明
爱旅行交通咨询系统是人们出外旅行的一个好帮手。
旅客由于出行目的的不同对交通工具的要求也有不同。
例如,因公事出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。
为了能满足广大旅客的需求,方便旅客出行,就此编制一个全国城市间的交通咨询程序,为旅客提供两种或者三种最优决策的交通咨询。
爱旅行交通咨询系统主要提供交通路线的添加、查询、删除,经过分析,我们使用VC++6.0开发工具,我们通过实现城市的输入、删除及路线的增加删除等功能,进一步了解和学习数据结构的思想和理念;
而且该系统操作简单,简单易懂,避免了不熟悉计算机的人不会操作系统的麻烦。
通过该系统的演示,能够在今后的学习中更深入的了解图、树和队列的功能,在解决实际问题时灵活运用它们。
本设计可以对旅行航线进行查询,游客可按照自己的需求选择最少时间,最少费用及最少中转次数,方便自己出行。
关键词:
数据结构;
旅行路线最优选择;
全国交通咨询模拟系统
第1章绪论
1.1选题的背景
当今社会,旅行已经成为时尚。
不论你是走亲访友还是旅游,都离不开交通工具。
由于交通工具可选的种类很多,而且路线很多。
对于旅客来说,如何选择路线及车次就是一个至关重要的问题。
例如,因公事出差的旅客希望在旅途中的时间尽可能短,就不会对费用及中转次数有太大要求;
出门旅游的游客则希望旅费尽可能省,对时间及中转次数就没有太大要求。
而老年旅客则要求中转次数最少,方便省事。
在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种决策的选择。
决策是人们对各种情况的选择。
随着各种交通工具的出现及发展,如何决策是一个最重要的问题。
同时该系统利用计算机解决现实问题。
将现实问题用计算机编程解决。
计算机的使用辅助人们完成了那些烦琐的体力劳动和脑力劳动,使人们从劳动中解脱出来,我们所设计的《爱旅行交通咨询系统》就是可以给人提供决策,帮助人们选择最佳出行路线。
1.2目的和意义
目前人们对于出行有很多要求,如最少时间,最少花费,最少中转次数等。
因此对于每个人来说,因其不同需求,需要设计一个操作方便,功能实用,简单明了的交通咨询管理系统。
通过该题目的设计过程,可以加深理解图、树、队列、功能模块化、用户交互界面,掌握创造图等基本功能的实现,进一步理解和熟练掌握课本中所学的数据结构,学会如何把学到的知识用于解决实际问题,利于人们使用。
第2章系统总体设计
2.1题目要求
(1)提供对城市信息进行编辑(如:
添加或删除)的功能。
(2)城市之间有两种交通工具:
火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:
最快到达和最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:
最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
2.2系统功能结构图
图2.1系统功能结构
2.3功能需求分析
2.3.1管理员
管理员界面有5个选项:
初始化交通系统、城市编辑、飞机航班编辑、列车车次编辑、返回上一级菜单。
城市编辑、列车车次编辑和飞机航班编辑可对各个城市之间的飞机航线,火车航线增加或删除。
在城市编辑中只需输入城市名即可增加该城市,在飞机航班编辑、列车车次编辑中添加或删除交通路线需要输入起始站城市名、终点站城市名、选择交通工具、火车(飞机)编号、起飞时间、到达时间和票价。
返回上一级菜单是返回主界面。
输入的信息会分别写入city.txt,train.txt,plane.txt中,用户查询路线时可以从显示交通系统中查看。
2.3.2用户
用户界面有4个选项:
咨询最少旅行费用、咨询最少旅行时间、查询最少旅行中转次数、返回上一级菜单。
咨询最少旅行费用和咨询最少旅行时间是一个图的最短路径问题,因此用Dijkstra算法按路径长度递增的顺序逐步产生最短路径的方法。
2.3.3显示交通系统
查询城市所有路线需要输入所要查询的城市名和选择交通工具,可显示该城市中所选交通工具的所有路线及路线的起始到达时间、地点及费用。
第3章系统详细设计
3.1抽象数据类型
本程序运用了关于图这种数据结构。
ADTGraph{
数据对象V:
V是具有相同特性的数据元素的集合,称为顶点集。
数据关系R:
R={VR}
VR={<
v,w>
|v,w∈V且P(v,w),<
表示从v到w的弧。
谓词P(v,w)定义了弧<
的意义或信息}
基本操作P:
CreateGraph(&
G,V,VR);
初始条件:
V是图的顶点集,VR是图中弧的集合。
操作结果:
按V和VR的定义构造图G。
DestroyGraph(&
G);
图G存在。
销毁图G。
LocateVet(G,u);
图G存在,u和G中顶点有相同的特征。
若G中存在顶点u,则返回该顶点在图中的位置,
否则返回其他信息。
GetVex(G,v);
图G存在,v是G中某个顶点。
返回v的值。
PutVex(&
G,v,value);
对v赋值value。
FirstAdjVex(G,v);
返回v的第一个邻接顶点。
若顶点在G中没有邻接
顶点,则返回“空”。
NextAdjVex(G,v,w);
图G存在,v是G中某个顶点,w是v的邻接顶点,
返回v的(相对于w的)下一个邻接顶点。
若w是v
的最后一个邻接点,则返回“空”。
InsertVex(&
G,v);
图G存在,v和图中顶点有相同特征。
在图G中添加新顶点v。
DeleteVex(&
删除G中顶点v及相关弧。
InsertArc(&
G,v,w);
图G存在,v和w是G中两个顶点。
在G中增添弧<
,若G是无向的则还增加对称弧
<
w,w>
。
DeleteArc(&
在G中删除弧<
,若G是无向的,则还删除对称
弧<
w,v>
DFSTraverse(G,Visit());
图G存在,Visit是顶点的应用函数。
对图进行深度优先遍历。
在遍历过程中对每个顶点调用函
数Visit一次且仅一次。
一旦visit()失败,则操作失败。
BFSTraverse(G,Visit());
对图进行广度优先遍历。
}ADTGraph
3.2结构体定义
typedefstruct
{intnumber;
floatexpenditure;
intbegintime[2];
intarrivetime[2];
}Vehide;
{Vehidestata[MAX_ROUTE_NUM];
intlast;
}infolist;
typedefstructArcNode
{intadjvex;
structArcNode*nextarc;
infolistinfo;
}ArcNode;
typedefstructVNode
{charcityname[10];
ArcNode*planefirstarc,*trainfirstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
{AdjListvertices;
intvexnum,planearcnum,trainarcnum;
}ALGraph;
typedefstructNode
introute;
structNode*next;
}Node;
typedefstructQNode
structQNode*next;
}QNode;
{QNode*front;
QNode*rear;
}LinkQueue;
typedefstructTimeNode
structTimeNode*child[MAX_ROUTE_NUM];
}TimeNode,*TimeTree;
structarc
{intco;
charvt[10];
charvh[10];
intbt[2];
intat[2];
floatmo;
}a[MAX_ARC_SIZE];
3.3函数声明
voidAdminister(ALGraph*G);
voidcityedit(ALGraph*G);
voidCopyTimeTree(TimeTreep,TimeTreeq);
voidcreatecityfile();
voidCreateGraph(ALGraph*G);
voidcreateplanefile();
voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM]);
voidcreatetrainfile();
intDeleteplaneArc(ALGraph*G);
voidDeleteQueue(LinkQueue*Q,int*x);
intDeletetrainArc(ALGraph*G);
voidDeleteVertex(ALGraph*G);
voidDemandDispose(intn,ALGraphG);
voidDestoryTimeTree(TimeTreep);
voidEnterplaneArc(ALGraph*G);
voidEnterQueue(LinkQueue*Q,intx);
voidEntertrainArc(ALGraph*G);
voidEnterVertex(ALGraph*G);
voidExpenditureDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,float*M,int*final);
voidflightedit(ALGraph*G);
voidinitgraph(ALGraph*G);
voidInitQueue(LinkQueue*Q);
intIsEmpty(LinkQueue*Q);
intLocateVertex(ALGraph*G,char*v);
voidMinExpenditure(infolistarcs,float*expenditure,int*route);
voidMinTime(infolistarcs,int*time,int*route);
voidPrintGraph(ALGraph*G);
intsave(ALGraph*G);
voidTimeDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,int(*T)[2],int*final);
voidTimeTreeDispose(Node*head,infolist(*arcs)[MAX_VERTEX_NUM]);
voidtrainedit(ALGraph*G);
voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1);
voidUserDemand(ALGraphG);
voidVisitTimeTree(TimeTreep);
第4章编码和测试
4.1主界面
图4.1为主界面,按任意键即可进入下一界面。
图4.1主界面
图4.2为选择界面。
登录者可选择相应序号进入到自己所需的界面。
图4.2选择界面
4.2管理界面
图4.3为管理界面。
图4.3管理项目界面
4.2.1初始化交通系统
初始化交通系统示例如下。
图4.4初始化界面
4.2.2城市编辑
图4.5为城市编辑界面及增加城市操作。
图4.5城市编辑界面
加入“广州”和“哈尔滨”前:
图4.6加入前城市界面
加入后:
图4.7加入后城市界面
删除操作:
图4.8删除界面
删除“广州”后的结果:
图4.9删除后城市界面
4.2.3飞机航班编辑
图4.10为增加哈尔滨到上海的飞机航班操作。
图4.10飞机航班增加界面
图4.11飞机航班增加后界面
删除北京到上海的飞机航班操作:
图4.12飞机航班删除界面
删除前:
图4.13飞机航班删除前界面
删除后:
图4.14航班删除后界面
4.2.4列车航班编辑
图4.15为增加上海到哈尔滨的列车车次操作。
图4.15增加列车车次界面
增加前:
图4.16车次增加前界面
增加后:
图4.17车次增加后界面
删除北京到深圳的列车车次操作:
图4.18车次删除界面
图4.19车次删除前
图4.20车次删除后
4.3用户咨询
4.3.1用户咨询界面
图4.21为用户咨询界面,用户可从中查找最少旅行费用、时间及中转次数。
图4.21用户咨询界面
4.3.2查询最小费用
图4.22为北京到深圳的最少费用,最少费用为700元。
图4.22最小费用路线
4.3.3最小时间
图4.23为北京到天津的最少旅行时间,最少时间为30分钟。
图4.23最少旅行时间路线
4.3.4最少中转次数
图4.24为北京到天津的飞机航班中转次数最少的路线:
北京——上海,上海——天津。
图4.24最少中转次数
4.4显示交通系统
4.4.1显示系统界面
图4.25为显示系统界面,用户可从中查出系统中的城市、飞机航班、列车车次信息。
图4.25显示交通路线界面
4.4.2.显示城市信息
图4.26显示系统中的城市信息。
图4.26城市信息
4.4.3显示飞机航班
图4.27显示系统中的航班信息。
图4.27飞机航班信息
4.4.3显示列车车次
图4.28显示系统列车车次信息。
图4.28列车车次信息
第5章总结
在此次为期一周的课程设计中,我们的课题名称是交通咨询模拟系统。
我们完成了对各个城市交通路线的管理和用户咨询的功能设计。
用户可进入系统查询最少旅行时间,最少旅行费用及最少中转次数来选择最佳决策。
通过此次课程设计大大加深了我们对数据结构这门课程的理解,尤其对图、树、队列这章的理解,可以说有一个很大的进步,学习能力也大大提高。
通过此次课设也为我以后的道路奠定了一定的基础,认识到了基础的重要。
本次课程设计所使用的是较为复杂的抽象数据类型——图,而且在弧的基础上增加了许多信息,如添加了时间,费用等等,这无疑给编程加大了难度,同时也是相当的具有挑战性。
而且最短路径的算法也用了不少时间才有了更深的理解。
但功夫不负有心人,查阅了有关书籍后我们最终顺利得解决了困难。
在编程的过程中,我用到了全局数组,我将数组放在工程的头文件里面,编译的时候报错,说是多重定义。
最终放弃了创建工程,而选择了单个文件进行编译和运行,结果顺利通过。
同时,在文件操作方面我也曾遇到问题,就是在程序对文件进行读取的时候报错,无法读取文件,最后查询有关C的工具书,原来是文件路径问题,借助工具书最终解决了文件操作方面的问题。
此外,本次课设与以往不同的是以小组形式进行。
通过团队合作,我们认识到了团队的重要性。
在课设中,我们三人分工合作,遇到问题相互讨论,积极提出自己的观点及看法,尽力使我们的系统功能更完善。
总之,这次课程设计是对这一个学期以来对数据结构学习成果的一个验证,同时也是理论与实践很好的结合,既对学过的数据结构进行了巩固,也对我的编程能力奠定了坚实的基础。
任何困难我们相信都可以克服与攻坚。
参考文献
[1]谭浩强等.C程序设计.北京:
清华大学出版社,2005
[2]朱战立.数据结构—使用c语言.北京:
电子工业出版社出版社,2011
[3]李春葆.数据结构程序设计题典.北京:
清华大学出版社,2002
[4]徐孝凯.数据结构课程实验.北京:
附录
intmain()
{
ALGraphG;
system("
color9F"
);
inti;
printf("
\n\n\n\n\n\n\n"
**********************************************************************\n"
*****************欢迎来到******************\n"
*****************爱旅行交通咨询系统********************\n"
Welcome……"
getchar();
cls"
\n\n\n\n\n\n\n请选择程序功能\n"
*************************************\n"
**1=管理员管理**\n"
**2=用户咨询**\n"
**3=显示交通系统**\n"
**4=退出**\n"
选择"
scanf("
%d"
&
i);
while(i!
=4)
{
switch(i){
case1:
Administer(&
break;
case2:
UserDemand(G);
case3:
PrintGraph(&
}
\n\n\n\n\n\n\n\n请选择程序功能:
\n"
return1;
}
voidAdminister(ALGraph*G)
\n\n\n\n\n\n\n\n请选择管理项目\n"
**1=初始化交通系统**\n"
**