石家庄铁道大学校园导游实习报告15800字_第1页
石家庄铁道大学校园导游实习报告15800字_第2页
石家庄铁道大学校园导游实习报告15800字_第3页
石家庄铁道大学校园导游实习报告15800字_第4页
石家庄铁道大学校园导游实习报告15800字_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

石家庄铁道大学校园导游实习报告15800字

校园导游程序班级:数0701姓名:学号:20072551日期:09-6-26实习一1.需求分析编写一个程序,可以用程序实现校园景点平面图的展示,游客可以通过此系统进行景点信息查询、游览路径查询等。①输入的形式和输入值的范围:查看所有游览路线时,输入所要查看景点的编号,其范围是0~9;选择出发地和目的地时,输入其编号,范围0~9。②输出的形式:查看全景时,通过图表的形式输出,查看路线和选择地点时,输出的是景点和距离。③程序所达到的功能:浏览全景、查看所有游览路线、选择最短路线,查询景点信息。2.概要设计1)为了实现上述程序功能,需要定义的抽象数据类型:typedefstructArCell{intadj;//路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//判断邻接矩阵中两个点是否相邻//数据结构p161页图的存储结构typedefstruct//图中顶点表示主要景点,存放景点的编号、名称、简介等信息,{charname[30];intnum;charintroduction[100];//简介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];//该指针或该数组的相关信息AdjMatrixarcs;intvexnum,arcnum;}MGraph;MGraphb;2)本程序包含11个函数:(1)主函数voidmain(void)(2)显示功能函数voidcmd(void);(3)初始化函数MGraphInitGraph(void);(4)显示操作菜单函数voidMenu(void);(5)浏览函数voidBrowser(MGraph*G);(6)按DIJ最短路径查询函数voidShortestPath_DIJ(MGraph*G);(7)按Floyd最短路径查询函数voidFloyd(MGraph*G);(8)查询的景点函数voidSearch(MGraph*G);(9)intLocateVex(MGraph*G,char*v);(10)初始化图形,接受用户输入函数MGraph*CreatUDN(MGraph*G);(11)显示景点间路径长度函数voidprint(MGraph*G);各函数间关系如下:cmdBrowserMenuMainShortestPath_DIJFloyd*CreatUDNLocateVexSearchprint4.详细设计1)结点类型和指针类型typedefstructArCell{intadj;//路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct//图中顶点表示主要景点,存放景点的编号、名称、简介等信息,{charname[30];intnum;charintroduction[100];//简介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];AdjMatrixarcs;intvexnum,arcnum;}MGraph;2)单链表的基本操作voidmenu()(伪码算法)InitGraph(&L,pos,&e)(伪码算法)LocateVex(MGraph*G,char*v)(伪码算法)3)其他模块伪码算法5源程序代码#defineINFINITY10000/*无穷大*/#defineMAX_VERTEX_NUM40//与AdjList等价adjlist邻接矩阵转化为邻接表#defineMAX40#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>typedefstructArCell{intadj;//路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//判断邻接矩阵中两个点是否相邻//数据结构p161页图的存储结构typedefstruct//图中顶点表示主要景点,存放景点的编号、名称、简介等信息,{charname[30];intnum;charintroduction[100];//简介}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];//该指针或该数组的相关信息AdjMatrixarcs;intvexnum,arcnum;}MGraph;MGraphb;voidcmd(void);//意思为空的返回值void说明没有返回值类型//C语言可以不写,如://main()//{//}//因为默认是没有返回值的//但C++中必须指明MGraphInitGraph(void);//hai数紧接着被用到voidMenu(void);voidBrowser(MGraph*G);voidShortestPath_DIJ(MGraph*G);voidFloyd(MGraph*G);voidSearch(MGraph*G);intLocateVex(MGraph*G,char*v);MGraph*CreatUDN(MGraph*G);voidprint(MGraph*G);/******************************************************/voidmain(void){system("color3f");system("modecon:cols=120lines=50");cmd();用cmd函数下面就是cmd函数}/******************************************************/voidcmd(void){inti;b=InitGraph();//调用双void函数Menu();//调用menu函数scanf("%d",&i);while(i!=5){switch(i)//开始成批的调用函数{case1:system("cls");Browser(&b);Menu();break;case2:system("cls");ShortestPath_DIJ(&b);Menu();break;case3:system("cls");Floyd(&b);Menu();break;case4:system("cls");Search(&b);Menu();break;case5:exit(1);break;default:break;}scanf("%d",&i);}}//双VOID函数结束。。。。。。。说明双void也是起框架作用的函数MGraphInitGraph(void){MGraphG;inti,j;G.vexnum=10;G.arcnum=14;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;//vexs[MAX_VERTEX_NUM]上面这样定义的strcpy(G.vexs[0].name,"综合食堂");strcpy(G.vexs[0].introduction,"新建标准化食堂");strcpy(G.vexs[1].name,"东西办公楼");strcpy(G.vexs[1].introduction,"全体教师办公场所,楼高12层,各种设施齐全");strcpy(G.vexs[2].name,"7号学生宿舍楼");strcpy(G.vexs[2].introduction,"数理系男生宿舍楼,苏式建筑");strcpy(G.vexs[3].name,"医院");strcpy(G.vexs[3].introduction,"校医院,设施不是很齐全,只能看小病,收费较贵");strcpy(G.vexs[4].name,"图书馆");strcpy(G.vexs[4].introduction,"藏书60万册,设施良好,2楼为电子阅览室,环境幽雅");strcpy(G.vexs[5].name,"足球场");strcpy(G.vexs[5].introduction,"现代化塑胶跑道,人造草坪,适宜锻炼身体的场所");strcpy(G.vexs[6].name,"沁园");strcpy(G.vexs[6].introduction,"绿树成荫,适宜休息和读书");strcpy(G.vexs[7].name,"主教学楼");strcpy(G.vexs[7].introduction,"学院最大的教学楼,共5层,环形建筑,适宜学习");strcpy(G.vexs[8].name,"西教学楼");strcpy(G.vexs[8].introduction,"学院第二大教学楼,环境较差");strcpy(G.vexs[9].name,"多媒体楼");strcpy(G.vexs[9].introduction,"多媒体教学场所,设施先进,环境良好");for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=INFINITY;G.arcs[0][1].adj=100;G.arcs[0][2].adj=150;G.arcs[0][3].adj=195;G.arcs[1][6].adj=210;G.arcs[1][3].adj=100;G.arcs[1][2].adj=180;G.arcs[2][3].adj=150;G.arcs[2][5].adj=350;G.arcs[3][4].adj=100;G.arcs[3][6].adj=110;G.arcs[4][6].adj=20;G.arcs[4][5].adj=100;G.arcs[4][9].adj=80;G.arcs[4][8].adj=130;G.arcs[5][9].adj=150;G.arcs[5][8].adj=200;G.arcs[6][8].adj=80;G.arcs[6][7].adj=80;G.arcs[6][9].adj=70;G.arcs[7][8].adj=80;G.arcs[7][9].adj=90;G.arcs[8][9].adj=150;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;returnG;}//InitGraphendvoidMenu(){printf("\n石家庄铁道学院导游图\n");printf("┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃1.浏览校园全景┃\n");printf("┃2.查看所有游览路线┃\n");printf("┃3.选择出发点和目的地┃\n");printf("┃4.查看景点信息┃\n");printf("┃5.退出系统┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("Option-:");}voidBrowser(MGraph*G){intv;printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃编号┃景点名称┃简介┃\n");for(v=0;v<G->vexnum;v++)printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃┃\n");printf("┃┏━━━━┓┏━━━━━━━━━━━━━┓┃\n");printf("┃┃5足球场┣━━━━━┓┃┏━━━━━━━━┓┃┃\n");printf("┃┗━━━━┛┣━━━━━━━━━━━━━━━━━╋┫2七号学生宿舍楼┃┃┃\n");printf("┃┃┏━━━━┓┏━━━┓┃┗━━━━━━━━┛┃┃\n");printf("┃┃┃4图书馆┃┃3医院┃┃┃┃\n");printf("┃┃┗━━┳━┛┗━┳━┛┃┃┃\n");printf("┃┃┃┃┃┏━┻━━━┓┃\n");printf("┃┏━━━━━╋━━━━╋━━━━━━━━━┻━┳┻━━━━━━━━━┳━┫0综合食堂┃┃\n");printf("┃┏━━┻━━┓┃┏━┻━┓┃┏━━━━━━┓┃┗━━━━━┛┃\n");printf("┃┃9多媒体楼┃┃┃6沁园┣━━━━━━━━━┻━━┫1东西办公楼┣┫┃\n");printf("┃┗━━━━━┛┃┗━┳━┛┗━━━━━━┛┃┃\n");printf("┃┏━━━━━┓┣━━━━┻━━┓┃┃\n");printf("┃┃8西教学楼┃┃┏━━┻━━┓┃┃\n");printf("┃┗━━┳━━┛┃┃7主教学┃┃┃\n");printf("┃┃┃┗━━┳━━┛┃┃\n");printf("┃┗━━━━━┻━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点voidShortestPath_DIJ(MGraph*G){intv,w,i,min,t=0,x,flag=1,v0;intfinal[20],D[20],p[20][20];while(flag)//while保证输入的数值在确定范围内的{printf("请输入一个起始景点编号:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("景点编号不存在!请重新输入景点编号:");scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}//intv,w,i,min,t=0,x,flag=1,v0;//intfinal[20],D[20],p[20][20];for(v=0;v<G->vexnum;v++){final[v]=0;//当结果是1时说明已经求得v0到v的最短路径D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;//p[v][w]=1说明w是从v0到v当前求得最短路径上的顶点if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;//初始化v0顶点集为s//开始主循环,每次求得v0到某一v顶点的最短路径,并加v到sfor(i=1;i<G->vexnum;i++)//其余G->vexnum-1个顶点{min=INFINITY;//当前所知离v0最近的距离for(w=0;w<G->vexnum;w++)if(!final[w])//确保定点w是存在是所求的if(D[w]<min){v=w;min=D[w];}//如果w点离v0更近则替换final[v]=1;//标识为离v0最近的v加入s集合for(w=0;w<G->vexnum;w++)//更新当前最短路径及距离if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;//实现累加过成for(x=0;x<G->vexnum;x++)?p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v)printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf("总路线长%dm\n\n",D[v]);}}//ShortestPath_DIJendvoidFloyd(MGraph*G)//求每一对顶点之间最短路径//求有向图中各对顶点v和w之间的最短路径p[v][w]及带权长度D[v][w]。//若p[v][w][u]=1则u是从v到w当前求得最短路径上的顶点{intv,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)//各对结点之间初始已知路径及距离for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY)//从v到w有直接路径{p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w])//有一条路径更短{D[v][w]=D[v][u]+D[u][w];//u就是那个捷径之间点for(i=0;i<G->vexnum;i++)//又有什么用呢????p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){printf("请输入出发点和目的地的编号:");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点编号不存在!请重新输入出发点和目的地的编号:");scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);if(k<j){for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf("总路线长%dm\n",D[k][j]);}if(j<k){for(u=G->vexnum;u>=0;u--)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf("总路线长%dm\n",D[k][j]);}printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃┃\n");printf("┃┏━━━━┓┏━━━━━━━━━━━━━┓┃\n");printf("┃┃5足球场┣━━━━━┳━━━━━━━━━━━━━━━━━┫┏━━━━━━━━┓┃┃\n");printf("┃┗━━━━┛┃┣┫2七号学生宿舍楼┃┃┃\n");printf("┃┃┏━━━━┓┏━━━┓┃┗━━━━━━━━┛┃┃\n");printf("┃┃┃4图书馆┃┃3医院┃┃┃┃\n");printf("┃┃┗━━┳━┛┗━┳━┛┃┃┃\n");printf("┃┃┃┃┃┏━┻━━━┓┃\n");printf("┃┏━━━━━╋━━━━╋━━━━━━━━━┻━┳┻━━━━━━━━━┳━┫0综合食堂┃┃\n");printf("┃┏━━┻━━┓┃┏━┻━┓┃┏━━━━━━┓┃┗━━━━━┛┃\n");printf("┃┃9多媒体楼┃┃┃6沁园┣━━━━━━━━━┻━━┫1东西办公楼┣┫┃\n");printf("┃┗━━━━━┛┃┗━┳━┛┗━━━━━━┛┃┃\n");printf("┃┏━━━━━┓┣━━━━┻━━┓┃┃\n");printf("┃┃8西教学楼┃┃┏━━┻━━┓┃┃\n");printf("┃┗━━┳━━┛┃┃7主教学┃┃┃\n");printf("┃┃┃┗━━┳━━┛┃┃\n");printf("┃┗━━━━━┻━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//FloydendvoidSearch(MGraph*G){intk,flag=1;while(flag){printf("请输入要查询的景点编号:");scanf("%d",&k);if(k<0||k>G->vexnum){printf("景点编号不存在!请重新输入景点编号:");scanf("%d",&k);}if(k>=0&&k<G->vexnum)flag=0;}printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃编号┃景点名称┃简介┃\n");printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//SearchendintLocateVex(MGraph*G,char*v){intc=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;break;}returnc;}MGraph*CreatUDN(MGraph*G)//初始化图形,接

温馨提示

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

评论

0/150

提交评论