数据结构课设 全国交通系统文档

  • 格式:docx
  • 大小:470.69 KB
  • 文档页数:17

数据结构课设

课程名称数据结构课设

题目名称全国交通系统

学生学院计算机

专业班级

学 号

学生姓名

指导教师蒋

2016 年11月28日

一. 需求分析

1)程序任务要求

[问题描述]

出于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

[基本要求]

① 提供对城市信息进行编辑(如:添加或删除)的功能。

② 城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

③ 提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。

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

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

[选做内容]

增加旅途中转次数最少的最优决策。

二. 设计概要

1) 数据类型的定义

本程序运用了关于图这种数据结构。

ADT Graph{

数据对象 V:V 是具有相同特性的数据元素的集合,称为顶点集。

数据关系 R:

R={VR}

VR={|v, w∈V且 P(v,w),表示从 v 到 w的弧。

谓词 P(v,w) 定义了弧的意义或信息 }

基本操作 P:

CreateGraph(&G,V,VR);

初始条件: V是图的顶点集, VR是图中弧的集合。

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

LocateVet(G,u);

初始条件:图 G存在, u 和 G中顶点有相同的特征。

操作结果:若 G中存在顶点 u,则返回该顶点在图中的位置,

否则返回其他信息。

InsertVex(&G,v);

初始条件:图 G存在, v 和图中顶点有相同特征。

操作结果:在图 G中添加新顶点 v。

DeleteVex(&G,v);

初始条件:图 G存在, v 是 G中某个顶点。

操作结果:删除 G中顶点 v 及相关弧。

InsertArc(&G,v,w);

初始条件:图 G存在, v 和 w是 G中两个顶点。

操作结果:在 G中增添弧,若 G是无向的则还增加对称弧。

DeleteArc(&G,v,w);

初始条件:图 G存在, v 和 w是 G中两个顶点。

操作结果:在 G中删除弧,若 G是无向的,则还删除对称弧。

} ADT Graph

其他的抽象数据类型定义如下:

typedef struct

{

int number;

float expenditure;

intbegintime[2];

intarrivetime[2];

}Vehide; //飞机或列车运行信息

typedef struct

{

Vehidestata[MAX_ROUTE_NUM];

int last; //航班次或列车次

}infolist; //弧的权的信息(车次或航班信息)

typedef struct ArcNode

{

intadjvex;

struct ArcNode *nextarc;

infolist info;

}ArcNode; //邻接表节点,存入弧(交通路线)的信息

typedef struct VNode

{

char cityname[10];

ArcNode *planefirstarc, *trainfirstarc;

}VNode, AdjList[MAX_VERTEX_NUM];//顶点数组元素

typedef struct

{

AdjList vertices;

intvexnum, planearcnum, trainarcnum;

}ALGraph; //图结构

typedef struct Node

{

intadjvex;

int route;

struct Node *next;

}Node;//辅助节点的存储结构

typedef struct QNode

{

intadjvex;

struct QNode *next;

}QNode;//队列节点,节点元素为int型

typedef struct

{

QNode *front;

QNode *rear;

}LinkQueue;//队列结构

typedef struct TimeNode

{

intadjvex;

int route;

intbegintime[2];

intarrivetime[2];

struct TimeNode *child[MAX_ROUTE_NUM];

}TimeNode, *TimeTree; //求最短时间辅助树

struct arc

{

int co; //列车或飞机编号

char vt[10]; //起始城市

char vh[10];//到达城市

intbt[2]; //起始时间

int at[2];//到达时间

float mo;//费用

}a[MAX_ARC_SIZE];//存放边信息

2) 操作函数

void Administer(ALGraph *G); /*管理员操作*/

void cityedit(ALGraph *G); /*编辑城市节点*/

void CopyTimeTree(TimeTree p, TimeTree q); /*复制辅助树*/

void createcityfile(); /*创建城市文档*/

void CreateGraph(ALGraph *G);/*创建图*/

void createplanefile(); /*创建航线文档*/

void CreateTimeTree(TimeTree p, inti, int j, LinkQueue *Q, infolist

(*arcs)[MAX_VERTEX_NUM]);

void createtrainfile();/*创建列车路线文档*/

intDeleteplaneArc(ALGraph *G);

void DeleteQueue(LinkQueue *Q, int *x);

intDeletetrainArc(ALGraph *G);

void DeleteVertex(ALGraph *G);

void DemandDispose(int n, ALGraph G); /*处理用户请求*/

void DestoryTimeTree(TimeTree p);

void EnterplaneArc(ALGraph *G);

void EnterQueue(LinkQueue *Q, int x);

void EntertrainArc(ALGraph *G);

void EnterVertex(ALGraph *G);

voidExpenditureDispose(int k, infolist(*arcs)[MAX_VERTEX_NUM],

ALGraph G, int v0, intv1, float *M, int *final);/*求取费用最少路线*/

void flightedit(ALGraph *G);

void initgraph(ALGraph *G); /*初始化交通系统*/

void InitQueue(LinkQueue *Q);

intIsEmpty(LinkQueue *Q);

intLocateVertex(ALGraph *G, char *v);

void MinExpenditure(infolist arcs, float *expenditure, int *route);

void MinTime(infolist arcs, int *time, int *route);

void PrintGraph(ALGraph *G);

intsave(ALGraph *G);

void TimeDispose(int k, infolist(*arcs)[MAX_VERTEX_NUM],

ALGraph G, int v0, int v1, int(*T)[2], int *final); /*求取用时最少的路线*/

voidTimeTreeDispose(Node*head,infolist(*arcs)[MAX_VERTEX_NUM]);

void trainedit(ALGraph *G);

void TransferDispose(int k, infolist(*arcs)[MAX_VERTEX_NUM],

ALGraph G, int v0, int v1);/*求取中转最少路线*/

void UserDemand(ALGraph G);

void VisitTimeTree(TimeTree p);

void LogIn(ALGraph *G);/*登录管理员界面*/

3)主程序的流程以及各程序模块之间的调用关系

三. 详细设计

1) 伪码算法

intmain() {