校园导游程序设计.docx
《校园导游程序设计.docx》由会员分享,可在线阅读,更多相关《校园导游程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
校园导游程序设计
《数据结构课程设计》报告
课题名称:
校园导游程序
专
班
学
姓
业:
级:
号:
名:
2012
年
12
月
31
日
目
录
目
录∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙1
1前言∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙22需求分析∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙33概要设计∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙34详细设计∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙35源代码及调试∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙36特殊问题解决方法∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙87使用说明及测试结果∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙98结论∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙119总结与体会∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙1110参考文献∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙11
1
1前言
1.1课题简介
课程设计题目名称:
校园导游程序
课程设计目的:
通过《数据结构》课程的学习,将数据结构应用在具体的编程方面,更加了解课程所学习的内容及思维逻辑。
课程设计意义:
利用数据结构课程设计,了解学生对《数据结构》的理解和加强学生对数据结构方面的应用知识。
希望今后学生好好利用数据结构的知识和思想,解决各方面的编程难题。
课程设计内容:
实现存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
为来访客人提供图中任意景点相关信息的查询。
为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
课程设计预期实现效果:
(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
1.2方案及其论证
语言:
C++
运行环境:
MicrosoftVisualC++6.0
可行性分析:
模拟一个小型的计算器界面,能够输入数学表达式并计算出表达式的结果。
2
2需求分析
实现存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
为来访客人提供图中任意景点相关信息的查询。
为来访客人提供景点的问路查询,即
已知一个景点,查询到某景点之间的一条最短路径及长度3概要设计(特殊功能)
3对于本次编程的概要设计,有如下内容:
功能设计1:
景点查询
功能设计2:
查询最短路径。
功能设计3:
退出系统查询
4详细设计
流程图:
输入所需功能代号——>判断所输入代号所——>执行相应的程序——>输出结果——>退出程序
5源代码及调试
源代码:
#include
#include
#include
#defineMax20
#defineInit_Length10000
voidshortestdistance();
voidprint(){printf("
欢迎您来到河北科技师范\n");
printf("******\n");
printf("
祝您旅途愉快\n");
printf("以下是您可能要前往的地方\n");
3
printf("1
printf("2
老楼\n");
音乐广场\n");
printf("3
printf("4
图书馆\n");
小湖\n");
printf("5篮球场\n");
printf("6后院食堂\n");
printf("7
第三食堂\n");
printf("8
第二食堂\n");
printf("9欧美东院\n");
printf("10北2\n");
printf("11北1\n");
printf("12逸夫楼\n");
printf("13操场
博学园区\n");
printf("功能1.景点查询请输入i\n");
printf("功能2.查询最短路径请输入s\n");
printf("功能3.退出系统请输入e\n");
printf("请输入您的选择:
");}
voidintroduce()
{inta;
printf("请输入景点编号:
");
scanf("%d",&a);
getchar();
printf("\n");while(a<1||a>13)
{printf("ERROR!
请输入数字1到13:
\n\n");scanf("%d",&a);}
switch(a){case1:
printf("1:
老楼
一纵四横嘉庚风范,庄严而又活泼美丽
\n\n");
break;
case2:
printf("2:
音乐广场break;
美丽校园的核心\n\n");
4
case3:
printf("3:
图书馆图书馆break;
文化交流的中心和同学们自习的地方\n\n");
case4:
printf("4:
小湖break;
case5:
printf("5:
篮球场break;
魅力的校园明珠\n\n");
热爱篮球学生的天堂\n\n");
case6:
printf("6:
后院食堂break;
case7:
printf("7:
第三食堂
break;
距离宿舍区最近,饭点拥挤度最高\n\n");
距离教学楼最近,晚上有课的同学可以来此\n");
case8:
printf("8:
第二食堂 离前院打水的地方最近,打水的地方可以在
这吃饭\n\n");
break;
case9:
printf("9:
欧美东院 中欧文化汇聚的园地\n\n");break;
case10:
printf("10:
北2break;
case11:
printf("11:
北1break;
case12:
printf("12:
逸夫楼break;
case13:
printf("13:
操场break;
}
printf("/n");}
voidmain(){chark;
print();
scanf("%c",&k);
while((k!
='i')&&(k!
='e')&&(k!
='s'))
{getchar();
居住前院学计算机和欧美东院的女生\n\n\n");
居住欧美东院的男生\n\n");
老师传授知识,学生学习知识的乐园\n\n");
学生活动锻炼的好去处\n\n");
5
printf("ERROR请输入i或s或e\n");scanf("%c",&k);}
switch(k)
{case'i':
printf("进入景点查询:
\n");introduce();
break;
case's':
printf("进入最短路径查询:
\n");shortestdistance();
break;
case'e':
exit(0);}
}
voidshortestdistance()
{inti,v,w,v0,j;
intmin;
inttop[14]={0};
intcost[14][14];
intpath[14][14];
intfinal[14]={0};
intD[14];
for(i=0;i<14;i++)
for(j=0;j<14;j++)cost[i][j]=Init_Length;
cost[1][3]=cost[3][1]=10;
cost[3][5]=cost[5][3]=40;
cost[1][7]=cost[7][1]=10;
cost[3][7]=cost[7][3]=30;
cost[2][7]=cost[7][2]=20;
cost[2][6]=cost[6][2]=10;
cost[4][6]=cost[6][4]=10;
cost[4][13]=cost[13][4]=10;
cost[6][12]=cost[12][6]=20;
cost[12][8]=cost[8][12]=10;
6
cost[8][9]=cost[9][8]=10;
cost[6][9]=cost[9][6]=15;
cost[10][9]=cost[9][10]=10;
cost[6][10]=cost[10][6]=20;
cost[9][10]=cost[10][9]=10;
cost[9][11]=cost[11][9]=10;
printf("请输入您现在所在的位置:
\n");
scanf("%d",&v0);
while(v0>13||v0<1)
{printf("ERROR!
请重新输入编号从1到13的数\n");scanf("%d",&v0);
}
for(i=1;i<14;i++)
for(j=1;j<14;j++)
path[i][j]=0;for(v=1;v<14;v++)
{D[v]=cost[v0][v];
if(D[v]{path[v][(++(top[v]))]=v0;
path[v][(++(top[v]))]=v;}
}D[v0]=0;
final[v0]=1;
for(i=2;i<14;++i)
{min=Init_Length;
for(w=1;w<14;++w)
{if((final[w]==0)&&(D[w]{v=w;min=D[w];}}
final[v]=1;
for(w=1;w<14;++w)
{if((final[w]==0)&&(min+cost[v][w]{D[w]=min+cost[v][w];
for(j=1;j<14;j++)
7
path[w][j]=path[v][j];
top[w]=top[v]+1;
path[w][(top[w])]=w;
}
}
}printf("请输入你要去的地方:
\n");
scanf("%d",&w);
printf("\n");
while(w>13||w<1)
{printf("ERROR!
输入错误,请重新输入编号从1到13\n");
scanf("%d",&w);}
printf("最短路径为:
\n");
for(i=1;path[w][i]!
=0;i++)
printf("-->%d",path[w][i]);
printf("\n");
printf("最短路径的长度为:
%d\n",D[w]);
}
调试过程中曾遇到的错误:
解决1、将头文件include改变为include
改进2、利用子程序, 精减了程序
发现问题3、在编程序时,输入了多余的中文空格,会报错。
6特殊问题解决方法
6.1问题1如何辨别所需的功能的?
解决方法1:
用getchar()来得到输入的功能号,判断功能号,并执行相应的子程序,以实现程序的功能。
6.1问题2如何实现具体的功能?
判断功能号,并执行相应的子程序,以实现程序的功能。
8
7使用说明及测试结果
请输入您的选择:
输入I,s,e
正确操作演示:
======校园导游程序======请输入您的选择:
输入I,e,s
例如输入的是i(景点查询)
请输入景点编号:
(1-13)
按任意键退出程序
输入后按回车键(Enter)。
执行相应的程序。
输入所查景点的数字,按回车键显示所查景点的介绍
按任意键退出程序
、
结果:
初始界面:
输入i(景点查询)的运行结果:
9
输入s(查询最短路径)运行结果:
10
8结论
对于本次课程设计,能够大体的了解系统的概念并予以实现,已经实现的功能能够很好的展现其充分的特性。
并且很好的彰显人性化的功能,对服务对象的错误操作能够及时予以改正,减少不必要的繁琐操作。
但是本次课程设计有一很大的遗憾,就是由于本人的编程能力有限,而未能实现括号的优先运算的功能。
相对于预期实现的效果来看,未能实现括号的功能使系统的优越性能有所下降,但是并不影响系统整个的运行功能。
希望通过今后在计算机专业的学习,能够不断地完善我的专业知识,最好是熟练掌握一方面的技能知识,更好地进行实践的工作,从而真正成为一名优秀的计算机专业工作者,为社会的IT行业作出贡献。
9总结与体会
通过一周的《数据结构与C语言》课程实训,我不仅对图的概念有了一个新的认识,而且对算法和C语言有了更深的理解,在学习了《数据结构》这门课后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉它有哪些具体化、数字化的信息。
在这次课程设计中,我明白了编写一段代码,我们不仅要考虑它的可行性,更应该考虑它的算法复杂度,运行效率。
做同一件事,一万个人有一万种做法,换而言之,一万个人写一段代码实现同一个功能可以得到一万段代码。
由此,我们可以看出做一件事要精益求精,多加斟酌,更好的为用户着想是程序设计者应该具备的思想。
10、参考文献:
《c语言程序设计》谭浩强清华大学出版社
《数据结构》高教出版社
《数据结构习题》李春保清华大学出版社
《数据结构习题》严蔚敏清华大学出版社
《c语言与数据结构》王立柱清华大学出版社
《数据结构(C语言篇)习题与解析》李春葆清华大学出版社
11