数据结构_校园导游系统课程设计_第1页
数据结构_校园导游系统课程设计_第2页
数据结构_校园导游系统课程设计_第3页
数据结构_校园导游系统课程设计_第4页
数据结构_校园导游系统课程设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、滨江学院数据结构课程设计 题 目 校园导游咨询程序设计 学 号 学生姓名 院 系 专 业 指导教师 二一二 年 月 日1、 题目的内容及要求设计一个校园导游程序,为来访的客人提供各种信息查询服务。2、 需求分析(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 (3)为来访客人提供图中任意景点相关信息的查询。 3、概要设计1功能模块图;void CreateUDN();/创建无向网void Search();

2、/查询景点信息void Shortestpath(int i);/计算最短路径void Output(int sight1,int sight2);/输出函数2各个模块详细的功能描述。CreateUDN();/创建无向网、主要用来保存各景点信息Search();/查询景点信息、景点的名称及介绍Shortestpath(int i);/计算两景点间最短路径Output(int sight1,int sight2);/输出两景点最短路径及信息3.模块图4、 详细设计一、图的储存结构#define Max 30000#define NUM 10typedef struct ArcCell int a

3、dj; /* 相邻接的景点之间的路程 */ ArcCell; /* 定义边的类型 */ typedef struct VertexType int number; /* 景点编号 */  char *sight; /* 景点名称 */ char *description;/* 景点描述 */VertexType; /* 定义顶点的类型 */ typedef struct VertexType vexNUM; /*&#

4、160;图中的顶点,即为景点 */ ArcCell arcsNUMNUM;/* 图中的边,即为景点间的距离 */ int vexnum,arcnum;/* 顶点数,边数 */ MGraph;  /* 定义图的类型 2、 算法1.主程序void main() int v0,v1; char ck; CreateUDN(NUM,11); do ck=Menu(); switch(ck) case '1': system("cls"); / narrate(); printf

5、("nnttt请选择起点景点(09):"); scanf("%d",&v0); printf("ttt请选择终点景点(09):"); scanf("%d",&v1); ShortestPath(v0);  /* 计算两个景点之间的最短路径 */ output(v0,v1);  /* 计算两个景点之间的最短路径 */ printf("nntttt请按任意键继续.n"); getchar(); getchar(); brea

6、k; case '2':search(); break; case '3': system("cls"); /narrate(); x0=1; HaMiTonian(1); printf("nntttt请按任意键继续.n"); getchar(); getchar(); break; ; while(ck!='e'); 2. 输出程序void output(int sight1,int sight2) int a,b,c,d,q=0; a=sight2; if(a!=sight1) /* 如果景点

7、二不和景点一输入重合,则进行 */ printf("nt从%s到%s的最短路径是",G.vexsight1.sight,G.vexsight2.sight);/* 输出提示信息 */  printf("t(最短距离为 %dm.)nnt",Da); printf("t%s",G.vexsight1.sight); d=sight1;  /* 将景点一的编号赋值给d */  for(c=0;c<NUM;+c) gate:; Pasight1=0; for

8、(b=0;b<NUM;b+) if(G.arcsdb.adj<30000&&Pab) /* 如果景点一和它的一个临界点之间存在路径且最短路径 */  printf("->%s",G.vexb.sight); /* 输出此节点的名称 */  q=q+1; /* 计数变量加一,满8控制输出时的换行 */ Pab=0; d=b;  /* 将b作为出发点进行下一次循环输出,如此反复 */ if(q%9=0) printf("n&q

9、uot;); goto gate; 3. 求最短路径  void ShortestPath(int num) int v,w,i,t; int finalNUM; int min; for(v=0;v<NUM;v+) finalv=0; Dv=G.arcsnumv.adj; for(w=0;w<NUM;w+) Pvw=0; if(Dv<30000) Pvnum=1; Pvv=1; Dnum=0; finalnum=1; for(i=0;i<NUM;+i) min=Max; for(w=0;w<NUM;+w) if(!finalw) if(Dw<mi

10、n) v=w; min=Dw; finalv=1; for(w=0;w<NUM;+w) if(!finalw&&(min+G.arcsvw.adj)<Dw) Dw=min+G.arcsvw.adj; for(t=0;t<NUM;t+) Pwt=Pvt; Pww=1; 4. 说明函数void narrate() int i,k=0; printf("ntt*欢迎使用校园导游程序*n"); printf("ntt*南京信息工程大学*n"); printf("t_n"); printf("tt景点

11、名称tt|t景点描述n"); printf("t_|_n"); for(i=0;i<NUM;i+) printf("t (%2d)%-10sttt|t%-25sn",i,G.vexi.sight,G.vexi.description); k=k+1; printf("t_|_n");5、查询景点信息void search() int num; int i; char c; char name20; do system("cls"); c=SearchMenu(); switch (c) case &

12、#39;1': system("cls"); narrate(); printf("nntt请输入您要查找的景点编号:"); scanf("%d",&num); for(i=0;i<NUM;i+) if(num=G.vexi.number) printf("nnttt您要查找景点信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意键返回."); getchar(); get

13、char(); break; if(i=NUM) printf("nnttt没有找到!"); printf("nnttt按任意键返回."); getchar(); getchar(); break; case '2': narrate(); system("cls"); printf("nntt请输入您要查找的景点名称:"); scanf("%s",name); for(i=0;i<NUM;i+) if(!strcmp(name,G.vexi.sight) printf(&

14、quot;nnttt您要查找景点信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意键返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt没有找到!"); printf("nnttt按任意键返回."); getchar(); getchar(); break; while(c!='t');6. 选择菜单char SearchMenu() cha

15、r c; int flag; do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景点编号查询 n"); printf("ttt 2、按照景点名称查询 n"); printf("ttt t、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt请输入您的选

16、择:"); scanf("%c",&c); if(c='1'|c='2'|c='t') flag=0; while(flag); return c;5、运行结果及分析系统主界面查询路径查询信息6、收获及体会 非常高兴能和同学们一起做实验,感谢各位老师以及同学们对我的帮助,特别是老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次数据结构设计的每个实验细节和每个数据,都离不开老师您的细心指导。7、源代码#include "string.h"#include "stdio.h&q

17、uot;#include "malloc.h"#include "stdlib.h"#define Max 30000#define NUM 10typedef struct ArcCell int adj; ArcCell;typedef struct VertexType int number; char *sight; char *description;VertexType; typedef struct VertexType vexNUM; ArcCell arcsNUMNUM; int vexnum,arcnum;MGraph; MGraph

18、 G; int PNUMNUM; long int DNUM; int x9=0;void CreateUDN(int v,int a);void narrate(); void ShortestPath(int num);void output(int sight1,int sight2);char Menu(); void search(); char SearchMenu(); void HaMiTonian(int); void NextValue(int); void display();void main() int v0,v1; char ck; CreateUDN(NUM,11

19、); do ck=Menu(); switch(ck) case '1': system("cls"); / narrate(); printf("nnttt请选择起点景点(09):"); scanf("%d",&v0); printf("ttt请选择终点景点(09):"); scanf("%d",&v1); ShortestPath(v0); output(v0,v1); printf("nntttt请按任意键继续.n"); getchar(

20、); getchar(); break; case '2':search(); break; case '3': system("cls"); /narrate(); x0=1; HaMiTonian(1); printf("nntttt请按任意键继续.n"); getchar(); getchar(); break; ; while(ck!='e'); char Menu() char c; int flag; do flag=1; system("cls"); narrate();

21、printf("ntttn"); printf("ttt n"); printf("ttt 1、查询景点路径 n"); printf("ttt 2、查询景点信息 n"); printf("ttt 3、推荐参观路线 n"); printf("ttt t、退出 n"); printf("ttt n"); printf("tttn"); printf("tttt请输入您的选择:"); scanf("%c"

22、;,&c); if(c='1'|c='2'|c='3'|c='t') flag=0; while(flag); return c;char SearchMenu() char c; int flag; do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景点编号查询 n"); printf("ttt 2、按照景点名

23、称查询 n"); printf("ttt t、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt请输入您的选择:"); scanf("%c",&c); if(c='1'|c='2'|c='t') flag=0; while(flag); return c;void search() int num; int i; char c; char name20; do system(

24、"cls"); c=SearchMenu(); switch (c) case '1': system("cls"); narrate(); printf("nntt请输入您要查找的景点编号:"); scanf("%d",&num); for(i=0;i<NUM;i+) if(num=G.vexi.number) printf("nnttt您要查找景点信息如下:"); printf("nnttt%-25snn",G.vexi.descriptio

25、n); printf("nttt按任意键返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt没有找到!"); printf("nnttt按任意键返回."); getchar(); getchar(); break; case '2': narrate(); system("cls"); printf("nntt请输入您要查找的景点名称:"); scanf("%s",name); for(i=0;

26、i<NUM;i+) if(!strcmp(name,G.vexi.sight) printf("nnttt您要查找景点信息如下:"); printf("nnttt%-25snn",G.vexi.description); printf("nttt按任意键返回."); getchar(); getchar(); break; if(i=NUM) printf("nnttt没有找到!"); printf("nnttt按任意键返回."); getchar(); getchar(); break;

27、 while(c!='t');void CreateUDN(int v,int a) int i,j; G.vexnum=v; G.arcnum=a; for(i=0;i<G.vexnum;+i) G.vexi.number=i; G.vex0.sight="东大门" G.vex0.description="学校正门。" G.vex1.sight="气象楼" G.vex1.description="校气象研究楼。" G.vex2.sight="体育馆" G.vex2.des

28、cription="运动,放松心情" G.vex3.sight="大学生活动中心" G.vex3.description="竞赛、晚会举办地" G.vex4.sight="图书馆" G.vex4.description="阅览,借阅图书" G.vex5.sight="滨江楼" G.vex5.description="学习,自习室" G.vex6.sight="综合楼" G.vex6.description="学习,办公室&qu

29、ot; G.vex7.sight="老食堂" G.vex7.description="餐饮休闲" G.vex8.sight="新食堂" G.vex8.description="餐饮休闲" G.vex9.sight="文园" G.vex9.description="宿舍,休息" for(i=0;i<G.vexnum;+i) for(j=0;j<G.vexnum;+j) G.arcsij.adj=Max; G.arcs01.adj=G.arcs10.adj=2; G.

30、arcs02.adj=G.arcs20.adj=1; G.arcs03.adj=G.arcs30.adj=7; G.arcs14.adj=G.arcs41.adj=8; G.arcs24.adj=G.arcs42.adj=9; G.arcs35.adj=G.arcs53.adj=5; G.arcs57.adj=G.arcs75.adj=2; G.arcs46.adj=G.arcs64.adj=3; G.arcs47.adj=G.arcs74.adj=2; G.arcs68.adj=G.arcs86.adj=2; G.arcs78.adj=G.arcs87.adj=1; G.arcs89.adj

31、=G.arcs98.adj=1;void narrate() int i,k=0; printf("ntt*欢迎使用校园导游程序*n"); printf("ntt*南京信息工程大学*n"); printf("t_n"); printf("tt景点名称tt|t景点描述n"); printf("t_|_n"); for(i=0;i<NUM;i+) printf("t (%2d)%-10sttt|t%-25sn",i,G.vexi.sight,G.vexi.descripti

32、on); k=k+1; printf("t_|_n");void ShortestPath(int num) int v,w,i,t; int finalNUM; int min; for(v=0;v<NUM;v+) finalv=0; Dv=G.arcsnumv.adj; for(w=0;w<NUM;w+) Pvw=0; if(Dv<30000) Pvnum=1; Pvv=1; Dnum=0; finalnum=1; for(i=0;i<NUM;+i) min=Max; for(w=0;w<NUM;+w) if(!finalw) if(Dw<min) v=w; min=Dw; finalv=1; for(w=0;w<NUM;+w) if(!finalw&&(min+G.arcsvw.adj)<Dw) Dw=min+G.arcsvw.adj; for(t=0;t<NUM;t+) Pwt=Pvt; Pww=1; void output(int sight1,int sight2) int a,b,c,d,q=0; a=sight2; if(a!=sight1) /*

温馨提示

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

评论

0/150

提交评论