校园的导游交通咨询系统
三.详细设计 3.1 函数声明
MGraph G;
int P[NUM][NUM]; //存放边的权值 long int D[NUM]; int x[9] = {0};
void CreateInfor(int v,int a); //创建各景点及其信息函数声明 void GuideInfor(); //景点信息界面函数声明 void ShortestPath(int num); //输出最短路径函数声明 void Output(int sight1,int sight2); //输出最短距离函数声明 char Menu(); //选择菜单函数声明 void search(); //查找菜单函数声明 char SearchMenu(); //查找子菜单函数声明 void PrintMap(); //输出农大平面图的函数声明
3.2 功能函数实现 3.2.1结构体定义
typedef struct ArcCell {
int adj;
}ArcCell;
typedef struct VertexType {
int number; char *sight; char *description;
}VertexType; //定义景点的描述结构体
-4-
校园的导游交通咨询系统
typedef struct {
VertexType vex[NUM]; ArcCell arcs[NUM][NUM];
int vexnum,arcnum; //定义图的结点数和边数
}MGraph; //邻接矩阵结构体定义
3.2.2创建各景点及其信息函数(CreateInfor)
void CreateInfor(int v,int a) //创建各景点及其信息函数 {
int i,j; G.vexnum = v; G.arcnum = a;
for(i = 0;i < G.vexnum;++i)
G.vex[i].number = i;
G.vex[0].sight = \商业街\写入各景点及其信息 G.vex[0].description = \学生购物、聚餐、娱乐之地\G.vex[1].sight = \校医院\
G.vex[1].description = \农大就医之所,虽然有点贵\G.vex[2].sight = \南区食堂\
G.vex[2].description = \学生就餐之所\G.vex[3].sight = \前街\
G.vex[3].description = \店面虽不多,但生意很好\G.vex[4].sight = \北区食堂\
G.vex[4].description = \学生就餐之所,味道比南区的好\G.vex[5].sight = \教育超市\
G.vex[5].description = \农大最大的超市,很方便\G.vex[6].sight = \体育馆\
G.vex[6].description = \农大运动场所,可以进去打球\
-5-
校园的导游交通咨询系统
}
G.vex[7].sight = \北区田径场\
G.vex[7].description = \体育课上课之所,各种活动场所\G.vex[8].sight = \五教先骕楼\
G.vex[8].description = \新教学楼,大部分学生在此上课\G.vex[9].sight = \逸夫图书馆\
G.vex[9].description = \学生阅览、借阅图书之地\G.vex[10].sight = \农大正门\
G.vex[10].description = \历史悠久,很多人都会认错\G.vex[11].sight = \一教惟义楼\
G.vex[11].description = \老教学楼,考研学生最多之地\
for(i = 0;i < G.vexnum;++i)
for(j = 0;j < G.vexnum;++j)
G.arcs[i][j].adj = Max; //写入各景点之间的距离
G.arcs[0][1].adj = G.arcs[1][0].adj = 300; G.arcs[0][2].adj = G.arcs[2][0].adj = 200; G.arcs[2][3].adj = G.arcs[3][2].adj = 350; G.arcs[2][5].adj = G.arcs[5][2].adj = 100; G.arcs[3][4].adj = G.arcs[4][3].adj = 350; G.arcs[3][5].adj = G.arcs[5][3].adj = 300; G.arcs[5][6].adj = G.arcs[6][5].adj = 200; G.arcs[5][8].adj = G.arcs[8][5].adj = 300; G.arcs[5][10].adj = G.arcs[10][5].adj = 300; G.arcs[7][11].adj = G.arcs[11][7].adj = 300; G.arcs[8][9].adj = G.arcs[9][8].adj = 100; G.arcs[9][10].adj = G.arcs[10][9].adj = 350; G.arcs[10][11].adj = G.arcs[11][10].adj = 350;
3.2.3景点信息界面函数(GuideInfor)
-6-
校园的导游交通咨询系统
void GuideInfor() //景点信息界面函数声明 {
int i,k = 0; printf(\
*******************
江
西
农
业
大
学
*******************\\n\输出导游系统主界面
printf(\
__________\\n\
printf(\景点名称\\t\\t|\\t景点描述\\n\
printf(\
__________\\n\
printf(\for(i = 0;i < NUM;i++) {
description); //输出各景点及其信息
}
printf(\
k = k+1;
__________\\n\}
3.2.4输出最短路径函数(ShortestPath)
void ShortestPath(int num) //景点游览最短路径函数(采用狄克斯特拉算法设计) {
int v,w,i,t;
int final[NUM]; //保存最短路径 int min;
/*初始化*/
-7-
校园的导游交通咨询系统
for(v = 0;v < NUM;v++) { }
D[num] = 0; final[num] = 1;
/*在当前还未找到最短路径的结点中选取具有最短路径的结点v*/ for(i = 0;i < NUM;++i) //依次查找 {
min = Max; //查找出最小值 for(w = 0;w < NUM;++w)
if(!final[w])
if(D[w] < min) { }
/*当已不再存在路径时算法结束*/ if(min == Max) return;
v = w;
min = D[w]; //保存最小值
final[v] = 0;
D[v] = G.arcs[num][v].adj; for(w = 0;w < NUM;w++)
P[v][w] = 0;
if(D[v] < 20000) { }
P[v][num] = 1; P[v][v] = 1;
-8-