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

发布时间:2012-06-04 13:21:21   来源:文档文库   
字号:

西安郵電學院

*****设计报告

目:校园导游系统

院系名称: 计算机学院

专业名称: 计算机科学与技术

级:

学生姓名:

学号(8位)

指导教师:

设计起止时间:20111212~20111216



. 设计目的

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

. 设计内容

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

三.概要设计

1.功能模块图;

校园导游系统

Y

N

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);//弗洛伊德算法

void ShortestPath_Print();//两点间的最短路径

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

2.各功能函数的数据流程图

校园导游系统

函数7void CreateGraph (AdjMatrix *G);为创建图,然后,调用 8void 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", G->vertex[v0].ver, G->vertex[v0].name);

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", &g->arcs[i][j].adj) != EOF)

{

fscanf(fp, "%c", &ch);

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.由于宏定义INFINITY0.所以在查询最短路线的时候不好控制数据。其实应该定义成32768,最大值,这样好控制数据。

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

3.程序放在linux下不能运行,原因是linux下没有 这个函数库,在linux下实现要用到 这三个函数库。有待遇进一步的改善。

2.体会

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

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

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

程序的调试在编程的过程中起到了举足轻重的作用。

七.参考文献

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

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

八.附录:

源代码(电子版)

本文来源:https://www.2haoxitong.net/k/doc/c5d14bded15abe23482f4d52.html

《数据结构课程设计 校园导游系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式