数据结构课程设计报告(城市导游咨询)_第1页
数据结构课程设计报告(城市导游咨询)_第2页
数据结构课程设计报告(城市导游咨询)_第3页
数据结构课程设计报告(城市导游咨询)_第4页
数据结构课程设计报告(城市导游咨询)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录第一部分 引言2第二部分 课程设计报告2第一章 课程设计目的2第二章 课程设计内容和要求2问题描述2 设计要求2第三章 课程设计总体方案及分析3 问题分析3 概要设计3 详细设计4 调试分析8 测试结果9 参考文献11第三部分 课程设计总结11附录(源代码)12 第一部分 引言数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。 通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决

2、实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。数据结构是电子信息科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。因此,我们在课程设计下了一定的功夫,希望通过自己的动手加深对数据结构的了解,掌握一些经典数据结构类型,同时,在这次设计当中,我也学会

3、了许多在课堂中接触较少的内容,查阅了不少的课外资料,总之,在这次设计当中使我学到了不少,不仅在数据结构方面,在编程的了解上也更进了一步。第二部分 课程设计报告 第一章课程设计目的 利用对图的认识和最短路径的了解设计一个简单的导游咨询系统,为来访的人提供各种信息查询服务,同时加深对图的了解及对求最短路径的经典算法的掌握。第二章 课程设计内容和要求 问题描述 设计一个城市导游程序,为来访的客人提供各种信息查询服务。 设计要求(1)设计城市景点平面图,所含景点不少于8个。以图中顶点表示校内各景点,存放景点名称,代号,简介等信息;一边表示路径,存放路径长度等信息。(2)为来访的客人提供图中任意景点相关

4、信息的查询。(3)为来访的客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单的路径第三章 课程设计总体方案及分析 (1)问题分析本程序是为用户提供路径咨询。根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。(2)概要设计自定义数据类型typedef struct jingdianzifu name20; zifu dengji5; zifu jianjie100; zheng daihao;jingdian;jingdian b1t;并建立数组b1t,将各景点信息如名称,等级,简介等录入。设定数组Int costtt;cost12=cost21=1

5、0; cost23=cost32=4; cost34=cost43=11; cost56=cost65=21; cost36=cost63=20; cost14=cost41=14; cost17=cost71=8; cost47=cost74=7; cost75=cost57=15; cost78=cost87=18; cost85=cost58=3; cost11=cost22=cost33=cost44=cost55=0; cost66=cost77=cost88=0;记录个景点之间的距离。通过主模块void main()doSwitch()Case :while()来调用各个模块主模块

6、-à各个模块(3)详细设计各个景点的录入操作:void init()b11.daihao=101; strcpy(b11.dengji,"AAA"); strcpy(b11.jianjie,"这里风景优美,是放风筝的好地方"); strcpy(,"浮烟山"); b12.daihao=102; strcpy(b12.dengji,"AA"); strcpy(b12.jianjie,"是潍坊的象征,代表了鸢都"); strcpy(,"风筝广场&qu

7、ot;); b13.daihao=103; strcpy(b13.dengji,"AAA"); strcpy(b13.jianjie,"知名的大型游乐场,充满了青年人的激情"); strcpy(,"富华乐园"); b14.daihao=104; strcpy(b14.dengji,"AAA"); strcpy(b14.jianjie,"这里有各种动物及游乐设施,既是人工筑造的游乐场,也是充满自然风情的好去处"); strcpy(,"金宝乐园")

8、; b15.daihao=105; strcpy(b15.dengji,"A"); strcpy(b15.jianjie,"潍坊的本科院校,潍坊学术的聚集地,同时是一所环境优雅的院校"); strcpy(,"潍坊学院"); b16.daihao=106; strcpy(b16.dengji,"AAA"); strcpy(b16.jianjie,"四大年画产地,是潍坊文化的一种象征"); strcpy(,"杨家埠"); b17.daihao=10

9、7; strcpy(b17.dengji,"AAA"); strcpy(b17.jianjie,"充满了文化底蕴"); strcpy(,"十笏园"); b18.daihao=108; strcpy(b18.dengji,"AAA"); strcpy(b18.jianjie,"在富华乐园对面,是对潍坊文化深入了解的好去处"); strcpy(,"潍坊博物馆");找出各个景点之间的最短路径,通过弗洛伊德算法找出,具体运用为:void floyed(

10、) int i,j,k; int costtt; for(i=1;i<=t;i+) shortestii=0; /*初始化*/ for(i=0;i<=t;i+) for(j=0;j<=t;j+)costij=MAX; cost12=cost21=10; cost23=cost32=4; cost34=cost43=11; cost56=cost65=21; cost36=cost63=20; cost14=cost41=14; cost17=cost71=8; cost47=cost74=7; cost75=cost57=15; cost78=cost87=18; cost8

11、5=cost58=3; cost11=cost22=cost33=cost44=cost55=0; cost66=cost77=cost88=0; for(i=1;i<=t;i+) for(j=1;j<=t;j+) shortestij=costij; pathij=0; for(k=1;k<=t;k+) for(i=1;i<=t;i+) for(j=1;j<=t;j+) if(shortestij>(shortestik+shortestkj) /*用path记录从i到j的最短路径上点j的前驱景点的序号*/ shortestij=shortestik+sh

12、ortestkj; pathij=k; pathji=k; /*floyed*/*为了实现查询的目的设计了display(i,j)函数,其具体实现为:void display(int i,int j)/* 打印两个景点的路径及最短距离 */ int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是:nn"); if(shortestij!=MAX) if(i<j) printf("%s",); while(pathij!=0) /* 把i到j的路径上所有经过的景点按逆序打印出来*/ printf("

13、;<-%s",); if(i<j) j=pathij; else i=pathji; printf("<-%s",); printf("nn"); printf("%s->%s 最短距离是%d里",,,shortestab); else printf("%s",); while(pathij!=0) /* 把i到j的路径上所有经过的景点按顺序打印出来*/ printf("->%

14、s",); if(i<j) j=pathij; else i=pathji; printf("->%s",); printf("nn"); printf("%s->%s 最短距离是:%d里",,,shortestab); else printf("输入错误!不存在此路!nn"); /*display*/菜单设置,进行函数调用:void main () int i,j,x,y,a,b; do printf("

15、;nn"); printf(" 城市导游咨询 n"); printf("*nn"); printf(" 1-潍坊景点信息查询"); printf(" 2-景点最佳(短)选择"); printf(" 0-退出"); printf("nn"); printf("*nn"); printf("n"); printf("请选择服务选项"); scanf("%d",&y); switch(

16、y) case 1: init(); jieshao();break; case 2: init(); floyed(); printf("n"); printf("请输入起始点与终点(数字用空格隔开)nn"); shuchu(); scanf("%d%d",&i,&j); a=i;b=j; if(a>t|b>t)|(a<1|b<1) printf("输入错误请重新输入"); scanf("%d%d",&a,&b); display(a,b

17、); case 0: break; default:printf("输入错误请重新输入");x=1; while(x); (4)调试分析:通过调试,发现此程序可以实现简单的问路查询,但对于实现复杂咨询及更科学设计仍需进一步改进。(5)测试结果参考文献:数据结构(C语言版)作者严蔚敏,清华大学出版社C语言第三版 作者谭浩强附录代码:#include<stdio.h>#include<stddef.h>#include<string.h>#define t 9#define MAX 1000000typedef int zheng;typed

18、ef char zifu;typedef struct bzifu name20; zifu dengji5; zifu jianjie100; zheng daihao;b;b b1t;int shortesttt,pathtt;void init()b11.daihao=101; strcpy(b11.dengji,"AAA"); strcpy(b11.jianjie,"这里风景优美,是放风筝的好地方"); strcpy(,"浮烟山"); b12.daihao=102; strcpy(b12.dengji,&quo

19、t;AA"); strcpy(b12.jianjie,"是潍坊的象征,代表了鸢都"); strcpy(,"风筝广场"); b13.daihao=103; strcpy(b13.dengji,"AAA"); strcpy(b13.jianjie,"知名的大型游乐场,充满了青年人的激情"); strcpy(,"富华乐园"); b14.daihao=104; strcpy(b14.dengji,"AAA"); strcpy(b14.jian

20、jie,"这里有各种动物及游乐设施,既是人工筑造的游乐场,也是充满自然风情的好去处"); strcpy(,"金宝乐园"); b15.daihao=105; strcpy(b15.dengji,"A"); strcpy(b15.jianjie,"潍坊的本科院校,潍坊学术的聚集地,同时是一所环境优雅的院校"); strcpy(,"潍坊学院"); b16.daihao=106; strcpy(b16.dengji,"AAA"); strcpy(b16

21、.jianjie,"四大年画产地,是潍坊文化的一种象征"); strcpy(,"杨家埠"); b17.daihao=107; strcpy(b17.dengji,"AAA"); strcpy(b17.jianjie,"充满了文化底蕴"); strcpy(,"十笏园"); b18.daihao=108; strcpy(b18.dengji,"AAA"); strcpy(b18.jianjie,"在富华乐园对面,是对潍坊文化深入了解的好去

22、处"); strcpy(,"潍坊博物馆"); void floyed() int i,j,k; int costtt; for(i=1;i<t;i+) shortestii=0; /*初始化*/ for(i=1;i<t;i+) for(j=1;j<t;j+)costij=MAX; cost12=cost21=10; cost23=cost32=4; cost34=cost43=11; cost38=cost83=1; cost45=cost54=13; cost56=cost65=21; cost36=cost63=20; cos

23、t14=cost41=8; cost17=cost71=12; cost47=cost74=14; cost75=cost57=15; cost78=cost87=16; cost85=cost58=2; cost11=cost22=cost33=cost44=cost55=0; cost66=cost77=cost88=0; for(i=1;i<t;i+) for(j=1;j<t;j+) shortestij=costij; pathij=0; for(k=1;k<t;k+) for(i=1;i<t;i+) for(j=1;j<t;j+) if(shortest

24、ij>(shortestik+shortestkj) /*用path记录从i到j的最短路径上点j的前驱景点的序号*/ shortestij=shortestik+shortestkj; pathij=k; /pathji=k; /*floyed*/void display(int i,int j)/* 打印两个景点的路径及最短距离 */ int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是:nn"); if(shortestij!=MAX) if(i<j) printf("%s",); while

25、(pathij!=0) /* 把i到j的路径上所有经过的景点按逆序打印出来*/ printf("<-%s",); if(i<j) j=pathij; else i=pathji; printf("<-%s",); printf("nn"); printf("%s->%s 最短距离是%d里",,,shortestab); else printf("%s",); while(pathij

26、!=0) /* 把i到j的路径上所有经过的景点按顺序打印出来*/ printf("->%s",); if(i<j) j=pathij; else i=pathji; printf("->%s",); printf("nn"); printf("%s->%s 最短距离是:%d里",,,shortestab); else printf("输入错误!不存在此路!nn"); /*display*/void

27、shuchu()int i;for(i=1;i<=t;i+) printf("%d-%sn",i,);void jieshao() printf("请选择查询的景点nn");int x; shuchu(); scanf("%d",&x);switch(x)case 1:printf("代号为: %d %3s级 %3s %3s",b11.daihao,b11.dengji,,b11.jianjie);break;case 2:printf("代号为: %d %3

28、s级 %3s %3s",b12.daihao,b12.dengji,,b12.jianjie);break;case 3:printf("代号为: %d %3s级 %3s %3s",b13.daihao,b13.dengji,,b13.jianjie);break;case 4:printf("代号为: %d %3s级 %3s %3s",b14.daihao,b14.dengji,,b14.jianjie);break;case 5:printf("代号为: %d %3s级 %3s %3s",b15.daihao,b15.dengji,,b15.jianjie);break;case 6:printf(&

温馨提示

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

评论

0/150

提交评论