《数据结构》
课程设计报告
题
班
姓
学
目:
校园导航
级: 计算机类 XX
名: XXXXXXXXXXXXXXXX
号:
XXX
指导教师: XXX
日
期: 2011-6-29
一、课程设计目标
1、问题描述
设计你的学校的平面图,至少包括 10 个以上的场所,每两个场所间可以有
不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最
短路径)。
2、问题分析
2.2 分析设计课题的要求,要求编程实现以下功能:
(1)查询景点路径
(2)查询景点信息
(3)查看参观路线
(4)查询各景点之间的距离
二、概要设计
1、方案确定
为实现通信录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然
后再为这些菜单项配上相应的功能。程序运行后,给出菜单项的内容和输入提示,
如下:
2、程序设计模块设计连接图
2、模块功能描述
上图已输出,不再赘述
三、详细设计
1、方法设计
2.3 主控菜单设计
为实现通信录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后
再为这些菜单项配上相应的功能。程序运行后,给出菜单项的内容和输入提示,如下:
1.学校简介
2.查询景点路径
3. 查询景点信息
4. 查看参观路线
5. 查询各景点之间的距离
6. 退出
2、程序流程图
#include
#include
#include
#include
#define Max 32767
#define NUM 11
typedef struct ArcCell{
int adj; // 相邻接的景点之间的路程
char *info;
}ArcCell; // 定义边的类型
typedef struct VertexType{
int number; // 景点编号
char *sight; // 景点名称
char *description; // 景点描述
}VertexType; // 定义顶点的类型
typedef struct{
VertexType vex[NUM]; // 图中的顶点,即为景点
ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离
int vexnum,arcnum; // 顶点数,边数
}MGraph; // 定义图的类型
MGraph G; // 把图定义为全局变量
int P[NUM][NUM]; // //
long int D[NUM]; // 辅助变量存储最短路径长度
int x[13]={0};
void CreateUDN(int v,int a); // 创建图的函数
void pingmu(); //屏幕输出函数
void introduce();
void ShortestPath(int num); //最短路径函数
void output(int sight1,int sight2); //输出函数
void PrintMGraph();
char Menu(); // 主菜单
void search(); ;// 查询景点信息
char SearchMenu(); // 查询子菜单
void HaMiTonian(int); // 哈密尔顿图的遍历
void NextValue(int);
void display(); // 显示遍历结果
void main() // 主函数
{ int v0,v1;
char ck;
system("color
CreateUDN(NUM,11);
do{
ck=Menu();
switch(ck){
case'1':
introduce();
printf("\n\n\t\t\t%-25s\n\n",G.vex[0].description);
getchar();
getchar();
break;
case '2':
system("cls");
pingmu();
printf("\n\n\t\t\t 请选择起点景点(1~10):");
scanf("%d",&v0);
0");
printf("\t\t\t 请选择终点景点(1~10):");
scanf("%d",&v1);
ShortestPath(v0); // 计算两个景点之间的最短路径
output(v0,v1); // 输出结果
printf("\n\n\t\t\t\t 请按回车键继续...\n");
getchar();
getchar();
break;
case '3':search();
break;
case '4':
system("cls");
pingmu();
x[0]=1;
HaMiTonian(1);
printf("\n\n\t\t\t\t 请按回车键继续...\n");
getchar();
getchar();
break;
case'5':
PrintMGraph();
printf("\n\n\t\t\t\t 请按回车键继续...\n");
getchar();
getchar();
break;};
}while(ck!='e');}
char Menu() // 主菜单 //{
char c;
int flag;
do{
flag=1;
system("cls");
pingmu();
introduce();
printf("\n\t\t\n");
printf("\t\t \n");
printf("\t\t 1.学校简介 \n");
printf("\t\t 2.查询景点路径 \n");
printf("\t\t 3.查询景点信息 \n");
printf("\t\t 4.查看参观路线 \n");
printf("\t\t 5.查询各景点之间的距离 \n");
printf("\t\t e.退出 \n");
printf("\t\t \n");
printf("\t\t\n");
printf("\t\t\t\t 请输入您的选择:");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')
flag=0;
}while(flag);
return c;}
char SearchMenu() // 查询子菜单 {
char c;
int flag;
do{
flag=1;
system("cls");
pingmu();
introduce();
printf("\n\t\t\n");
printf("\t\t \n");
printf("\t\t 1、按照景点编号查询 \n");
printf("\t\t 2、按照景点名称查询 \n");
printf("\t\t e、返回 \n");
printf("\t\t \n");
printf("\t\t \n");
printf("\t\t\t 请输入您的选择:");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='e')
flag=0;
}while(flag);
return c;}
void search() // 查询景点信息 {
int num;
int i;
char c;
char name[20];
do{
system("cls");
c=SearchMenu();
switch (c){
case '1':
system("cls");
introduce();
pingmu();
printf("\n\n\t\t 请输入您要查找的景点编号:");
scanf("%d",&num);
for(i=0;i
scanf("%s",name);
for(i=1;i