全国交通咨询模拟系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、问题描述
全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。例如,
因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时
间才能到达或者最少需要多少旅费才能到达,并详细说明依次
【测试数据】
二、数据结构设计和核心算法设计描述:
1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:
3、核心设计:根据上面的流程图和逻辑拆分,对这个问题有了一个比较直观,详细地了解。并且从中也可得知路线的添加即数据的存储是这个系统进行运作的一个基础。而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这些数据进行了存储。将每个信息量放在不同的文件中,可以更有效、直观地对这些数据进行处理。
流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是其他操作都是在路线添加好后进行的,并且为了每一项功能进行完后,系统可以
及时回到主交互界面,我采用的是无限循环形式,即while(1)。
以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。
三、主控及功能模块层次结构:
1、模块说明:本系统分为个模块
1、)主函数
2、)添加城市
3、)查找城市并返回序号
4、)删除城市
5、)添加列车
6、)添加航班
7、)删除列车或航班
8、)找出最小费用路线
9、)初始化系统数据(读入内存)
10、)找出最快路线
11、)计算最快路线耗费的时间并打印
12、)计算最小费用路线
13、)主界面
14、)存储信息到文件
15、)退出、
2、下面是各模块示意图:
基本操作:
TrafficNodeDat 交通工具
信息Char
name[MAX_STRING_N
UM]
班次
Int starttime 出发时间
Int starttime 到达时间
Int cost 票价
UNodeDat 路线
信息
Short int city 城市编号
Int TrainNum 火车路线数
int FlightNum 航班路线数
TrafficNodeDat
Train[MAX_TRAFFIC_
NUM]
火车路线信息
TrafficNodeDat
Flight[MAX_TRAFFIC_
航班路线信息
函数变量声明:
#include
#include
#define ERR 0
#define OK 1
#define Dij_MAXN 33
#define MAX_VERTEX_NUM 31
#define MAX_STRING_NUM 10
#define MAX_TRAFFIC_NUM 10
const char CityFile[] ="D:\\city.txt";
const char TrainFile[] ="D:\\train.txt";
const char FlightFile[] ="D:\\flight.txt";
typedef short int CityType;
typedef struct TrafficNode
{
char name[MAX_STRING_NUM]; //班次
int StartTime,StopTime; //起止时间
int EndCity; //该有向边指向的顶点在数组中的位置,即该城市编号
int Cost; //票价
} TrafficNodeDat;
typedef struct VNode
{
CityType city;
int TrainNum,FlightNum; //标记下面Train数组和Flight数组里元素个数
TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了
到达城市、起止时间、票价和班次
TrafficNodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时到达该城市的耗费(时间或者费用)
} VNodeDat;
typedef struct PNode
{
int City;
int TraNo;
} PNodeDat;
VNodeDat AdjList[MAX_VERTEX_NUM]; //System Info
char CityName[MAX_VERTEX_NUM][MAX_STRING_NUM]; //城市名,采用第一下标为该城市在本程序中的编号
int CityNum; //城市数目
PNodeDat Path[MAX_VERTEX_NUM]; //存储临时最小时间路径
PNodeDat MinPath[MAX_VERTEX_NUM]; //存储搜索到当前的最小时间路径
int MinTime,StartTime;
int curPath;
函数构成:
int main()
{
char name[MAX_STRING_NUM];
char s_city[MAX_STRING_NUM];
char e_city[MAX_STRING_NUM];
int Command,cost;
int startcity,endcity,traveltype;
int s_hour,s_minute,e_hour,e_minute;
while (1)