西安郵電學院
*****设计报告
院系名称: 计算机学院
专业名称: 计算机科学与技术
班 级:
学生姓名:
学号(8位)
指导教师:
设计起止时间:2011年12月12日~2011年12月16日
校园导游系统 -- 为了系统的把前后的知识连贯的学会应用,了解一个地图是怎么用C语言的形式表达存储的。
二. 设计内容
校园导游系统 — 这是西安邮电学院的一个校园导游图,内容有:管理员管理(有地图的输入,保存文件);客户访问(景点查询,景点打印,景点信息,最短路线查询)。
三.概要设计
校园导游系统 —
Y
N
校园导游系统 —三个选项: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) 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 b:a调用b
校园导游系统 —
函数7)void CreateGraph (AdjMatrix *G);为创建图,然后,调用 8)void SaveGraphFile (AdjMatrix *G) 保存到文件啊中。
函数11),13),10),17)都需调用14),15)来读取文件中的数据。分别完成相应的功能。
校园导游系统 —
程序中定义的结构体,数据:
#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; i
for(j=0; j
{ dist[i][j]=1000;
path[i][j]=0;
}
for(i=0; i
for(j=0; 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; k
for(i=0; i
for(j=0; 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;
}
}
要求提供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;
输出:
输入密码,或用户名不对的会返回到上一级。另外选择选项的时候输入非法的数据时会提醒你输入有误,重新输入。
对自己的设计进行评价,指出合理和不足之处,提出改进方案;
A. 校园导游系统 —
程序优点:1.有管理员和客户访问两个部分。客户不能输入地图信息。
2.输入地图是点数和弧数可以随意输入,数据全部存在文件中,比较好读取数据,读取文件的同时还计算出了图的顶点数和弧数。
程序不足:1.由于宏定义INFINITY是0.所以在查询最短路线的时候不好控制数据。其实应该定义成32768,最大值,这样好控制数据。
2.程序只能一次性的进行一次性的地图数据录入,不能进行修改,添加地图信息。
3.程序放在linux下不能运行,原因是linux下没有
弗洛伊德算法思想很精辟。
在查找最短路径中的一次循环这一点很节省时间。
一个大的程序不是在短时间之内可以完成的,更不是由一两个人就可以完成的,需要一个团队来集体完成
程序的调试在编程的过程中起到了举足轻重的作用。
《数据结构》 杨剑 主编 清华大学出版社
《数据结构(C语言版)》 .严蔚敏_吴伟民.主编 清华大学出版社
源代码(电子版)
本文来源:https://www.2haoxitong.net/k/doc/c5d14bded15abe23482f4d52.html
文档为doc格式