课程设计(校园导游)_校园导游课程设计
课程设计(校园导游)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“校园导游课程设计”。
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
一、设计题目
校园导游咨询
二、需求分析
(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)为来访客人提供图中任意景点相关信息的查询。(4)界面美观,方便使用。通过主菜单操作。
三、总体设计
3.1 设计思路
设计一个校园导游系统,应用到数据结构中学到的图的建立,各景点应存在一个图中,而计算不重复路线的时候需要应用到弗洛伊德图的遍历。计算俩景点间最短路径应用到最小生成树的遍历。
景点数据装在一个图中,能够输入图的顶点和边的信息,并存储到相应存储结构中然后输出图的邻接矩阵。
邻接矩阵是表示顶点之间相邻关系。
生成树是指:如果G是一个图,这个图的生成子图T是树,那么可以说T为G的生成树。一个图有生成树当且仅当这个图连通。可通过求该网络的最小生成树达到求解线路或总代价最小的最佳方案。
弗洛伊德算法是通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。它是从图的带权邻接矩A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);„„;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。
3、2系统功能设计
本系统除了有主程序模块外还有3个子功能菜单。3个子功能的设计描述如下。(1)学校景点介绍
学校景点介绍由函数introduce()实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
(2)查看两景点间最短路径
查看两景点间最短路径由函数shortestdistance()实现。该功能采用弗洛伊德(Floyd)算法实现。当用户选择该功能,系统能根据用户输入的起始景点及目的地景点编号,查询任意两个景点之间的最短路径线路及距离。
(3)退出
即退出校园导游系统,由exit(0)函数实现。3、3 模块间调用关系
主程序模块
(界面)
景点最短路径查询
景点信息查询
退出
四、详细设计4、1数据存储
(1)无向带权图(无向网)的定义
int i,j;
char k;
for(i=0;i
for(j=0;j
{
cost[i][j]=INT_MAX;
}
cost[1][3]=cost[3][1]=2;
cost[2][3]=cost[3][2]=1;
cost[2][4]=cost[4][2]=2;
cost[3][10]=cost[10][3]=4;
cost[1][10]=cost[10][1]=4;
cost[2][10]=cost[10][2]=4;
cost[4][10]=cost[10][4]=4;
cost[1][4]=cost[4][1]=5;
cost[4][5]=cost[5][4]=3;
cost[4][9]=cost[9][4]=4;
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
cost[5][9]=cost[9][5]=8;cost[5][7]=cost[7][5]=4;cost[5][6]=cost[6][5]=2;cost[6][7]=cost[7][6]=1;cost[7][8]=cost[8][7]=3;cost[8][6]=cost[6][8]=4;cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
(2)全局变量定义
#define INT_MAX 10000 #define n 10 int cost[n][n];
/* 边的值*/ int shortest[n][n];
/* 两点间的最短距离*/ int path[n][n];
/* 经过的景点*/ 4、2主程序模块
用于作为界面,显示校园景点和概况描述,提供各子模块的连接 如上图所示 程序设计 while(1)
{
printf(“----------------欢迎使用中北大学导游系统!----------------n”);
printf(“1.景点信息查询„„„请按 i(introduc)键n”);
printf(“2.景点最短路径查询„请按 s(shortestdistance)键n”);
printf(“3.退出系统„„„„„请按 e(exit)键n”);
printf(“学校景点列表:n”);
printf(“1:学校南门
”);
printf(“2:学生公寓
”);
printf(“3:柏林园
”);
printf(“4:餐厅
”);
printf(“5:体育馆n”);
printf(“6:图书馆
”);
printf(“7:重点实验室
”);
printf(“8:主楼
”);
printf(“9:科艺苑
”);
printf(“10:国防生公寓n”);
printf(“请选择服务:”);
scanf(“n%c”,&k);
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
switch(k)
{
case 'i':
printf(“进入景点信息查询:”);
introduce();
break;
case 's':
printf(“进入最短路径查询:”);
shortestdistance();
break;
case 'e':
exit(0);
default:
printf(“输入信息错误!n请输入字母i或s或e.n”);
break;
}
} 4、3景点信息查询模块
在主菜单下,用户输入i回车,根据屏幕提示输入一个要查询的景点编号3回车后,运行结果如上图所示。
不足之处:仅能根据景点编号进行查询,可以增加根据景点名进行查询的功能。
程序设计
void introduce(){/*景点介绍*/
int a;
printf(“您想查询哪个景点的详细信息?请输入景点编号:”);
scanf(“%d”,&a);
getchar();
printf(“n”);
switch(a)
{
case 1:
printf(“1:学校南门nn 学校的正门,前面竖立着一尊彭德华的石
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
像,气势宏伟。nn”);break;
case 2:
printf(“2:学生公寓集中的地方。nn”);break;
case 3:
printf(“3:柏林园nn 晨读锻炼得地方。nn”);break;
case 4:
printf(“4:餐厅nn 学生老师就餐的地方nn”);break;
case 5:
printf(“5:体育馆nn 体育馆nn 学生上体育课及运动的场地,设有田径场、足球场、篮球场等。nn”);break;
case 6:
printf(“6:图书馆nn 学校信息资源中心,内设大量的自习室。nn”);break;
case 7:
printf(“7:重点实验室nn 我校的研究科研中心nn”);break;
case 8:
printf(“8:主楼nn 学校行政办公的主楼。nn”);break;
case 9:
printf(“9:科艺苑nn 有咖啡厅和放映室。nnn”);break;
case 10:
printf(“10: 国防生公寓nn 国防生居住地地方。nn”);break;
default:
printf(“景点编号输入错误!请输入1->10的数字编号!nn”);break;
} }/*introduce*/ 4、4景点最短路径查询模块
在主菜单下,用户输入3回车,根据屏幕提示输入一个出发景点编号及目的地景点号:6“,”3回车后,运行结果如上图所示。
不足之处:只能看到最短路径编号,但不知具体名称,设计还不够人性化。
程序设计(由floyed()和display(i,j)两个子模块完成)void floyed(){/*用floyed算法求两个景点的最短路径*/
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
int i,j,k;
for(i=1;i
for(j=1;j
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k
for(i=1;i
for(j=1;j
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
} }/*floyed*/
void display(int i,int j){/* 打印两个景点的路径及最短距离 */
int a,b;
a=i;
b=j;
printf(“您要查询的两景点间最短路径是:nn”);
if(shortest[i][j]!=INT_MAX)
{
if(i
{
printf(“%d”,b);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
printf(“
if(i
j=path[i][j];
else
i=path[j][i];
}
printf(”
printf(“nn”);
printf(“(%d->%d)最短距离是:%d米nn”,a,b,shortest[a][b]);
}
else
{
printf(“%d”,a);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
printf(“->%d”,path[i][j]);
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
if(i
j=path[i][j];
else
i=path[j][i];
}
printf(“->%d”,b);
printf(“nn”);
printf(“(%d->%d)最短距离是:%5d米nn”,a,b,shortest[a][b]);
}
}
else
printf(“输入错误!不存在此路!nn”);
printf(“n”);}/*display*/ 4、5退出
在主菜单下,用户输入e回车,即退出校园导游系统。
五、设计总结5、1用户手册
1.本程序执行文件为:湖北第二师范学院校园导游系统.exe 2.进入本系统之后,随即显示系统主菜单界面。用户可在该界面下输入各子菜单前对应的数字并按回车,执行相应子菜单命令。
3.查询景点信息都是通过输入景点编号并按回车实现,两个景点号之间用空格隔开。进入本系统后,建议先选择子菜单1――学校景点介绍,以了解景点名称和景点编号的对应关系。
5、2心得体会
通过本次课程设计实验,使我更能熟练地掌握c语言和数据结构等知识的综合运
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
用。当然在课程设计期间,也遇到了大大小小的一些问题,是我看到了自己的不足之处,使我认识到在以后的学习中要善于发现自己的不足,找出自己的薄弱环节,以便能够更好的去巩固所学的。
本次设计中要求求最短路径,不重复走完一个图,就必须了解最短路径的算发和图的遍历。在拿到题目时,通过查找相关的资料才回忆起这两种方法的具体算法。根据程序的具体要求来设计算法。在选用存储方法是,要尽量选用时间复杂度较小的方法,这样能够节省程序执行时间,提高查询效率。
课程设计中所使用的计算机语言其使用范围比较广阔,在很多编程中都可以用到,所以无论以后我们从事计算机编程、软件设计还是硬件、网络等领域,都应该学会、学精一门编程语言,这对我们以后的学习和工作有很大的帮助。
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
附录
/*包含头文件*/ #include #include
/*定义符号常量*/ #define INT_MAX 10000 #define n 10
/*定义全局变量*/ int cost[n][n];/* 边的值*/ int shortest[n][n];/* 两点间的最短距离*/ int path[n][n];/* 经过的景点*/
/*自定义函数原型说明*/ void introduce();int shortestdistance();void floyed();
void display(int i,int j);
void main(){/*主函数*/
int i,j;
char k;
for(i=0;i
for(j=0;j
cost[i][j]=INT_MAX;
cost[1][3]=cost[3][1]=2;
cost[2][3]=cost[3][2]=1;
cost[2][4]=cost[4][2]=2;cost[3][10]=cost[10][3]=4;cost[1][10]=cost[10][1]=4;cost[2][10]=cost[10][2]=4;cost[4][10]=cost[10][4]=4;
cost[1][4]=cost[4][1]=5;cost[4][5]=cost[5][4]=3;cost[4][9]=cost[9][4]=4;cost[5][9]=cost[9][5]=8;cost[5][7]=cost[7][5]=4;
cost[5][6]=cost[6][5]=2;
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
cost[6][7]=cost[7][6]=1;
cost[7][8]=cost[8][7]=3;
cost[8][6]=cost[6][8]=4;
cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;
cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
while(1)
{
printf(“----------------欢迎使用中北大学导游系统!----------------n”);
printf(“1.景点信息查询„„„请按 i(introduc)键n”);
printf(“2.景点最短路径查询„请按 s(shortestdistance)键n”);
printf(“3.退出系统„„„„„请按 e(exit)键n”);
printf(“学校景点列表:n”);
printf(“1:学校南门
”);
printf(“2:学生公寓
”);
printf(“3:柏林园
”);
printf(“4:餐厅
”);
printf(“5:体育馆n”);
printf(“6:图书馆
”);
printf(“7:重点实验室
”);
printf(“8:主楼
”);
printf(“9:科艺苑
”);
printf(“10:国防生公寓n”);
printf(“请选择服务:”);
scanf(“n%c”,&k);
switch(k)
{
case 'i':
printf(“进入景点信息查询:”);
introduce();
break;
case 's':
printf(“进入最短路径查询:”);
shortestdistance();
break;
case 'e':
exit(0);
default:
printf(“输入信息错误!n请输入字母i或s或e.n”);
break;
}
} }/*main*/
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
void introduce(){/*景点介绍*/
int a;
printf(“您想查询哪个景点的详细信息?请输入景点编号:”);
scanf(“%d”,&a);
getchar();
printf(“n”);
switch(a)
{
case 1:
printf(“1:学校南门nn 学校的正门,前面竖立着一尊彭德华的石像,气势宏伟。nn”);break;
case 2:
printf(“2:学生公寓集中的地方。nn”);break;
case 3:
printf(“3:柏林园nn 晨读锻炼得地方。nn”);break;
case 4:
printf(“4:餐厅nn 学生老师就餐的地方nn”);break;
case 5:
printf(“5:体育馆nn 体育馆nn 学生上体育课及运动的场地,设有田径场、足球场、篮球场等。nn”);break;
case 6:
printf(“6:图书馆nn 学校信息资源中心,内设大量的自习室。nn”);break;
case 7:
printf(“7:重点实验室nn 我校的研究科研中心nn”);break;
case 8:
printf(“8:主楼nn 学校行政办公的主楼。nn”);break;
case 9:
printf(“9:科艺苑nn 有咖啡厅和放映室。nnn”);break;
case 10:
printf(“10: 国防生公寓nn 国防生居住地地方。nn”);break;
default:
printf(“景点编号输入错误!请输入1->10的数字编号!nn”);break;
} }/*introduce*/
int shortestdistance(){/*要查找的两景点的最短距离*/
int i,j;
printf(“请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):”);
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
scanf(“%d,%d”,&i,&j);
if(i>n||in||j
{
printf(“输入信息错误!nn”);
printf(“ 请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):n”);
scanf(“%d,%d”,&i,&j);
}
else
{
floyed();
display(i,j);
}
return 1;}/*shortestdistance*/
void floyed(){/*用floyed算法求两个景点的最短路径*/
int i,j,k;
for(i=1;i
for(j=1;j
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k
for(i=1;i
for(j=1;j
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
} }/*floyed*/
void display(int i,int j){/* 打印两个景点的路径及最短距离 */
int a,b;
a=i;
b=j;
共 页
第 页
┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 长 春 大 学
课程设计纸
printf(“您要查询的两景点间最短路径是:nn”);
if(shortest[i][j]!=INT_MAX)
{
if(i
{
printf(“%d”,b);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
printf(“
if(i
j=path[i][j];
else
i=path[j][i];
}
printf(”
printf(“nn”);
printf(“(%d->%d)最短距离是:%d米nn”,a,b,shortest[a][b]);
}
else
{
printf(“%d”,a);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
printf(“->%d”,path[i][j]);
if(i
j=path[i][j];
else
i=path[j][i];
}
printf(“->%d”,b);
printf(“nn”);
printf(“(%d->%d)最短距离是:%5d米nn”,a,b,shortest[a][b]);
}
}
else
printf(“输入错误!不存在此路!nn”);
printf(“n”);}/*display*/
共 页
第 页
《数据结构》课 程 设 计 实 验 报 告课程名称:《数据结构》课程设计 课程设计题目: 校园导游 姓名: 邱可昉 院系: 计算机学院 专业: 计算机科学与技术 班级: 10052313 学号: 10051......
9、校园导游咨询 问题描述:设计一个校园导游程序,为来访的客人提供各种信息查询服务。 基本要求:⑴设计华东交通大学的校园平面图,所含景点不少于10个。以图中顶点表示校内各......
《导游业务》课程设计一、课程基本信息1.课程名称:导游业务2.课程类别:专业核心课3.课程编码:081024 4.学时:共70学时,其中讲授50学时,实训20学时;3学分5.适应专业:旅游管理专业二......
尊敬的各位专家,大家上午好: 热烈欢迎各位专家莅临于集小学检查指导工作。我是于集小学的老师庞明明 于集小学于1984年建校,坐落在十八里镇于集行政村于集村内。占地面积7874平......
校园导游解说词尊敬的各位来宾:你们好! 欢迎你们来到***学校!我是负责接待你们的校园导游。呵呵,先自我介绍一下我自己。我是来自*** ***。下面我先给大家简单的介绍一下我们学......
