全国交通咨询模拟

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构课程设计报告题目:全国交通咨询模拟学院信息专业计算机科学与技术年级班别计科0902学号0912300213学生姓名陈佳丽指导教师章志勇一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种最优决策:最快到达或最省钱到达。2.明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。可以对城市、列车车次和飞机航班进行编辑,添加或删除。b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。c.初始化交通系统有两种方式,键盘和文档。二.设计概要1.抽象数据类型本程序运用了关于图这种数据结构。ADTGraph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。数据关系R:R={VR}VR={v,w|v,w∈V且P(v,w),v,w表示从v到w的弧。谓词P(v,w)定义了弧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);初始条件:图G存在,v是G中某个顶点。操作结果:对v赋值value。FirstAdjVex(G,v);初始条件:图G存在,v是G中某个顶点。操作结果:返回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);初始条件:图G存在,v是G中某个顶点。操作结果:删除G中顶点v及相关弧。InsertArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中增添弧v,w,若G是无向的则还增加对称弧w,w。DeleteArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中删除弧v,w,若G是无向的,则还删除对称弧w,v。DFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行深度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。BFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。}ADTGraph其他的抽象数据类型定义如下:typedefstruct{intnumber;floatexpenditure;intbegintime[2];intarrivetime[2];}Vehide;typedefstruct{Vehidestata[MAX_ROUTE_NUM];intlast;}infolist;typedefstructArcNode{intadjvex;structArcNode*nextarc;infolistinfo;}ArcNode;typedefstructVNode{charcityname[10];ArcNode*planefirstarc,*trainfirstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedefstruct{AdjListvertices;intvexnum,planearcnum,trainarcnum;}ALGraph;typedefstructNode{intadjvex;introute;structNode*next;}Node;typedefstructQNode{intadjvex;structQNode*next;}QNode;typedefstruct{QNode*front;QNode*rear;}LinkQueue;typedefstructTimeNode{intadjvex;introute;intbegintime[2];intarrivetime[2];structTimeNode*child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;structarc{intco;charvt[10];charvh[10];intbt[2];intat[2];floatmo;}a[MAX_ARC_SIZE];基本操作: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);主程序的流程以及各程序模块之间的调用关系主函数main()管理员管理Administer用户咨询UserDemand显示交通系统PrintGraph退出管理员管理Administer城市编辑cityedit飞机航班编辑Administer列车车次编辑Administer返回上一级菜单初始化交通系统initgraph用户咨询UserDemand最少旅行时间TimeDispose最少中转次数TransferDispose返回上一级菜单最少旅行费用ExpenditureDisposeUserDemand显示交通系统PrintGraph返回上一级菜单显示列车车次显示飞机航班显示城市初始化交通系统initgraph键盘文档三.详细设计1.主程序伪代码intmain(){界面初始化;输入操作命令;While(“命令”!=“退出”){接受命令(用户输入要实现功能);进入各个处理命令函数;}}2.函数和过程的调用关系图城市编辑cityedit新增城市删除城市飞机航班编辑planeedit新增航班删除航班火车列次编辑trainedit新增车次删除车次flighteditcreatecityfileDeleteVertextraineditEnterVertexPrintGraphUserDemandAdministercityeditinitgraphCreateGraphcreatetrainfilecreateplanefileExpenditureDisposeMinExpenditureTimeDisposeTransferDisposeDeletetrainArcEntertrainArcDeleteplaneArcEnterplaneArcTimeTreeDisposeMinTimeInitQueueEnterQueueDeleteQueueMain()四.调试分析:⑴调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:在调试的过程中碰到了一下问题:a.引用形参应用不当;b.文件操作中遇到读入错误或找不到文件;解决方案:a.对引用形参了解的不是很透彻,导致错误,通过查阅相关书籍如《C++Primer》和请教编程能力较高的人,最终解决问题。b.通过参考谭浩强编著的《C程序设计》中的文件操作,文件格式和相关文件路径的设置,最终解决问题。⑵算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想:基本操作时间复杂度空间复杂度voidAdminister(ALGraph*G)O(1)O(1)voidcityedit(ALGraph*G)O(n)O(n)voidCopyTimeTree(TimeTreep,TimeTreeq)O(n)O(1)voidcreatecityfile()O(n)O(n)voidCreateGraph(ALGraph*G)O(n)O(n)voidcreateplanefile()O(1)O(1)voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM])O(n)O(n)vo

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功