设计一个校园导游程序,为来访的客人提供信息查询服务。
1)设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。
2)存放景点代号、名称、简介等信息供用户查询。
3)为来访客人提供图中任意景点相关信息的查询。
4)为来访客人提供图中任意景点之间的问路查询。
5)可以为校园平面图增加或删除景点或边,修改边上的权值等。
为了实现以上功能,可以从3个方面着手设计。
为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图7-10所示。
本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的个数由分量vexnum、arcnum表示,它们是整型数据。
此外,本系统还设置了三个全局变量:visited[ ]数组用于存储顶点是否被访问标志;d[ ]数组用于存放边上的权值或存储查找路径顶点的编号;campus是一个图结构的全局变量。
本系统除了要完成图的初始化功能外还设置了8个子功能菜单。图的初始化由函数initgraph( )实现。依据读入的图的顶点个数和边的个数,分别初始化图结构中图的顶点向量数组和图的邻接矩阵。
8个子功能的设计描述如下。
1)学校景点介绍。
学校景点介绍由函数browsecompus( )实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。
2)查看浏览路线。
查看浏览路线由函数shortestpath_dij( )实现。该功能采用迪杰斯特拉(dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其它景点的最短路径线路及距离。
3)查看两景点间最短路径。
查看两景点间最短路径由函数shortestpath_floyd( )实现。该功能采用弗洛伊德(floyd)算法实现。当用户选择该功能,系统能根据用户输入的起始景点及目的地景点编号,查询任意两个景点之间的最短路径线路及距离。
4)景点信息查询。
景点信息查询由函数seeabout( )实现。该功能根据用户输入的景点编号输出该景点的相关信息。例如,景点编号、名称等。
5)更改图的信息。
更改图的信息功能由主调函数changegraph( )及若干个子函数完成,可以实现图的若干基本操作。例如:增加新的景点、删除边、重建图等。
6)查询景点间可行路径。
该功能是查询两景点间所有可行路径,由函数allpath( )和函数path( )实现,其中path( )函数是直接递归函数。由于是无向网,如果网中的边数很多,任意两个景点间的所有路径也会有限多,但很多路径是无实际意义的(有近路,为什么去走远路呢?)。
所以,本算法在求得的两景点间所有可行路径中,限制只输出路径长度不超过8个景点的路线。
7)打印邻接矩阵。
该功能即输出图的邻接矩阵的值,由函数printmatrix( )实现。
8)退出。即退出校园导游系统,由exit(0)函数实现。
以湖北第二师范学院光谷校区主要景点为例,抽象完成的无向网如图7-7所示。全校共抽象出28个景点,39条道路。各景点分别用图中的顶点表示,景点编号从0-27;39条道路分别用图中的边表示,边上的权值表示景点之间的模拟距离。
图7-7 抽象的二师院光谷校区无向带权图。
本程序包含3个模块:主程序模块、工作区模块和无向网操作模块。调用关系如图7-8所示。
图7-8 模块调用示意图。
本系统共设置18个子程序,各子程序的函数名及功能说明如下。
1)mgraph initgraph图的初始化。
2)int locatevex(mgraph c, int v) /查找景点在图中的序号。
3)void path(mgraph c, int m,int n,int k) /打印序号为m,n景点间的长度不超过8个景点的路径。
4)int allpath(mgraph c打印两景点间的景点个数不超过8的所有路径。调用(3)
5)void shortestpath_dij(mgraph c) /用dijkstra算法,求一个景点到其他景点间的最短路径,并打印。
以下编号(6)-(12)是图的基本操作。包括:重建图、更新信息、删除、增加结点和边等。
6)int creatgragh(mgraph &c) /建图。以图的邻接矩阵存储图。
7)int newgraph(mgraph &c更新图的部分信息。返回值:1
8)int enarc(mgraph&c增加一条边。返回值:1
9)int envex(mgraph&c增加一个结点。返回值:1
10)int delvex(mgraph&c删除图的一个顶点。返回值:1
11)int delarc(mgraph&c删除图的一条边。返回值:1
12)void printmatrix(mgraph c输出图的邻接矩阵。
13)int changegraph(mgraph &c图操作的主调函数。返回值:1
14)void shortestpath_floyd(mgraph c) /用floyd算法求任意两景点间的最短路径,并输出。
15)void seeabout(mgraph c查询景点的信息。
16)void browsecompus(mgraph c) /显示所有景点信息。
17)void mainwork工作区函数。操作区用户界面。
18)void main主函数。设定界面的颜色和大小,调用工作区模块函数。
校园导游系统18个子程序之间的主要调用关系如图7-9所示。图中数字是各函数的编号。
图7-9 系统函数调用关系图。
1)无向带权图(无向网)的定义。
typedef struct arcell边的权值信息。
int adj权值。
arcell,adjmatrix[maxvertexnum][maxvertexnum]; 图的邻接矩阵类型。
typedef struct vexsinfo顶点信息。
int position景点的编号。
char name[32景点的名称。
char introduction[256景点的介绍。
vexsinfo;
typedef struct mgraph图结构信息。
vexsinfo vexs[maxvertexnum顶点向量(数组)
adjmatrix arcs邻接矩阵。
int vexnum,arcnum分别指定顶点数和边数。
mgraph;
2)全局变量定义。
int visited[35用于标志顶点是否已经访问过。
int d[35用于存放权值或存储路径顶点编号。
mgraph campus图变量(大学校园)
1)主程序模块设计。
主函数。设定用户操作界面的颜色和大小,调用工作区模块函数。
void main( )
system("color 1f屏幕颜色设定。
system("mode con: cols=140 lines=130");
mainwork( )
2)用户工作区模块设计。
主要工作函数。操作区用户界面设计。
void mainwork( )
int yourchoice;
campus=initgraph( )
printf("欢迎使用校园导游程序n");
printf("欢迎来到湖北第二师范学院n");
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...
数据结构课程设计报告
课设题目 姓名 班级 学号 手机 邮箱 一 设计课题。题目及课题简介。英汉词典作为一个常用的学习工具,是我们经常要使用的。该系统能完成单词的查找,查找到后显示单词的词性及翻译。查找不到可自定义新单词到程序中。还可以进行单词的增加删除修改等工作。二 设计内容。1 小组工作说明 说明课题的总体目标,不作...