校园导游系统综述.docx
- 文档编号:12647813
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:15
- 大小:347.77KB
校园导游系统综述.docx
《校园导游系统综述.docx》由会员分享,可在线阅读,更多相关《校园导游系统综述.docx(15页珍藏版)》请在冰豆网上搜索。
校园导游系统综述
课程设计说明书
课程名称:
数据结构与算法
设计题目:
校园导游系统
学院:
计算机科学与信息工程学院
学生姓名:
****
学号:
**********
专业班级:
计算机科学与技术(信息技术方向)11-1
指导教师:
****
2013年6月21日
课程设计任务书
校园导游系统
摘要:
现代快节奏的生活使得人们越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径(游客),如何简单的修改相关的信息(程序维护人员),就成了很重要的问题。
本设计基于图的结构,用数组表示法创建一个无向图,针对游客的实际需求,将安阳工学院的景点编号、名称、介绍等信息放入到图的顶点当中,将路径长度的信息存放在弧当中。
利用迪杰斯特拉算法来求从一个景点到其他剩余的所有景点的最短距离;利用弗洛伊德算法求出两个景点之间的最短路径,用相应的函数来查找景点,并显示出它的编号,信息,简介。
并进行一定的界面美化,更贴近用户,相应的提示使用户操作起来更容易。
关键词:
无向图、查找信息、最短距离、修改景点信息
1.设计背景
1.1系统设计内容
依据课程设计的要求,利用一个无向图的结构,将景点当作图的顶点,将景点之间的距离当作权值来储存,然后根据游客自己的需求,按照显示屏上的提示来进行查找景点介绍,查找两个景点之间的最短距离,退出程序等基本操作。
1.2系统设计的必要性
现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中。
旅游可以使我们身心放松,但如果我们对景点一无所知,将会给我们带来不必要的麻烦。
本系统正是帮助游客解决这些麻烦的,因此,它的存在是必要的。
2.设计方案
2.1景点抽象图
图1
2.2程序模块图
本软件的算法依据无向图的操作通过查找函数查找景点的信息,通过弗洛伊德算法求得两个景点之间的最短路径,通过迪杰斯特拉函数来输出一个景点到其余所有景点之间的最短距离,初始化无向图信息,读取景点的编号、名称、介绍和两个景点之间的距离即权值,然后将其加入到图当中,再调用查找函数查找景点的信息,查找完成依照提示退出程序。
其模块图如图1所示:
2.3程序设计要求
用无向网表示你所在学校的校园景点平面图,图中顶点表示主景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
1.景点信息和路径信息保存在文本文件,景点个数不少于20个。
2.查询各景点的相关信息。
3.求多个景点的最佳(最短)游览路径。
4.查询图中任意两个景点间的最短路径。
5.查询图中任意两个景点间的所有路径。
6.增加、删除、更新有关景点和道路的信息。
2.4主函数设计概要
基于程序的操作要求,对于主函数的设计首先调用system(“cls”)函数显示一个欢迎界面,接着显示一个可视化的操作界面提醒游客进行相关的操作和提示游客其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。
而后就是一个switch()的选择函数,并用此函数实现程序的八大功能:
景点信息一览表,提供查找景点信息,增删修改景点信息,一个景点到其余所有景点的最短路径,两个景点之间的所有路径,查找两个景点之间的最短距离,清屏和退出程序。
完成相关的选择操作后进入到选择的操作界面当中,从而实现所需要的功能。
2.5各函数模块的功能
1.调用无向网的初始化信息实现景点信息的查询以及全部输出,2.应用迪杰斯特拉算法实现一个景点到其余所有景点的最短路径的输出,3.应用弗洛伊德算法实现两个景点的最短路径的查询,4.更改无向网的初始化实现更改景点信息,5.调用system(“cls”)函数实现清屏功能,6.调用exit()函数实现退出程序的功能。
3.方案实施
3.1程序执行流程图
当我们想要更加实际的了解一个程序的算法过程的时候,就要根据程序的流程图来给我们一个比较实际的过程,从流程图当中能够更加清楚整个程序实现的过程是怎样的。
其流程图如图2所示:
图3
3.2主函数设计思想
while
(1){//无限循环完成程序的循环执行
switch(choise){
case0:
printall(G);break;//0.所有景点信息一览表
case1:
searchinfo(G);break;//1.景点信息查询
case2:
shortpath(G);break;//2.查询两个顶点间的最短路径
case3:
oubleall(G);break;//3.查询两个景点间所有的路径
case4:
changevex(G);break;//4.增加,删除,更新有关景点的信息
case5:
shortallpath(G);break;//5.一个景点到其他所有景点的
//最短路径(迪杰斯特拉)
case6:
system("cls");break;//6.清屏
case7:
exit(0);//退出程序
default:
break;
}
用一个无限循环实现程序的循环执行,但是死循环是无法自动退出的,因此增加7号功能,调用exit()函数实现退出程序的操作。
主函数采用模块化设计,将函数的功能放在函数中实现,简化主函数。
相应的函数模块实现对应的功能:
0号1号功能即所有景点信息一览表和景点信息查询,调用无向网的初始化信息实现景点信息的查询以及全部输出。
2号功能即查询两个顶点间的最短路径,应用弗洛伊德算法实现两个景点的最短路径的查询。
3号功能即查询两个景点间所有的路径,应用图的遍历查询两个景点间所有的路径。
4号功能即增加,删除,更新有关景点的信息,更改无向网的初始化实现更改景点信息。
5号功能实现一个景点到其他所有景点的最短路径(迪杰斯特拉)。
6号功能调用system(“cls”)函数实现清屏功能。
7号功能调用exit()函数实现退出程序的功能。
3.3函数模块实现思想:
两景点之间的最短路径(弗洛伊德算法)
弗洛伊德算法仍然使用图的邻接矩阵arcs[n+1][n+1]来存储带权有向图。
算法的基本思想是:
设置一个nxn的矩阵A(k),其中除对角线的元素都等于0外,其它元素a(k)[i][j]表示顶点i到顶点j的路径长度,K表示运算步骤。
开始时,以任意两个顶点之间的有向边的权值作为路径长度,没有有向边时,路径长度为∞,当K=0时,A(0)[i][j]=arcs[i][j],以后逐步尝试在原路径中加入其它顶点作为中间顶点,如果增加中间顶点后,得到的路径比原来的路径长度减少了,则以此新路径代替原路径,修改矩阵元素。
功能1:
让用户输入要查询的两个点,并将数值进行传递。
功能2:
对结果进行输出
功能3:
用voidshotpath()函数对输入的数据进行计算。
其中D[30][30]数组表示两个景点之间的最短路径,p[30][30][30]数组中的值表示两个景点之间的最短路径上的所有点,要在函数中将这两个数组初始化,后用三个for循环完成弗洛伊德算法的计算。
3.4程序模块源代码
两个景点之间的最短路径(弗洛伊德算法)
voidshortpath(MGraphG){
intn,m,v;
intD[30][30],p[30][30][30];//p数组中的值表示两个景点之间的最短路径上的所有点
for(v=0;v for(intw=0;w D[v][w]=G.arcs[v][w].adj;//D数组中的值表示两个景点之间的最短路径的距离 for(intr=0;r if(D[v][w] p[v][w][v]=1;p[v][w][w]=1;//vw为vw之间最短路径上的点 } } for(v=0;v for(intw=0;w for(intu=0;u if(D[v][u]+D[u][w] D[v][w]=D[v][u]+D[u][w]; for(intr=0;r p[v][w][r]=p[v][u][r]||p[u][w][r]; } printf("请输入要查询的两个顶点: "); scanf("%d%d",&n,&m); n=n-1;m=m-1; printf("\n两个景点的最短路径是: \n"); while(n<0||n>G.vexnum||m<0||m>G.vexnum){//判断输入的n值是否超出景点个数的范围 printf("输入的数字超出景点个数! \n请重新输入: "); scanf("%d%d",&n,&m); } printf("%s",G.vexs[n].name);//查找的始景点 for(intu=0;u if(p[n][m][u]&&n! =u&&m! =u)//输出最短路径上中间景点名称 printf("--->%s",G.vexs[u].name); printf("-->%s",G.vexs[m].name);//查找的末景点 printf("\n最短距离为%d\n",D[n][m]);//始末景点之间最短路径的距离 } 4.程序运行结果 4.1主函数功能模块测试 主函数执行时的欢迎界面,运行程序,可显示所做程序的名称和所有小组成员的欢迎界面,测试结果如图4所示: 图4 主函数功能提示界面,可显示出程序界面的所有功能及要查询的项目,测试结果如图5所示: 图5 4.2成员负责模块测试 程序执行结果如图6,选择需要查询的项目2并回车,可以查询两个景点的最短路径,如图6所示: 图6 输入顶点2(图书馆)和顶点5(机械系)并回车,可以查询图书馆到机械系的最短路径和最短距离,如图7所示: 图7 再次选择功能2,输入3(风雨操场)和6(经管系)并回车,可以查询风雨操场到经管的最短路径和最短距离,如图8所示: 图8 4.3程序整体测试 测试结果如图所示: 输入需要查询的项目3,运行程序,可以输出机械系到计科系两个景点之间的所有路径: 图9 五号功能的执行结果,输入编号6,显示从经管学院到安阳工学院所有景点的最短路径,运行结果如图10所示: 图10 0,1,2,4功能在前面有所介绍,在此不再介绍。 6号功能实现清屏操作。 4.4软件使用说明 运行程序,出现校园导游系统的软件欢迎界面,按下任意键进入功能提示界面。 程序采用简洁的界面,简明的提示完成程序功能的提示说明,选择相应的功能完成对应的操作: 0号功能: 景点信息一览表 1号功能: 查询景点信息 2号功能: 查询两个景点的最短路径 3号功能: 查询两个景点之间的所有路径 4号功能: 增加,删除,更新有关景点信息 5号功能: 一个景点到其他景点的最短路径 6号功能: 清屏 7号功能: 退出程序 进入相应的功能模块,按照提示完成需要查找的项目。 5.结论 经过这次课程设计,我对程序中算法的概念理解的更加透彻。 算法是程序中必不可少的部分,它是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 《数据结构》在计算机科学中是一门综合性的专业基础课。 数据结构的研究不仅涉及到计算机的硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。 在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方面。 因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。 在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。 由于水平有限,本导游图系统的功能还比较简单,还有一些好的设想没有实现。 本导游图系统还有一定的局限性,如果存在只有一条通路的景点,导游图将无法求得最佳旅游路径。 通过这次的课程设计,对数据结构中定义无向图和创建无向图的理解更加深刻,不断提升认识,提高编程技巧,借以不断地提高程序设计水平,了解数据结构在编写比较复杂的程序的重要作用;理解了迪杰斯特拉算法的原理,但对于其算法的程序编写还是不太明白;学会了在编写几百行程序时如何查找错误,如何改错误等等。 总而言之,这次的课程设计很好地锻炼自己实际操作能力。 6.收获与致谢 首先感谢本小组的所有成员,由于各成员擅长的方面各有不同,分工不同,负责的模块相关的知识难度也有差异,大家相互鼓励,互相帮助,共同克服种种困难,共同努力,团结协作。 共同完成了校园导游系统程序。 其次感谢我们的老师,如果不是老师的耐心指导,我们也不可能完成这次设计。 每次找到老师问问题,他都不辞辛劳的耐心为我们讲解,尽心竭力为本组讲解相关的理论知识,为本组的校园导游系统程序的完成提供很大的帮助。 当然,这也应该感谢我们的组长,小组工作他做的最多,他的责任最大,负责的也最多。 最后还要感谢我们的学校,是学校提供了我们学习这门课程的机会,为我们提供了良好的学习环境。 7.参考文献 [1]谭浩强C程序设计(第四版)[M].清华大学出版,2012 [2]严蔚敏吴伟民数据结构(C语言版)[M].清华大学出版社,2011 8.附件 导游系统.cpp 指导教师评语: 1、课程设计报告: a、内容: 不完整□完整□详细□ b、方案设计: 较差□合理□非常合理□ c、实现: 未实现□部分实现□全部实现□ d、文档格式: 不规范□基本规范□规范□ 2、出勤: 全勤□缺勤次 3、答辩: a、未能完全理解题目,答辩情况较差□ b、部分理解题目,部分问题回答正确□ c、理解题目较清楚,问题回答基本正确□ d、理解题目透彻,问题回答流利□ 课程设计报告成绩: ,占总成绩比例: 50% 课程设计其它环节成绩: 环节名称: 出勤,成绩: ,占总成绩比例: 20% 环节名称: 答辩,成绩: ,占总成绩比例: 30% 总成绩: 指导教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导游 系统 综述