爱玩科技网
您的当前位置:首页数据结构课程设计 校园导游系统

数据结构课程设计 校园导游系统

来源:爱玩科技网


西安郵電學院

*****设计报告

题 目:校园导游系统

院系名称: 专业名称:

班 级: 学生姓名: 学号(8位) 指导教师:

计算机学院

计算机科学与技术

设计起止时间:2011年12月12日~2011年12月16日

一. 设计目的

校园导游系统 -- 为了系统的把前后的知识连贯的学会应用,了解一个地图是怎么用C语言的形式表达存储的。

二. 设计内容

校园导游系统 — 这是西安邮电学院的一个校园导游图,内容有:管理员管理(有地图的输入,保存文件);客户访问(景点查询,景点打印,景点信息,最短路线查询)。

三.概要设计

1.功能模块图;

校园导游系统 —

管理员菜单

Y 密码 N

系 主菜单 统

客户访问菜单

1.输入地图数据 2.返回主菜单 0.退出系统 1.列出景点 2.列出景点详细信息 3.景点查询 4.景点最短路线查询 5.返回主菜单 0.退出系统 2.各个模块详细的功能描述。

校园导游系统 —三个选项:1.Administrator Login—管理员登陆; 2.Client

主菜单

Access—客户登

陆 ;0.Exit the system—退出系统。

管理员菜单 三个选项:1.Input Attractions Map—输入地图信息;2.Back to the main

Menu—返回主菜单;0.Exit the system—退出系统。

客户访问菜单 六个选项:1.List of the Attractions—列出景点;2.Print the vertex's

information – 打印景点信息;3.Find attractions—景点查询;4.Search the shortest path—最短路径查询;5.Back to the main menu—返回主菜单;0.Exit the system—退出系统。

四.详细设计

1.功能函数的调用关系图

校园导游系统 —

系统中的所有函数如下: 1) void main();

2) void Cipher ();//密码

3) void MainMenu ();//主菜单

4) void AdministratorMenu ();//管理

员菜单

5) void CustomerMenu();//客户访问

菜单

6) int LocateVertex (AdjMatrix *G,

int v);//求顶点位置函数

7) void CreateGraph (AdjMatrix

*G);//建立图函数

8) void SaveGraphFile (AdjMatrix

*G);//保存图到文件函数

9) void DiaplayGraph (AdjMatrix

*G);//打印图函数

10) void FindAttractions ();//景点查

11) void TraverseGraph ();//图的遍历 12) void DepthFirstSearch (AdjMatrix

*G, int v0);//图的深度优先搜索

13) void PrintGraph ();//打印图 14) void ReadGraphInfoFile

(AdjMatrix *g);//读取图的景点信息文件

15) void ReadGraphFile (AdjMatrix

*g);//读取图矩阵文件 16) void

ShortestPath_Floyd(AdjMatrix *g);//弗洛伊德算法

17) void ShortestPath_Print();//两点间

的最短路径

函数调用关系: a b:a调用b

1) 3) 2) 5) 4) 11) 13) 10) 17) 3) 7) 3) 14) 15) 6) 8) 12) 输入地图数据 返回主菜单 9) 16) 列出景点 打印景点信息 景点查询 最短路径查询 返回主菜单 2.各功能函数的数据流程图

校园导游系统 —

函数7)void CreateGraph (AdjMatrix *G);为创建图,然后,调用 8)void SaveGraphFile (AdjMatrix *G) 保存到文件啊中。

函数11),13),10),17)都需调用14),15)来读取文件中的数据。分别完成相应的功能。

3.重点设计及编码

校园导游系统 —

程序中定义的结构体,数据: #define M 100

#define INFINITY 0 #define True 1 #define False 0 int visited[M];

int dist[M][M];//最短路径长度 int path[M][M];//最短路径 typedef struct VerInfo {

int ver;//景点编号

char name[M];/景点名字/

char information[M];//景点信息 } VerInfo;

typedef struct ArcNode {

int adj;//权值 } ArcNode; typedef struct {

VerInfo vertex[M];//顶点数组 ArcNode arcs[M][M];//邻接矩阵 int vexnum, arcnum;//定点数和弧数 } AdjMatrix;

重点函数

int LocateVertex (AdjMatrix *G, int v)//求定点位置函数 {

int k;

for(k = 0; k < G->vexnum; k++) if(G->vertex[k].ver == v) { return k; } return -k; }

void DepthFirstSearch (AdjMatrix *G, int v0)//深度优先搜索 {

int vj;

printf(\"║%6d║%16s║\\n\ visited[v0] = True;

for(vj=0; vj < G->vexnum; vj ++)

if ((! visited[vj]) && G->arcs[v0][vj].adj != 0) DepthFirstSearch (G, vj); }

读取图矩阵文件

while (fscanf(fp, \"%4d\ { fscanf(fp, \"%c\ j++; if (ch == '\\n') { i++; j=0; } if (g->arcs[i][j].adj != 0) h++; }

g->vexnum = i;//最后i为图的顶点个数 g->arcnum = h/2;//h为弧数的2倍

void ShortestPath_Floyd(AdjMatrix *g)//弗洛伊德算法的实现 {

int i, j, k;

for(i=0; ivexnum; i++) for(j=0; jvexnum; j++) { dist[i][j]=1000; path[i][j]=0; } for(i=0; ivexnum; i++) for(j=0; jvexnum; j++) if(g->arcs[i][j].adj!=0) { dist[i][j] = g->arcs[i][j].adj; dist[j][i] = g->arcs[j][i].adj; } for(k=0; kvexnum; k++) for(i=0; ivexnum; i++) for(j=0; jvexnum; j++) if(dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; path[i][j] = k; path[j][i] = k; } }

五.测试数据及运行结果 1.正常测试数据和运行结果

要求提供3组正常测试数据和运行结果

A.校园导游系统 —

输入:1; 输出:

输入:lj; 111; 输出:

输入:1; 15,; 23;

公交站 这里有西安最方便的600路公交车

大门 仔细看看那大门,你会发现那是“邮电”两个字 邮政储蓄 这里可以办理储蓄、邮政业务,ATM机,方便

大学生活动中心 这是一个小型的会场,可以举行各种晚会,活动 人工湖 湖水浑浊,不过偶尔有一条鱼跳出水面 图书馆 130万的出数量,各种图书,供你选择 教学区 教室少,楼房出现漏水现象,豆腐渣工程

学术交流中心 供外人居住的地方,但不是免费得,180/天,贵 操场 塑胶跑道,采用荷兰进口的高仿草坪足球场 体育馆 有室内篮球馆,但是有点小,一次性容人量小 实验楼 设备比较齐全,部分设备太旧,得更新 医疗中心 设备差,收费高,只能看感冒类的小病 学生公寓 大都采用6人间的方式,部分是4人间

旭日苑 卫生极差,筷子出来是油的,湿的就不说的,你懂得! 美食广场 这里的饭菜种类多,味道也不错

输出:Save the file successfully!

输入:2; 1; 输出:

输入:2 输出

输入:3; 8; 输出:

输入:4; 2 15;

输出:

输入:5; 输出:

2.异常测试数据及运行结果

输入密码,或用户名不对的会返回到上一级。另外选择选项的时候输入非法的数据时会提醒你输入有误,重新输入。

六.调试情况,设计技巧及体会 1. 改进方案

对自己的设计进行评价,指出合理和不足之处,提出改进方案; A. 校园导游系统 —

程序优点:1.有管理员和客户访问两个部分。客户不能输入地图信息。

2.输入地图是点数和弧数可以随意输入,数据全部存在文件中,比较

好读取数据,读取文件的同时还计算出了图的顶点数和弧数。

程序不足:1.由于宏定义INFINITY是0.所以在查询最短路线的时候不好控制数

据。其实应该定义成32768,最大值,这样好控制数据。

2.程序只能一次性的进行一次性的地图数据录入,不能进行修改,添

加地图信息。

3.程序放在linux下不能运行,原因是linux下没有 这个函

数库,在linux下实现要用到这三个函数库。有待遇进一步的改善。 2.体会

弗洛伊德算法思想很精辟。

在查找最短路径中的一次循环这一点很节省时间。

一个大的程序不是在短时间之内可以完成的,更不是由一两个人就可以完成的,需要一个团队来集体完成

程序的调试在编程的过程中起到了举足轻重的作用。 七.参考文献

《数据结构》 杨剑 主编 清华大学出版社

《数据结构(C语言版)》 .严蔚敏_吴伟民.主编 清华大学出版社 八.附录:

源代码(电子版)

因篇幅问题不能全部显示,请点此查看更多更全内容