校园导游咨询程序_第1页
校园导游咨询程序_第2页
校园导游咨询程序_第3页
校园导游咨询程序_第4页
校园导游咨询程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

太原理工大学计算机科学与技术学院PAGE2012年01月实验三:校园导游咨询设计方案简介设计一个校园导游程序,为来访的客人提供各种信息查询服务。1)设计你所在学校的校园平面图,2)为来访客人提供图中任意景点相关信息的查询。3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。设计题目实现:实际需求1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息:以边表示路径,存放路径长度等相关信息。2)为来访客人提供图中任意景点相关信息的查询。3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。2)概要设计校园全景一览图、显示出校园的平面图。提供校园中任意景点问路查询,即求任意两个景点之间的所有路径。3、提供校园图中多个景点的最佳访问路线查询,即求途径这过个景点的最佳(短)路径。1.功能模块图;voidMap();//校园地图voidCreateGraph();//创建图voidOutputPlace();//输出景点列表voidSearchPlace();//查询景点信息voidSearchPath();//查询最短路径voidShortpath(inti);//计算最短路径voidOutput(intsight1,intsight2);//输出函数2.各个模块详细的功能描述。Map();//显示校园整体的地图、包含学校各景点的详细位置CreateGraph();//创建图、主要用来保存各景点信息OutputPlace();//输出景点列表、供选择景点信息查询时使用SearchPlace();//查询景点信息、景点的名称及介绍SearchPath();//查询最短路径、两景点间最短距离Shortpath(inti);//计算两景点间最短路径Output(intsight1,intsight2);//输出两景点最短路径及信息四.详细设计Main()1.功能函数的调用关系图Main()CreateGraph()gate:;//标号,可以作为goto语句跳转的位置path[a][sight1]=0;for(b=0;b<NUM;b++){ if(G.arc[d][b].length<MAX&&path[a][b])//如果景点一和它的一个临界点之间存在路径且最短路径 { printf(">%s",G.vertex[b].name);//输出此节点的名称 q=q+1;//计数变量加一,满8控制输出时的换行 path[a][b]=0; d=b;//将b作为出发点进行下一次循环输出,如此反复 if(q%14==0)printf("\n"); gotogate; }} } printf("\n\n\t\t\t\t\t\t最短距离为%dm.\n\n\t",D[a]); } }五.测试数据及运行结果系统主界面学校平面图学校景点图最短路径信息查询异常信息设计评述:设计者对本设计的评述及通过设计的收获体会改进方案系统还有部分漏洞未能修复、不够绝对的稳定、还需改进!求最短路径时可以采用比较简单的哈密尔顿算法。本次课程设计仅完成了要求的基本功能、由于平时掌握的不够好以及时间关系未能完成选作功能、这是一大缺陷!另外通过本次课程设计也更好的掌握了平时所学的知识、通过实践学到了许多课本上没有的知识!体会以后要加强动手时间能力、多与同学交流算法精髓!在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!报告最后有两部分附录附录一:参考资料1、C语言程序设计(谭浩强版)2、数据结构(C语言版)编著:严蔚敏、吴伟民清华大学出版社附录二:源程序(将所有的源程序附在最后的附录中)//查询景点信息.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"stdio.h"#include<string.h>#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>#defineNUM20#defineMAX100000#defineFALSE0#defineTURE1typedefstructArcNode{intlength;//路径长度}ArcNode,*ArcLink;//边结点的定义typedefstructVertexNode{intnumber;//景点的编号char*name;//景点的名称char*info;//景点的简介}VertexNode;//顶点结点的定义typedefstructGraph{VertexNodevertex[NUM];ArcNodearc[NUM][NUM];intvexnum,arcnum;//图的顶点数,边数}Graph;//图的定义GraphG;intpath[NUM][NUM];intD[NUM];voidCreateGraph();//创建图voidMap();//学校地图voidoutputplace();//输出校园景点名称voidsearchplace();//查询景点信息voidsearchpath();//查询最短路径voidshortestpath_DIJ(intnum);//迪杰斯特拉算法最短路径voidoutput(intsight1,intsight2);//输出函数voidCreateGraph()//创建图{ inti,j; G.vexnum=12; G.arcnum=17; for(i=1;i<NUM;i++) G.vertex[i].number=i; G.vertex[1].name="太原理工大学正门"; G.vertex[1].info="学校正门位于学校的正南方向、是进入学校前的第一道亮丽\n\t\t的风景线!\n"; G.vertex[2].name="电机馆"; G.vertex[2].info="电机馆是数学系,电子信息系,自动化,通讯等学院的学院楼!\n"; G.vertex[3].name="科学楼"; G.vertex[3].info="科学楼是我校科研机构场所,也是山西省网关所在地!\n"; G.vertex[4].name="多学科楼"; G.vertex[4].info="科学楼是计算机科学与技术学院,软件学院,电子信息学院,\n\t\t土木,建筑的学院楼,也是我校最好的学院楼!\n"; G.vertex[5].name="图书馆"; G.vertex[5].info="太原理工图书馆经历了初创时期,发展时期,面向现代化的转型时期。\n\t\t如今,她已经发展成为资源丰富,现代化,综合性,开放式的图书馆!\n"; G.vertex[6].name="机械馆"; G.vertex[6].info="机械馆是我校百年高校最有力的体现!\n\t\t是欧式风格建筑,外观宏伟气派\n\t\t为机械学院的学院楼!\n"; G.vertex[7].name="篮球场"; G.vertex[7].info="篮球场全橡胶场,每天这里打球人员特多,我校篮球队\n\t\t在历年的CUBA联赛上取得佳绩,是我们引以为豪的校队!\n"; G.vertex[8].name="清泽餐厅"; G.vertex[8].info="清泽餐厅是我校最现代化的食堂,提供各种美食!\n"; G.vertex[9].name="学生宿舍"; G.vertex[9].info="这里是我校学生宿舍集中所在地,包括本科生,研究生宿舍,\n\t\t是我们在学校的家!\n"; G.vertex[10].name="文体中心"; G.vertex[10].info="文体中心包括体育馆,体育场,各种体育娱乐场所,供学生\n\t\t体育锻炼的地方!\n"; G.vertex[11].name="国际交流中心"; G.vertex[11].info="国际交流中心是外国留学生居住学习科研的场所!\n"; for(i=0;i<NUM;++i) for(j=0;j<NUM;++j) G.arc[i][j].length=MAX; G.arc[1][2].length=G.arc[2][1].length=60; G.arc[1][3].length=G.arc[3][1].length=30; G.arc[1][6].length=G.arc[6][1].length=70; G.arc[2][3].length=G.arc[3][2].length=10; G.arc[2][4].length=G.arc[4][2].length=50; G.arc[2][6].length=G.arc[6][2].length=100; G.arc[4][5].length=G.arc[5][4].length=20; G.arc[5][6].length=G.arc[6][5].length=40; G.arc[5][7].length=G.arc[7][5].length=10; G.arc[7][8].length=G.arc[8][7].length=15; G.arc[8][9].length=G.arc[9][8].length=400; G.arc[8][10].length=G.arc[10][8].length=120; G.arc[9][10].length=G.arc[10][9].length=500; G.arc[10][11].length=G.arc[11][10].length=80; G.arc[11][5].length=G.arc[5][11].length=100; G.arc[11][6].length=G.arc[6][11].length=500;}voidMap()//学校地图{ printf("\n\n"); system("cls"); printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┒\n"); printf("\t┃太原理工大学校园图┃\n"); printf("\t┃注:此图按正门布局而画,方位并非上北下南左西右东!┃\n"); printf("\t┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("\t┃┏————┒\n"); printf("\t┃┃学生宿舍┃\n"); printf("\t┃::┗--┛┃\n"); printf("\t┃┏┒┏┒┃\n"); printf("\t┃┃文体中心┃┃清泽餐厅┃┃\n"); printf("\t┃┗┛┗┛┃\n"); printf("\t┃::┃\n"); printf("\t┃::┃\n"); printf("\t┃:┍┒┃\n"); printf("\t┃:┃篮球场┃┃\n"); printf("\t┃:┗┛┃\n"); printf("\t┃::┃\n"); printf("\t┃::┃\n"); printf("\t┃┍┒┏┒┏┒┃\n"); printf("\t┃┃国际交流┃┃图书馆┃┃多学科楼┃┃\n"); printf("\t┃┗┛┗┛┗┛┃\n"); printf("\t┃:::┃\n"); printf("\t┃:::┃\n"); printf("\t┃:┏┒:┏┒:┃\n"); printf("\t┃:...┃机械馆┃┃电机馆┃:┃\n"); printf("\t┃┗┛:┗-┛:┃\n"); printf("\t┃:::┃\n"); printf("\t┃::┏┒┃\n"); printf("\t┃::┃科学楼┃┃\n"); printf("\t┃::┗┛┃\n"); printf("\t┃┏┒:┋┃\n"); printf("\t┃┃太原理工大学大门┃'''''''''''''┃\n"); printf("\t┃┗┛┎┓┃\n"); printf("\t┃┃北┃\n"); printf("\t┃┃西╋东┃\n"); printf("\t┃┃南┃\n"); printf("\t┃┗┛┃\n"); printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");}voidoutputplace()//输出校园景点名称{ printf("\t┎━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t┃太原理工大学学校景点一览表┃\n"); printf("\t┠━━━━━━━━━━━━━┲━━━━━━━━━━┃\n"); printf("\t┃1.学校正门┃2.电机馆┃\n"); printf("\t┠━━━━━━━━━━━━━╂━━━━━━━━━━┃\n"); printf("\t┃3.科学楼┃4.多学科楼┃\n"); printf("\t┠━━━━━━━━━━━━━╂━━━━━━━━━━┃\n"); printf("\t┃5.图书馆┃6.机械馆┃\n"); printf("\t┠━━━━━━━━━━━━━╂━━━━━━━━━━┃\n"); printf("\t┃7.篮球场┃8.清泽餐厅┃\n"); printf("\t┠━━━━━━━━━━━━━╂━━━━━━━━━━┃\n"); printf("\t┃9.学生宿舍┃10.文体中心┃\n"); printf("\t┠━━━━━━━━━━━━━╂━━━━━━━━━━┃\n"); printf("\t┃11.国际交流中心┃┃\n"); printf("\t┗━━━━━━━━━━━━━┸━━━━━━━━━━┛\n");}voidsearchplace()//查询景点信息{ inti,num; charc='y'; while(c=='y'){ system("cls"); outputplace(); printf("\t\t请输入您要查找的景点编号:"); scanf("%d",&num); getchar(); system("cls"); if(num>0&&num<=G.vexnum)//判定信息输入正确 { for(i=1;i<=G.vexnum;i++) if(num==G.vertex[i].number) { printf("\n\t\t景点编号:%d\n",i); printf("\t\t景点名称:%s\n",G.vertex[i].name); printf("\t\t景点简介:%s\n\n",G.vertex[i].info); } } else printf("\t\t信息输入有误!\n"); num=0; printf("\n\t\t是否继续查询景点信息(y/n):"); c=getchar(); getchar();}system("cls");}voidsearchpath()//查询最短路径{ inti,j;charc='y';while(c=='y'){ system("cls"); outputplace(); printf("\n\n\t\t初始景点编号(1->11):"); scanf("%d",&i); printf("\t\t最终景点编号(1->11):"); scanf("%d",&j); getchar(); if(i>G.vexnum||i<=0||j>G.vexnum||j<0||i==j) printf("\t\t输入信息错误!\n\n"); else { shortestpath_DIJ(i); output(i,j); } printf("\n\t\t是否继续查询最短路径(y/n):"); c=getchar(); getchar();}system("cls");}voidshortestpath_DIJ(intnum)//迪杰斯特拉算法最短路径{ intv,w,i,t;//i、w和v为计数变量//t表示景点个数 intfinal[NUM];//标志数组、用来存放顶点的信息 intmin;//记录权值、最终输出路径 for(v=0;v<NUM;v++) { final[v]=FALSE;//假设从顶点num到顶点v没有最短路径 D[v]=G.arc[num][v].length;//将num到其余顶点的最短路径长度初始化为权值 for(w=0;w<NUM;w++) path[v][w]=FALSE;//初始化从v到w的路径值 if(D[v]<MAX)//存在路径 { path[v][num]=TURE;//存在标志置为一 path[v][v]=TURE;//自身到自身 } } D[num]=0;//初始化新路径 final[num]=TURE;//初始化num顶点属于final集合 //开始主循环,每一次求得num到某个顶点的最短路径,并将其加入到final集合 for(i=0;i<NUM;++i)//其余G.vexnum-1个顶点 { min=MAX;//当前所知离顶点num的最近距离 for(w=0;w<NUM;++w) if(!final[w])//w顶点在v-s中 if(D[w]<min)//w顶点离num顶点更近 { v=w; min=D[w]; } final[v]=TURE;//离num顶点更近的v加入到s集合 for(w=0;w<NUM;++w)//更新当前最短路径极其距离 if(!final[w]&&((min+G.arc[v][w].length)<D[w]))//不在s集合,并且比以前所找到的路径都短就更新当前路径 { D[w]=min+G.arc[v][w].length;//更新路径 for(t=0;t<NUM;t++) path[w][t]=path[v][t]; path[w][w]=TURE; } } }voidoutput(intsight1,intsight2)//输出函数{ inta,b,c,d,q=0;//a、b、c和d为计数变量//q控制计数变量、用于换行 a=sight2;//将景点二赋值给a if(a!=sight1)//如果景点二不和景点一输入重合,则进行... { printf("\t\t从%s到%s的最短路径是:\n\n\t\t",G.vertex[sight1].name,G.vertex[sight2].name);//输出提示信息 //输出sight1到sight2的最短路径长度,存放在D[]数组中 printf("%s",G.vertex[sight1].name);//输出景点一的名称 d=sight1;//将景点一的编号赋值给d for(c=0;c<NUM;++c) {gate:;//标号,可以作为goto语句跳转的位置path[a][sight1]=FALSE;for(b=0;b<NUM;b++){ if(G.arc[d][b].length<MAX&&path[a][b])//如果景点一和它的一个临界点之间存在路径且最短路径 { printf(">%s",G.vertex[b].name);//输

温馨提示

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

评论

0/150

提交评论