石家庄铁道大学校园导游.docx
《石家庄铁道大学校园导游.docx》由会员分享,可在线阅读,更多相关《石家庄铁道大学校园导游.docx(16页珍藏版)》请在冰豆网上搜索。
石家庄铁道大学校园导游
石家庄铁道大学
数据结构实习报告
--基于C语言的校园导游程序设计
院系:
信息科学与技术学院
班级:
计XX班
姓名:
Mr.yan
学号:
指导教师:
摘要
在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。
对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。
不同数据结构有其相应的若干运算。
数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。
数据的运算是数据结构的一个重要方面,讨论任一种数据结构时都离不开开对该结构上的数据运算及其实现算法的讨论。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
一、
系统功能需求
1.1功能需求
编写一个校园导游系统程序,要求实现以下功能:
1、进入选择菜单界面,允许游客选择所需要的功能。
2、有浏览校园全景的功能,查看学校主要景点地图。
3、有查询主要经典信息的功能,可以显示所查询经典的详细信息。
4、有指导游客进行到某景点的最短路径功能,包括详细路线以及具体距离。
1.2设计思想
基于C语言,以VC++6.0环境为基础,运用迪杰斯特拉算法求最短路径,运用C++输出命令画出地图,列出矩阵,达到所需求的功能。
1.3功能流程图
二、
数据结构及中心代码算法说明
1、地图部分:
用C语言中的输出命令和制表符画出
2、查询经典信息部分:
由于个人水平有限,仅用选择语句switchcase来一一实现,未能用矩阵方式实现成功,部分程序代码如下
switch(kas)
{
case1:
printf("\n大门口,学校的正门,气派辉煌,车辆出入的地方\n");
break;
case2:
printf("\n第一教学楼,学校里最大的教学楼,是同学们上课以及自习出入最多的地方\n");
break;
…………
3、查询景点最短路径部分:
设定19.19矩阵,G【19】【19】,利用矩阵画出每个经典到相邻景点的距离,32767代表不可达。
4、求最短路径部分:
利用迪杰斯特拉算法求出每个经典的最短路径走线以及实际距离。
5、每个函数单独用while语句进行循环,以便游客在某个分程序中多次查询,以“1”为继续,以“0”为返回上级,其中主函数用dowhile语句和switchcase语句结合,实现选段以及“0”退出。
部分程序如下
While(flag)
{
……
printf("输入1继续,输入0退出\n");
scanf("%d",&flag);
}
Do
{
……
Switch(bianhao)
{
Case1:
……
Case0:
exit(0);break;
}
}while(bianhao=0);
注:
图中的景点距离大多为臆测,由于设备原因,未能亲测,凭感觉划出路径的距离。
三、
系统实现
3.1程序界面总揽
1、进入程序界面,如下图所示
图2程序主界面
2、地图显示界面总览:
图3校园全景总示
3、景点查询界面如图所示
图4景点查询界面显示图
4、最短路径查询显示图
图5最短路径界面显示
3.2操作说明
进入程序主界面,输入1,进入地图显示系统,显示图如图2所示,地图分为19个景点,路口两个,教学楼4个,宿舍楼2个,实验楼1个,体育馆和操场共3个,小型园林1个,医院1个,办公楼1个,门口1个,餐厅2个。
输入2,进入查询系统,显示总景点如下:
1:
大门口2:
第一教学楼3:
综合食堂4:
六栋5:
九栋6:
基础教学楼
7:
超市8:
第九实验楼9:
图书馆10:
体育馆11:
西操场12:
田径场
13:
医院14:
东西办公楼15:
第二教学楼16:
三教17:
沁园
其中景点详细信息是本人根据两年大学生活所概括,不具有官方权威性。
输入2,显示第一教学楼,学校里最大的教学楼,是同学们上课以及自习出入最多的地方
输入14,显示东西办公楼,是基础教学楼盖成之前学校里最高的楼,是领导们工作的地方
景点太多,恕不一一列举。
输入0返回主界面
输入3,进入程序核心,最短路径查询系统
例如,输入112,显示
路径是:
门口第一教学楼第二教学楼第三教学楼体育馆西操场田径场总路径长度是:
210
输入1继续,输入0退出
四、
总结
数据结构是抽象的,通过本次数据结构的课程设计,重阅数据结构书籍,回忆起很多已经遗失的印记。
程序功能比较简单,但都是花费大量时间实现的,程序采用矩阵划出距离,用迪杰斯特拉算法算出各景点之间的最短线路及距离。
设计过程中遇到不少问题,例如主程序的退出,各函数的循环以及地图的规划等,不过都在同学们的帮助下一一完成,深表欣慰。
实践是检验真理的唯一标准,通过本次设计,进一步把实践和理论结合起来,通过小程序检验自己学习的程度。
2010年9月
附录1程序代码
#include
#defineFALSE0
#defineTURE1
intG[19][19]=
{
{32767,20,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767},
{20,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,130,32737,20,32767,10},
{32767,32767,32767,40,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32737,90,32767,32767,32767},
{32767,32767,40,32767,140,180,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767},
{32767,32767,32767,140,32767,32767,32767,32767,32767,32767,32767,32767,32767,100,32767,32767,32767,32767,32767},
{32767,32767,32767,180,32767,32767,32767,32767,100,32767,32767,32767,32767,40,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,80,40,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,140,30,32767,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,32767,100,32767,32767,32767,60,32767,32767,30,32767,32767,32767,32767,32767,30},
{32767,32767,32767,32767,32767,32767,32767,32767,60,32767,40,32767,32767,32767,32767,32767,32767,30,32767},
{32767,32767,32767,32767,32767,32767,32767,32767,32767,40,32767,80,32767,32767,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,32767,32767,32767,140,32767,32767,80,32767,32767,32767,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,32767,32767,80,30,30,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767},
{32767,32767,32767,32767,100,40,40,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767},
{32767,130,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,40,32767,32767,32767},
{32767,32767,90,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,40,32767,32767,32767,32767},
{32767,20,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,20,32767},
{32767,32767,32767,32767,32767,32767,32767,32767,32767,30,32767,32767,32767,32767,32767,32767,20,32767,40},
{32767,10,32767,32767,32767,32767,32767,32767,30,32767,32767,32767,32767,32767,32767,32767,32767,40,32767}
};
voidmap()
{
printf("⑿田径场━━140m━━━⑻第九实验楼┍⑸九栋宿舍楼━━━━┑\n");
printf("┃30m┃┃100m140m┃\n");
printf("┃┃┃┃\n");
printf("80m⒀路口㈠━━⑺超市━⒁路口㈡┃\n");
printf("┃30m┃80m40m┃40m┃\n");
printf("┃┃┃┃\n");
printf("⑾西操场━━⑽体育馆━━━⑼图书馆━━━━━⑹基础教学楼━━━━━━⑷六栋\n");
printf("40m┃60m┃100m180m┃\n");
printf("┃┃┃\n");
printf("┎30m┛┃30m40m┃\n");
printf("┃┃┃\n");
printf("⒅第三教学楼━━40m━━⒆沁园┃\n");
printf("┃20m┃10m⑶综合餐厅\n");
printf("┃┃┃\n");
printf("⒄第二教学楼━━━⑵第一教学楼━130m━⒂医院━40m━⒃东西办━90m━┘\n");
printf("20m┃\n");
printf("20m\n");
printf("┃\n");
printf("⑴大门口\n\n");
}
voidmap1()
{
intmm=1;
while(mm)
{
map();
printf("输入0退出\n");
scanf("%d",&mm);
}
}
structplace
{
intordernum;
charname[12];
}site[19]={
{0,"门口"},
{1,"第一教学楼"},
{2,"综合餐厅"},
{3,"六栋"},
{4,"九栋"},
{5,"基础教学楼"},
{6,"超市"},
{7,"第九实验楼"},
{8,"图书馆"},
{9,"体育馆"},
{10,"西操场"},
{11,"田径场"},
{12,"路口1"},
{13,"路口2"},
{14,"医院"},
{15,"东西办公楼"},
{16,"第二教学楼"},
{17,"第三教学楼"},
{18,"沁园"}
};
intshiyan[19];
voidshortpath(intG[19][19],intv0,intp[19][19],int*D)
{
intvexnum=19;
intfinal[19];
intv,w;
inti,min,j;
shiyan[0]=v0;
for(v=0;v{
final[v]=FALSE;D[v]=G[v0][v];
for(w=0;wp[v][w]=FALSE;
if(D[v]<32767)
{
p[v][v0]=TURE;
p[v][v]=1;
}
}
D[v0]=0;final[v0]=TURE;
for(i=1;i{
min=32767;
for(w=0;wif(!
final[w])
if(D[w]{
v=w;min=D[w];
}
final[v]=TURE;
shiyan[i]=v;
for(w=0;wif(!
final[w]&&(min+G[v][w]){
D[w]=min+G[v][w];
for(j=0;j<19;j++)
p[w][j]=p[v][j];
p[w][w]=1;
}
}
}
voidchaxun()
{
intkas;
while(kas!
=0)
{
printf("\n\n\n---------****--------****--------****--------****--------****--------****-------\n");
printf("*1:
大门口2:
第一教学楼3:
综合食堂4:
六栋5:
九栋6:
基础教学楼*\n");
printf("*7:
超市8:
第九实验楼9:
图书馆10:
体育馆11:
西操场12:
田径场*\n");
printf("*13:
医院14:
东西办公楼15:
第二教学楼16:
三教17:
沁园*\n");
printf("---------****--------****--------****--------****--------****--------****-------\n");
printf("输入0退出查询界面\n");
printf("请输入要查询的景点编号:
");
scanf("%d",&kas);
switch(kas)
{
case1:
printf("\n大门口,学校的正门,气派辉煌,车辆出入的地方\n");
break;
case2:
printf("\n第一教学楼,学校里最大的教学楼,是同学们上课以及自习出入最多的地方\n");
break;
case3:
printf("\n综合餐厅,比较正规的餐厅,里面有许多可口的饭菜\n");
break;
case4:
printf("\n六栋女生宿舍楼,设施比较简陋,条件比较艰苦\n");
break;
case5:
printf("\n九栋男生宿舍楼,外表开起来壮观,里面设施一般,条件艰苦\n");
break;
case6:
printf("\n基础教学楼,正在筹建\n");
break;
case7:
printf("\n超市,学校的小超市,里面有大部分日常所需用品\n");
break;
case8:
printf("\n第九实验楼,计算机系的实验楼,也是全校同学上机的圣地\n");
break;
case9:
printf("\n图书馆,藏书百万,是全校学生的精神餐厅\n");
break;
case10:
printf("\n体育馆,正规的体院馆,一般不对外开放\n");
break;
case11:
printf("\n西操场,有篮球场轮滑场等场地\n");
break;
case12:
printf("\n田径场,标准400m跑道,是同学们上体育课和锻炼身体的好地方\n");
break;
case13:
printf("\n医院,设备简陋,能看感冒发烧\n");
break;
case14:
printf("\n东西办公楼,是基础教学楼盖成之前学校里最高的楼,是领导们工作的地方\n");
break;
case15:
printf("\n第二教学楼,环境简陋,设施不全,是自习和上课的地方\n");
break;
case16:
printf("\n第三教学楼,多媒体教学楼,设备齐全,是老师们录制精品课的理想胜地\n");
break;
case17:
printf("\n沁园,绿树成荫,芳草凄凄,是早读的好地方\n");
break;
}
}
}
voidlujing()
{
intp[19][19],D[19];
inti,k,flag=1;
intstart,end;
while(flag)
{
map();
printf("请依次输入起始和终止地点的编号<空格隔开>\n");
scanf("%d%d",&start,&end);
start--;end--;
shortpath(G,start,p,D);
printf("路径是:
");
for(k=0;k<19;k++)
for(i=0;i<19;i++)
if(p[end][i]==1&&shiyan[k]==i)
printf("%s",site[shiyan[k]].name);
printf("\n总路程长度是:
%d",D[end]);
printf("\n");
printf("输入1继续,输入0退出\n");
scanf("%d",&flag);
}
}
voidmain()
{intbianhao;
system("color37");
do
{
printf("\n\n***Mr.yan***\n");
printf("\n\n**欢迎进入石家庄铁道大学校园导游系统,服务生Mr.yan很乐意为您服务**\n");
printf("**请按照您的需求输入以下服务的编码,并摁回车键确认**\n");
printf("---------****--------****--------****--------****--------****--------****-------\n");
printf("*1.石家庄铁道大学校园地图浏览*\n");
printf("*2.石家庄铁道大学各景点信息查询*\n");
printf("*3.石家庄铁道大学各景点间的最短路径及旅行线路*\n");
printf("*0.退出石家庄铁道大学校园导游系统*\n");
scanf("%d",&bianhao);
switch(bianhao)
{
case1:
map1();
break;
case2:
chaxun();
break;
case3:
lujing();
break;
case4:
exit(0);
break;
}
}while(bianhao!
=0);
}
附录2特别鸣谢
感谢计算机与信息工程分院提供实践环境;
感谢图书馆提供相关资料;
感谢刘立嘉老师予以耐心的辅导;
感谢同学们给以热心的帮助;
感谢各大网站,各大论坛提供帮助及相关代码片段等。
参考书籍:
《C高级编程技术》《C函数速查》《数据结构(C语言版)》
参考文献:
设计样例之导游程序
参考网站:
XX百科之数据结构程序员联合开发网XX贴吧之数据结构