校园导游系统课程设计报告.docx
- 文档编号:24020405
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:15
- 大小:125.98KB
校园导游系统课程设计报告.docx
《校园导游系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《校园导游系统课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
校园导游系统课程设计报告
1、需求分析
设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1).设计潍坊学院校园平面图,所含的景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、算法设计
2.1概要设计
2.1.1函数定义的变量
/*定义符号常量*/
#defineINT_MAX10000
#definen10
/*定义全局变量*/
intcost[n][n];/*边的值*/
intshortest[n][n];/*两点间的最短距离*/
intpath[n][n];/*经过的景点*/
2.1.2程序中包含的模块
(1)主程序模块
voidmain()/*主函数*/
打印菜单,景点,景点信息
定义景点之间的权值
(2)查询模块
景点信息查询:
voidintroduce()/*景点介绍*/
最短路径查询:
intshortestdistance()/*要查找的两景点的最短距离*/
voidfloyed()/*用floyed算法求两个景点的最短路径*/
(3)打印模块
打印最短路径:
voiddisplay(inti,intj)/*打印两个景点的路径及最短距离*/
2.1.3模块间的调用关系
2.2详细设计
#include
#include
/*定义符号常量*/
#defineINT_MAX10000
#definen10
/*定义全局变量*/
intcost[n][n];/*边的值*/
intshortest[n][n];/*两点间的最短距离*/
intpath[n][n];/*经过的景点*/
/*自定义函数说明*/
voidintroduce();
intshortestdistance();
voidfloyed();
voiddisplay(inti,intj);
voidmain()
{
inti,j;
chark;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
cost[i][j]=INT_MAX;
cost[1][7]=cost[7][1]=200;
cost[1][4]=cost[4][1]=200;
cost[4][7]=cost[7][4]=300;
cost[2][7]=cost[7][2]=400;
cost[4][10]=cost[10][4]=100;
cost[4][9]=cost[9][4]=150;
cost[4][8]=cost[8][4]=200;
cost[10][5]=cost[5][10]=50;
cost[10][9]=cost[9][10]=150;
cost[2][8]=cost[8][2]=50;
cost[2][3]=cost[3][2]=100;
cost[6][5]=cost[5][6]=150;
cost[5][9]=cost[9][5]=150;
cost[9][8]=cost[8][9]=50;
cost[8][3]=cost[3][8]=150;
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("‖〓〓〓〓〓〓〓★欢迎使用潍坊学院导游系统!
★〓〓〓〓〓〓〓‖");
printf("‖‖");
printf("‖1.景点信息查询———————请按〖introduc〗键‖");printf("‖‖");
printf("‖2.景点最短路径查询—————请按s〖shortestdistance〗键‖");printf("‖‖");
printf("‖3.退出系统—————————请按e〖exit〗键‖");printf("‖‖");
printf("‖学校景点列表:
‖");printf("‖‖");
printf("‖1:
学校南门2:
操场3:
体育馆4:
行政楼5:
一号宿舍‖");printf("‖‖");printf("‖6:
二号餐厅7:
天一教学楼8:
洪德湖9:
图书馆10:
一号餐厅‖");printf("‖‖");
printf("‖〓〓〓〓〓〓★欢迎使用潍坊学院导游系统!
★〓〓〓〓〓〓〓‖\n");
printf("\n【请选择服务】:
");
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;
}
}
}
voidintroduce()/*景点介绍*/
{
inta;
printf("请输入您想查询的景点的编号:
");
scanf("%d",&a);
getchar();
printf("\n");
switch(a)
{
case1:
printf("1:
学校南门\n 学校的正门,坐落于东风街上,气势庄严,宏伟。
\n\n");break;
case2:
printf("2:
操场\n 学生上体育课及运动的场地,设有田径场、足球场、篮球场等。
\n\n");break;
case3:
printf("3:
体育馆\n 曾作为全运会的比赛场地,气势宏伟。
\n\n");break;
case4:
printf("4:
行政楼\n 学校的行政办公楼,位于学校中心位置。
\n\n");break;
case5:
printf("5:
一号宿舍\n 条件最好的学生宿舍,冬凉夏暖,绝对通风,漏光。
\n\n");break;
case6:
printf("6:
二号餐厅\n 学校最大的餐厅。
\n\n");break;
case7:
printf("7:
天一教学楼\n 学校主要教学楼之一。
\n\n");break;
case8:
printf("8:
洪德湖\n 学校的花园,设有喷泉,假山。
\n\n");break;
case9:
printf("9:
图书馆\n 学校信息资源中心,内设大量的自习室。
\n\n");break;
case10:
printf("10:
一号餐厅\n 学校第二大餐厅。
\n\n");break;
default:
printf("景点编号输入错误!
请输入1->10的数字编号!
\n\n");break;
}
}/*introduce*/
intshortestdistance()/*要查找的两景点的最短距离*/
{
inti,j;
printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):
");
scanf("%d,%d",&i,&j);
if(i>n||i<=0||j>n||j<0)
{
printf("输入信息错误!
\n\n");
printf(" 请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):
\n");
scanf("%d,%d",&i,&j);
}
else
{
floyed();
display(i,j);
}
return1;
}/*shortestdistance*/
voidfloyed()/*用floyed算法求两个景点的最短路径*/
{
inti,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;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*/
voiddisplay(inti,intj)/*打印两个景点的路径及最短距离*/
{
inta,b;
a=i;
b=j;
printf("您要查询的两景点间最短路径是:
\n\n");
if(shortest[i][j]!
=INT_MAX)
{
if(i { printf("%d",b); 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",a); printf("\n\n"); printf("(%d->%d)最短距离是: %d米\n\n",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("\n\n"); printf("(%d->%d)最短距离是: %5d米\n\n",a,b,shortest[a][b]); } } else printf("输入错误! 不存在此路! \n\n"); printf("\n"); }/*display*/ 3测试结果 3.1主程序界面 根据图中提示选择要执行的操作 图1主界面 3.2输入错误 输入i,s,e来完成相应的操作,如果输入有误,系统将显示错误信息,请重新输入。 3.3景点信息的查询 输入你要查询的景点名称: 通过调用函数voidintroduce()来查询景点信息。 如果输入的景点不存在,系统会提示你输入错误,请重新输入。 图2信息查询界面 输入编号存在,则系统显示要查询的景点信息。 3.4最短路径查询 输入你所在的景点和要到达的景点,将输出这两点的最短距离: 调用函数voidfloyed();来求最短路径。 图3路径查询界面 3.5退出系统 根据提示按“e”退出该系统,程序结束。 4、总结报告 通过本次课程设计实验,使我更能熟练地掌握c语言、c++以及数据结构等知识的综合运用。 当然在课程设计期间,也遇到了大大小小的一些问题,是我看到了自己的不足之处,使我认识到在以后的学习中要善于发现自己的不足,找出自己的薄弱环节,以便能够更好的去巩固所学的。 本次设计中要求求最短路径,就必须了解最短路径的算法: Dijkstra算法和Floyd算法。 在拿到题目时,通过查找相关的资料才回忆起这两种方法的具体算法。 比较这两种算法的复杂度,尽量选用复杂度小。 当然任何程序都不可能完美,往往会牺牲程序的空间来换取时间,或者牺牲时间来换取足够大的空间,这就需要根据程序的具体要求来设计算法。 在选用存储方法是,要尽量选用时间复杂度较小的方法,这样能够节省程序执行时间,提高查询效率。 课程设计中所使用的计算机语言其使用范围比较广阔,在很多编程中都可以用到,所以无论以后我们从事计算机编程、软件设计还是硬件、网络等领域,都应该学会、学精一门编程语言,这对我们以后的学习和工作有很大的帮助。 参考文献 [1].秦锋.数据结构: 中国科学技术大学出版社,2007 [2].温秀梅,丁学钧.VisualC++面向对象程序设计.北京: 清华大学出版社,2007 [3].徐孝凯.C++语言基础教程.北京: 清华大学出版社,2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导游 系统 课程设计 报告