校园导游系统(界面超级棒).doc_第1页
校园导游系统(界面超级棒).doc_第2页
校园导游系统(界面超级棒).doc_第3页
校园导游系统(界面超级棒).doc_第4页
校园导游系统(界面超级棒).doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

一、 课程设计的目的 本实习突出了数据结构加操作的程序设计观点,希望达到熟悉各种存储机构结构的特性,以及如何应用树和图机构解决具体问题的目的。 二、 课程设计内容 设 计 目 的 :了解数据结构,熟悉图的应用,并利用迪杰斯特拉算法求得2点之间的最短路径。设计技术参数: (1)设计你的学校的校园平面图,所含景点不小于10个。以图中的顶点表示学校的各个景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径,存放路径的长度等相关信息。(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。(3)为来访客人提供图中任意景点的相关信息的查询。 /*设计题目:校园导游咨询系统*设计人: 中南林业科技大学 杨海波 *制导老师:杨卫民,陈超云*时间: 2005年7月20日*/* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */#include stdio.h#include math.h#include graphics.h#include conio.h /*gotoxy*/#include bios.h/*/* 定义符号常量 */#define NULL 0#define num 20#define maxdist 10000/*/* 定义数据结构*/typedef structchar datanum;double edgesnumnum;graph;/*/* 定义全局变量 */int xnum,ynum;char anum,abnumnum;/*/*自定义函数原型说明 */void showmsg(char msg); /*逐步显示文字*/void dijkstra(graph g,int n,int i,int dnum,int pnum);void opdijk(int v1,int v0,int n,int d,int p);void info_welcome();/*/*功能:逐步显示文字 */void showmsg(char msg) int i=0; while (msgi!=0) printf(%c,msgi); i+; delay(30000); /*/*功能:用迪杰思特拉算法求图的最短路径 */void dijkstra(graph g,int n,int i,int dnum,int pnum)int snum;double mindist,dist;int j,k,u,w;for(j=0;jn;j+) dj=g.edgesij; sj=0; if(djmaxdist)&(dj!=0) pj=i; /*可到达的路径*/ else pj=-1; /*设空路径*/ si=1;for(j=0;jn-1;j+)mindist=maxdist; u=i; for(k=0;kn;k+) if(sk=0)&(dkmindist) u=k; mindist=dk; su=1; for(k=0;kn;k+) if(sk=0) dist=du+g.edgesuk; if(distdk) dk=dist; pk=u; /*/*功能:打印出图的最短路径 */void opdijk(int v1,int v0,int n,int d,int p) int i,i_1,j,k,pre; int point_x,point_y; for(i=0;in;i+) if(i!=v0&i=v1) gotoxy(5,24); printf(%c,ai); point_x=xi; point_y=yi; pre=pi; while(pre!=-1) setcolor(RED); /*/ /*闪烁终点的颜色 */ for (i_1=0;i_1%c,apre);/*/ pre=ppre; if(di=maxdist) /*line(point_x*30,point_y*30,xv0*30,yv0*30);*/ printf(-%c,av0); /*printf(tshortestway:%5f,di);*/ /*/*功能:打印出程序的帮助和欢迎信息 */void info_welcome() int i,j; char *Msg= Welcome to CSFU! , , ADDRESS:Central South , Forestry University , Changsha,Hunan,China , , TEL:+86-731-5623172 , , , HELP , Find OUT THE SHORTEST , PATH:F or f , , EXIT:Q or q , NULL, ;/*显示操作键说明 */ i=0; textcolor(WHITE); delay(90000); while(Msgi!=NULL) gotoxy(56,3+i); printf(Msgi); i+; printf(nnn); textcolor(GREEN); gotoxy(5,18); i=0; showmsg(Welcome to use school_wizard.); gotoxy(5,20); showmsg(You can choose F or Q:);/*/*功能: */main()graph g;int i,j,k,n,m,i_1,i_2,i_3;int driver,mode;int road_x,road_y;char nu,b,i_str,m_str;int dnum,pnum,sdnumnum,spnumnum;FILE *map_f,*road_f;clrscr();/*初始化变量 g.edges*/ for (i_1=0;i_1num;i_1+) for (i_2=0;i_2num;i_2+) g.edgesi_1i_2=maxdist; /*/*读取文件 map.dat(园地图的景点)&描绘校园地图的路径 */ if (map_f=fopen(map.dat,r)=0) printf(Can not open the file of map.dat.n); exit(1); fscanf(map_f,%d,&n); for(i=0;in;i+) fscanf(map_f,%d,&nu); fscanf(map_f,%d,&nu); fscanf(map_f,%d,&nu); fscanf(map_f,%c,&ai); fscanf(map_f,%d,&xi); fscanf(map_f,%d,&yi); fclose(map_f);/*/*在屏幕上描绘校园地图的景点 */loop: driver=VGA,mode=VGAHI; initgraph(&driver,&mode,); setbkcolor(BLUE); for(i=0;in;i+) setfillstyle(1,62); circle(xi*30,yi*30,3); floodfill(xi*30,yi*30,WHITE); gotoxy(xi*4+2,yi*2); printf(%c,ai); /*printf(a%d=%cnx%d=%dty%d=%dn,i,ai,i,xi,i,yi); /*调试校园地图的景点*/ setcolor(BROWN); rectangle(3,3,n*30+100,(n-2)*30); rectangle(n*30+100,3,getmaxx()-3,(n-2)*30); /*printf(n=%dn,n);/*/*调用其他函数 */info_welcome();/*/*读取文件 road.dat(园地图的路径) */for(i=0;in;i+)for(j=0;jn;j+) g.edgesij=maxdist; if (road_f=fopen(road.dat,r)=0) printf(Can not open the file of road.dat.n); exit(1); fscanf(road_f,%c,&b); for(i=0;in;i+) /*printf(n%c,b);*/ if (b=) fscanf(road_f,%c,&b); /*printf(n%c,b);*/ abi0=b; for (i_1=0;i_1n;i_1+) if (b=ai_1) /*road_x=xi_1; road_y=yi_1;*/ break; /*printf(n1 %c,%d,%d,ai_1,road_x,road_y);*/ if (b=) break; for (i_2=0;i_2num;i_2+) fscanf(road_f,%c,&b); for (i_3=0;i_3n;i_3+) if (b=ai_3) abii_2+1=b; setcolor(WHITE); line(xi_1*30,yi_1*30,xi_3*30,yi_3*30); /*/ g.edgesi_1i_3=hypot(double)(xi_1-xi_3),(double)(yi_1-yi_3); /*/ /*printf(n2 %d,%d %c,%d,%d,road_x,road_y,ai_3,xi_3,yi_3);*/ if (b=) break; if (b=) break; else for (i_2=0;i_2num;i_2+) if (b=) break; fclose(road_f);/*/*clrscr();*/* for (i_1=0;i_1num;i_1+) printf(n); for (i_2=0;i_2num;i_2+) printf(%3f ,g.edgesi_1i_2); */* for (i_1=0;i_1num;i_1+) printf(t); printf(%d,%d ,xi_1,yi_1); */*/*循环等待用户输入 */doswitch(toupper(getchar() caseQ:exit(0);caseF: getchar(); gotoxy(100,n);/* for (i_1=0;i_1n;i_1+) printf(a%d=%cn,i_1,ai_1); */ gotoxy(5,21); showmsg(Where are you NOW?:); /*scanf(%d,&m);*/ scanf(%c,&m_str); getchar(); for (i_1=0;i_1n;i_1+) if (toupper(m_str)=ai_1) m=i_1; /*/ /*闪烁源点的颜色 */ for (i_1=0;i_110 ;i_1+ ) setcolor(GREEN); circle(xm*30,ym*30,3); delay(90000); setcolor(RED); circle(xm*30,ym*30,3); delay(90000); /*/ gotoxy(5,22); showmsg(Where are you GO?:); /*scanf(%d,&i);*/ scanf(%c,&i_str); getchar(); for (i_1=0;i_1n;i_1+) if (toupper(i_str)=ai_1) i=i_1; /*/ /*闪烁终点的颜色 */ for (i_1=0;i_110 ;i_1+ ) setcolor(GREEN); circle(xi*30,yi*30,3); delay(90000); setcolor(RED); circle(xi*30,yi*30,3); delay(90000); /*/ gotoxy(5,23); printf(The shortest path FROM %c TO %c is :,ai,am); dijkstra(g,n,i,d,p); opdijk(m,i,n,d,p); printf(nnn); system(pause); clrscr(); goto loop; break; while(1); 附件:文件名: map.dat (用TAB键隔开)11A 10 6B 8 4C 5 1D 5 3E 5 5F 5 6G 5 7H 4 6I 2 4J 1 4K 1 8 map.dat文件数据 map.dat文件的解释 11A 10 6B 8 4C 5 1D 5 3E 5 5F 5 6G 5

温馨提示

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

评论

0/150

提交评论