校园导游咨询课程设计.doc_第1页
校园导游咨询课程设计.doc_第2页
校园导游咨询课程设计.doc_第3页
校园导游咨询课程设计.doc_第4页
校园导游咨询课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学计算机科学与技术学院太原理工大学校园导游咨询目录一、设计方案简介(01)二、设计题目实现(01) 1) 需求分析(01)2) 概要设计(01)3) 详细设计(02)4) 测试分析(04)5) 使用说明(06)6) 测试结果(06)三、 设计附录部分(08)1) 参考资料(08)2) 源 程 序(08)一、 设计方案简介:值此太原理工大学110周年校庆之际,做一个为来访游客介绍校园参观的小应用程序。不仅能方便游客,熟悉校园环境,更快的了解我们学校。还能检验一下我们所学理论,将所学的知识运用于实际生活。一举两得之余,也是一段知识的升华之路。该导游系统能为来访者提供包括景点介绍、景点查询、仿真地图、最短路径之类的快捷指导。所谓系统,也不尽然,只是一个小小的信息提示。其中主要运用到的程序、算法也较简单。二、 设计题目实现:1) 需求分析从太原理工大学迎西校区的平面图中选取16个有代表性的景点,抽象成一个无向带权图,以图中顶点表示景点,边上的权表示两地的之间的距离。本程序的目的是为用户提供路径查询。根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。程序中用到的校园平面图可以用制表符绘制出来,虽然过程繁琐,但在DOS环境中显示的效果还是不错的,故用之可行。测试数据:(附后)。2) 概要设计1. 抽象数据类型图的定义如下:ADT Graph数据对象View:View是具有相同特性的数据元素的集合,称为顶点集。数据关系MGr: MGr.View MGr.length=(i,j)|i,jView,(i,j)表示i和j之间存在路径。基本操作: 此程序不涉及诸如创建图、销毁图等;2. 主程序:int main()初始化;while()接受命令;处理命令;退出;3. 程序模块:主函数 调 用 函 数3)详细设计1. 顶点、边、和图类型: #define MaxViewNum 50 /景点个数最大值 #define MaxRoad 1000 /定义路径无穷大 #define N 16 /目前景点个数 typedef struct char name; /景点名称 char number; /景点代号char introduce; /景点介绍Elemtype;typedef structint num; /景点编号Elemtype date; /景点信息View; /定义景点typedef struct View viewMaxViewNum;/ unsigned int lengthMaxViewNumMaxViewNum;/ int m,n;MGraph; 2. 基本操作: void init(GraphType &MGr.view,int i j) /景点信息函数,初始化各个景点信息数据; void introduce(GraphType &MGraph.view,int m) /查询景点介绍函数,若m存在,则返回景点编号所在信息,并返回TRUE /否则返回FALSE; void floyd(GraphType &MGr.view,int i,j,k) /弗洛伊德算法,求两景点最短距离; void display(GraphType &MGr.view,int a b) /输出两景点路径及最短路径; int shortdistance(GraphType &MGr.view,int i j) /计算两景点最短路径函数; void map(GraphType &MGr.view) /景点平面图函数;4. 函数调用模块:maindisplayshortdistanceintroduceinitmapfloyd4)测试分析本程序参考西安邮电学院校园导游咨询系统编写而成,其中的景点编号设计,弗洛伊德算法部分,平面图绘制均亲自完成。期间或自我摸索,或查找资料,或请教同学,最终实现了该系统的DOS环境实现。编程过程不断出现各种BUG,均能设法将其化解,算是在实践中学得编译运行调试指法。以下是编写过程中出现过的几个较大漏洞,直接导致程序的BUG,在此记录下来作为之后自省。a. scanf中缺少“取地址符”,输入不起作用;b. 在命令2完成之后,显示多出来主函数中“选择命令”。自己试图更正无果之后询问同学,建议添加fflush(stdin)语句,终于显示无错;c. 源程序所给的“求最短路径”算法错误,参照课本弗洛伊德算法之后写出本程序所用的算法,值得肯定;d. 调用display函数时错误,经过同学指点,删掉五句冗余代码,程序成功运行。书上介绍的迪杰斯特拉算法时间复杂度要比弗洛伊德算法低,但每求一次最短路径都必须重新搜索一遍,频繁查找时会导致效率降低。而弗洛伊德算法只需计算一次,即可求得每一对顶点之间的最短效率,虽然时间复杂度为O(n3),但以后每次查询只要查表即可,极大提高了效率。 本次程序设计是对全学期数据结构课程学习的一次实践,通过亲自编写编译调试程序,逐步掌握了编程方法。也说明了一个深刻道理,知识只有在实践中才能充分理解并运用。从传统的被动接受变为主动探索,起初不是很适应,什么也不懂,茫然无措。渐渐地开始自己编写时候,发现了其中之乐趣。我相信,这样的学习坚持到底,必将有所成就。设计过程需要查找各种资料,在百度等搜索工具的帮助下,找到想要的资源。但并非原版照抄,在自己理解的基础上参照方法写出属于自己的程序。虽然过程中出现多次程序报错,在同学的指导和帮助下顺利完成,值得为之欣喜。其中编程过程中显露出来的问题也必须引起高度重视,在今后的学习中必当万分注意绝不再犯。比如细心问题,有次的一个小小的“取地址符”没有添加,导致整个程序无法运行,检查了好久才发现。所以说,编程是个细活,只有严谨的态度,细心的思路以及良好的学习习惯,最终才能收获成功的喜悦。最后感谢在编程过程中给予充分帮助的老师和同学们,这又使我认识到团队力量的强大作用。加强团队协作也是今后程序设计道路上的必备能力。5)使用说明 1.本程序的运行环境为DOS操作环境,执行文件为:schoolguide.exe;2.进入演示程序之后如下图所示: 3.之后可选择按键1、2、3选择各项目,分别进入景点介绍、路径查询、全景地图等项目。6)测试结果1. 操作命令“1”,进入“景点信息查询”模块,任意选择1-16各景点编号输入。此处选择景点9作为测试对象,其结果如下图所示:2. 操作命令“2”,进入“景点最短路径查询”模块,任意选择1-16中两个景点编号输入。此处选择景点7-9作为测试对象,其输出如下图所示: 3. 操作命令“3”,输出校园中各景点的平面图,如下: 4. 选择命令“4”,输出如图: 附录一:参考资料1. 太原理工大学卓越专业应用程序课程设计指导书;2. 百度文库校园导游设计算法应用;3. 道客巴巴西安邮电学院导游设计源代码;4. 数据结构题集实习报告示例5.5:校园导游咨询;5. 数据结构(C语言版)课本佛洛依德算法;附录二:源程序 #include#include#include#define MaxViewNum 50 /*景点个数最大50*/#define MaxRoad 1000 /*定义路径为无穷大*/#define N 16 /*目前景点个数*/typedef struct char name30; /*景点名称*/ char number10; /*景点代号*/ char introduce200; /*景点介绍*/Elemtype;typedef struct int num; /*景点编号*/ Elemtype date; /*景点信息*/View; /*定义景点*/typedef struct View viewMaxViewNum; /*存放顶点的一维数组,数组第零单元没有用上*/ unsigned int lengthMaxViewNumMaxViewNum; /*存放路径长度*/ int m,n;MGraph;MGraph MGr; /*全局变量,定义MGr为MGraph类型*/int shortestMaxViewNumMaxViewNum; /*定义全局变量存贮最小路径*/int pathMaxViewNumMaxViewNum; /*定义存贮路径*/void init() int i,j; MGr.view1.num=1; strcpy(MG,学校正门); strcpy(MGr.view1.date.number,001); strcpy(MGroduce,毗邻迎泽大街,交通便利。); MGr.view2.num=2; strcpy(MG,行政楼); strcpy(MGr.view2.date.number,002); strcpy(MGroduce,学校领导,办公主楼。); MGr.view3.num=3; strcpy(MG,东配楼); strcpy(MGr.view3.date.number,003); strcpy(MGroduce,化工学院); MGr.view4.num=4; strcpy(MG,科学楼); strcpy(MGr.view4.date.number,004); strcpy(MGroduce,科技创新,教育专线,网络节点中心。); MGr.view5.num=5; strcpy(MG,电气馆); strcpy(MGr.view5.date.number,005); strcpy(MGroduce,电气学院,百年建筑。); MGr.view6.num=6; strcpy(MG,多学科喽); strcpy(MGr.view6.date.number,006); strcpy(MGroduce,综合教学楼,土木、计算机、采矿,985、211标志性建筑。); MGr.view7.num=7; strcpy(MG,迎西苑); strcpy(MGr.view7.date.number,007); strcpy(MGroduce,学生宿舍区,本科、研究生,以及教师公寓。); MGr.view8.num=8; strcpy(MG,餐厅); strcpy(MGr.view8.date.number,008); strcpy(MGroduce,清泽、智林、风味三大餐厅,周边开水房等服务场所。); MGr.view9.num=9; strcpy(MG,图书馆); strcpy(MGr.view9.date.number,009); strcpy(MGroduce,历史悠久,文化积淀。清泽园毗邻,厚重人文氛围。); MGr.view10.num=10; strcpy(MG,体育馆); strcpy(MGr.view10.date.number,010); strcpy(MGroduce,绿茵地、活动中心。篮球场、足球场、网球场依次,丰富课余生活。); MGr.view11.num=11; strcpy(MG,国际交流中心); strcpy(MGr.view11.date.number,011); strcpy(MGroduce,外国留学生、外籍教师上课活动场所。); MGr.view12.num=12; strcpy(MG,教学楼); strcpy(MGr.view12.date.number,012); strcpy(MGroduce,一号主楼、八号楼,上课、自习,教学专属。); MGr.view13.num=13; strcpy(MG,中西广场); strcpy(MGr.view13.date.number,013); strcpy(MGroduce,日晷、智林长廊,历史回忆之所); MGr.view14.num=14; strcpy(MG,机械馆); strcpy(MGr.view14.date.number,014); strcpy(MGroduce,机械工程学院,历史遗迹,文物保护单位。); MGr.view15.num=15; strcpy(MG,附属小学); strcpy(MGr.view15.date.number,015); strcpy(MGroduce,太原理工子弟小学。); MGr.view16.num=16; strcpy(MG,西配楼); strcpy(MGr.view16.date.number,016); strcpy(MGroduce,材料学院。); for(i=1;i=N;i+) for(j=1;j=N;j+) MGr.lengthij=MaxRoad; for(i=1;i=N;i+) shortestij=0; MGr.length12=MGr.length21=30; MGr.length23=MGr.length32=50; MGr.length34=MGr.length43=60; MGr.length35=MGr.length53=120; MGr.length56=MGr.length65=20; MGr.length67=MGr.length76=230;MGr.length69=MGr.length96=50; MGr.length78=MGr.length87=50; MGr.length89=MGr.length98=230;MGr.length810=MGr.length108=50; MGr.length911=MGr.length119=50; MGr.length1011=MGr.length1110=230; MGr.length1112=MGr.length1211=60; MGr.length1213=MGr.length1312=60;MGr.length1314=MGr.length1413=60; MGr.length1114=MGr.length1411=60;MGr.length1614=MGr.length1416=80;MGr.length1315=MGr.length1513=80;MGr.length216=MGr.length162=50; MGr.length11=MGr.length22=MGr.length33=MGr.length44=0; MGr.length55=MGr.length66=MGr.length77=MGr.length88=0; MGr.length99=MGr.length1010=MGr.length1111=MGr.length1212=0; MGr.length1313=MGr.length1414=MGr.length1515=MGr.length1616=0;void introduce() int m; printf(请输入查询景点编号:n); scanf(%d,&m); fflush(stdin); switch(m) case 1: printf(景点编号:%st,MGr.view1.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 2: printf(景点编号:%st,MGr.view2.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 3: printf(景点编号:%st,MGr.view3.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 4: printf(景点编号:%st,MGr.view4.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 5: printf(景点编号:%st,MGr.view5.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 6: printf(景点编号:%st,MGr.view6.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 7: printf(景点编号:%st,MGr.view7.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 8: printf(景点编号:%st,MGr.view8.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break;case 9: printf(景点编号:%st,MGr.view9.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 10: printf(景点编号:%st,MGr.view10.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 11: printf(景点编号:%st,MGr.view11.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 12: printf(景点编号:%st,MGr.view12.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 13: printf(景点编号:%st,MGr.view13.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 14: printf(景点编号:%st,MGr.view14.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 15: printf(景点编号:%st,MGr.view15.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; case 16: printf(景点编号:%st,MGr.view16.date.number); printf(景点名称:%sn,MG); printf(景点简介:%sn,MGroduce); break; default: printf(输入序号错误。n); break; printf(n);void floyd() /*佛洛依德算法*/ int i,j,k; for(i=1;i=N;i+) for(j=1;j=N;j+) shortestij=MGr.lengthij; pathij=0; /*初始化数组*/ for(k=1;k=N;k+) for(i=1;i=N;i+) for(j=1;j(shortestik+shortestkj) shortestij=shortestik+shortestkj; pathij=k; pathji=k; /*记录经过的路径*/end_if /end_for void display(int i,int j) /*打印两个景点的路径及最短路径*/ int a,b; a=i; b=j; printf(您要查询的两景点间最短路径是: nn); fflush(stdin);if(ij) printf(%d,b); while(pathij!=0) printf(-%d,pathij);if(ij) j=pathij;else i=pathji; printf(%d的最短路径是: %d 米。nn,a,b,shortestab);else printf(%d,a); while(pathij!=0) /*把i到j的路径上所有经过的景点按顺序打印出来*/printf(-%d,pathij);if(i%dnn,b); printf(%d-%d的最短路径是: %d 米。nn,a,b,shortestab);/*display*/int shortdistance() /*要查找的两景点的最短路径*/ int i,j; printf(请输入要查询的两个景点的数字编号(1-16)中间用空格间隔开。n); scanf(%d %d,&i,&j); if(iN|iN|j16)中间用空格间隔开。n);scanf(%d %d,&i,&j); else floyd();display(i,j); return 1; ffl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论