顺序结构课程设计 校园导航系统总结.docx

上传人:b****6 文档编号:12114466 上传时间:2023-06-04 格式:DOCX 页数:18 大小:203.10KB
下载 相关 举报
顺序结构课程设计 校园导航系统总结.docx_第1页
第1页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第2页
第2页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第3页
第3页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第4页
第4页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第5页
第5页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第6页
第6页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第7页
第7页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第8页
第8页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第9页
第9页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第10页
第10页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第11页
第11页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第12页
第12页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第13页
第13页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第14页
第14页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第15页
第15页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第16页
第16页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第17页
第17页 / 共18页
顺序结构课程设计 校园导航系统总结.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

顺序结构课程设计 校园导航系统总结.docx

《顺序结构课程设计 校园导航系统总结.docx》由会员分享,可在线阅读,更多相关《顺序结构课程设计 校园导航系统总结.docx(18页珍藏版)》请在冰点文库上搜索。

顺序结构课程设计 校园导航系统总结.docx

顺序结构课程设计校园导航系统总结

 

《数据结构》

课程设计报告

 

设计题目

校园导航问题

班级

网络1101

姓名

学号

指导教师

日期

2012年6月25日

 

计算机与信息工程系

《数据结构》课程设计评阅表

设计题目

班级

答辩评语:

总结报告评语:

功能实现

答辩效果

设计报告

创新

总分

 

一、引言

1.1项目意义………………………………………………………………………4

…………………………………………………………………4

二、设计过程

……………………………………………………………………4

…………………………………………………………………5

…………………………………………………………6

………………………………………………………………7

……………………………………………………………………7

……………………………………………………………………7

三、测试及运行结果

…………………………………………………………7

………………………………………………………………7

四、总结…………………………………………………………………………………10

五、参考文献……………………………………………………………………………11

六、附录…………………………………………………………………………………11

 

一、引言

针对学校现代化的实现,对于来访我校的访客能够更方便的了解学校和学校景点,以及提供给访客从一个景点到另一个地点怎样走路径最短的方案,以节省访客的时间游览及行走路程,于是编写了这个校园导航系统。

数据结构是计算机科学与技术专业,计算机信息管理与应用专业,网络等专业的基础课,是十分重要的核心课程.所有的计算机系统软件和应用软件都要用到各种类型的数据结构.因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付当前众多复杂的课题.要想有效地使用计算机,充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识.打好"数据结构"这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统,数据库管理系统,软件工程,编译原理,人工智能,图视学等都是十分有益的.

随着现在科技的发展,智能化也不是一个名词,而是实在的随处可见的。

算法设计与分析对于程序的实现起着非常重要的作用,思路才是程序的核心。

这个校园导航系统,利用算法设计里的图来解决,它将校园景点作为图的结点,将景点间的问题就抽象成了求图中一结点到另一结点的问题。

这就是计算机代替人工的一个实例,也充分体现数据结构和算法的重要。

二、设计过程

程序设计分析

校园导航模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。

用图的结点代表点,用图的边代表景点之间的路径。

结点值代表景点信息,边的权值代表景点间的距离。

结点值及边的权值用顺序表储存,所以需要设计一个顺序表类。

本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。

计算路径长度及路线时可用迪克斯特拉(Dijkastra)算法实现。

最后用switch选择语句选择执行浏览推荐路线或查询最短路径,并且主页面会简单描述景点的信息。

 

2.2总体设计结构图

构造一个主函数去调用其他函数实现功能,见图示2.1。

2.3程序类说明

typedefstructArcCell{

intadj;/*相邻接的景点之间的路程*/

}ArcCell;/*定义边的类型*/

typedefstructVertexType{

intnumber;/*景点编号*/

char*sight;/*景点名称*/

char*description;/*景点描述*/

}VertexType;/*定义顶点的类型*/typedefstruct{

VertexTypevex[NUM];/*图中的顶点,即为景点*/

ArcCellarcs[NUM][NUM];/*图中的边,即为景点间的距离*/

intvexnum,arcnum;/*顶点数,边数*/

}MGraph;/*定义图的类型*/

功能及程序运行模块图

 

功能图

 

程序函数调用图

 

图的建造模块程序

voidCreateUDN(intv,inta)/*造图函数*/创建相同特征数据元素的集合

显示模块程序

charMenu()/*主菜单*/主界面中调用简介显示和查询功能的菜单显示。

voidnarrate()/*说明函数*/在主界面中显示景点名称和景点描述的显示。

voidoutput(intsight1,intsight2)/*输出函数*/在图模块基础下调用迪杰斯特拉算法最短路径函数计算后显示输出最短路径及距离。

查询模块程序

voidShortestPath(intnum)/*迪杰斯特拉算法最短路径函数num为入口点的编号*/

在主函数main()的调用下运用图模块程序的数据进行计算得出最短路径和距离。

三、测试及运行结果

错误1:

程序查询一次后返回主界面无法进行循环查询

解决方法:

在输入路径那段程序外围加dowhile循环,让ck!

=’e’时程序可进行无限

循环操作

错误2:

输入函数写成scanf("%d",num);

解决方法:

num=G.vex[i].number=i语句中,num地址存放了操作数字,不引用系统就

出错。

因此都在VO,V1前加地址符号。

 

校园导航系统主界面

显示学校简介

查询景点路径操作

查询行政楼到学校西门的最佳路径结果

继续进行则返回到主界面

四、总结

很快这个学期结束了,顺序结构课程设计也将告一段落,经过这一个学期顺序结课程的学习和这几天做的课程设计,我认为要想学好这门课程,不仅要认真的学习课本知识,更重要的是要通过上机编写调试程序,在实践中增强和巩固知识。

特别是我们大专生,更要注重这一环节,这样才有利于我们今后在IT行业的发展。

在这次课程设计中遇到了很多实际性问题,因此也意识到仅仅书本上的理论知识还是不能完全解决实际问题呢,自己应该在解决实际问题中,加成自己对知识的理解,不断更正自己以前的错误思维。

一切问题要靠自己一点一滴的努力解决,这样一个循序渐进的过程其实是学习知识掌握知识最有效的办法。

在校园导航这个系统中,程序其实是比较简单的,主要是解决程序在运行中遇到的问题,程序设计的灵魂就是解决问题逻辑思维和创新能力。

在这次程序的设计中,大部分子程序都是摘抄参考书上的,还有参考网上其他同学以前做过的同样的课程设计,主要的是怎么把这些子程序衔接在一块,这就需要对程序的结构很熟悉。

通过这次课程设计业意识到自身还存在很多不足,比如很多算法现在还是不能很好的理解和运用,在期间有很多的困惑经过一番努力才得以解决。

不过问题的发现正好激发了自己以后努力学习的激情,这次的课程设计虽然是要求独立完成的,因为这次是小程序所以一个人做也没有多大工作量,不过以后如果要大家一起做大的项目就要求我们有强烈的团队合作意识,只有良好的分工协作才能保证项目的有条不紊。

当然在这次课程设计中遇到不懂的问题,和同学一起讨论以及在老师的指导和强大的XX下都一一攻破了。

通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。

我觉得作为一名软件工程专业的学生,这次课程设计是很有意义的。

更重要的是如何把自己平时所学的东西应用到实际中。

虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。

我感觉程序设计是为了锻炼我们的实际动手能力,在一定程度上,又增加了我们的各方面的知识,特别是一些联系实际的课程设计,它的完成需要自己平时积累的大量知识、并且需要勤于思考的能力和无限的激情。

本次课设主要是学习程序设计的方法,进行程序设计的基本训练,大多数的学生应该把精力放在最基本,最常用的内容上,学好基本功。

经过一星期的的上机实践,感觉自己对顺序就够中的算法有了更深的理解,并能部分运用到实践中,对于不足自己也找到了努力的方向,在运用好C语言的基础上把顺序结构和算法做到融会贯通,更好更简单效率更高的解决程序设计问题,在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。

最后感谢刘老师这学期给我们带来的顺序结构课程的精彩讲解,感谢老师在课程设计中对我的指导,我将永远感激在心,我相信这是我人生中宝贵的财富。

老师,谢谢您!

祝老师在今后的工作中,一帆风顺,事事顺心。

五、参考文献

【1】①《实用数据结构与算法设计》庄晋林,杨彬主编中国水利水电出版社2009

②《数据结构试验与学习指导》刘延龄,马秋菊主编中国水利水电出版社2008

③《C语言程序设计》谭浩强主编清华大学出版社2008第三版

【2】①wenku.baiduXX文库

②豆丁网

六、附录

#include"string.h"

#include"stdio.h"

#include"stdio.h"

#include"malloc.h"

#include"stdlib.h"

#defineMax20000

#defineNUM12

typedefstructArcCell{

intadj;

}ArcCell;

typedefstructVertexType{

intnumber;

char*sight;

char*description;

}VertexType;

typedefstruct{

VertexTypevex[NUM];

ArcCellarcs[NUM][NUM];

intvexnum,arcnum;

}MGraph;

MGraphG;

intP[NUM][NUM];

longintD[NUM];

voidCreateUDN(intv,inta);

voidnarrate();

voidShortestPath(intnum);

voidoutput(intsight1,intsight2);

charMenu();

voidmain()/*主函数*/

{intv0,v1;

charck;

CreateUDN(NUM,11);

do

{ck=Menu();

switch(ck)

{case'2':

printf("\n承德石油高等专科学校是中央与地方共建、以河北省人民政府管理为主的一所普通高等职业院校,是教育部批准的国家示范性高等职业院校重点建设学校。

学校始于1903年创办于天津的“北洋工艺学堂”,是我国兴办最早的高等工业职业院校。

学校人才培养质量和特色受到社会的广泛认可,毕业生就业签约率连续5年名列河北省同类院校前列。

\t\n");

printf("\n\n\t\t\t\t请按任意键继续...\n");

getchar();getchar();

system("cls");break;

case'1':

system("cls");

narrate();

printf("\n\n\t\t\t请选择起点景点(0~11):

");

scanf("%d",&v0);

printf("\t\t\t请选择终点景点(0~11):

");

scanf("%d",&v1);

ShortestPath(v0);

output(v0,v1);

printf("\n\n\t\t\t\t请按任意键继续...\n");

getchar();getchar();

system("cls");break;

case'0':

printf("\n\t\t\t谢谢使用承德油专校园导航系统!

\n");

exit(0);break;

}}while(ck!

='e');}

charMenu()/*主菜单*/

{charc;intflag;

do{flag=1;

system("cls");narrate();

printf("\n\t\t┏━━━━━━━━━━━━━━━┑\n");

printf("\t\t\t┃2、学校简介┃\n");

printf("\t\t\t┃1、查询景点路径┃\n");

printf("\t\t\t┃0、退出┃\n");

printf("\t\t\t┃┃\n");

printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");

printf("\t\t\t\t请输入您的选择:

");scanf("%c",&c);

if(c=='1'||c=='0'||c=='2')

flag=0;

}while(flag);

returnc;

}

voidCreateUDN(intv,inta)/*造图函数*/

{inti,j;G.vexnum=v;G.arcnum=a;

for(i=0;i

G.vex[0].sight="学校正门(南门)";G.vex[0].description="漂亮,气派";

G.vex[1].sight="行政楼";G.vex[1].description="领导办公的地方";

G.vex[2].sight="文理楼";G.vex[2].description="老师办公的地方";

G.vex[3].sight="元光图书馆";G.vex[3].description="自习借书,学习知识的天堂";

G.vex[4].sight="体育场";G.vex[4].description="锻炼身体,比赛之地";

G.vex[5].sight="教学楼";G.vex[5].description="学习知识的摇篮";

G.vex[6].sight="天承湖";G.vex[6].description="观光休憩的好地方";

G.vex[7].sight="宿舍(凤凰园)";G.vex[7].description="学生休息,就寝之家";

G.vex[8].sight="老食堂";G.vex[8].description="美餐的天地";

G.vex[9].sight="惠城超市";G.vex[9].description="购物的地方";

G.vex[10].sight="洗衣房,澡堂";G.vex[10].description="学生洗澡的地方";

G.vex[11].sight="学校西门";G.vex[11].description="这里有去市区的公交哦";

for(i=0;i

for(j=0;j

G.arcs[i][j].adj=Max;

G.arcs[0][1].adj=G.arcs[1][0].adj=170;G.arcs[0][2].adj=G.arcs[2][0].adj=350;

G.arcs[0][3].adj=G.arcs[3][0].adj=439;G.arcs[1][2].adj=G.arcs[2][1].adj=200;

G.arcs[2][3].adj=G.arcs[3][2].adj=150;G.arcs[2][4].adj=G.arcs[4][2].adj=300;

G.arcs[3][5].adj=G.arcs[5][3].adj=280;G.arcs[3][6].adj=G.arcs[6][3].adj=140;

G.arcs[4][7].adj=G.arcs[7][4].adj=650;G.arcs[5][8].adj=G.arcs[8][5].adj=280;

G.arcs[5][11].adj=G.arcs[11][5].adj=290;G.arcs[6][7].adj=G.arcs[7][6].adj=150;

G.arcs[6][8].adj=G.arcs[8][6].adj=280;G.arcs[7][8].adj=G.arcs[8][7].adj=190;

G.arcs[7][9].adj=G.arcs[9][7].adj=230;G.arcs[8][9].adj=G.arcs[9][8].adj=190;

G.arcs[8][10].adj=G.arcs[10][8].adj=60;

}

voidnarrate()/*说明函数*/

{inti,k=0;

printf("\n\t*****************欢迎使用承德油专校园导航系统***************\n");

printf("\t__________________________________________________________________\n");

printf("\t\t景点名称\t\t|\t景点描述\n");

printf("\t________________________________|_________________________________\n");

for(i=0;i

{printf("\t%c(%2d)%-10s\t\t|\t%-25s%c\n",6,i,G.vex[i].sight,G.vex[i].description,6);

/*输出景点列表*/

k=k+1;}

printf("\t________________________________|_________________________________\n");

}

voidShortestPath(intnum)/*迪杰斯特拉算法最短路径函数num为入口点的编号*/

{intv,w,i,t;intfinal[NUM];intmin;

for(v=0;v

{final[v]=0;D[v]=G.arcs[num][v].adj;

for(w=0;w

P[v][w]=0;

if(D[v]<20000)

{P[v][num]=1;P[v][v]=1;

}}

D[num]=0;final[num]=1;

for(i=0;i

{min=Max;

for(w=0;w

if(!

final[w])

if(D[w]

{v=w;min=D[w];}

final[v]=1;

for(w=0;w

if(!

final[w]&&((min+G.arcs[v][w].adj)

{D[w]=min+G.arcs[v][w].adj;

for(t=0;t

P[w][t]=P[v][t];P[w][w]=1;

}}}

voidoutput(intsight1,intsight2)/*输出函数*/

{inta,b,c,d,q=0;a=sight2;/*将景点二赋值给a*/

if(a!

=sight1)/*如果景点二不和景点一输入重合,则进行...*/

{printf("\n\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);/*输出景点一的名称*/

printf("\t(最短距离为%dm.)\n\n\t",D[a]);

printf("\t%s",G.vex[sight1].sight);

d=sight1;/*将景点一的编号赋值给d*/

for(c=0;c

{gate:

;/*标号,可以作为goto语句跳转的位置*/

P[a][sight1]=0;for(b=0;b

{if(G.arcs[d][b].adj<20000&&P[a][b])/*如果景点一和它的一个临

界点之间存在路径且最短路径*/

{printf("-->%s",G.vex[b].sight);/*输出此节点的名称*/

q=q+1;/*计数变量加一,满8控制输出时的换行*/

P[a][b]=0;d=b;/*将b作为出发点进行下一次循环输出,如此反复*/

if(q%8==0)printf("\n");

gotogate;

}}}}}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2