实验报告C语言数据结构全国交通模拟咨询
- 格式:doc
- 大小:656.00 KB
- 文档页数:22
2数据结构——全国交通咨询模拟系统实验报告全国交通咨询模拟一、设计目的掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。
得到软件设计技能的训练。
二、问题描述交通咨询模拟。
根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。
三、基本要求1、对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;2、对城市间的交通工具:火车。
对列车时刻表进行编辑:里程、和列车班次的添加、修改、删除;3、提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具,可以不考虑回程;4、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。
由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟列车何时到达何地。
四、具体实现1、思路(1) 数据存储。
城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
在实验中本想用文本储存数据,但操作不熟悉,而是改用图的邻接矩阵储存原始信息,而后用数组进行添加删改(2) 数据的逻辑结构。
根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为无向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的时间)或旅费。
(3) 数据的存储结构。
采用邻接表和邻接矩阵都可作为数据的存储结构,这里建议采用邻接矩阵作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。
这些工作有不小的工作量。
信息科学与工程学院《结构数据》课程设计报告课程设计名称:交通咨询系统专业班级 : 计算机xxx学生姓名 : xxx学号: 2015xxxx指导教师 : xx课程设计时间:2016。
07.04—2016.07.08计算机应用技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填表说明1.“课题性质”一栏:A.工程设计;B.工程技术研究;C.软件工程(如CAI课题等);D.文献型综述;E.其它。
2.“课题来源"一栏:A.自然科学基金与部、省、市级以上科研课题;B.企、事业单位委托课题;C.校、院(系、部)级基金课题;D.自拟课题。
目录1 需求分析 01。
1 添加交通图信息 01。
2 查询单源最短路径 01。
3 查询多源最短路径 01。
4 更新交通图信息 01.6 读取、保存信息 (1)2 概要设计 (2)2.1 数据类型的定义 (2)2.2 功能模块结构图 (3)3 运行环境 (6)4 开发工具和编程语言 (6)5 详细设计 (7)5。
1 图结构的基本操作 (7)5。
1。
1添加城市结点和路径结点 (8)5。
1.2修改城市结点和路径结点 (8)5.1。
3删除城市结点和路径结点 (8)5。
1。
4退出保存 (8)5。
2 迪杰斯特拉算法的实现 (8)5.2。
1 迪杰斯特拉算法函数 (8)5.2.2 提取迪杰斯特拉函数信息 (8)5.2。
3 求多源最短路径 (8)6 程序编码 (9)7 运行结果 (39)8 心得体会 (45)9参考文献 (46)1需求分析本系统中的数据来源于标准输入设备(如键盘)和文件,可以实现对交通图城市、城市到其余城市的距离的操作,根据需要可查询某两个城市之间的最短距离、城市到各城市的最短距离,各个城市到各个城市的最短距离,以及路径。
本系统要实现的功能有:添加城市和城市间距离,删除城市及城市间距离,修改城市间距离,查询城市间的最短路径,查询某个城市到某个城市的最短路径。
分类号编号华北水利水电学院North China Institute of Water Conservancy and Hydroelectric Power 课程设计题目:全国交通资讯系统院系信息工程学院专业计算机科学与技术专业姓名指导教师彬2013年6月28日目录1.需求分析 (1)问题描述 (1)1.1基本要求 (2)2概要设计 (3)2.1 数据结构 (3)2.2 程序模块 (5)3.详细设计 (6)3.1用到的各种函数 (6)3.2函数调用关系图 (8)3.3测试与分析 (8)4.用户说明书 (13)5.总结 (15)5.1明月的总结 (15)5.2璐璐的总结 (16)5.3吕竹青的总结 (17)参考文献: (18)附录:程序源代码 (18)1.需求分析问题描述设计、模拟一个全国城市间的交通咨询程序,为旅客提供三种最优咨询方案:(1)时间最短;(2)费用最小;(3)中转次数最少。
1.1基本要求1.1.1输入输出的形式和输入值的围在程序中输入城市名称时,需输入10个字母以的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。
1.1.2 输出形式程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
1.1.3程序所能达到的功能程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达,显示编辑的全国交通系统。
1.1.4任务分配在本程序中,我们一共划分了三个模块。
管理员模块的初始化数据,城市信息的编辑,以及显示交通系统和整体的界面由明月完成。
航班班次以及列车车次添加删除以及数据结构的初步实现由吕竹青完成。
数据结构课程设计报告题目:全国交通咨询模拟一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。
利用该系统实现两种最优决策:最快到达或最省钱到达。
2. 明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。
作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。
(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。
(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。
可以对城市、列车车次和飞机航班进行编辑,添加或删除。
b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。
c.初始化交通系统有两种方式,键盘和文档。
二.设计概要1. 算法设计(1)、总体设计(1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。
(3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。
这里采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
【交通运输】交通图咨询查询系统数据结构C语言xxxx年xx月xx日xxxxxxxx集团企业有限公司Please enter your company's name and contentv信息科学与工程学院《结构数据》课程设计报告课程设计名称:交通咨询系统专业班级:计算机xxx学生姓名:xxx学号:2015xxxx指导教师:xx课程设计时间:2016.07.04—2016.07.08计算机应用技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填表说明1.“课题性质”一栏:A.工程设计;B.工程技术研究;C.软件工程(如CAI课题等);D.文献型综述;E.其它。
2.“课题来源”一栏:A.自然科学基金与部、省、市级以上科研课题;B.企、事业单位委托课题;C.校、院(系、部)级基金课题;D.自拟课题。
目录1 需求分析 (1)1.1 添加交通图信息 (1)1.2 查询单源最短路径 (1)1.3 查询多源最短路径 (1)1.4 更新交通图信息 (2)1.6 读取、保存信息 (2)2 概要设计 (3)2.1 数据类型的定义 (3)2.2 功能模块结构图 (4)3 运行环境 (6)4 开发工具和编程语言 (6)5 详细设计 (7)5.1 图结构的基本操作 (7)5.1.1添加城市结点和路径结点 (8)5.1.2修改城市结点和路径结点 (8)5.1.3删除城市结点和路径结点 (8)5.1.4退出保存 (8)5.2 迪杰斯特拉算法的实现 (8)5.2.1 迪杰斯特拉算法函数 (8)5.2.2 提取迪杰斯特拉函数信息 (8)5.2.3 求多源最短路径 (8)6 程序编码 (9)7 运行结果 (41)8 心得体会 (46)9参考文献 (47)1需求分析本系统中的数据来源于标准输入设备(如键盘)和文件,可以实现对交通图城市、城市到其余城市的距离的操作,根据需要可查询某两个城市之间的最短距离、城市到各城市的最短距离,各个城市到各个城市的最短距离,以及路径。
数据结构课程设计交通咨询系统设计学生姓名:学号:指导教师:完成日期:目录1 设计任务书 (1)1.1 题目与要求 (1)1.2 知识点 (1)1.3 输入输出分析 (1)1.4 实现的功能 (1)2 概要设计 (2)2.1 结构体类型及函数声明 (2)2.2 主程序流程 (2)3 详细设计 (3)3.1 数据类型实现 (3)3.2 程序代码 (3)4 调试分析 (11)4.1 问题分析与回顾 (11)4.2 算法时空分析 (11)4.3 算法改进 (11)4.4 经验和体会 (12)5 测试结果 (12)参考文献 (13)1 设计任务书1.1 题目与要求题目:编写程序实现交通咨询系统设计的模拟。
要求:(1)建立交通网络网的存储结构;(2)总体设计要画流程图;(3)提供程序测试方案;(4)界面友好。
1.2 知识点本次课程设计应用到了图的创建、邻接矩阵、迪杰斯特拉算法、弗洛伊德算法、结构体、宏定义、自定义类型、函数的声明与调用等知识点。
1.3 输入输出分析(1)普通输入对于图的存储,我采用的是邻接矩阵的方法,借助于邻接矩阵容易判定任意两个顶点之间是否有弧相连,也容易求得各段弧的权值。
(2)对话式输入在用户选择系统功能时,我采用的是对话式输入,让用户输入系统功能的代号,利用switch语句判断用户输入的指令并调用相应的函数实现具体功能。
(3)程序输出对于用户查询结果的展示,考虑美观以及方便用户的因素,我写了一个pri()函数输出各个城市的代码城市名字对照表,用户可以更方便的使用。
对于用户查询一个城市到所有城市的最短路径时,考虑到显示结果较多,我采用表格的形式进行显示,使界面更美观。
1.4 实现的功能在交通网络越来越发达的今天,人们出去旅行、出差更多的会考虑选择最短路径或最小花费等问题,因此我设计了一个交通咨询系统。
这个系统可以根据用户的选择实现3种功能:求一个城市到所有城市的最短路径;求两个城市间的最短路径;求两个城市间的最小花费。
学生实训报告实训名称:数据结构实训指导教师:姓名:学号:班级:日期:一、实训项目项目名称:全国交通咨询模拟二、实训的目的1.熟悉图数据结构;2.掌握图的顺序存储结构—邻接表;3.掌握最短路径算法4.上机调试程序,掌握查错、排错使程序能正确运行。
三.实训要求1.每个人独立完成实训项目,相互之间可以交流,不能抄袭2.实训的成果包括程序代码和报告3.程序代码要有注释和说明三、实验的环境:1.硬件环境: PC机2.软件环环境:Windows2000 +Visual C++6四、算法描述:建立图的数据结构,采用邻接矩阵作为其存储结构。
存储以上的全国主要城市的交通信息。
通过软件模拟的方法实现:给定出发点和终点,求出它们之间的最短路径,并给出最短路径的线路。
五、源程序清单:#include <stdio.h>#include<string.h>#define VEX_NUM 26#define MAXINT 1000000typedef struct graph{char city[VEX_NUM][10];int arcs[VEX_NUM][VEX_NUM];}Mgraph;void CreatGraph(Mgraph *G,int e);void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]);void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]);int index(char s[],Mgraph *g);void main(){Mgraph *g;int i;int e;int v0,v1;char sr[10],dt[10];int dist[VEX_NUM];int path[VEX_NUM];g=new Mgraph;CreatGraph(g,30);printf("输入出发城市和终点城市\n");getchar();gets(sr);v0=index(sr,g);gets(dt);v1=index(dt,g);Dijkstra(g,v0,path,dist);PutPath(g,v0,v1,path,dist);}void CreatGraph(Mgraph *G,int e){int i,j,k,cost;printf("输入城市名称\n");for(i=0;i<VEX_NUM;++i)scanf("%s",G->city[i]);for(i=0;i<VEX_NUM;i++)for(j=0;j<VEX_NUM;j++)G->arcs[i][j]=MAXINT;printf("输入城市之间的距离\n");for(k=0;k<e;k++){scanf("%d,%d,%d",&i,&j,&cost);G->arcs[i][j]=cost;G->arcs[j][i]=cost;}}void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]) {int s[VEX_NUM];int v;int w;int i,j,k;int min;for(v=0; v<VEX_NUM; v++){s[v]=0;dist[v]=Gn->arcs[v0][v];if(dist[v]<MAXINT)path[v]=v0;else path[v]=-1;}dist[v0]=0;s[v0]=1;for(i=1;i<VEX_NUM -1;i++){min=MAXINT;for(w=0;w<VEX_NUM;w++)if(!s[w] && dist[w]<min){v=w;min=dist[w];}s[v]=1;for(j=0;j<VEX_NUM;j++)if(!s[j] && (min+Gn->arcs[v][j]<dist[j])){dist[j]=min+Gn->arcs[v][j];path[j]=v;}}}void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]) {int k;int next;int top=0;int st[20];if(d[v1]<MAXINT && v1!=v0){st[top++]=v1;next=p[v1];while(next!=v0){st[top++]=next;next=p[next];}}elseif(v1!=v0){printf("%s->%s:没有路径\n",g->city[v0],g->city[v1]);return;}st[top++]=v0;while(top){next=st[--top];if(top!=0)printf("%s->",g->city[next]);elseprintf("%s\n",g->city[next]);}printf("两个城市之间的最短距离为:%d\n",d[v1]);}int index(char s[],Mgraph *g){int i;for(i=0;i<VEX_NUM;i++)if(strcmp(s,g->city[i])==0)return i;}六、运行结果:七、实验运行情况分析(包括算法、运行结果、运行环境等问题的讨论)。
2数据结构——全国交通咨询模拟系统实验报告
实验目的:
实验环境:
本次实验的开发环境为Java编程语言,使用了面向对象的编程思想,采用了数据结构中的图和链表等数据结构。
实验内容:
1.设计交通工具类:
首先,根据系统需求,设计了交通工具类,该类用于表示交通工具的
基本信息,包括交通工具的名称、班次、票价等。
在该类中,使用了链表
数据结构来存储交通工具的班次信息。
2.设计城市类:
接下来,设计了城市类,用于表示各个城市的交通信息。
在该类中,
使用了图数据结构来表示城市之间的联通关系,每个城市作为图的一个节点,城市间的交通工具作为图的边。
实验结果:
经过测试,实验系统能够准确地输出起点城市到终点城市的最短路径
和最佳交通方案,用户可以根据输出信息来决定如何安排旅行计划。
实验总结:。
数据结构课程设计报告班级:195182学号:20181003991姓名:钟欢日期:2019.12一、课程设计题目与要求1.课程设计题目:全国交通咨询模拟2.问题描述:出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
3.基本要求:3.1提供对城市信息进行编辑(如添加或删除)的功能。
3.2城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增加或删除)的功能。
3.3提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
3.4旅途中耗费的总时间应该包括中转站的等候时间。
3.5咨询以用户和计算机的对话方式进行。
二、需求分析1.问题描述搭建一个全国交通咨询模拟系统,可以实现简单的人机互动从而达到咨询的效果。
需要完成的功能有,对城市、列车时刻表、航班时刻表进行编辑(手动/文件添加,删除),能够根据出发城市以及到达城市进行相关线路推荐(花费最少线路、耗时最短线路),其中整个线路的耗时总时长包括中转等待时间。
2.程序的功能:2.1维护功能:2.1.1航班操作2.1.2列车操作2.1.3更改密码2.2咨询功能2.2.1选择出行交通工具2.2.2选择要查询的信息:○1查询花费最小的路径○2查询耗时最短的路径2.2.3进行进一步的输入得到所需要的结果三、设计1.设计思想1.1数据结构设计1.1.1逻辑结构设计采用图结构来表示该全国交通网络,用一个结构体来表示时间,结构体内有标准化的(天,时,分)的相关表示以及操作,重载的运算符“-”。
全国交通网络中的城市用结点表示,两个城市之间的航线或者列车线用两个结点之间的边来表示。
城市结点中包含城市名字、城市编号、第一条航线/列车线以及航线/列车线的数目;边结点中包含到达城市名称,指向下一航线/列车线的指针,以及指向该边所指代航线/列车线信息的指针;航班线/列车线信息结点包含航班号/列车号,出发时间,到达时间,花费时间,花费金额。
数据结构交通系统实验报告
本次实验是关于数据结构在交通系统中的应用,主要分为两部分,分别是地铁路线查
询和交通路网规划。
地铁路线查询
地铁路线查询是一种常见的需求,我们希望可以查询两个地铁站之间的最短路线。
在
本实验中,我们使用了 Dijkstra 算法来实现该功能。
该算法的时间复杂度为 O(n^2),
其中 n 表示节点数目。
因此,当节点数过多时,该算法的效率会比较低。
在实际应用中,为了提高效率,可以采用其他的算法,如 A* 算法等。
交通路网规划
交通路网规划是指在一个城市中,规划一条新的路线,使得所有城市之间的距离最小。
在本实验中,我们使用了 Kruskal 算法来实现该功能。
Kruskal 算法的时间复杂度为
O(mlogn),其中 n 表示节点数目,m 表示边数目。
该算法的优点是可以找到一条跨度最
小的连通图,且不需要事先知道联通情况,可以适用于不同的图形。
在实际应用中,可以
针对不同的问题,采用不同的算法来解决。
总结
本次实验基于数据结构的思想,实现了地铁路线查询和交通路网规划。
数据结构中的Dijkstra 算法和 Kruskal 算法都具有一定的时间复杂度优势,可以实现在可接受的时间
内完成任务。
在实际应用中,我们需要根据问题的特点选择合适的算法,并进行优化,以
提高效率。
数据结构实验大作业报告专业:物流1001 班级: 1001 学号: 18姓名:金渐指导教师:庄毅2011年12月8日一、问题描述处于对不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
二、系统设计系统框图:模块说明:本系统共分15个模块1、主函数2、添加城市3、查找城市并返回序号4、删除城市5、添加列车6、添加航班7、删除列车或航班8、找出最小费用路线9、打印出最小费用路线10、初始化系统数据(读入内存)11、找出最快路线12、计算最快路线耗费的时间并打印13、计算最小费用路线14、主界面15、存储信息到文件16、退出下面是系统总流程图:下面是各模块示意图:三、系统测试1、主界面2、添加城市模块:输入命令 1 后,将提示输入城市名,而后返回主界面3、删除城市:输入命令2后,提示输入城市名,而后返回主界面4、添加交通路线:输入命令3,提示输入起点站和重点站,并提示选择火车或飞机,而后输入班次、出发时间、到达时间、票价,而后返回主界面原train文件:添加路线后:5、删除路线:输入命令4,输入班次,而后返回主界面原train文件:删除后ttrain文件:6、查询最小费用路线:输入命令5,并输入起点站和重点站,然后选择交通工具结果正确!7、查询时间最短路线:输入命令6,并输入起点站和重点站,然后选择交通工具四、小结从小学家里买了电脑起,我对计算机就相当感兴趣,有事没事就喜欢捣鼓捣鼓。
六年级的时候,我的第一台台式电脑就这样被我折腾坏了。
高中,我迷上了硬件,一放假就泡论坛,研究攒机。
大学,我买了一台真正的属于自己的智能手机——魅族M8。
买时已经上市超过两年的M8使用的是被微软抛弃的windows CE系统。
系统的落后导致了应用程序的匮乏,虽然日常应用勉强可以应付,但是看着android丰富有趣的app不免让人心痒。
于是在大一的寒假里我第一次萌生了学习编程的念头。
现在,经过了C语言和数据结构的学习之后,编写一个相对大型的程序的机会终于来了,我也憋足了劲想要写出一个优秀的程序,并且选择了一个具有实际价值的模型——全国交通咨询系统。
第一天,我花了周六10个小时的时间写出了寻找相邻城市旅行时间最短的一个函数,然而这只是系统其中的一个简单的功能。
至此,我也就做好了在编写过程中遇到相当大困难的准备。
但是,后来的一个星期里,虽然利用了所有的课外时间来思考文件的存储格式以及所有城市间的转车、最低费用、最短时间函数,事情却依然毫无进展。
由于期末临近,时间紧迫,我只好求助于网上的资料。
查阅之后发现求图的最短路径使用的是我还未学会的迪杰斯特拉算法。
在认真研究之后,终于将迪杰斯特拉算法加到了自己的程序之中,完成了最最关键的功能。
两个星期后的今天,终于完成了系统的全部功能以及测试。
这一次的编程经验,我最大的体会是:代码的编写、调试并不是最困难的部分。
最困难的部分在于如何构思出一个巧妙的软件框架、统一的数据输入输出格式以形成一个完整的体系。
包括各种全局变量的设定、模块的划分都是需要很长的时间去考虑完善的。
五、附录cpp : Defines the entry point for the console application.int Cityity/*int类型*/=NumofCity;CityInfo[NumofCity].FlightNum=0;CityInfo[NumofCity].TrainNum=0;NumofCity++; lightNum=CityInfo[i+1].FlightNum; rainNum=CityInfo[i+1].TrainNum; lightNum;j++){CityInfo[i].Flight[j].Price=CityInfo[i+1].Flight[j].Price;CityInfo[i].Flight[j].DesCity=CityInfo[i+1].Flight[j].DesCity;strcpy(CityInfo[i].Flight[j].name,CityInfo[i+1].Flight[j].name);CityInfo[i].Flight[j].DepTime=CityInfo[i+1].Flight[j].DepTime;CityInfo[i].Flight[j].ArriveTime=CityInfo[i+1].Flight[j].ArriveTime;} rain[CityInfo[i].TrainNum].Price=cost;CityInfo[i].Train[CityInfo[i].TrainNum].DesCity=j;CityInfo[i].Train[CityInfo[i].TrainNum].DepTime=DepTime;CityInfo[i].Train[CityInfo[i].TrainNum].ArriveTime=EndTime;strcpy(CityInfo[i].Train[CityInfo[i].TrainNum].name,train);CityInfo[i].TrainNum++;light[CityInfo[i].FlightNum].Price=cost;CityInfo[i].Flight[CityInfo[i].FlightNum].DesCity=j;CityInfo[i].Flight[CityInfo[i].FlightNum].DepTime=DepTime;CityInfo[i].Flight[CityInfo[i].FlightNum].ArriveTime=EndTime;strcpy(CityInfo[i].Train[CityInfo[i].FlightNum].name,flight);CityInfo[i].FlightNum++;return 1;}lightNum;j++)if (strcmp(CityInfo[i].Flight[j].name,name)==0) lightNum-1;j++){CityInfo[i].Flight[j].Price=CityInfo[i].Flight[j+1].Price;CityInfo[i].Flight[j].DesCity=CityInfo[i].Flight[j+1].DesCity;strcpy(CityInfo[i].Flight[j].name,CityInfo[i].Flight[j+1].name);CityInfo[i].Flight[j].DepTime=CityInfo[i].Flight[j+1].DepTime;CityInfo[i].Flight[j].ArriveTime=CityInfo[i].Flight[j+1].ArriveTime;} lightNum--;break; rainNum;j++)if (strcmp(CityInfo[i].Train[j].name,name)==0) rainNum-1;j++){CityInfo[i].Train[j].Price=CityInfo[i].Train[j+1].Price;CityInfo[i].Train[j].DesCity=CityInfo[i].Train[j+1].DesCity;strcpy(CityInfo[i].Train[j].name,CityInfo[i].Train[j+1].name);CityInfo[i].Train[j].DepTime=CityInfo[i].Train[j+1].DepTime;CityInfo[i].Train[j].ArriveTime=CityInfo[i].Train[j+1].ArriveTime;} rainNum--;break;}}return 1;}int PreCityrainNum;k++)if(CityInfo[track[i]].Train[k].DesCity==end&&min>CityInfo[track[i]].Train[k].Price){min=CityInfo[track[i]].Train[k].Price;tmp=k;}printf("请乘坐%s次列车起止时间:",CityInfo[track[i]].Train[tmp].name);printf("%02d:%02d-%02d:%02d",CityInfo[track[i]].Train[t mp].DepTime/60,CityInfo[track[i]].Train[tmp].DepTime%60,CityInfo[track[i]].Train[tmp].ArriveTime/60,CityInfo[track[i]].Train[tmp].ArriveTime%60);}}else{for(i--;i>0;i--){printf("\n%s:",CityName[track[i]]);end=track[i-1];min=32767;for (k=0;k<CityInfo[track[i]].FlightNum;k++)if(CityInfo[track[i]].Train[k].DesCity==end&&min>CityInfo[track[i]].Flight[k].Price){min=CityInfo[track[i]].Flight[k].Price;tmp=k;}printf("请乘坐%s次航班起止时间:",CityInfo[track[i]].Flight[tmp].name);printf("%02d:%02d-%02d:%02d",CityInfo[track[i]].Flight[tmp] .DepTime/60,CityInfo[track[i]].Flight[tmp].DepTime%60,CityInfo[track[i]].Flight[tmp].ArriveTime/60,CityInfo[track[i]].Flight[tmp].ArriveTime%60);}}printf("\n%s: 已到达目的地",CityName[track[0]]);printf("\n最低价格 : %d\n",cost);}ity=i;CityInfo[i].TrainNum=0; lightNum=0;rain[CityInfo[j].TrainNum].DesCity=FindNumofCity(TempString3);rain[CityInfo[j].TrainNum].name,TempString1);rain[CityInfo[j].TrainNum].DepTime=hour*60+minute;rain[CityInfo[j].TrainNum].ArriveTime=hour*60+minute;rain[CityInfo[j].TrainNum].Price=cost; rainNum++;}fclose(fp);fp=fopen(FlightFile,"r");if (!fp){printf("\n文件打开错误!\n请先初始化系统数据!");return -1;}fscanf(fp,"%d",&num);for (i=0;i<num;i++){fscanf(fp,"%s",&TempString1);fscanf(fp,"%s",&TempString2);fscanf(fp,"%s",&TempString3);j=FindNumofCity(TempString2);CityInfo[j].Flight[CityInfo[j].FlightNum].DesCity=FindNumofCity(Tem pString3);strcpy(CityInfo[j].Flight[CityInfo[j].FlightNum].name,TempString1);fscanf(fp,"%d:%d",&hour,&minute);CityInfo[j].Flight[CityInfo[j].FlightNum].DepTime=hour*60+minute;fscanf(fp,"%d:%d",&hour,&minute);CityInfo[j].Flight[CityInfo[j].FlightNum].ArriveTime=hour*60+minute ;fscanf(fp,"%d",&cost);CityInfo[j].Flight[CityInfo[j].FlightNum].Price=cost;CityInfo[j].FlightNum++; ity=TemPath[i].City;MinPath[i].FlainNo=TemPath[i].FlainNo;curPath=curPathNo;}ity=City; rainNum;i++) rain[i].DepTime>=(CurTime%1440))&&(CityInfo[City].Train[i].ArriveTime+(CurTime/1440)*1440-DepTime<MinTime))lainNo=i;rain[i].DesCity/*(后来调用)现在到达城市可以去的城市*/,DesCity,CityInfo[City].Train[i].ArriveTime+(CurTime/1440)*1440,curPathNo,ByTorByP);rain[i].DepTime<(CurTime%1440))&&(CityInfo[City].Train[i].ArriveTime+(CurTime/1440)*1440-DepTime<MinTime)) lainNo=i;rain[i].DesCity,DesCity,CityInfo[City].Train[i].ArriveTime+(CurTime/1440+1/*等一天*/)*1440,curPathNo,ByTorByP);}}}else lightNum;i++){if((CityInfo[City].Flight[i].DepTime>=CurTime)&&(CityInfo[City].Flight[i].ArriveTime+(CurTime/1440)*1440-DepTime<MinTime)){TemPath[curPathNo].FlainNo=i;SearchMinTime(CityInfo[City].Flight[i].DesCity,DesCity,City Info[City].Flight[i].ArriveTime+(CurTime/1440)*1440,curPathNo,ByTorByP);}if((CityInfo[City].Flight[i].DepTime<CurTime)&&(CityInfo[City].Flight[i].ArriveTime+(CurTime/1440)*1440-DepTime<MinTime)){TemPath[curPathNo].FlainNo=i;SearchMinTime(CityInfo[City].Flight[i].DesCity,DesCity,City Info[City].Flight[i].ArriveTime+(CurTime/1440+1)*1440,curPathNo,ByTorByP);}}}}return 1;}ity=DepCity; rainNum;i++) lainNo=i;rain[i].DepTime;rain[i].DesCity,DesCity,CityInfo[DepCity].Train[i].ArriveTime,0,ByTorByP);}}else lightNum;i++){TemPath[0].FlainNo=i;DepTime=CityInfo[DepCity].Flight[i].DepTime;SearchMinTime(CityInfo[DepCity].Flight[i].DesCity,DesCity,CityI nfo[DepCity].Flight[i].ArriveTime,0,ByTorByP);}}if (MinTime==32767) ity],CityInfo[MinPath[i].City].Train[MinPath[i].FlainNo].name);ity],CityInfo[MinPath[i].City].Flight[MinPath[i].FlainNo].name);ity].Train[MinPath[i].FlainNo].DepTime/60,CityInfo[MinPath[i].City].Tra in[MinPath[i].FlainNo].DepTime%60,CityInfo[MinPath[i].City].Train[MinPa th[i].FlainNo].ArriveTime/60,CityInfo[MinPath[i].City].Train[MinPath[i] .FlainNo].ArriveTime%60);}printf("%s: 已到达目的地",CityName[DesCity]);printf("\n旅途耗费时间: %02d:%02d",MinTime/60,MinTime%60);return 1;}rainNum){ rain[j].DesCity;while (end==CityInfo[i].Train[j].DesCity&&j<CityInfo[i].TrainNum) rain[j].Price<min) rain[j].Price;lightNum){min=32767;end=CityInfo[i].Flight[j].DesCity;while(end==CityInfo[i].Flight[j].DesCity&&j<CityInfo[i].FlightNum) {if (CityInfo[i].Flight[j].Price<min){min=CityInfo[i].Flight[j].Price;}j++;}ma[i][end]=min;}}} rainNum; rainNum;j++){fprintf(fp,"%s %s %s ", CityInfo[i].Train[j].name,CityName[i],CityName[CityInfo[i].Train[j].DesCity]); rain[j].DepTime/60,CityInfo[i].Train[j].DepTime%60,CityInfo[i].Train[j].ArriveTime/60,CityInfo[i].Train[j].ArriveTime%60,CityInfo[i].Train[j].Price); lightNum; lightNum;j++){fprintf(fp,"%s %s %s ", CityInfo[i].Flight[j].name,CityName[i],CityName[CityInfo[i].Flight[j].DesCity]); light[j].DepTime/60,CityInfo[i].Flight[j].DepTime%60,CityInfo[i].Flight[j].ArriveTime/60,CityInfo[i].Flight[j].ArriveTime%60,CityInfo[i].Flight[j].Price); //起止时间和价格输到文件中}}fclose(fp);return 1;}//////////////////////////////////////////////////主函数//////////////////////////////////////////////int main(){char name[15];char s_city[15];char e_city[15];int Command,cost;int DepCity,endcity,ByTorByP;int s_hour,s_minute,e_hour,e_minute;while (1){StartUI();scanf("%d",&Command);switch (Command){case 0: //退出return 0;case 1: //添加城市InitSysData(); //读入所有文档到内存,初始化系统printf("\n输入城市名:");scanf("%s",&name);AddCity(name);//插入城市SaveSysInfo();//保存到文件printf("系统数据保存完毕!\n");break;case 2: //删除城市InitSysData(); //读入内存printf("\n输入城市名:");scanf("%s",&name); //找到该城市DelCity(name); //删除城市SaveSysInfo(); //保存到文件printf("系统数据保存完毕!\n");break;case 3: //添加交通路线InitSysData(); //读入内存printf("起始站城市名:");scanf("%s",&s_city);printf("终点站城市名:");scanf("%s",&e_city);printf("类型(列车0,飞机1):");scanf("%d",&ByTorByP);printf("输入列车/飞机班次:");scanf("%s",&name);printf("起始时刻(00:00,24小时制):");scanf("%2d:%2d",&s_hour,&s_minute);printf("到达时刻(00:00,24小时制):");scanf("%2d:%2d",&e_hour,&e_minute);printf("票价:");scanf("%d",&cost);if (ByTorByP){AddFlight(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_min ute,cost);}else{AddTrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minu te,cost);}SaveSysInfo();printf("系统数据保存完毕!\n");break;case 4: //删除路线InitSysData();printf("输入输入列车车次或航班班次:");scanf("%s",&name);DelPath(name);SaveSysInfo();printf("系统数据保存完毕!\n");break;case 5: //最小耗费InitSysData();printf("\n起始城市:");scanf("%s",&name);DepCity=FindNumofCity(name);if (DepCity<0){printf("系统中无该城市数据!\n");break;}printf("终点城市:");scanf("%s",&name);endcity=FindNumofCity(name);if (endcity<0){printf("系统中无该城市数据!\n");break;}printf("乘坐列车请输入0,乘坐飞机请输入1:"); scanf("%d",&ByTorByP);if (ByTorByP!=0&&ByTorByP!=1){printf("输入错误!");break;}CalcMinPrice(DepCity,endcity,ByTorByP);printf("\n");break;case 6: //最短时间路线InitSysData();printf("\n起始城市:");scanf("%s",&name);DepCity=FindNumofCity(name);if (DepCity<0){printf("系统中无此城市数据!\n");break;}printf("终点城市:");scanf("%s",&name);endcity=FindNumofCity(name);if (endcity<0){printf("系统中无此城市数据!\n");break;}printf("乘坐列车请输入0,乘坐飞机请输入1 :");scanf("%d",&ByTorByP);if (ByTorByP!=0&&ByTorByP!=1){printf("输入错误!");break;}CalcMinTime(DepCity,endcity,ByTorByP);printf("\n");break;}}}。