c语言课程设计导游系统.docx
- 文档编号:11172039
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:27
- 大小:182.56KB
c语言课程设计导游系统.docx
《c语言课程设计导游系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计导游系统.docx(27页珍藏版)》请在冰豆网上搜索。
c语言课程设计导游系统
很多很多的云很高很高的山很绿很绿的草
他一边说一边笑。
兴冲冲红润润懒洋洋慢吞吞静悄悄
我帮老师收作业。
我为大家扫地。
一(幅)画一(束)鲜花一(座)天安门一(艘)军舰
走之底:
这、边、远、进、过、道、选、连、送
一年级语文下册部分知识点归纳
足字旁:
跑、跟、跳
2、给下面的音节分类。
2、近义词
《数据结构》
课程设计报告
西湖导游系统
学号:
姓名:
专业班级:
日期:
信息科学与工程系
1课程设计的目的
1.1课程设计题目
西湖导游系统
1.2课程设计目的
这个课程设计是为了方便的查询景点信息,找出景点之间的最短路径,其中把景点信息用图的数组存储,求两点之间的最短路径用Floyd算法。
正确分析题目中的数据涉及的数据结构,并将数据结构的逻辑结构、物理结构及其算法应用于解决实际问题,即理论与实际结合起来,提高编写程序的能力。
掌握模块化程序设计方法以及程序的调试方法和技巧。
2课程设计的内容
2.1题目分析
这次的课程设计中需要把多个景点的信息存储,所以用了图的数组法来存储景点信息,
求最短路径问题上,Floyd是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。
2.2系统程序模块设计
2.2.1景点信息查询
用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入想要查询的景点的编号,回车后系统将在已存储的景点中进行匹配,若该景点信息尚未存储则将提示错误;若找到对应信息则系统将输出景点信息,显示于幕上方;
2.2.2景点地图
显示景点的分布情况。
2.2.3景点最短路径查询
用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。
若输入信息合法,则回车后系统将给出最短路径,显示于屏幕上方;
2.2.4退出系统
选择此功能模块,系统将自动退出。
3景点信息查询及求最短路径问题的实现
3.1景点信息查询及求最短路径系统涉及的物理结构
3.1.1图的逻辑结构和物理结构
因为在这次的课程设计中,景点的个数是固定的,再者需要求最短路径的问题,所以需要用图的数组法来保存景点的信息。
以此方便景点信息的调用和之后最短路径的调用和计算。
3.1.2Floyd的逻辑结构和物理结构
要求的是两个地点之间的最短路径,是多源的,所以用Floyd算法,它是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。
3.2景点信息查询及求最短路径系统主要模块的设计
3.2.1景点基本信息和路径的定义
typedefstruct
{
charname[30];//景点名称
charnumber[10];//景点序号
charintroduce[200];//景点介绍
}Elemtype;
typedefstruct
{
intnum;//景点编号
Elemtypedata;//景点信息
}View;//定义景点
typedefstruct
{
Viewview[MaxViewNum];//存放顶点的一维数组,数组第零单元没有用上
unsignedintlength[MaxViewNum][MaxViewNum];//存放路径长度if(shortest[i][j]!
=MGr.length[i][j])
intm,n;
}MGraph;
MGraphMGr;//全局变量,定义MGr为MGraph类型
intshortest[MaxViewNum][MaxViewNum];//定义全局变量存贮最小路径
intpath[MaxViewNum][MaxViewNum];//定义存贮路径
view()//十个景点的具体信息
{
inti,j;
MGr.view[1].num=1;
strcpy(MGr.view[1].data.name,"苏堤春晓");
strcpy(MGr.view[1].data.introduce,"苏堤春晓俗称苏公堤,为西湖十景之首。
是一条贯穿西湖南北风景区的林荫大堤,苏堤南起南屏山麓,北到栖霞岭下,全长近三公里,堤宽平均36米。
");
MGr.view[2].num=2;
strcpy(MGr.view[2].data.name,"曲院风荷");
strcpy(MGr.view[2].data.introduce,"曲院风荷位于西湖西侧,岳飞庙前面。
南宋时,此有一座官家酿酒的作坊,取金沙涧的溪水造曲酒,闻名国内。
附近的池塘种有菱荷,每当夏日风起,酒香荷香沁人心脾,因名“曲院风荷”。
");
MGr.view[3].num=3;
strcpy(MGr.view[3].data.name,"平湖秋月");
strcpy(MGr.view[3].data.introduce,"平湖秋月,西湖十景之一,位于白堤西端,孤山南麓,濒临外西湖。
凭临湖水,登楼眺望秋月,在恬静中感西湖的浩淼,洗涤烦躁的心境,是她的神韵所在。
");
MGr.view[4].num=4;
strcpy(MGr.view[4].data.name,"断桥残雪");
strcpy(MGr.view[4].data.introduce,"断桥的石桥拱面无遮无拦,在阳光下冰雪消融,露出了斑驳的桥栏,而桥的两端还在皑皑白雪的覆盖下。
依稀可辩的石桥身似隐似现,而涵洞中的白雪奕奕生光,桥面灰褐形成反差,远望去似断非断,故称断桥。
");
MGr.view[5].num=5;
strcpy(MGr.view[5].data.name,"柳浪闻莺");
strcpy(MGr.view[5].data.introduce,"南宋时,这里是京城最大的御花园,称聚景园。
当时园内有会芳殿和三堂、九亭,以及柳浪桥和学士桥。
清代恢复柳浪闻莺旧景。
有柳洲之名。
其间黄莺飞舞,竞相啼鸣,故有“柳浪闻莺”之称。
");
MGr.view[6].num=6;
strcpy(MGr.view[6].data.name,"花巷观鱼");
strcpy(MGr.view[6].data.introduce,"红鱼池位于园中部偏南处,是全园游赏的中心区域。
池岸曲折自然,池中堆土成岛,池上架设曲桥,倚桥栏俯看,数千尾金鳞红鱼结队往来,泼刺戏水。
");
MGr.view[7].num=7;
strcpy(MGr.view[7].data.name,"雷锋夕照");
strcpy(MGr.view[7].data.introduce,"位于西湖湖南、净慈寺前的夕照山上,因晚霞镀塔,佛光普照而闻名。
");
MGr.view[8].num=8;
strcpy(MGr.view[8].data.name,"双峰插云");
strcpy(MGr.view[8].data.introduce,"巍巍天目山东走,其余脉的一支,遇西湖而分弛南山、北山,形成环抱状的名胜景区,两山之巅既南高峰和北高峰。
");
MGr.view[9].num=9;
strcpy(MGr.view[9].data.name,"南屏晚钟");
strcpy(MGr.view[9].data.introduce,"即指南屏山净慈寺傍晚的钟声,南屏山在杭州西湖南岸、玉皇山北,九曜山东。
主峰高百米,林木繁茂,石壁如屏,北麓山脚下是净慈寺,傍晚钟声清越悠扬。
");
MGr.view[10].num=10;
strcpy(MGr.view[10].data.name,"三潭映月");
strcpy(MGr.view[10].data.introduce,"岸上金桂婆娑,柳绿花明,与雕栏画栋的建筑相映成趣。
具有湖中有岛,岛中有湖,园中有园,曲回多变,步移景新的江南水上庭园的艺术特色。
");
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
MGr.length[i][j]=MaxRoad;
}
}
for(i=1;i<=N;i++)
{
shortest[i][j]=0;
}
MGr.length[1][2]=MGr.length[2][1]=2;//设定已有路径的长度
MGr.length[2][3]=MGr.length[3][2]=5;
MGr.length[2][8]=MGr.length[8][2]=3;
MGr.length[2][9]=MGr.length[9][2]=4;
MGr.length[2][6]=MGr.length[6][2]=3;
MGr.length[6][4]=MGr.length[4][6]=6;
MGr.length[6][7]=MGr.length[7][6]=5;
MGr.length[3][6]=MGr.length[6][3]=10;
MGr.length[5][7]=MGr.length[7][5]=7;
MGr.length[3][10]=MGr.length[10][3]=8;
MGr.length[1][1]=MGr.length[2][2]=0;
MGr.length[3][3]=MGr.length[4][4]=0;
MGr.length[5][5]=MGr.length[6][6]=0;
MGr.length[7][7]=MGr.length[8][8]=0;
MGr.length[9][9]=MGr.length[10][10]=0;
}
3.2.2Floyd求最短路径的实现
voidfloyd()//用floyed算法求两个景点的最短路径
{
inti,j,k;//所求两个景点i,j及中间经过点k
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
shortest[i][j]=MGr.length[i][j];
path[i][j]=0;
}
for(k=1;k<=N;k++)
{
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{
//用path[][]记录从i到j的最短路径上点j的前驱景点的序号
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
}
}
}
}
//floyed
voiddisplay(inti,intj)
{
voidintroduce();
//打印两个景点的路径及最短距离
inta,b;
a=i;
b=j;
printf("您要查询的两景点间最短路径是:
\n\n");
fflush(stdin);
if(shortest[i][j]!
=MaxRoad)
{
if(i { printf("%s",MGr.view[b].data.name); while(path[i][j]! =0) { //把i到j的路径上所有经过的景点按逆序打印出来 printf("<-%s",MGr.view[path[i][j]].data.name);//调用景点名称 printf("<-%s",MGr.view[b].data.name); if(i j=path[i][j]; else i=path[j][i]; } printf("<-%s\n",MGr.view[a].data.name); printf("%s->%s的最短路径是: %d千米。 \n\n",MGr.view[a].data.name,MGr.view[b].data.name,shortest[a][b]); } else { printf("%s",MGr.view[a].data.name); while(path[i][j]! =0) { //把i到j的路径上所有经过的景点按顺序打印出来 printf("->%s",MGr.view[path[i][j]].data.name); if(i j=path[i][j]; else i=path[j][i]; } printf("->%s\n",MGr.view[b].data.name); printf("%s->%s的最短路径是: %d千米。 \n",MGr.view[a].data.name,MGr.view[b].data.name,shortest[a][b]); } } else//输入景点路径不合法时提示错误 printf("输入错误! 不存在此路! \n\n"); printf("\n"); } 3.2.3选择函数 intn=0; chark; while (1){ fflush(stdin);//清屏 scanf("%c",&k); switch(k)//选择语句 { case'i': printf("进入景点信息查询: "); introduce(); printf("请输入字母i,m,s或e.\n\n"); break; case'm': printf("景点地图: "); map(); printf("请输入字母i,m,s或e.\n\n"); break; case's': printf("进入最短路径查询: "); shortestdistance(); printf("请输入字母i,m,s或e.\n\n"); break; case'e': printf("欢迎您的使用"); exit(0); default: //输入号不合法时提示错误 printf("\n\n输入信息错误! \n请输入字母i,m,s或e.\n\n"); break; } } } 4西湖导游系统的测试及运行效果 4.1主界面 如图4.1. 图4.1主界面 4.2景点信息查询 查询景点编号为2的景点信息,如图4.2. 图4.2景点信息查询 4.3地图显示 如图4.3. 4.4最短路径查询 查询编号3到5的最短路径,如图4.4. 4.5功能选项选择错误 如图4.5. 4.6查询最短路径景点输入错误 如图4.6. 图4.3地图显示 图4.4最短路径查询 图4.5功能选项选择错误 4.6查询最短路径景点输入错误 5系统设计遇到的问题及解决方案 问题1: 在主函数前定义函数没有进行声明。 问题2: Floyd函数中三个for循环的嵌套关系出错,到时结果错误,之后是参照其他程序,在网上又学习了一遍用法后改正。 问题3: 在用switch函数,输入功能错误时出现两次提示,在switch前的scanf上加了清屏fflush(stdin)后,错误解决。 问题4: 在刚开始做的时候景点信息直接用的输出调出景点信息,没有用结构体存储,在想添加景点信息的时候发现这个错误。 . 问题5: : 主函数中没有调用景点信息函数view,而是在introude函数中调用,结果导致只能在查询景点信息的时候调用景点的信息,而在求最短路径的时候,编译没有错误,输出的结果不能正确显示,一直误以为是Floyd用法出错。 最后是把view函数放到主函数中,问题解决。 6总结与收获 这次课程设计中,我更加熟悉了图的数组表示法及Floyd函数的用法,在不断调试过程中,学习到了更多的知识,这次设计感觉并不是太好。 增删和修改景点的功能没有实现,程序中也存在一些Bug。 通过这次课程设计,我对程序中算法的概念理解的更加透彻。 算法是程序中必不可少的部分,它是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。 不同的算法可能用不同的时间、空间或效率来完成同样的任务。 同时,在选择算法时必须考虑算法的时间复杂度和空间复杂度,这样才能让程序正常,高效的运行。 《数据结构》在计算机科学中是一门综合性的专业基础课.数据结构的研究不仅涉及到计算机的硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题.在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方面.因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程.在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。 附西湖导游系统程序源代码 #include #include #include #defineMaxViewNum50//景点个数最大50 #defineMaxRoad1000//定义路径为无穷大 #defineN10//目前景点个数 voidmap();//自定义函数原型说明(景点地图) voidfloyd();//自定义函数原型说明 voiddisplay(inti,intj);//自定义函数原型说明 voidintroduce();//自定义函数原型说明 typedefstruct { charname[30];//景点名称 charnumber[10];//景点序号 charintroduce[200];//景点介绍 }Elemtype; typedefstruct { intnum;//景点编号 Elemtypedata;//景点信息 }View;//定义景点 typedefstruct { Viewview[MaxViewNum];//存放顶点的一维数组,数组第零单元没有用上 unsignedintlength[MaxViewNum][MaxViewNum];//存放路径长度if(shortest[i][j]! =MGr.length[i][j]) intm,n; }MGraph; MGraphMGr;//全局变量,定义MGr为MGraph类型 intshortest[MaxViewNum][MaxViewNum];//定义全局变量存贮最小路径 intpath[MaxViewNum][MaxViewNum];//定义存贮路径 view()//十个景点的具体信息 { inti,j; MGr.view[1].num=1; strcpy(MGr.view[1].data.name,"苏堤春晓"); strcpy(MGr.view[1].data.introduce,"苏堤春晓俗称苏公堤,为西湖十景之首。 是一条贯穿西湖南北风景区的林荫大堤,苏堤南起南屏山麓,北到栖霞岭下,全长近三公里,堤宽平均36米。 "); MGr.view[2].num=2; strcpy(MGr.view[2].data.name,"曲院风荷"); strcpy(MGr.view[2].data.introduce,"曲院风荷位于西湖西侧,岳飞庙前面。 南宋时,此有一座官家酿酒的作坊,取金沙涧的溪水造曲酒,闻名国内。 附近的池塘种有菱荷,每当夏日风起,酒香荷香沁人心脾,因名“曲院风荷”。 "); MGr.view[3].num=3; strcpy(MGr.view[3].data.name,"平湖秋月"); strcpy(MGr.view[3].data.introduce,"平湖秋月,西湖十景之一,位于白堤西端,孤山南麓,濒临外西湖。 凭临湖水,登楼眺望秋月,在恬静中感西湖的浩淼,洗涤烦躁的心境,是她的神韵所在。 "); MGr.view[4].num=4; strcpy(MGr.view[4].data.name,"断桥残雪"); strcpy(MGr.view[4].data.introduce,"断桥的石桥拱面无遮无拦,在阳光下冰雪消融,露出了斑驳的桥栏,而桥的两端还在皑皑白雪的覆盖下。 依稀可辩的石桥身似隐似现,而涵洞中的白雪奕奕生光,桥面灰褐形成反差,远望去似断非断,故称断桥。 "); MGr.view[5].num=5; strcpy(MGr.view[5].data.name,"柳浪闻莺"); strcpy(MGr.view[5].data.introduce,"南宋时,这里是京城最大的御花园,称聚景园。 当时园内有会芳殿和三堂、九亭,以及柳浪桥和学士桥。 清代恢复柳浪闻莺旧景。 有柳洲之名。 其间黄莺飞舞,竞相啼鸣,故有“柳浪闻莺”之称。 "); MGr.view[6].num=6; strcpy(MGr.view[6].data.name,"花巷观鱼"); strcpy(MGr.view[6].data.introduce,"红鱼池位于园中部偏南处,是全园游赏的中心区域。 池岸曲折自然,池中堆土成岛,池上架设曲桥,倚桥栏俯看,数千尾金鳞红鱼结队往来,泼刺戏水。 "); MGr.view[7].num=7; strcpy(MGr.view[7].data.name,"雷锋夕照"); strcpy(MGr.view[7].data.introduce,"位于西湖湖南、净慈寺前的夕照山上,因晚霞镀塔,佛光普照而闻名。 "); MGr.view[8].num=8; strcpy(MGr.view[8].data.name,"双峰插云"); strcpy(MGr.view[8].data.introduce,"巍巍天目山东走,其余脉的一支,遇西湖而分弛南山、北山,形成环抱状的名胜景区,两山之巅既南高峰和北高峰。 "); MGr.view[9].num=9; strcpy(MGr.view[9].data.name,"南屏晚钟"); strcpy(MGr.view[9].data.introduce,"即指南屏山净慈寺傍晚的钟声,南屏山在杭州西湖南岸、玉皇山北,九曜山东。 主峰高百米,林木繁茂,石壁如屏,北麓山脚下是净慈寺,傍晚钟声清越悠扬。 "); MGr.view[10].num=10; strcpy(MGr.view[10].data
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 导游 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)