分类号编号华北水利水电学院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任务分配在本程序中,我们一共划分了三个模块。
管理员模块的初始化数据,城市信息的编辑,以及显示交通系统和整体的界面由明月完成。
航班班次以及列车车次添加删除以及数据结构的初步实现由吕竹青完成。
对于最少时间,最少花费以及最少的中转次数这三个函数的实现由璐璐进行完成。
2概要设计2.1 数据结构#define MAX_VERTEX_NUM 18//城市节点数#define MAX_ARC_SIZE 100#define MAX_ROUTE_NUM 5//路线数#define False 0#define True 1#define INFINITY 10000struct Vehide{int number;//航班号,火车号float expenditure;//费用int begintime[2];//出发时间int arrivetime[2];//到达时间};//航班、列车信息节点struct infolist{Vehide stata[MAX_ROUTE_NUM];//一个出发地到达目的地所对应的航班数或列车车次数int last;//顺序表所对应的下标,从0开始};//顺序表表示struct ArcNode{int adjvex;//节点下标ArcNode *nextarc; //节点的下一个指针域infolist info;//节点的数据域};//邻接表中各个节点信息typedef struct VNode{char cityname[10];//城市名ArcNode *planefirstarc,*trainfirstarc;//航班链、列车链} VNode,AdjList[MAX_VERTEX_NUM];struct ALGraph{AdjList vertices;int vexnum,planearcnum,trainarcnum;//城市数、航班数、列车数};struct Node{int adjvex;int route;Node *next;};//临时建立的一个邻接表,用来求最少中转次数和最少费用struct QNode{int adjvex;struct QNode *next;};//链队节点信息struct LinkQueue{QNode *front;QNode *rear;};//链队信息typedef struct TimeNode{int adjvex;int route;int begintime[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];int c[MAX_VERTEX_NUM];int d[MAX_VERTEX_NUM];2.2 程序模块主要包括管理员编辑模块和用户查询模块以及显示全国交通信息模块。
2.2.1各模块之间的调用关系以及算法设计3.详细设计3.1用到的各种函数void Administer(ALGraph *G); //void CityEdit(ALGraph *G); //城市编辑void CreateCityFile();void CreateGraph(ALGraph *G);void CreatePlaneFile();void CreateTrainFile();int DeleteplaneArc(ALGraph *G);void DeleteQueue(LinkQueue *Q,int *x);int DeletetrainArc(ALGraph *G);void DeleteVertex(ALGraph *G);void DemandDispose(int n,ALGraph G);void EnterplaneArc(ALGraph *G);void EnterQueue(LinkQueue *Q,int x);void EntertrainArc(ALGraph *G);void EnterVertex(ALGraph *G);void ExpenditureDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final);void flightedit(ALGraph *G);void InitGraph(ALGraph *G);void InitQueue(LinkQueue *Q);int IsEmpty(LinkQueue *Q);int LocateVertex(ALGraph *G,char *v);void MinExpenditure(infolist arcs,float *expenditure,int *route);void PrintGraph(ALGraph *G);int save(ALGraph *G);void trainedit(ALGraph *G);void TransferDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1); void CopyTimeTree(TimeTree p,TimeTree q);void DestoryTimeTree(TimeTree p);void MinTime(infolist arcs,int *time,int *route);void VisitTimeTree(TimeTree p);void TimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final);void TimeTreeDispose(Node *head,infolist (*arcs)[MAX_VERTEX_NUM]);void trainedit(ALGraph *G);void CreateTimeTree(TimeTree p,int i,int j,LinkQueue *Q,infolist(*arcs)[MAX_VERTEX_NUM]);void UserDemand(ALGraph G);3.2函数调用关系图3.3测试与分析3.3.1测试数据与截图1.管理员操作界面2.对整个结构进行初始化3.对城市,飞机班次,列车车次的编辑对城市的编辑:对航班的编辑:对列车的编辑:1.用户操作界面1.查询最少费用2.查询最短时间3.查询最少的中转次数3.3.2测试分析1.1.1考虑到道路网多是稀疏网,故采用了邻接表作存储结构,其空间复杂度位O(e),此时的时间复杂度也为O(e)。
构建邻接表的时间复杂度位O(n+e),输出路径的时间复杂度为O(n2)。
由此,本交通资讯系统的时间复杂度位O(n2)。
1.1.2本程序在求最短路径时使用了迪杰斯特拉算法,主要考虑在本程序的初级阶段,并不需要大量的查询,更多会是图信息的添加和修改,重在算法的理解和掌握,因此采用了算法复杂度相对较低的迪杰斯特拉算法。
当然,从性能上来说,当交通图基本稳定,而且城市信息基本完善的时候,使用佛洛伊德把所有的最短路径信息存储起来可能会更方便一点,后续的查询的时间复杂度也会相对降低。
由此可见,在选用算法时,不能单纯地只考虑算法的时间复杂度,有时还必须综合考虑各种因素。
航班时刻表机号出发地到达地出发时间到达时间费用6320 16:2018:00 17:2519:05680元2104乌鲁木齐乌鲁木齐8:0010:459:5511:401150元列车时刻表873 07:1321:42 21:1711:46134元116 9:3618:54 18:3203:4898元373 13:1500:35 00:1511:35116元747 17:4115:1314:4712:19210元371乌鲁木齐乌鲁木齐11:4200:3523:5411:23114元218 18:5001:34 11:5118:35178元4.用户说明书1.2本程序运行在Windows系统下,执行文件为:全国交通资讯系统.exe;1.3双击运行程序后会显示控制台窗口,如图所示:1.4输入操作命令“1”,进入管理员操作界面,输入1-5的操作命令可以执行相应的操作,如图所示:1.5输入“2”操作命令则进入用户查询窗口,如图所示:1.6输入“3”命令则显示整个交通网络.5.总结5.1明月的总结在这次的课程设计中,我们抽中了这个全国交通咨询系统,刚看完题目真的感觉无从下手,最后经过我们的讨论以及需求分析,我们这个系统所要用的结构主要是图,我被分到的模块主要是对整个这个交通系统的初始化,以及对城市信息的编辑,也就是对城市的添加和删除,还有对整个系统的界面的操作。