交通咨询系统设计

合集下载

交通咨询系统设计课程设计

交通咨询系统设计课程设计

课程设计报告课程名称数据结构课题名称交通咨询系统设计专业信息管理与信息系统班级学号姓名指导教师2013 年12月31 日一、设计内容与设计要求1设计内容[问题描述] 在交通网络非常发达的今天,人们出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也很感兴趣。

对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市,边表示城市之间的交通关系。

设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到达另外一个城市顶点之间的最短路径(里程)的问题。

[基本功能]1).根据实际情况,先建立交通网络图的存储结构。

2).求某个城市到达其余各城市的最短路径。

3).任一输入两个城市,要求求出他们之间的最短路径。

2设计要求:1).设计正确,方案合理。

2).界面友好,使用方便。

3).程序精炼,结构清晰。

4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。

5).实际操作过程中遇到的问题及解决方法:设计总结及心得体会。

6).上机演示。

二、进度安排第 17 周星期二 8时:00分——11时:30分星期三 8时:00分——11时:30分星期四 14时:00分——17时:30分星期五 8时:00分——11时:30分第 18 周星期一 8时:00分——11时:30分星期二 8时:00分——11时:30分附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的源代码,要求对程序写出必要的注释)。

正文总字数要求在5000字以上(不含程序源代码)。

大数据结构课程设计交通咨询系统设计

大数据结构课程设计交通咨询系统设计

适用标准文案设计题目<二>:交通咨询系统设计P160一、设计要求1.问题描绘依据不一样目的的游客对交通工拥有不一样的要求。

比如,因公出差的游客希望在旅途中的时间尽可能的短,出门旅游的游客希望旅费尽可能的少,而老年人则要求中转次数少。

模拟一个全国城市之间的咨询交通程序,为游客供给两种或三种最优的交通路线。

2.需求剖析二、纲要设计1.主界面设计(图“交通咨询系统”主菜单)2.储存构造设计本系统采纳图构造种类储存抽象交通咨询系统的信息。

typedefstructTrafficNode{charname[MAX_STRING_NUM];//班次//MAX_STRING_NUM 最为10intStartTime,StopTime;//起止时间intEndCity;//该有向边指向的极点在数组中的地点,即该城市编号intCost;//票价出色文档}TrafficNodeDat;typedefstructVNode{CityTypecity;intTrainNum,FlightNum;//标志下边Train数组和Flight数组里元素个数TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//数构成员为构造体,记录了到达城市、起止时间、票价和班次TrafficNodeDatFlight[MAX_TRAFFIC_NUM];intCost;//遍历时抵达该城市的耗资(时间或许花费)}VNodeDat;typedefstructPNode{intCity;intTraNo;}PNodeDat;3.系统功能设计1)增添城市。

增添一个城市的名称2)删除城市。

输入一个城市名称,删除该城市。

3)增添交通路线。

输入开端城市、终点城市、航班或火车、车次、开端时间、终点时间和票价4)删除交通路线。

输入火车或飞机的班次删除该交通路线。

5)查问最小花费路线。

输入开端城市、终点城市、航班或火车、车次、开端时间、终点时间查问最小花费路线。

数据结构课程设计—城市道路交通咨询系统

数据结构课程设计—城市道路交通咨询系统

榆林学院数据结构课程设计报告题目城市交通咨询系统作者杨朝专业信息管理与信息系统学号指导老师张慧答辩时间目录1 .系统需求分析 (1)用户需求分析 (1)功能需求分析 (2)数据需求分析 (2)小结 (3)2.系统设计 (3)系统设计功能 (3)每个模块的具体功能。

(4)采用C语言定义相关数据类型 (4)建立邻接矩阵交通网络: (4)查询指定城市到其他城市自己建的最短路程: (6)查询任意两个城市之间的一条最短路径: (7)主函数的调用关系图 (8)3.系统测试 (9)操作说明 (9)测试数据 (10)用户进入界面: (10)、具体功能的实现 (11)、结束程序 (12)4.总结 (13)5.致谢 (13)6.附录 (14)1.系统需求分析现如今网络非常发达,无论人们出差,旅游或者做其他的出行之时,都会想到道路问题,切不仅仅关心的是交通费用,而且对于里程和所需要的时间等的问题也是同样的关心,在此系统中,完全面向用户,可以用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

且在图中,顶点表示城市,边表示城市之间的交通关系。

设计一个交通咨询系统,能够让旅客咨询从任一城市顶点到达另外一个城市之间顶点的最短路径问题(最短里程问题)。

对系统分析,主要从以下几个方面进行分析。

1.用户需求分析2.功能需求分析3.数据需求分析用户需求分析现如今网络非常发达,无论人们出差,旅游或者做其他的出行之时,都会想到道路问题,切不仅仅关心的是交通费用,而且对于里程和所需要的时间等的问题也是同样的关心,在此系统中,完全面向用户,可以用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

且在图中,顶点表示城市,边表示城市之间的交通关系。

设计一个交通咨询系统,能够让旅客咨询从任一城市顶点到达另外一个城市之间顶点的最短路径问题(最短里程问题)。

当要查询某两个城市之间的最短交通路线或者其中一个城市到达其余城市的最短路线时,是一个很繁琐的过程。

大数据结构课程设计交通咨询系统设计

大数据结构课程设计交通咨询系统设计

设计题目<二>:交通咨询系统设计P160 一、设计要求 1 .问题描述根据不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。

模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。

2.需求分析二、概要设计1.主界面设计(图“交通咨询系统”主菜单)2.存储结构设计本系统采用图结构类型存储抽象交通咨询系统的信息typedef struct TrafficNodetmp = k;}printf("%s", AdjList[track[i]].Train[tmp].name);pri ntf("%2d:%2d-%2d:%2d",AdjList[track[i]].Trai n[tmp].StartTime / 60,AdjList[track[i]].Train[tmp].StartTime % 60,AdjList[track[i]].Trai n[tmp].StopTime / 60,AdjList[track[i]].Trai n[tmp].StopTime % 60);else{for (i--; i>0; i--) um;[k++)ghar name[MAX_STRlNG_NUM];jajnN{printf("\n%s:", CityName[track[i]]);end = track[i - 1]; min = 32767;for (k = 0; k<AdjList[track[i]].FlightNum; k++)if (AdjList[track[i]].Train[k].EndCity ==end&&min>AdjList[track[i]].Flight[k].Cost){min = AdjList[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].StopTime % 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]; 添加城市在主菜单下,用户输入 1,添加城市名称(图添加城市)2.删除城市在主菜单下,用户输入2,删除已添加城市名称(图删除城市)3.添加交通路线在主菜单下,用户输入3,已添加城市名称。

交通咨询系统 C语言【范本模板】

交通咨询系统 C语言【范本模板】

CHINA交通咨询系统目录一、需求分析 (2)1、程序的功能及设计要求 (2)2、输入输出的要求 (2)二、环境说明 (2)三、详细设计 (3)1、模块设计 (3)2、画出各函数的调用关系图、主要函数的流程图。

(3)2、详细代码 (4)四、调试分析 (4)1、测试数据: (4)2、借鉴的资料 (5)五、课程总结 (6)六、附录 (6)一、需求分析1、程序的功能及设计要求在交通网络非常发达、交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也感兴趣.对于这样一个人们关心的问题,通过建立交通网络图的存储结构图,提供用户查询的功能,功能一:通过输入城市名及任意两个城市的距离,查询任意两个城市之间的最短距离,从而达到最省目的;功能二:通过输入城市名以及任意两个程序的距离,查询中转路线最少。

程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询,可以通过输入设置,延续程序的拓展性。

设计要求及分析设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的中转次数最少问题或最低花费或最少时间(最短路径)问题。

该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。

1。

建立交通网络图的存储结构要实现设计要求,首先要定义交通图的存储结构:邻接链表和邻接矩阵;2。

解决任意两个城市顶点之间的中转次数最少的问题;3. 解决任意两个城市顶点之间的最短路径(最低花费或最少时间)问题。

2、输入输出的要求定义变量类型应该保持类型一致,通过键盘输入,确保输入输出一致,使最短路径途径以及最短路径能够简单明了的输出,同时保持程序简洁美观,效果明显。

输入要求为输入界面直观、亲切;有利于快速输入;有利于准确输入;有利于输入、修改;方便操作。

输出要求:输出要求应简单、直观,一目了然,尽量符合用户的习惯,便于用户阅读、理解与使用.输出内容应尽量汉字化,从而使输出格式醒目;各种输出设计要长考虑以利于系统发展和输出项目扩充、变动的需要;输出操作方便二、环境说明系统:WINDOS7开发软件:vc6+三、详细设计1、模块设计交通咨询系统模块图如下由模块图可知,该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。

交通咨询程设计

交通咨询程设计

交通咨询系统(一)需求分析设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。

本程序主要目的是为了给用户提供路径咨询。

实现了帮助用户了解全国各大城市间往来的最短路径问题,可以提供用户查询各大城市的相关信息。

本程序最大的特点是支持用户自己添加城市信息及城市,或添加城市的路径,既有可扩展性。

该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。

此程序规定:(1)在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。

(2)程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

(3)程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。

.1题目分析1.由题目的分析知全国交通咨询管理系统是有对城市信息的增加、删除、修改、保存、查询、有错时提示出错信息等功能,最后对数据进行保存并退出操作系统。

由此可知需要将函数模块化,将它做为一个独立的函数体去实现它的功能。

它可以分为四大功能模块,每个模块需要去各个击破。

2.根据这些功能和基本要求,可充分运用我们所学的数据结构的基本知识和技能去逐步的解决。

其中将函数进行模块化。

在数据结构中,通过队列,栈,图的声明来实现系统的各种功能的存储各城市之间乘火车的消耗价格,时间,乘飞机的价格,时间,以及中转站最少。

利用指针和结点来实现城市与城市之间各种操作,而这些知识点都是我们学习数据结构必须掌握和学会运用的。

数据结构课程设计全国交通咨询系统

数据结构课程设计全国交通咨询系统

数据结构课程设计全国交通咨询系统数据结构课程设计全国交通咨询系统随着交通工具的快速发展,现代人的出行方式更加灵活便捷,交通行业也变得越来越重要。

然而,随之而来的交通拥堵、安全问题和出行效率等问题亟待解决。

因此,交通咨询系统的开发应运而生。

本文介绍一个数据结构课程设计项目——全国交通咨询系统,该系统旨在为用户提供便捷、全面的交通出行信息和服务。

该系统主要包括以下方面的功能:1. 城市选择及路线查询功能用户可选择目的地城市,系统将返回该城市的基本信息,以及从用户当前位置到目的地的交通路线和方案,并提供相应的时间和费用信息。

2. 交通工具查询功能用户可在系统中查询各种交通工具的班次、价格、车次和到达时间等相关信息,以便用户做出最优出行方案。

3. 路况信息查询该系统可实时获取交通状况信息,并展示给用户最新的路况信息。

此外,当用户选择出行方式时,系统可根据实时路况为用户提供最佳出行方案。

4. 预订和购票该系统可为用户提供方便的预订和购票服务。

用户可在线预订和购买机票、火车票和长途汽车票等交通工具,并选择合适的座位和时间。

5. 旅游景点推荐功能该系统可根据用户的出行方案提供适宜的旅游景点推荐。

用户可在系统中了解这些景点的详细信息和交通时间,以便更好地规划自己的行程。

该全国交通咨询系统的实现需要多种数据结构的支持,例如图、树、堆栈、链表、哈希表等。

下面分别讨论每个功能的实现方法和相关数据结构。

1. 城市选择及路线查询功能城市选择及路线查询功能需要通过图的遍历来实现。

图是由顶点和边组成的集合,可以用来表示城市及它们之间的相互关系。

在本系统中,每个城市可以看做一个顶点,每条连接两个城市的路径被视为一条边。

为了实现城市选择及路线查询功能,需要对图进行遍历。

在这个系统中,广度优先搜索算法(BFS)是最佳选择,因为BFS可以给出最近的解决方案。

2. 交通工具查询功能交通工具查询功能需要通过树来实现。

树是由节点和边组成的集合,可以用来表示各种结构化数据。

交通咨询模拟系统课程设计

交通咨询模拟系统课程设计

交通咨询模拟系统课程设计一、课程目标知识目标:1. 让学生掌握交通咨询模拟系统的基本原理和功能。

2. 引导学生了解交通咨询模拟系统在实际生活中的应用。

3. 帮助学生理解并掌握交通流量的数据分析方法。

技能目标:1. 培养学生运用所学知识设计和搭建简单的交通咨询模拟系统的能力。

2. 提高学生分析交通数据,提出合理解决方案的能力。

3. 培养学生团队协作和沟通表达的能力。

情感态度价值观目标:1. 激发学生对交通咨询模拟系统相关领域的兴趣,培养探究精神。

2. 培养学生关注社会交通问题,认识到科技在解决交通问题中的重要性。

3. 引导学生树立正确的价值观,关注交通安全,提高社会责任感。

课程性质:本课程为实践性较强的课程,以项目式教学为主,结合理论讲解和实际操作。

学生特点:学生为初中生,具备一定的信息技术基础,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:教师需关注学生个体差异,提供针对性的指导,鼓励学生积极参与讨论和实践,注重培养学生的学习兴趣和动手能力。

通过本课程的学习,使学生能够将所学知识应用于实际生活中,提高解决实际问题的能力。

二、教学内容1. 交通咨询模拟系统概述- 交通咨询模拟系统的定义与作用- 交通咨询模拟系统的发展与应用2. 交通咨询模拟系统的基本原理- 交通流量的基本概念- 交通流量的数据分析方法- 交通咨询模拟系统的构建原理3. 交通咨询模拟系统的设计与实现- 系统设计的基本流程与方法- 系统实现的工具与技术- 系统测试与优化4. 实践项目:设计一个简单的交通咨询模拟系统- 项目目标与要求- 项目实施步骤与方法- 项目成果展示与评价5. 交通咨询模拟系统在实际生活中的应用案例- 城市交通拥堵解决方案- 公共交通优化- 紧急救援路径规划教学内容安排与进度:第1课时:交通咨询模拟系统概述第2课时:交通咨询模拟系统的基本原理第3课时:交通咨询模拟系统的设计与实现(上)第4课时:交通咨询模拟系统的设计与实现(下)第5课时:实践项目:设计一个简单的交通咨询模拟系统第6课时:交通咨询模拟系统在实际生活中的应用案例教学内容与教材关联性:本教学内容紧密结合教材中关于信息技术应用、数据分析、系统设计等相关章节,确保学生能够学以致用,提高解决实际问题的能力。

全国交通咨询系统设计

全国交通咨询系统设计

/* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市*出发到另一个城市所需的最短的时间及路径。

**建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市*出发到另一个城市所需的最短的时间及路径。

* */#defi ne MAX_VERTEX_NUM 18#defi ne NULL 0#defi ne MAX_ARC_SIZE 100#defi ne MAX_ROUTE_NUM 5#i nclude"stdio.h"#i nclude"stdlib.h"#i nclude"stri ng.h"#defi ne False 0#defi ne True 1#define INFINITY 10000 /* 预定义*/ typedef struct {int nu mber;float expe nditure;int begi ntime[2];int arrivetime[2];}Vehide;typedef struct {Vehide stata[MAX_ROUTE_NUM];int last;}in folist;typedef struct ArcNode {int adjvex;struct ArcNode *n extarc;in folist info;}ArcNode;typedef struct VNode {char cit yn ame[10];ArcNode *pla nefirstarc,*tra in firstarc; }VNode,AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vex nu m,pla nearc nu m,tra inarcnum; }ALGraph;typedef struct Node {int adjvex;int route;struct Node *n ext;}Node;typedef struct QNode {int adjvex;struct QNode *n ext;}QNode;typedef struct {QNode *front;QNode *rear;}Lin kQueue;typedef struct TimeNode {int adjvex;int route;int begi ntime[2];int arrivetime[2];struct TimeNode *child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;struct arc {int co;char vt[10];char vh[10];int bt[2];int at[2];float mo;}a[MAX_ARC_SIZE]; /* 数据结构定义*/ char city[MAX_VERTEX_NUM][10];int TTime[2];int time[2];int time1[2];int time2[2];in t c[MAX_VERTEX_NUM];int d[MAX_VERTEX_NUM]; /* 变量定义*//*各种操作说明*/void Disp();void Admi nister(ALGraph *G);void cityedit(ALGraph *G);void CopyTimeTree(TimeTree p,TimeTree q); void createcityfile();void CreateGraph(ALGraph *G);void createpla nefile();void CreateTimeTree(TimeTree p,i nt i,i nt j,L in kQueue *Q,i nfolist (*arcs)[MAX_VERTEX_NUM]);void createtra in file();int Deletepla neArc(ALGraph *G);void DeleteQueue(Li nkQueue *Q,i nt *x);int DeletetrainArc(ALGraph *G);void DeleteVertex(ALGraph *G);void Dema ndDispose(i nt n ,ALGraph G);void DestoryTimeTree(TimeTree p);void En terpla neArc(ALGraph *G);void En terQueue(L in kQueue *Q,i nt x);void En tertrainArc(ALGraph *G);void En terVertex(ALGraph *G);void Expe nditureDispose(i nt k,i nfolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,i nt vO,i nt v1,float *M,i nt *fin al);void flightedit(ALGraph *G);void in itgraph(ALGraph *G);void In itQueue(L in kQueue *Q);int IsEmpty(L in kQueue *Q);int LocateVertex(ALGraph *G,char *v);void Min Expe nditure(i nfolist arcs,float *expe nditure,i nt *route);void Mi nTime(i nfolist arcs,i nt *time,i nt *route);void Prin tGraph(ALGraph *G);int save(ALGraph *G);void TimeDispose(i nt k,i nfolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,i nt v0,i nt v1,i nt (*T)[2],i nt *fin al);void TimeTreeDispose(Node *head,i nfolist (*arcs)[MAX_VERTEX_NUM]);void trai nedit(ALGraph *G);void TransferDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraphG,int v0,i nt v1);void UserDema nd(ALGraph G);void VisitTimeTree(TimeTree p);void Disp() /* 软件入口,显示函数*/{textbackgro un d(7);textcolor(5);gotoxy(20,10);printf(" ------------------------------ \n");gotoxy(20,11);printf("| 交通咨询系统Version 1.0 |\n"); gotoxy(20,12); prin tf("| |\n");gotoxy(20,13);printf("| 一叶方舟|\n");gotoxy(20,14);prin tf("| |\n");gotoxy(20,15);printf(" ------------------------------ \n");gotoxy(40,20);printf("A_A欢迎使用A_A");sleep(3);clrscr();}int main()/* 主函数,程序入口*//*显示程序功能选择界面*/ {ALGraph G;int i;textbackgro un d(7); textcolor(5); clrscr();Disp();printf(" 请选择程序功能:\n");printf( “*************************************\n"); printf("** 1= 管理员管理**\n");printf("** 2= 用户咨询**\n");printf("** 3= 显示交通系统**\n");printf("** 4= 退出**\n");printf( H************************************ *\n"); printf("请选择?");sca nf("%d",&i);getchar();while(i!=4){clrscr();switch(i){case 1:Administer(&G);break;case 2:UserDemand(G); break;case 3:PrintGraph(&G);break;prin tf("\n 请选择程序功能:\n");printf( H************************************* \n");printf("** 1= 管理员管理**\n");printf("** 2= 用户咨询**\n");printf("** 3= 显示交通系统**\n");prin tf("** 4= 退出**\n");printf( H************************************* \n");prin tf("选择?");sca nf("%d",&i);getchar();}clrscr();gotoxy(20,10);printf(" ------------------------------ \n");gotoxy(20,11);prin tf("| 指导老师:夏汉民老师|\n");gotoxy(20,12);prin tf("| |\n");gotoxy(20,13);printf("| 制作:李济舟|\n");gotoxy(20,14);prin tf("| |\n");gotoxy(20,15);printf(" ------------------------------ \n");gotoxy(40,20);printf(" 谢谢使用");sleep(1);gotoxy(40,20);printf(" 正在退出");for(i=0;i<3;i++){ pri ntf(".");sleep(i);}return 0;void Admi nister(ALGraph *G) /* 显示管理员管理项目选择界面*/{int i,j=O;char password[5];be:clrscr();gotoxy(20,10);printf(" ----------------------------------- \n");gotoxy(20,11);prin tf("| 管理员管理项目|\n");gotoxy(20,13);printf("| 1. 初始化交通系统|\n");gotoxy(20,15);printf("| 2. 城市编辑|\n");gotoxy(20,17);printf("| 3. 飞机航班编辑|\n");gotoxy(20,19);printf("| 4. 列车车次编辑|\n");gotoxy(20,20);printf(" ----------------------------------- \n");gotoxy(40,25);printf(”请输入登陆密码(admin): ”);for(i=0;i<5;i++){password[i]=getch();prin tf("*");} if(password[0]!='a'||password[1]!='d'||password[2]!='m'||password[3]!='i'||password[4]!=' n') {gotoxy(50,25);printf(" 输入错误,请重新输入!");j++;if(j==3)system(exit);getch();goto be;}printf("\n 请选择管理项目:\n");printf("1= 初始化交通系统\n2=城市编辑\n3=飞机航班编辑\n4=列车车次编辑\n5= 返回上一级菜单\n");printf("选择?");sca nf("%d",&i);while(i!=5)printf ("1= 初始化交通系统\n2=城市编辑\n3=飞机航班编辑\n4=列车车次编辑 \n5=返回上一级菜单\n");printf (” 选择?");sca nf("%d",&i);}}void initgraph(ALGraph *G) /* 初始化交通系统 *//*初始化交通系统方式选择界面 */{int i;printf("\n 请选择初始化方式:\n");prin tf("1=键盘 \n2=文档 \n");printf("选择?");sca nf("%d",&i);getchar();switch(i){case 1:createcityfile();createpla nefile();createtrai nfile();CreateGraph(G);break;case 2:CreateGraph(G); switch(i)case 1:i nitgraph(G); /* case 2:cityedit(G); /* case 3:flightedit(G); /* case 4:trai nedit(G); /* 初始化交通系统*/ break城市编辑*/ break;飞机航班编辑*/ break;列车车次编辑*/ break;}printf ("\n 请选择管理项目:\n");printf( H************************************* \n");printf("** 1= 初始化交通系统 **\n"); printf("** 2= printf("** 3= 飞机航班编辑 **\n");printf("** 4= 列车车次编辑 **\n");printf("** 5= 返回上一级菜单 **\n");城市编辑**\n");printf( H ************************************ *\n");break;}}void createcityfile()/* 创建城市名称文档*/{int i=0;int j;char flag二'y:FILE *fp;prin tf("\n 请输入城市名称的信息:\n");while(flag=='y'||flag=='Y'){printf(" 城市名称:");gets(city[i]);i++;printf("继续输入?(Y/N)");sca nf("%c", &flag);getchar();}prin tf("\n");if((fp=fope n( "city.txt","wb"))==NULL){printf(" 无法打开文件!\n");return;}for(j=0;j<i;j++)fprin tf(fp,"%10s",city[j]);fclose(fp);}void createpla nefile() /* 创建飞机航班文档*/ {in t code,bt[2],at[2]; /*code float mon ey;int i;int count;char vt[10],vh[10],flag; /*vt FILE *fp;flag二'y';coun t=0;while(flag=='Y '||flag=='y') /*flag 航班编号,bt出发时间,at到达时间*/起始城市,vh目标城市*/为标志位,初值为1*/{prin tf(" 请输入飞机航班的信息::");/* 输入航班code*/ 输入航班的出发城市vt*/ 输入航班的到达城市vh*/ 输入机票价格 money*/ 输入航班的出发时间bt*/ sca nf("%d:%d",&bt[O],&bt[1]); getchar(); while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n 时间输入有误,请重新输入\n");sca nf("%d:%d",&bt[0],&bt[1]);getchar();}printf (” 到达时间:");/* 输入航班的到达时间at*/ sca nf("%d:%d",&at[0], &at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n 时间输入有误,请重新输入\n");sca nf("%d:%d",&at[0], &at[1]);getchar();}a[count].co 二code; /*a 为程序头部定义的结构体*/ strcpy(a[co un t].vt,vt);strcpy(a[co un t].vh,vh);a[cou nt].bt[0]=bt[0];a[cou nt].bt[1]=bt[1];a[cou nt].at[0]=at[0];a[cou nt].at[1]=at[1];a[co un t].mo 二mon ey;count++; /* 计数值 count+1*/printf(" 继续输入?(Y/N)"); /* 提示"是否要继续输入航班信息: sca nf("%c", &flag);getchar();prin tf("\n"); /*提示"输入航班信息"*/ prin tf(" 飞机航班编号sea nf("%d",&code);getchar(); printf("起始城市:");/*gets(vt);getchar(); printf("目的城市:");/*gets(vh); printf("航班费用:");/* seanf("%f",&mon ey); getchar(); printf("起飞时间:");/*"*/if((fp二fope n("pla ne.txt","wb"))==NULL) /* 航班文件不能以读写形式打开*/ printf("\n 无法打开文件!\n"); /* 提示"无法打开文件"*/fprintf(fp,"%d",count); /* 将计数值count写入航班车文件*/for(i=0;i<co un t;i++)if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1) /* 无法将a[i]写入航班文件*/ printf("\n 文件写入错误!\n"); /* 提示"文件无法写入"*/fclose(fp); /* 关闭航班文件*/}void createtrai nfile() /* 创建列车车次文档*/{in t code,bt[2],at[2];float mon ey;int i;int count;char vt[10],vh[10],flag;FILE *fp;flag='y';coun t=0;while(flag=='y'||flag=='Y'){printf(" 请输入列车车次的信息:\n");printf(" 列车车次编号:");sca nf("%d",&code);getchar();printf(" 起始城市:");gets(vt);getchar();printf(" 目的城市:");gets(vh);printf(" 车次费用:");sca nf("%f",&mon ey);getchar();printf(" 发车时间:");sca nf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n 时间输入有误,请重新输入\n");sca nf("%d:%d",&bt[0],&bt[1]);getchar();}printf(" 到达时间:");sca nf("%d:%d", &at[0], &at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]v0||at[1]>=60){printf("\n 时间输入有误,请重新输入\n");sca nf("%d:%d",&at[0], &at[1]);getchar();}a[co un t].co二code;strcpy(a[co un t].vt,vt);strcpy(a[co un t].vh,vh);a[cou nt].bt[0]=bt[0];a[cou nt].bt[1]=bt[1];a[cou nt].at[0]=at[0];a[cou nt].at[1]=at[1];a[co un t].mo 二mon ey;coun t++;printf("继续输入?(Y/N)");sca nf("%c", &flag);getchar();prin tf("\n");}if((fp=fope n("trai n. txt","wb"))==NULL)printf("\n 无法打开文件!\n");fprin tf(fp,"%d",co un t); for(i=0;i<co un t;i++)if(fwrite (&a[i],sizeof(struct arc),1,fp)!=1)printf("\n 文件写入错误!\n");fclose(fp);}int LocateVertex(ALGraph *G,char *v) /* 城市名在交通系统中定位操作,找出城市名在图中对应结点位置*/{int j,k;j=_1;for(k=0;k<G->vex nu m;k++)if(strcmp(G->vertices[k].cityname,v)==0) /* 第k 个结点中的城市名与传过来的城市名相同*/{j=k; /* 记录位置*/break;}return(j);}void CreateGraph(ALGraph *G) /* 用 city , plan , train 三个文档创建城市交通 系统*/ {int i,j,k;int arc_num;int coun t1,co un t2;int m,t;ArcNode *p,*q;FILE *fp;i=0;if((fp=fope n("city.txt","rb"))二二NULL)/* */{printf("\n无法打开文件!\n"); return;}while(!feof(fp))/* 文件不为空 */ {fsca nf(fp,"%1Os",city[i]);i++;}fclose(fp); /* 关闭文件 */j=0;while(j<i){strcpy(G->vertices[j].cit yn ame,city[j]);/* 结构体的结点数组中;*/G->vertices[j].pla nefirstarc 二NULL; /*G->vertices[j].tra in firstarc=NULL; j++;}G->vex num 二i;if((fp=fope n( "pla ne.txt","rb"))==NULL)printf("\n 无法打开文件!\n");k=0;fscanf(fp,"%d",&count1); /*打开航班信息文件"plane.txt"*/ while(k<co un t1){if(fread(&a[k],sizeof(struct arc),1,fp)!=1)printf("\n 文件读入错误!\n");k++;}fclose(fp); /* 关闭文件 */k=0; /*a 的计数变量k=0*/arc_num=O; /* 弧的计数变量 arc_num 二0*/ while(k<co un t1){i 二LocateVertex(G,a[k].vt); 打开城市文件,文件指针返回值为空将city[i] 中的内容复制到图的 图的结构体其他项赋初值;*//*调用函数LocateVertex(G,a[k].vt) 得到起始结点的位置i*/j=LocateVertex(G,a[k].vh);/*调用函数LocateVertex(G,a[k].vh) 得到起始结点的位置j*/q=G->vertices[i].pla nefirstarc;m=0;while(q匸NULL){if(q->adjvex==j) /* 弧q中的邻接顶点与j相等*/{t=q->st+1; /* 将数组a[i] 中的内容都复制到弧q中*/q->i nfo.stata[t]. nu mber二a[k].co;q->i nfo.stata[t].expe nditure二a[k].mo;q->i nfo.stata[t].begi ntime[0]=a[k].bt[0];q->i nfo.stata[t].begi ntime[1]=a[k].bt[1];q->i nfo.stata[t].arrivetime[0]=a[k].at[0];q->i nfo.stata[t].arrivetime[1]=a[k].at[1];q->i nfo.l ast=t;m=1;break;}q二q_>n extarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode)); /* 开辟一个弧结点*/p->adjvex=j;/*将数组a[i]中的内容都复制到新的弧结点中*/p->i nfo.stata[0]. nu mber二a[k].co;p->i nfo.stata[0].expe nditure二a[k].mo;p->i nfo.stata[0].begi ntime[0]=a[k].bt[0];p->i nfo.stata[0].begi ntime[1]=a[k].bt[1];p->i nfo.stata[0].arrivetime[0]=a[k].at[0];p->i nfo.stata[0].arrivetime[1]=a[k].at[1];p->i nfo.l ast=0;p->n extarc=G->vertices[i].pla nefirstarc;G->vertices[i].pla nefirstarc二p; /* 将弧结点连接到适当的位置中去*/ arc_ nu m++;}k++;}G->pla nearc num 二arc_ num;if((fp二fope n("trai n. txt","rb"))==NULL){printf("\n 无法打开文件!\n");return;}k=0;fscanf(fp,"%d",&count2); /* 打开列车信息文件"plane.txt"*/ while(k<cou nt2){if(fread(&a[k],sizeof(struct arc),1,fp)!=1)printf("\n 文件读入错误!\n");k++;}fclose(fp); /* 关闭文件*/k=0; /*a 的计数变量k=0;*/arc_num=0; /* 弧的计数变量arc_num=0;*/while(k<cou nt2){i=LocateVertex(G,a[k].vt);/*调用函数LocateVertex(G,a[k].vt) 得到起始结点的位置i*/ j=LocateVertex(G,a[k].vh);/*调用函数LocateVertex(G,a[k].vh) 得到起始结点的位置j*/ q=G->vertices[i].tra in firstarc;m=0;while(q!=NULL){if(q->adjvex==j) /* 弧q中的邻接顶点与j相等*/{t=q->st+1; /* 将数组a[i] 中的内容都复制到弧q中*/ q->i nfo.stata[t]. nu mber二a[k].co;q->i nfo.stata[t].expe nditure二a[k].mo;q->i nfo.stata[t].begi ntime[0]=a[k].bt[0];q->i nfo.stata[t].begi ntime[1]=a[k].bt[1];q->i nfo.stata[t].arrivetime[0]=a[k].at[0];q->i nfo.stata[t].arrivetime[1]=a[k].at[1];q->i nfo.l ast=t;m=1;break;}q二q_>n extarc;}if(m==0){ p=(ArcNode*)malloc(sizeof(ArcNode)); /* 开辟一个弧结点*/ p->adjvex二j; /* 将数组a[i]中的内容都复制到新的弧结点中*/p->i nfo.stata[O]. nu mber二a[k].co;p->i nfo.stata[0].expe nditure二a[k].mo;p->i nfo.stata[0].begi ntime[0]=a[k].bt[0];p->i nfo.stata[0].begi ntime[1]=a[k].bt[1];p->i nfo.stata[0].arrivetime[0]=a[k].at[0];p->i nfo.stata[0].arrivetime[1]=a[k].at[1];p->i nfo.l ast=0;p->n extarc=G->vertices[i].tra in firstarc;G->vertices[i].trai nfirstarc二p; /* 将弧结点连接到适当的位置中去*/arc_ nu m++;}k++;}G->tra inarcnum 二arc_ num;}int save(ALGraph *G) /* 保存城市交通系统到相应的文档*/{int i,j,k,t;ArcNode *q;FILE *fp;j=0;while(j<G->vex num){strcpy(city[j],G->vertices[j].city name);j++;}i=0;if((fp=fope n("city.txt","wb"))==NULL)printf("\n 错误,无法打开文件!\n");while(i<G->vex num){fprin tf(fp,"%10s",city[i]);i++;}fclose(fp);k=0;for(i=0;i<G->vex nu m;i++){q=G->vertices[i].pla nefirstarc;while(q!=NULL){for(t=0;t<二q->i nfo.l ast;t++){strcpy(a[k].vt,G->vertices[i].cit yn ame); strcpy(a[k].vh,G->vertices[q->adjvex].city name);a[k].co=q->i nfo.stata[t]. nu mber;a[k].mo=q->i nfo.stata[t].expe nditure; a[k].bt[0]=q->i nfo.stata[t].begi ntime[0]; a[k].bt[1]=q->i nfo.stata[t].begi ntime[1]; a[k].at[0]=q->i nfo.stata[t].arrivetime[0]; a[k].at[1]=q->info.stata[t].arrivetime[1];k++;}q二q_>n extarc;}}if((fp=fope n("pla ne.txt","wb"))==NULL){printf("\n 无法打开文件!\n");return 0;}i=0;fprin tf(fp,"%d",k);while(i<k){if(fwrite (&a[i],sizeof(struct arc),1,fp)!=1) printf("\n 文件写入错误!\n");i++;} fclose(fp);k=0;for(i=0;i<G->vex nu m;i++){q=G->vertices[i].tra in firstarc;while(q!=NULL){for(t=0;t<=q->i nfo.l ast;t++){strcpy(a[k].vt,G->vertices[i].cit yn ame); strcpy(a[k].vh,G->vertices[q->adjvex].city name);a[k].co=q->i nfo.stata[t]. nu mber;a[k].mo=q->i nfo.stata[t].expe nditure; a[k].bt[0]=q->i nfo.stata[t].begi ntime[0]; a[k].bt[1]=q->i nfo.stata[t].begi ntime[1];a[k].at[O]=q->i nfo.stata[t].arrivetime[0];a[k].at[1]=q->i nfo.stata[t].arrivetime[1];k++;}q二q_>n extarc;}}if((fp=fope n("trai n.txt","wb"))==NULL){printf("\n 无法打开文件!\n");return 0;}i=0;fprin tf(fp,"%d",k);while(ivk){if(fwrite (&a[i],sizeof(struct arc),1,fp)!=1)printf("\n 文件写入错误!\n");i++;}fclose(fp);return 1;}void cityedit(ALGraph *G) /* 显示城市编辑项目选择界面*/ {int i;printf("\n 请选择城市编辑项目:\n");printf("1= 增加城市\n2=删除城市\n");printf(”选择?");sca nf("%d",&i);getchar();if(i==1)En terVertex(G);if(i==2)DeleteVertex(G);}void EnterVertex(ALGraph *G) /* 增加城市*/{char v[10],c;int i;printf("\n 请输入新增城市的名称:");gets(v);i二LocateVertex(G,v);if(i>=0&&i<G->vex num){printf("\n 错误!此城市已存在\n");return;}else{prin tf("\n 确认?(Y/N)");c=getchar();getchar();if(c=='Y '||c二二y){i=G->vex num;strcpy(G->vertices[i].city name,v);G->vertices[i].pla nefirstarc二NULL; G->vertices[i].tra in firstarc=NULL; G->vex num 二i+1; save(G);}else return;}} void DeleteVertex(ALGraph *G)/* G是程序头部定义的结构体*//*删除城市*/{int i,j,k, n;char v[10],c;ArcNode *p,*q,*m;printf("\n 请输入删除的城市:");/* 提示”输入删除城市名"*/gets(v);printf("\n 确认?(Y/N)"); /* 提示"是否确定要删除(Y/N) "*/c=getchar();getchar();if(c=='Y '||c二二y){n=0; /*0是记数标志,控制循环次数*/while (n< G->vex num&&strcmp(G->vertices [n ].cit yn ame,v)!=0)/*n<图G表头接点总个数&&图G的存储城市名与v不同,G表头结点总个数比实际大1*/n++;/*记数值n+1*/if(n==G->vexnum) /*n== 图G表头结点总个数*/printf("\n 错误!无法找到此城市!\n"); /* 提示”无法找到此城市"*/else{i=LocateVertex(G,v); /* 利用G函数找到此城市名所处在G中位置*/p=G->vertices[i].pla nefirstarc;while(p匸NULL){q=p;p=p->n extarc;free(q); /* 删除从此结点出发的所有航班弧*/}p=G->vertices[i].tra in firstarc;while(p!=NULL){q=p;p=p->n extarc;free(q); /* 删除从此结点出发的所有列车弧*/}for(j=i;j<G->vex nu m_1;j++){strcpy(G->vertices[j].cit yn ame,G->vertices[j+1].cit yn ame);/*将G第j个结点的信息依前移1位*/G->vertices[j].pla nefirstarc二G->vertices[j+1].pla nefirstarc;G->vertices[j].tra in firstarc=G->vertices[j+1].tra in firstarc;}G->vertices[j].planefirstarc二NULL; /* 将G第j 个结点的信息置空*/G->vertices[j].tra in firstarc=NULL;for(k=0;k<G->vex nu m-1;k++) /* 以下是删除所有指向此结点的航班弧*/{p=G->vertices[k].pla nefirstarc;while(p!=NULL){if(p->adjvex>i){p->adjvex=p->adjvex-1;q=p;p=p->nextarc; /*p 指向下一条飞机弧*/}Elseif(p->adjvex==i) /* 该弧指向的顶点位置(p->adjvex )== i*/{if(p==G->vertices[k].planefirstarc)/*p 指向图G中k 结点的第一条飞机弧*/ {m=p;G->vertices[k].pla nefirstarc二p->n extarc;/*将图G中k结点的第二条飞机弧改为第一弧*/p=p->nextarc; /*p 指向下一条飞机弧*/free(m); /* 释放(m)*/}Else{q->nextarc二p->nextarc; /* 将p的下一条弧赋给q的下一条弧*/m=p;p=p->nextarc; /*p 指向下一条飞机弧*/free(q); /* 释放(q)*/}Else{q=p;p=p->nextarc; /*p 指向下一条飞机弧*/}}}for(k=0;k<G->vex nu m-1;k++) /* 以下是删除所有指向此结点的列车弧*/{p=G->vertices[k].trainfirstarc; /*p 指向图G中k 结点的第一条列车弧*/while(p匸NULL){if(p->adjvex>i) /* 该弧指向的顶点位置(p->adjvex)>i */{p->adjvex=p->adjvex-1; /* 将该弧指向顶点位置-1*/q=p;p=p->nextarc; /*p 指向下一条列车弧*/}Elseif(p->adjvex==i) /* 该弧指向的顶点位置(p->adjvex)==i*/{if(p==G->vertices[k].trainfirstarc)/*p 指向图G中k 结点的第一条列车*/ {m=p;G->vertices[k].tra in firstarc=p->n extarc;/*将图G中k结点的第二条列车弧改为第一弧*/p=p->n extarc;free(m);}Else{q->n extarc二p->n extarc;m=p;p=p->n extarc;free(q);}}else{q=p;p=p->n extarc;}}}G->vex nu m--;save(G);}else return;}void flightedit(ALGraph *G) /* 飞机航班编辑项目选择界面*/ {int i; /* char q; */prin tf("\n 请选择飞机航班编辑项目:\n");printf("1= 新增航班\n2=删除航班\n");printf(”选择?");sca nf("%d",&i);getchar();if(i==1)En terpla neArc(G);if(i==2)Deletepla neArc(G);}void trai nedit(ALGraph *G) /* 列车车次编辑项目选择界面*/ {int i; /* char q; */prin tf("\n 请选择列车车次编辑项目:\n");printf("1= 新增车次\n2=删除车次\n");printf(”选择?");sca nf("%d",&i);getchar();if(i==1)En tertrainArc(G);if(i==2)DeletetrainArc(G);}void EnterplaneArc(ALGraph *G) /* 增加飞机航班*/ {int i,j,bt[2],at[2];int code;float mon ey;int m,t;char vt[10],vh[10],c;ArcNode *p,*q;prin tf("\n 请输入新增飞机航班的信息:\n");printf(" 飞机航班编号:");sca nf("%d", &code);getchar();printf(" 起始城市:");gets(vt);getchar();printf(" 目的城市:");gets(vh);printf(" 航班费用:");sca nf("%f",&mon ey);getchar();printf(" 起飞时间:");sca nf("%d:%d",&bt[O],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) {printf("\n 时间输入有误,请重新输入\n"); sca nf("%d:%d",&bt[0],&bt[1]);getchar();}printf(" 到达时间:");sca nf("%d:%d", &at[0], &at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) {printf("\n 时间输入有误,请重新输入\n"); sca nf("%d:%d",&at[0], &at[1]);getchar();}prin tf("\n 确认?(Y/N)");c=getchar();getchar();if(c=='Y '||c二二y){i二LocateVertex(G,vt);j二LocateVertex(G,vh);if(i==-1){prin tf("\n 错误!无法找到起始城市\n"); return; }if(j==-1){prin tf("\n 错误!无法找到到达城市\n"); return;}q=G->vertices[i].pla nefirstarc;m=0;while(q匸NULL){if(q->adjvex==j){t二q->info.l ast+1;q->i nfo.stata[t]. nu mber二code;q->i nfo.stata[t].expe nditure二 mon ey;q->i nfo.stata[t].begi ntime[O]=bt[O];q->i nfo.stata[t].begi ntime[1]=bt[1];q->i nfo.stata[t].arrivetime[0]=at[0];q->in fo.stata[t].arrivetime[1]=at[1];q->i nfo.l ast=t;m=1;break;}q二q_>n extarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j;p->in fo.stata[0]. nu mber二code;p->i nfo.stata[0].expe nditure二 mon ey;p->i nfo.stata[0].begi ntime[0]=bt[0];p->i nfo.stata[0].begi ntime[1]=bt[1];p->i nfo.stata[0].arrivetime[0]=at[0];p->i nfo.stata[0].arrivetime[1]=at[1];p->i nfo.l ast=0;p->n extarc=G->vertices[i].pla nefirstarc;G->vertices[i].pla nefirstarc二p; G->pla nearc nu m++; }save(G);}else return;}void EntertrainArc(ALGraph *G) /* 增加列车车次*/ {int i,j,bt[2],at[2];int code;float mon ey;int m,t;char vt[10],vh[10],c;ArcNode *p,*q;prin tf("\n 请输入新增列车车次的信息:\n");printf(" 列车车次编号:");sca nf("%d",&code);getchar();printf(" 起始城市:");gets(vt);getchar();printf(" 目的城市:");gets(vh);printf(" 车次费用:");sca nf("%f",&mon ey);getchar();printf(" 发车时间:");sca nf("%d:%d",&bt[O],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) {printf("\n 时间输入有误,请重新输入\n");sca nf("%d:%d",&bt[0],&bt[1]);getchar();}printf(" 到达时间:");sca nf("%d:%d", &at[0], &at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) {printf("\n 时间输入有误,请重新输入\n");sea nf("%d:%d", &at[O], &at[1]);getchar();}prin tf("\n 确认?(Y/N)");c=getchar();getchar();if(c=='Y '||c二二y){i=LocateVertex(G,vt);j二LocateVertex(G,vh);if(i==-1){prin tf("\n 错误!无法找到起始城市\n"); return;}if(j==-1){prin tf("\n 错误!无法找到到达城市\n"); return;}q=G->vertices[i].tra in firstarc;m=0;while(q匸NULL){if(q->adjvex==j){t二q->info.l ast+1;q->in fo.stata[t]. nu mber二code;q->i nfo.stata[t].expe nditure二 mon ey; q->i nfo.stata[t].begi ntime[0]=bt[0];q->i nfo.stata[t].begi ntime[1]=bt[1];q->i nfo.stata[t].arrivetime[0]=at[0];q->in fo.stata[t].arrivetime[1]=at[1];q->info.l ast=t;m=1;break;}q二q_>n extarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->i nfo.stata[0]. nu mber二code;p->i nfo.stata[0].expe nditure二 mon ey; p->i nfo.stata[0].begi ntime[O]=bt[O];p->i nfo.stata[0].begi ntime[1]=bt[1];p->i nfo.stata[0].arrivetime[0]=at[0];p->i nfo.stata[0].arrivetime[1]=at[1];p->i nfo.l ast=0;p->n extarc二G->vertices[i].tra in firstarc; G->vertices[i].tra in firstarc=p;G->tra inarcnu m++;}save(G);}else return;}int DeleteplaneArc(ALGraph *G) /* 删除飞机航班*/ {int i,j;int code;char vt[10],vh[10],c;int n;int k;ArcNode *p,*q;printf("\n 请输入删除飞机航班的信息:\n");printf(" 飞机航班的编号:");sca nf("%d",&code);getchar();printf(" 起始城市:");gets(vt);getchar();printf(" 目的城市:");gets(vh);prin tf("\n 确认?(Y/N)");c=getchar();getchar();if(c=='Y '||c二二y){i=LocateVertex(G,vt);j=LocateVertex(G,vh);if(i==-1){prin tf("\n 错误!无法找到起始城市\n");return 0;}if(j==-1){prin tf("\n 错误!无法找到目的城市\n");return 0;}p二G->vertices[i].pla nefirstarc;q=p;while(p匸NULL)。

交通咨询系统设计

交通咨询系统设计

交通咨询系统设计实验目的和要求1. 掌握最短路径的算法;2. 编写实验报告;实验内容本设计要求一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一个城市顶点之间的最短路径、最低花费或最少时间等问题。

对于不同的咨询要求,可输入城市间的路程、所需时间或所需费用。

实验步骤1、问题分析该设计分为三个部分:建立交通网络图的存储结构解决单源最短路径问题实现两个城市顶点之间的最短路径问题2、问题求解2.1建立交通网络图的存储结构图的邻接矩阵#define MVNum 50Typedef struct{VertexType vexs[MVNum];〃顶点信息Adjmatrix arcs[MVNum][MVNum];〃邻接矩阵边的信息}MGraph2.2单源最短路径Dijkstra 算法按路径长度递增产生诸顶点的最短路径2.3任意两个顶点之间的最短路径Floyd算法3、完整的程序清单4、程序运行测试#include "stdafx.h"#i nclude <stdio.h>#in clude <stri ng.h>#defi ne MVNum 50#defi ne Dij_MAXN 33#defi ne MAX_VERTEX_NUM 31#defi ne MAX_STRING_NUM 10#defi ne MAX_TRAFFIC_NUM 10typedef struct TrafficNode{char name[MAX_STRING_NUM];int Time;//int EndCity // 火车到达城市的编号int Cost;// 票价} TrafficNodeDat;typedef struct VNode{CityType city; // 城市编号int TrainNum; // 标记下面 Train 数组里元素个数TrafficNodeDat Train[MAX_TRAFFIC_NUM]; // 数组成员为结构体,记录了到达城市、起止时间、票价和班次} VNodeDat;typedef struct TrafficNode{char name[MAX_STRING_NUM]; // 班次int Time;int EndCity; // 火车到达城市的编号int Cost; // 票价} TrafficNodeDat;typedef struct VNode{CityType city; // 城市编号int FlightNum; // 标记下面 Train 数组和 Flight 数组里元素个数TrafficNodeDat Flight[MAX_TRAFFIC_NUM];} VNodeDat;int main() switch(Command){case 0:return 0;case 1:Administrators();// 管理员操作界面函数 break;case 2:User();// 用户操作界面函数 break;default:cout<<"\t 选择序号错误 ! 请重新选择 !\n";int InitSystem()void User()void Administrators()int DelCity(char *Name) // 删除城市{//删除城市。

交通咨询系统设计报告

交通咨询系统设计报告

重庆科技学院《数据结构》课程设计报告学院:_电气与信息工程学院_ 专业班级:计科2学生姓名:学号:设计地点(单位)__ _ 计算机基础自主学习中心 __ _ _设计题目:________ 交通咨询系统设计__ ___ _ _完成日期:2012年 7 月 6 日指导教师评语: ______________________ _________________ __________________________________________________________________________________ __________________________________________________________________________________ _____________________________________ __________ _成绩(五级记分制):______ __________指导教师(签字):________ ________重庆科技学院课程设计任务书设计题目:交通咨询系统的设计系主任:雷亮指导教师:黄永文/王双明/熊茜/彭军/王成敏2012年 6月 20日摘要在交通网络非常发达,人们在出差、旅游出行时,往往关心节省交通费用或节省所需要的时间等问题。

对于这样一个人们关心的问题,可以用一个图结构来表示交通网络,利用计算机建立一个交通咨询系统。

图中顶点表示城市,边表示城市之间的交通情况,其权值可代表里程、交通费用或时间。

比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。

本次设计的交通咨询系统主要是运用C语言的数据结构来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。

关键词:数字结构C语言交通咨询最短路径目录1 设计内容和要求 (1)1.1 问题描述 (1)1.2需求分析 (1)2 课程需求分析 (2)2.1 算法思路 (2)2.2 数据结构体 (2)2.3 基本操作 (3)2.4 算法应用 (3)2.5 程序设计流程图 (4)3 功能模块详细设计 (5)3.1 测试数据 (5)3.2 程序调试 (6)4 课程总结与体会 (19)5参考文献 (20)6 致谢 (21)1 设计内容和要求1.1 问题描述:设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:(1)时间最短(2)费用最小(3)里程最少。

全国交通咨询系统设计实验报告(word文档良心出品)

全国交通咨询系统设计实验报告(word文档良心出品)

全国交通咨询模拟系统设计报告团队名称: Bug Killer团队成员:专业:时间:一.需求分析(1)提供对城市信息的的编辑功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对火车时刻表和航班运行表的编辑功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具。

输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时坐哪一趟列车哪一次班机到何地。

二.概要设计我们结合现实生活的实际情况,根据数据结构这门课程的特点和要求。

对问题做了如下处理:以数据结构教材的交通图(参照严蔚敏版《数据结构》 P187)为基础,按照 Internet 上查找的信息对数据进行初始化。

由于这是一个查询性质的程序,所以数据要尽可能的丰富。

但是为了控制问题的规模和减少数据初始化时的查询难度,不同城市之间只包含了不大于三次的列车或航班信息。

为了突出迪杰斯特拉算法,初始数据只包含了交通网中相邻城市之间的列车和航班信息。

这是考虑到,实际生活中几乎每个城市都会有直达的出行方式。

如果全部包含进去,对算法的测试会有影响。

按照功能,本程序有三个模块:1.修改城市之间的交通信息。

包括添加列车车次和航班、删除列车车次和航班信息。

2.最少出行费用的查询。

3.最短旅行时间的查询。

根据程序分工的需要,编写过程分为四个模块:1.构建邻接矩阵,由赵锦志完成。

按照查找最短旅行时间的子模块的需求,读取 train.txt 或plane.txt 中的内容构建存储列车信息的三维数组或航班的三维数组。

构建好的数组功能比较丰富,可以作为邻接矩阵使用。

按照最少出行费用的子模块的需求,读取相应 txt 文档,构建二维的数组,即邻接矩阵。

两种数组只有在改变 txt 文档里的内容时才会重新构建。

交通咨询系统课程设计

交通咨询系统课程设计

交通咨询系统课程设计一、教学目标本课程的教学目标是让学生了解和掌握交通咨询系统的相关知识,包括其定义、功能、组成和应用等。

在知识目标方面,希望学生能够准确地描述交通咨询系统的概念,了解其在我国交通管理中的作用和重要性。

在技能目标方面,学生应能够运用所学知识分析和解决实际交通问题,例如设计一个简单的交通咨询系统。

在情感态度价值观目标方面,学生应认识到交通咨询系统对于提高交通安全和效率的重要性,培养对交通科学的兴趣和热情。

二、教学内容本课程的教学内容主要包括交通咨询系统的定义、功能、组成和应用等。

首先,介绍交通咨询系统的概念,让学生了解其基本含义。

其次,讲解交通咨询系统的功能,包括交通信息采集、处理、分析和发布等。

然后,介绍交通咨询系统的组成,如传感器、控制器、显示屏等。

最后,阐述交通咨询系统在实际交通管理中的应用,如交通流量监测、信号控制、应急预案等。

三、教学方法为了实现教学目标,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。

首先,通过讲授法向学生传授交通咨询系统的相关知识。

其次,通过讨论法激发学生的思考,让学生深入了解交通咨询系统的原理和应用。

然后,通过案例分析法让学生分析实际交通问题,提高其运用所学知识解决实际问题的能力。

最后,通过实验法让学生亲身体验交通咨询系统的操作和功能。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:教材、参考书、多媒体资料和实验设备。

教材和参考书将提供交通咨询系统的理论知识,帮助学生掌握基本概念和原理。

多媒体资料将展示交通咨询系统的实际应用场景,丰富学生的学习体验。

实验设备将用于开展实验活动,让学生亲身体验交通咨询系统的操作和功能。

五、教学评估本课程的教学评估将采用多元化的方式,包括平时表现、作业、考试等,以全面、客观、公正地评估学生的学习成果。

平时表现将占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。

作业将占课程总评的20%,包括课后练习、小论文等。

数据结构--交通咨询系统

数据结构--交通咨询系统

数据结构--交通咨询系统正文:1. 介绍本文档是关于交通咨询系统的数据结构设计的文档。

交通咨询系统是一个为用户提供交通信息和路线推荐的系统。

本文档将详细介绍系统的整体架构、数据结构设计,以及每个模块的功能和实现细节。

2. 系统架构交通咨询系统采用三层架构,包括前端界面层、业务逻辑层和数据存储层。

前端界面层负责与用户交互,接收用户输入的咨询请求。

业务逻辑层对用户的咨询请求进行处理,调用相应的算法和数据结构进行路线推荐。

数据存储层用于存储用户和路线的信息。

3. 用户管理模块用户管理模块负责用户的注册、登录和个人信息管理。

用户信息包括用户名、密码等基本信息。

用户个人信息管理包括修改密码、修改个人资料等功能。

4. 路线查询模块路线查询模块实现根据用户的出发地和目的地查询最短路径。

该模块使用图的最短路径算法,如Dijkstra算法或A算法,来计算最短路径。

在查询结果中,系统将显示最短路径的详细信息,包括交通工具、路程时间和费用等。

5. 路线推荐模块路线推荐模块实现根据用户的偏好和实时交通情况推荐路线。

该模块根据用户的出发地和目的地,以及用户的偏好(如最短时间、最少换乘、最少步行等)进行路线推荐。

同时,系统还考虑实时交通情况,如拥堵状况和公共交通工具的运行情况。

6. 数据存储模块数据存储模块负责存储用户和路线的信息。

用户信息包括用户名、密码和个人资料等。

路线信息包括出发地、目的地、交通工具信息、路程时间和费用等。

数据存储模块可以采用关系型数据库或者NoSQL数据库进行实现。

7. 界面设计系统的前端界面设计应简洁明了,方便用户操作和查看信息。

界面应有搜索框用于用户输入出发地和目的地,并且提供选项供用户选择偏好和实时交通情况。

附件:1. 数据库表设计:包括用户表和路线表的字段定义和关系。

2. 界面原型设计:包括系统的前端界面设计和交互流程。

法律名词及注释:1. 用户:使用交通咨询系统的个人或组织。

2. 用户信息:用户在注册和登录时提供的个人信息,包括用户名和密码。

交通咨询系统设计

交通咨询系统设计

目录一.前言 (1)1.1设计要求 (1)1.2设计思想 (1)1.3设计要求 (1)二.程序流程图 (1)三.程序源代码 (2)四.编译与运行 (6)五.课程总结 (9)一.前言:1.设计内容:在交通网络非常兴旺,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。

对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市之间的交通关系。

这个交通系统可以答复旅客提出的各种问题。

比方任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。

本次设计的交通咨询系统主要是运用C语言来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。

设计一个交通咨询系统,能让旅客咨询任一个城市到另一个城市之间的最短里程或最低花费或最少时间等问题。

对于不同咨询要求,可输入城市间的路程或所需费用或所需时间。

该交通咨询系统设计共三局部,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。

2.设计思想:用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现旅客所要咨询的问题。

3.设计要求:该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。

故设计要分成三局部,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。

二.程序流程图:三.程序源代码:#include<stdio.h>#include<stdlib.h>#define MVNum 100 //最大顶点数#define Maxint 35000enum boolean{FALSE,TRUE};typedef char Vertextype;typedef int Adjmatrix;typedef struct{Vertextype vexs[MVNum]; //顶点数组,类型假定为char型Adjmatrix arcs[MVNum] [MVNum]; // 邻接矩阵,假定为int型} MGraph;int D1[MVNum], p1[MVNum];int D[MVNum][MVNum],p[MVNum][MVNum];//文件名save.cvoid CreateMGraph(MGraph *G,int n,int e){ //采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数int i,j,k,w;for(i=1;i<=n;i++) //输入顶点信息G->vexs[i]=(char)i;for(i=1;i<=n;i++)for(j=1;j<=n;j++)G->arcs[i][j]=Maxint; // 初始化邻接矩阵printf ("输入%d条边的i,j及w: \n",e);for(k=1;k<=e;k++){ //读入e条边,建立邻接矩阵scanf("%d,%d,%d",&i,&j,&w);G->arcs[i][j]=w;}printf ("有向图的存储结构建立完毕!\n");}//文件名:dijkstra.c(迪杰斯特拉算法〕void Dijkstra(MGraph *G, int v1,int n){ //用Dijkstra算法求有向图G的v1顶点到其他顶点v的最短路径p[v]及其权D[v]//设G是有向图的邻接矩阵,假设边<i,j>不存在,那么G[i][j]=Maxint//S[v]为真当且仅当v属于S,及以求的从v1到v的最短路径int D2[MVNum], p2[MVNum];int v,i,w,min;enum boolean S[MVNum];for(v=1;v<=n;v++){ // 初始化S和DS[v]=FALSE; //置空最短路径终点集D2[v]=G->arcs[v1][v]; //置初始的最短路径值if(D2[v]< Maxint)p2[v]=v1; //v1是的前趋〔双亲〕elsep2[v]=0; //v 无前趋} // End_forD2[v1]=0;S[v1]=TRUE; //S集初始时只有源点,源点到源点的距离为0 //开始循环,每次求的V1到某个V顶点的最短路径,并加V到S集中for(i=2;i<n;i++){ //其余n-1个顶点min=Maxint; // 当前所知离v1顶点的最近距离,设初值为∞for(w=1;w<=n;w++) //对所有顶点检查if(!S[w] && D2[w]<min){ //找离v1最近的顶点w,并将其赋给v,距离赋给minv=w; //在S集之外的离v1最近的顶点序号min=D2[w]; //最近的距离} //W顶点距离V1顶点更近S[v]=TRUE; //将v并入S集for(w=1;w<=n;w++) //更新当前最短路径及距离if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){ //修改D2[w]和p2[w],w 属于V-SD2[w]=D2[v]+G->arcs[v][w]; //更新D2[w]p2[w]=v;} //End_if} //End_forprintf ("路径长度路径\n");for(i=1;i<=n;i++){ printf ("%5d", D2[i]);printf ("%5d", i);v=p2[i];while(v!=0) {printf ("<-%d", v);v=p2[v];}printf("\n");}}//文件名floyd.c(费洛伊德算法〕void Floyd(MGraph *G, int n){int i, j, k;for(i=1;i<=n;i++) //设置路径长度D和路径path初值for(j=1;j<=n;j++){if(G->arcs[i][j]!=Maxint)p[i][j]=j; //j是i的后继elsep[i][j]=0;D[i][j]=G->arcs[i][j];}for(k=1;k<=n;k++) {{ //做K次迭代,每次均试图将顶点K扩充到当前求得的从i到j的最短路径pij上for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(D[i][k]+D[k][j]<D[i][j]) {D[i][j]=D[i][k]+D[k][j]; //修改长度p[i][j]=p[i][k];}}}}void main(){ MGraph * G;int n, e, v, w, k;int xz=1;G=(MGraph *)malloc(sizeof(MGraph));printf("输入图中顶点个数和边数n,e: ");scanf("%d,%d", &n, &e);CreateMGraph(G, n, e); //建立图的存储结构while(xz!=0){printf(" 求城市之间的最断路径\n");printf("-------------------------------\n");printf("1.求一个城市到所有城市的最短路径\n");printf("2.求任意的两个城市之间的最短路径\n");printf(〞0.谢谢使用!\n");printf("--------------------------------\n");printf(" 请选择:1 或2,选择0 :退出:");scanf("%d",&xz);if(xz==2){Floyd(G,n); //调用费洛伊德算法printf("输入起点和终点: v,w:");scanf("%d,%d",&v,&w );k=p[v][w]; //k为起点v的后继顶点if(k==0)printf("顶点%d 到%d 无路径! \n",v,w);else{printf("从顶点%d到%d的最短路径是: %d",v,w,v);}while(k!=w){printf("-->%d",k); //输出后继顶点k=p[k][w]; //继续找下一个后继顶点}printf("-->%d",w); // 输出终点wprintf(" 路径长度:%d\n",D[v][w]);}if(xz==1){printf("求单源路径,输入起点v :");scanf("%d", &v);Dijkstra(G,v,n); //调用迪杰斯特拉算法}}printf("结束求最短路径,再见!\n");}五.编译及运行:编译: 在第一次编译时出现了很多错误,是因为我对C语言的不熟练,比方调用费洛伊德算法时出现了调用的错误,找了好久,才改正过来,还有就是for语句的运用,由于本次程序要用很多for循环,我把一次for循环放到了上面for循环中,导致程序不能正确输出结果。

交通咨询系统设计数据结构课程设计

交通咨询系统设计数据结构课程设计

交通咨询系统设计数据结构课程设计一、引言随着城市人口的增加和交通需求的不断增长,交通咨询系统变得越来越重要。

交通咨询系统可以提供准确的交通信息,帮助用户规划最佳的出行路线,减少交通拥堵和时间浪费。

本文将介绍一个交通咨询系统的设计,重点关注其数据结构的设计与实现。

二、系统需求分析在设计交通咨询系统的数据结构之前,首先需要对系统的需求进行分析。

用户使用该系统可以进行以下几个方面的咨询:1. 路线规划:根据用户提供的起点和终点,系统可以返回最佳的路线规划方案。

2. 实时交通信息:系统可以提供实时的交通信息,包括道路拥堵情况、车流量、事故等。

3. 公交查询:用户可以查询公交车的实时位置、到站时间等信息。

4. 地点搜索:用户可以根据关键词搜索附近的地点,如餐厅、加油站等。

三、数据结构设计基于以上需求,我们可以设计以下数据结构来实现交通咨询系统:1. 地点信息表:包含地点的名称、经度、纬度等信息。

可以使用哈希表或者树结构来存储地点信息,以便快速查询。

2. 道路网络图:采用图的数据结构来表示道路网络,每个路口和道路分别表示图的顶点和边。

可以使用邻接矩阵或者邻接表来实现图。

3. 路线规划表:记录用户查询的起点和终点,以及最佳路线的详细信息。

可以使用链表或者数组来实现路线规划表。

4. 交通信息表:记录道路的实时交通信息,包括车流量、拥堵情况等。

可以使用哈希表或者树结构来存储交通信息。

5. 公交车信息表:记录公交车的实时位置、到站时间等信息。

可以使用链表或者数组来实现公交车信息表。

四、系统实现在设计完数据结构之后,需要实现相应的算法来支持系统的功能。

以下是几个重要的算法:1. 路线规划算法:可以使用Dijkstra算法或者A*算法来实现最短路径的计算。

2. 地点搜索算法:可以使用字符串匹配算法或者正则表达式来实现关键词搜索。

3. 实时交通信息更新算法:可以使用定时任务或者事件驱动的方式来更新交通信息。

4. 公交车位置更新算法:可以使用定时任务或者事件驱动的方式来更新公交车位置信息。

交通咨询系统设计

交通咨询系统设计

交通咨询系统设计12020年4月19日目录1 概述 (3)1.1 课程设计名称 (3)1.2 课程设计目的 (3)2 系统分析 (4)2.1 问题描述 (4)2.2 设计要求 (4)2.3 课程设计内容 (4)3 概要设计 (5)3.1 定义相关的数据类型 (5)3.2 总体结构图 (6)图5.1 (6)3.3 模块调用图 (6)图5.2 (6)4 详细设计 (6)4.1建立一个有向图的存储结构 (6)4.2 迪杰斯特拉算法 (7)4.3 费洛伊德算法 (7)4.4 主函数流程图 (8)5运行与测试 (10)实例的运行数据 (10)图5.4 (10)5.1 有向图的存储结构建立 (10)5.2 单源最短路径 (11)5.3 任意一对顶点间最短路径 (11)6 总结与心得 (12)7 参考文献 (13)8 附录(程序源代码) (13)1 概述1.1 课程设计名称交通咨询系统设计(最短路径问题)1.2 课程设计目的充分了解并掌握最短路径问题及其应用,根据有向图的存储结构解决实际问题。

32020年4月19日2 系统分析2.1 问题描述对于该设计,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市,边表示城市之间的交通关系。

这个交通系统能够回答2.2 设计要求1、建立交通网络的存储结构2、提供一个城市到任意城市最短路径查询功能3、提供任意两个城市间最短路径查询功能4、提供程序测试算法5、界面友好2.3 课程设计内容设计一个交通咨询系统,能让旅客咨询从任一个城市定点到另一个城市定点之间的最短路径或最低花费或最少时间等问题。

对于不同的咨询要求、可输入城市间的路程或所需时间或所需花费。

42020年4月19日3 概要设计3.1 定义相关的数据类型采用邻接矩阵定义图:typedef struct{VertexType vexs[MVNum];//顶点数组类型假定为char型Adjmatrix arcs[MVNum][MVNum];//邻接矩阵假定为int型}MGraph; 建立图的存储结构#include<stdio.h>#include<stdlib.h>#define MVNum 100//最大顶点数#define Maxint 32767enum boolean{FALSE,TRUE};typedef char VertexType;typedef int Adjmatrix;typedef struct{VertexType vexs[MVNum];//顶点数组类型假定为char型Adjmatrix arcs[MVNum][MVNum];//邻接矩阵假定为int型}MGraph; //MGraph是以邻接矩阵存储的图类型52020年4月19日。

交通咨询系统设计—课程设计实验报告

交通咨询系统设计—课程设计实验报告

数学与统计学院课程名称:《算法与数据结构》 设计题目: 交通咨询系统设计课程设计实验报告交通咨询系统设计1.系统的设计要求1)问题的描述根据不同目的的旅客对交通工具的不同要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市之间的模拟交通咨询的程序,为旅客提供两种或者三种最优决策的交通咨询。

2)需求分析1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

2.系统概要为实现上述程序功能,要用到一种数据结构,图。

根据输入的顶点和边,建立图,然后利用图的邻接表存储结构实现算法。

ADT Graph{数据对象V:v是具有相同数据特性的元素的集合,称作顶点集。

数据关系R:R={VR}VR={<v,w>|v,w属于V且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}基本操作P:CreateGraph70405(&G , V , VR);初始条件:V是图的顶点集,VR是图的弧的集合。

操作结果:按V和VR的定义构造图G。

Initgraph70405(G);初始条件:图G存在。

操作结果:各个变量初始化。

LocateVex70405G,u);初始条件:图G存在,u和G中顶点具有相同的性质。

操作结果:若图中存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息学院课程设计题目:交通资询系统姓名:郑伟学号: 201112110138 班级:本科一班课程:数据结构指导教师:杨振2012年12月24日课程设计任务书及成绩评定目录1.目的与要求 (1)1.1设计目的 (1)1.2设计内容 (1)1.3设计思想 (1)1. 4设计要求 (2)2程序流程图 (2)3程序源代码 (3)4编译与运行 (8)5课程总结 (9)1 目的与要求1.1设计目的:掌握图的存储结构;掌握求图的顶点的度及各种邻接结点的操作;掌握迪杰斯特拉算法和弗洛伊德算法。

1.2设计内容:在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。

对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市之间的交通关系。

这个交通系统可以回答旅客提出的各种问题。

比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。

本次设计的交通咨询系统主要是运用C语言来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。

设计一个交通咨询系统,能让旅客咨询任一个城市到另一个城市之间的最短里程或最低花费或最少时间等问题。

对于不同咨询要求,可输入城市间的路程或所需费用或所需时间。

该交通咨询系统设计共三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。

1.3设计思想:用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现旅客所要咨询的问题。

1.4设计要求:该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。

故设计要分成三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。

2程序流程图:3程序源代码:#include<stdio.h>#include<stdlib.h>#define MVNum 100 //最大顶点数#define Maxint 35000enum boolean{FALSE,TRUE};typedef char Vertextype;typedef int Adjmatrix;typedef struct{Vertextype vexs[MVNum]; //顶点数组,类型假定为char型Adjmatrix arcs[MVNum] [MVNum]; // 邻接矩阵,假定为int型} MGraph;int D1[MVNum], p1[MVNum];int D[MVNum][MVNum],p[MVNum][MVNum];//文件名save.cvoid CreateMGraph(MGraph *G,int n,int e){ //采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数int i,j,k,w;for(i=1;i<=n;i++) //输入顶点信息G->vexs[i]=(char)i;for(i=1;i<=n;i++)for(j=1;j<=n;j++)G->arcs[i][j]=Maxint; // 初始化邻接矩阵printf ("输入%d条边的i,j及w: \n",e);for(k=1;k<=e;k++){ //读入e条边,建立邻接矩阵scanf("%d,%d,%d",&i,&j,&w);G->arcs[i][j]=w;}printf ("有向图的存储结构建立完毕!\n");}//文件名:dijkstra.c(迪杰斯特拉算法)void Dijkstra(MGraph *G, int v1,int n){ //用Dijkstra算法求有向图G的v1顶点到其他顶点v的最短路径p[v]及其权D[v] //设G是有向图的邻接矩阵,若边<i,j>不存在,则G[i][j]=Maxint//S[v]为真当且仅当v属于S,及以求的从v1到v的最短路径int D2[MVNum], p2[MVNum];int v,i,w,min;enum boolean S[MVNum];for(v=1;v<=n;v++){ // 初始化S和DS[v]=FALSE; //置空最短路径终点集D2[v]=G->arcs[v1][v]; //置初始的最短路径值if(D2[v]< Maxint)p2[v]=v1; //v1是的前趋(双亲)elsep2[v]=0; //v 无前趋} // End_forD2[v1]=0;S[v1]=TRUE; //S集初始时只有源点,源点到源点的距离为0 //开始循环,每次求的V1到某个V顶点的最短路径,并加V到S集中for(i=2;i<n;i++){ //其余n-1个顶点min=Maxint; // 当前所知离v1顶点的最近距离,设初值为∞for(w=1;w<=n;w++) //对所有顶点检查if(!S[w] && D2[w]<min){ //找离v1最近的顶点w,并将其赋给v,距离赋给minv=w; //在S集之外的离v1最近的顶点序号min=D2[w]; //最近的距离} //W顶点距离V1顶点更近S[v]=TRUE; //将v并入S集for(w=1;w<=n;w++) //更新当前最短路径及距离if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){ //修改D2[w]和p2[w],w 属于V-SD2[w]=D2[v]+G->arcs[v][w]; //更新D2[w]p2[w]=v;} //End_if} //End_forprintf ("路径长度路径\n");for(i=1;i<=n;i++){ printf ("%5d", D2[i]);printf ("%5d", i);v=p2[i];while(v!=0) {printf ("<-%d", v);v=p2[v];}printf("\n");}}//文件名floyd.c(费洛伊德算法)void Floyd(MGraph *G, int n){int i, j, k;for(i=1;i<=n;i++) //设置路径长度D和路径path初值for(j=1;j<=n;j++){if(G->arcs[i][j]!=Maxint)p[i][j]=j; //j是i的后继elsep[i][j]=0;D[i][j]=G->arcs[i][j];}for(k=1;k<=n;k++) {{ //做K次迭代,每次均试图将顶点K扩充到当前求得的从i到j的最短路径pij上for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(D[i][k]+D[k][j]<D[i][j]) {D[i][j]=D[i][k]+D[k][j]; //修改长度p[i][j]=p[i][k];}}}}void main(){ MGraph * G;int n, e, v, w, k;int xz=1;G=(MGraph *)malloc(sizeof(MGraph));printf("输入图中顶点个数和边数n,e: ");scanf("%d,%d", &n, &e);CreateMGraph(G, n, e); //建立图的存储结构while(xz!=0){printf(" 求城市之间的最断路径\n");printf("-------------------------------\n");printf("1.求一个城市到所有城市的最短路径\n");printf("2.求任意的两个城市之间的最短路径\n");printf(” 0.谢谢使用!\n");printf("--------------------------------\n");printf(" 请选择:1 或2,选择0 :退出:");scanf("%d",&xz);if(xz==2){Floyd(G,n); //调用费洛伊德算法printf("输入起点和终点: v,w:");scanf("%d,%d",&v,&w );k=p[v][w]; //k为起点v的后继顶点if(k==0)printf("顶点%d 到%d 无路径! \n",v,w);else{printf("从顶点%d到%d的最短路径是: %d",v,w,v);}while(k!=w){printf("-->%d",k); //输出后继顶点k=p[k][w]; //继续找下一个后继顶点}printf("-->%d",w); // 输出终点wprintf(" 路径长度:%d\n",D[v][w]);}if(xz==1){printf("求单源路径,输入起点v :");scanf("%d", &v);Dijkstra(G,v,n); //调用迪杰斯特拉算法}}printf("结束求最短路径,再见!\n");}4编译及运行:编译: 在第一次编译时出现了很多错误,是因为我对C语言的不熟练,比如调用费洛伊德算法时出现了调用的错误,找了好久,才改正过来,并且最终调试成功!城市交通图:上海7运行结果:五.课程总结通过此次课程设计大大加深了我对数据结构这门课程的理解,而且尤其对图这章的理解,可以说有一个大的进步。

学习能力也大大提高。

当然通过此次课设也为我以后的道路奠定了一定的基础,认识到了基础的重要。

当然此次课设中遇到的困难是再所难免的,因为我面对的课设是图的内容,是一个相对较难的内容,而且最短路径的算法也花了不少时间才有所深刻理解。

相关文档
最新文档