c语言课程设计-导游系统_第1页
c语言课程设计-导游系统_第2页
c语言课程设计-导游系统_第3页
c语言课程设计-导游系统_第4页
c语言课程设计-导游系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、I数据结构课程设计报告数据结构课程设计报告西湖导游系统学 号: 姓 名: 专业班级: 日 期: 信息科学与工程系 III数据结构课程设计报告目 录1课程设计的目的11.1课程设计题目11.2课程设计目的12课程设计的内容12.1 题目分析12.2 系统程序模块设计12.2.1景点信息查询12.2.2 景点地图12.2.3景点最短路径查询12.2.4退出系统13景点信息查询及求最短路径问题的实现13.1景点信息查询及求最短路径系统涉及的物理结构13.1.1 图的逻辑结构和物理结构13.1.2 Floyd的逻辑结构和物理结构23.2景点信息查询及求最短路径系统主要模块的设计23.2.1 景点基本信

2、息和路径的定义23.2.2 Floyd求最短路径的实现53.2.3选择函数84西湖导游系统的测试及运行效果94.1 主界面94.2 景点信息查询94.3地图显示94.4 最短路径查询94.5 功能选项选择错误104.6 查询最短路径景点输入错误105系统设计遇到的问题及解决方案116总结与收获12附 西湖导游系统程序源代码12I数据结构课程设计报告1课程设计的目的1.1课程设计题目西湖导游系统1.2课程设计目的这个课程设计是为了方便的查询景点信息,找出景点之间的最短路径,其中把景点信息用图的数组存储,求两点之间的最短路径用Floyd算法。正确分析题目中的数据涉及的数据结构,并将数据结构的逻辑结

3、构、物理结构及其算法应用于解决实际问题,即理论与实际结合起来,提高编写程序的能力。掌握模块化程序设计方法以及程序的调试方法和技巧。2课程设计的内容2.1 题目分析这次的课程设计中需要把多个景点的信息存储,所以用了图的数组法来存储景点信息,求最短路径问题上,Floyd是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。2.2 系统程序模块设计2.2.1景点信息查询用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入想要查询的景点的编号,回车后系统将在已存储的景点中进行匹配,若该景点信息尚未存储则将提示错误;若找到对应信息则系统将输出景点信息,显

4、示于幕上方;2.2.2 景点地图显示景点的分布情况。2.2.3景点最短路径查询用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。若输入信息合法,则回车后系统将给出最短路径,显示于屏幕上方;2.2.4退出系统选择此功能模块,系统将自动退出。3景点信息查询及求最短路径问题的实现3.1景点信息查询及求最短路径系统涉及的物理结构3.1.1 图的逻辑结构和物理结构因为在这次的课程设计中,景点的个数是固定的,再者需要求最短路径的问题,所以需要用图的数组法来保存景点的信

5、息。以此方便景点信息的调用和之后最短路径的调用和计算。3.1.2 Floyd的逻辑结构和物理结构要求的是两个地点之间的最短路径,是多源的,所以用Floyd算法,它是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。3.2景点信息查询及求最短路径系统主要模块的设计3.2.1 景点基本信息和路径的定义 typedef struct char name30;/景点名称 char number10;/景点序号 char introduce200;/景点介绍Elemtype;typedef struct int num; /景点编号 Elemtype data; /景点信息Vi

6、ew; /定义景点typedef struct View viewMaxViewNum;/存放顶点的一维数组,数组第零单元没有用上 unsigned int lengthMaxViewNumMaxViewNum; /存放路径长度 if(shortestij!=MGr.lengthij) int m,n;MGraph;MGraph MGr; /全局变量,定义MGr为MGraph类型int shortestMaxViewNumMaxViewNum; /定义全局变量存贮最小路径int pathMaxViewNumMaxViewNum; /定义存贮路径view()/十个景点的具体信息 int i,j;

7、MGr.view1.num=1; strcpy(MG,"苏堤春晓"); strcpy(MGroduce,"苏堤春晓俗称苏公堤,为西湖十景之首。是一条贯穿西湖南北风景区的林荫大堤,苏堤南起南屏山麓,北到栖霞岭下,全长近三公里,堤宽平均36米。"); MGr.view2.num=2; strcpy(MG,"曲院风荷"); strcpy(MGroduce,"曲院风荷位于西湖西侧,岳飞庙前面。南宋时,此

8、有一座官家酿酒的作坊,取金沙涧的溪水造曲酒,闻名国内。附近的池塘种有菱荷,每当夏日风起,酒香荷香沁人心脾,因名“曲院风荷”。"); MGr.view3.num=3; strcpy(MG,"平湖秋月"); strcpy(MGroduce,"平湖秋月,西湖十景之一,位于白堤西端,孤山南麓,濒临外西湖。凭临湖水,登楼眺望秋月,在恬静中感西湖的浩淼,洗涤烦躁的心境,是她的神韵所在。"); MGr.view4.num=4; strcpy(MG,"

9、断桥残雪"); strcpy(MGroduce,"断桥的石桥拱面无遮无拦,在阳光下冰雪消融,露出了斑驳的桥栏,而桥的两端还在皑皑白雪的覆盖下。依稀可辩的石桥身似隐似现,而涵洞中的白雪奕奕生光,桥面灰褐形成反差,远望去似断非断,故称断桥。"); MGr.view5.num=5; strcpy(MG,"柳浪闻莺"); strcpy(MGroduce,"南宋时,这里是京城最大的御花园,称聚景园。当时园内有会芳殿和三堂、九亭,以及柳浪桥和学士桥。

10、清代恢复柳浪闻莺旧景。有柳洲之名。其间黄莺飞舞,竞相啼鸣,故有“柳浪闻莺”之称。"); MGr.view6.num=6; strcpy(MG,"花巷观鱼"); strcpy(MGroduce,"红鱼池位于园中部偏南处,是全园游赏的中心区域。池岸曲折自然,池中堆土成岛,池上架设曲桥,倚桥栏俯看,数千尾金鳞红鱼结队往来,泼刺戏水。"); MGr.view7.num=7; strcpy(MG,"雷锋夕照"); strcpy(MGr.

11、roduce,"位于西湖湖南、净慈寺前的夕照山上,因晚霞镀塔,佛光普照而闻名。"); MGr.view8.num=8; strcpy(MG,"双峰插云"); strcpy(MGroduce,"巍巍天目山东走,其余脉的一支,遇西湖而分弛南山、北山,形成环抱状的名胜景区,两山之巅既南高峰和北高峰。"); MGr.view9.num=9; strcpy(MG,"南屏晚钟"); strcpy(MG

12、roduce,"即指南屏山净慈寺傍晚的钟声,南屏山在杭州西湖南岸、玉皇山北,九曜山东。主峰高百米,林木繁茂,石壁如屏,北麓山脚下是净慈寺,傍晚钟声清越悠扬。"); MGr.view10.num=10; strcpy(MG,"三潭映月"); strcpy(MGroduce,"岸上金桂婆娑,柳绿花明,与雕栏画栋的建筑相映成趣。具有湖中有岛,岛中有湖,园中有园,曲回多变,步移景新的江南水上庭园的艺术特色。"); for(i=1;i<=

13、N;i+)for(j=1;j<=N;j+) MGr.lengthij=MaxRoad; for(i=1;i<=N;i+) shortestij=0; MGr.length12=MGr.length21=2;/设定已有路径的长度 MGr.length23=MGr.length32=5; MGr.length28=MGr.length82=3; MGr.length29=MGr.length92=4; MGr.length26=MGr.length62=3; MGr.length64=MGr.length46=6; MGr.length67=MGr.length76=5; MGr.le

14、ngth36=MGr.length63=10; MGr.length57=MGr.length75=7; MGr.length310=MGr.length103=8; MGr.length11=MGr.length22=0; MGr.length33=MGr.length44=0; MGr.length55=MGr.length66=0; MGr.length77=MGr.length88=0; MGr.length99=MGr.length1010=0; 3.2.2 Floyd求最短路径的实现void floyd() /用floyed算法求两个景点的最短路径int i,j,k; /所求两个景

15、点i,j及中间经过点kfor(i=1;i<=N;i+) for(j=1;j<=N;j+) shortestij=MGr.lengthij; pathij=0; for(k=1;k<=N;k+)for(i=1;i<=N;i+)for(j=1;j<=N;j+) if(shortestij>(shortestik+shortestkj) /用path记录从i到j的最短路径上点j的前驱景点的序号shortestij=shortestik+shortestkj; pathij=k; pathji=k; /floyedvoid display(int i,int j)

16、void introduce();/打印两个景点的路径及最短距离int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是:nn"); fflush(stdin);if(shortestij!=MaxRoad) if(i<j) printf("%s",MG); while(pathij!=0) / 把i到j的路径上所有经过的景点按逆序打印出来printf("<-%s",MG);/调用景点名称printf("<

17、;-%s",MG); if(i<j) j=pathij; else i=pathji; printf("<-%sn",MG);printf("%s->%s的最短路径是: %d 千米。nn",MG,MG,shortestab);else printf("%s",MG); while(pathij!=0) /把i到j的路径上所有经过的景点按顺序

18、打印出来printf("->%s",MG);if(i<j) j=pathij; else i=pathji; printf("->%sn",MG);printf("%s->%s的最短路径是: %d 千米。n",MG,MG,shortestab);else /输入景点路径不合法时提示错误printf("输入错误!不存在此路!nn"); printf(

19、"n"); 3.2.3选择函数int n=0;char k;while(1)fflush(stdin);/清屏scanf("%c",&k); switch(k) /选择语句 case 'i': printf("进入景点信息查询:"); introduce();printf("请输入字母i,m,s或e.nn");break;case 'm': printf("景点地图:"); map();printf("请输入字母i,m,s或e.nn")

20、;break;case 's': printf("进入最短路径查询:"); shortestdistance();printf("请输入字母i,m,s或e.nn");break;case 'e':printf("欢迎您的使用");exit(0); default:/ 输入号不合法时提示错误printf("nn输入信息错误!n请输入字母i,m,s或e.nn");break; 4西湖导游系统的测试及运行效果4.1 主界面如图4.1. 图4.1主界面4.2 景点信息查询 查询景点编号为2的

21、景点信息,如图4.2. 图4.2 景点信息查询4.3地图显示如图 最短路径查询 查询编号3到5的最短路径,如图 功能选项选择错误如图 查询最短路径景点输入错误 如图4.6. 图4.3地图显示图4.4 最短路径查询 图4.5 功能选项选择错误 4.6 查询最短路径景点输入错误5系统设计遇到的问题及解决方案问题1:在主函数前定义函数没有进行声明。问题2:Floyd函数中三个for循环的嵌套关系出错,到时结果错误,之后是参照其他程序,在网上又学习了一遍用法后改正。问题3:在用switch函数,输入功能错误时出现两次提示,在switch前的scanf上加了清屏

22、fflush(stdin)后,错误解决。问题4:在刚开始做的时候景点信息直接用的输出调出景点信息,没有用结构体存储,在想添加景点信息的时候发现这个错误。.问题5:主函数中没有调用景点信息函数view,而是在introude函数中调用,结果导致只能在查询景点信息的时候调用景点的信息,而在求最短路径的时候,编译没有错误,输出的结果不能正确显示,一直误以为是Floyd用法出错。最后是把view函数放到主函数中,问题解决。6总结与收获这次课程设计中,我更加熟悉了图的数组表示法及Floyd函数的用法,在不断调试过程中,学习到了更多的知识,这次设计感觉并不是太好。增删和修改景点的功能没有实现,程序中也存在

23、一些Bug。通过这次课程设计,我对程序中算法的概念理解的更加透彻。算法是程序中必不可少的部分,它是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。同时,在选择算法时必须考虑算法的时间复杂度和空间复杂度,这样才能让程序正常,高效的运行。数据结构在计算机科学中是一门综合性的专业基础课.数据结构的研究不仅涉及到计算机的硬件(特别是编码理论、存储装置和存取方法

24、等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题.在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方面.因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程.在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。附 西湖导游系统程序源代码#include<stdio.h>#include<stdlib.h>#include<string.h

25、>#define MaxViewNum 50/景点个数最大50#define MaxRoad 1000 /定义路径为无穷大#define N 10 /目前景点个数void map();/自定义函数原型说明(景点地图)void floyd();/自定义函数原型说明void display(int i,int j);/自定义函数原型说明void introduce(); /自定义函数原型说明typedef struct char name30;/景点名称 char number10;/景点序号 char introduce200;/景点介绍Elemtype;typedef struct in

26、t num; /景点编号 Elemtype data; /景点信息View; /定义景点typedef struct View viewMaxViewNum;/存放顶点的一维数组,数组第零单元没有用上 unsigned int lengthMaxViewNumMaxViewNum; /存放路径长度 if(shortestij!=MGr.lengthij) int m,n;MGraph;MGraph MGr; /全局变量,定义MGr为MGraph类型int shortestMaxViewNumMaxViewNum; /定义全局变量存贮最小路径int pathMaxViewNumMaxViewNu

27、m; /定义存贮路径 view()/十个景点的具体信息 int i,j;MGr.view1.num=1; strcpy(MG,"苏堤春晓"); strcpy(MGroduce,"苏堤春晓俗称苏公堤,为西湖十景之首。是一条贯穿西湖南北风景区的林荫大堤,苏堤南起南屏山麓,北到栖霞岭下,全长近三公里,堤宽平均36米。"); MGr.view2.num=2; strcpy(MG,"曲院风荷"); strcpy(MGr.view2.data.in

28、troduce,"曲院风荷位于西湖西侧,岳飞庙前面。南宋时,此有一座官家酿酒的作坊,取金沙涧的溪水造曲酒,闻名国内。附近的池塘种有菱荷,每当夏日风起,酒香荷香沁人心脾,因名“曲院风荷”。"); MGr.view3.num=3; strcpy(MG,"平湖秋月"); strcpy(MGroduce,"平湖秋月,西湖十景之一,位于白堤西端,孤山南麓,濒临外西湖。凭临湖水,登楼眺望秋月,在恬静中感西湖的浩淼,洗涤烦躁的心境,是她的神韵所在。"); MGr.view4.num=

29、4; strcpy(MG,"断桥残雪"); strcpy(MGroduce,"断桥的石桥拱面无遮无拦,在阳光下冰雪消融,露出了斑驳的桥栏,而桥的两端还在皑皑白雪的覆盖下。依稀可辩的石桥身似隐似现,而涵洞中的白雪奕奕生光,桥面灰褐形成反差,远望去似断非断,故称断桥。"); MGr.view5.num=5; strcpy(MG,"柳浪闻莺"); strcpy(MGroduce,"南宋时,这里是京城最

30、大的御花园,称聚景园。当时园内有会芳殿和三堂、九亭,以及柳浪桥和学士桥。清代恢复柳浪闻莺旧景。有柳洲之名。其间黄莺飞舞,竞相啼鸣,故有“柳浪闻莺”之称。"); MGr.view6.num=6; strcpy(MG,"花巷观鱼"); strcpy(MGroduce,"红鱼池位于园中部偏南处,是全园游赏的中心区域。池岸曲折自然,池中堆土成岛,池上架设曲桥,倚桥栏俯看,数千尾金鳞红鱼结队往来,泼刺戏水。"); MGr.view7.num=7; strcpy(MGr.view7.data

31、.name,"雷锋夕照"); strcpy(MGroduce,"位于西湖湖南、净慈寺前的夕照山上,因晚霞镀塔,佛光普照而闻名。"); MGr.view8.num=8; strcpy(MG,"双峰插云"); strcpy(MGroduce,"巍巍天目山东走,其余脉的一支,遇西湖而分弛南山、北山,形成环抱状的名胜景区,两山之巅既南高峰和北高峰。"); MGr.view9.num=9; strcpy(MGr.view9.da

32、,"南屏晚钟"); strcpy(MGroduce,"即指南屏山净慈寺傍晚的钟声,南屏山在杭州西湖南岸、玉皇山北,九曜山东。主峰高百米,林木繁茂,石壁如屏,北麓山脚下是净慈寺,傍晚钟声清越悠扬。"); MGr.view10.num=10; strcpy(MG,"三潭映月"); strcpy(MGroduce,"岸上金桂婆娑,柳绿花明,与雕栏画栋的建筑相映成趣。具有湖中有岛,岛中有湖,园中有园,曲回多变,步移景新

33、的江南水上庭园的艺术特色。"); for(i=1;i<=N;i+)for(j=1;j<=N;j+) MGr.lengthij=MaxRoad; for(i=1;i<=N;i+) shortestij=0; MGr.length12=MGr.length21=2;/设定已有路径的长度 MGr.length23=MGr.length32=5; MGr.length28=MGr.length82=3; MGr.length29=MGr.length92=4; MGr.length26=MGr.length62=3; MGr.length64=MGr.length46=6;

34、MGr.length67=MGr.length76=5;MGr.length36=MGr.length63=10; MGr.length57=MGr.length75=7; MGr.length310=MGr.length103=8;MGr.length11=MGr.length22=0;MGr.length33=MGr.length44=0; MGr.length55=MGr.length66=0;MGr.length77=MGr.length88=0; MGr.length99=MGr.length1010=0; void map()/地图信息printf(" 平湖秋月-| 柳浪

35、闻莺 n");printf(" | .|-| |-| n");printf(" | 三潭映月 雷锋夕照 n");printf(" | | n");printf(" |-花巷观鱼-|-| n");printf(" | | n");printf(" | | n");printf(" | 双峰插云 断桥残雪 n");printf(" | | n");printf(" 曲院风荷-|-| n");printf(&qu

36、ot; | | n");printf(" 苏堤春晓 南屏晚钟 n");void floyd() /用floyed算法求两个景点的最短路径int i,j,k; /所求两个景点i,j及中间经过点kfor(i=1;i<=N;i+) for(j=1;j<=N;j+) shortestij=MGr.lengthij; pathij=0; for(k=1;k<=N;k+)for(i=1;i<=N;i+)for(j=1;j<=N;j+) if(shortestij>(shortestik+shortestkj) /用path记录从i到j的最短

37、路径上点j的前驱景点的序号shortestij=shortestik+shortestkj; pathij=k; pathji=k; /floyedvoid display(int i,int j) void introduce();/打印两个景点的路径及最短距离int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是:nn"); fflush(stdin);if(shortestij!=MaxRoad) if(i<j) printf("%s",MG); while(pathij!=0)

38、/ 把i到j的路径上所有经过的景点按逆序打印出来printf("<-%s",MG);/调用景点名称printf("<-%s",MG); if(i<j) j=pathij; else i=pathji; printf("<-%sn",MG);printf("%s->%s的最短路径是: %d 千米。nn",MG,MGr.viewb.data.na

39、me,shortestab);else printf("%s",MG); while(pathij!=0) /把i到j的路径上所有经过的景点按顺序打印出来printf("->%s",MG);if(i<j) j=pathij; else i=pathji; printf("->%sn",MG);printf("%s->%s的最短路径是: %d 千米。n",MGr.viewa.data

40、.name,MG,shortestab);else /输入景点路径不合法时提示错误printf("输入错误!不存在此路!nn"); printf("n"); /displayint shortestdistance() /要查找的两景点的最短距离 int i,j; printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):"); scanf("%d,%d",&i,&j); if(i>N|i<=0|j>N|j<0) printf("输入信息错误!nn"); printf(" 请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):n"); scanf("%d,%d",&i,&j); else floyd(); /调用两个函数display(i,j); return 1;fflush(stdin);/清屏 /shortestdistancevoid introduce() int m;printf("您想查询哪个景点的详细信息?请输入

温馨提示

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

评论

0/150

提交评论