数据结构课程设计报告基于无向图的校园导游系统1.docx

上传人:b****3 文档编号:4423643 上传时间:2022-12-01 格式:DOCX 页数:26 大小:174.19KB
下载 相关 举报
数据结构课程设计报告基于无向图的校园导游系统1.docx_第1页
第1页 / 共26页
数据结构课程设计报告基于无向图的校园导游系统1.docx_第2页
第2页 / 共26页
数据结构课程设计报告基于无向图的校园导游系统1.docx_第3页
第3页 / 共26页
数据结构课程设计报告基于无向图的校园导游系统1.docx_第4页
第4页 / 共26页
数据结构课程设计报告基于无向图的校园导游系统1.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告基于无向图的校园导游系统1.docx

《数据结构课程设计报告基于无向图的校园导游系统1.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告基于无向图的校园导游系统1.docx(26页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告基于无向图的校园导游系统1.docx

数据结构课程设计报告基于无向图的校园导游系统1

重庆科技学院

 

课程设计报告

院(系):

_电气与信息工程学院专业班级:

计科普0902

学生姓名:

周杨学号:

2009441622

设计地点(单位)____计算机基础自主学习中心I306___

设计题目:

_________校园导游咨询____________________

完成日期:

2011年1月14日

指导教师评语:

_______________________________________

____________________________________________________________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):

________________

指导教师(签字):

________________

重庆科技学院

课程设计任务书

设计题目:

校园导游咨询

学生姓名

周杨

课程名称

数据结构课程设计

专业班级

计科2009-02

地点

计算机基础自主学习中心

起止时间

2011.01.4-2011.01.14

设计内容及要求

基本要求:

(1)设计你的学校的校园平面图,所含景点不少于10个。

以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

(3)为来访客人提供图中任意景点相关信息的查询。

测试数据:

由读者根据实际情况指定。

实现提示:

一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。

顶点和边均含有相关信息。

扩展要求:

(1)提供图中任意景点问路查询,即求任意两个景点之间的所有路径。

(2)扩充道路信息,如道路类别(车道、人行道等)、沿途景色等级,以至可按客人所需分别查询人行路径或车行路径或观景路径等

设计

参数

1、自己编写程序,校园初始数据以文本文件保存,文件格式根据需要自行定义。

对应的地图初始化从文件中读出数据进行初始化。

2、查询的结果应提供屏幕和文件两种方式。

3、有基础的同学尽量实现界面的可视化操作和动态显示。

进度

要求

2011.1.4星期二(上午教师指导,下午学生独立完成)、完成任务的讲解、并接受课程设计任务,选定课程设计的题目

2011.1.5星期三(上午教师指导,下午学生独立完成)、了解任务的算法、并画出算法的程序流程图

2011.1.6星期四(上午教师指导,下午学生独立完成)、对任务的关键技术进行验证、并确定解决办法

2011.1.7星期五(上午教师指导,下午学生独立完成)、编制任务的程序

2011.1.10星期一(上午教师指导,下午学生独立完成)、编制任务的程序

2011.1.11星期二(上午教师指导,下午学生独立完成)、对程序的调试,并试运行。

2011.1.12星期三(上午教师指导,下午学生独立完成)、整理课程设计过程中的各个参数、并进行总结,提出改进意见

2011.1.13星期四(上午教师指导,下午学生独立完成)、编写课程设计报告、准备答辨

2011.1.14星期五(上午答辨)、进行答辨验收工作。

参考资料

1.严蔚敏吴伟民著,数据结构(C语言版),清华大学出版社,2007.4

2.RichardF.GilbergBehrouzA.Forouzan,DataStructuresAPseudocodeApproachwithC,secondedition,Thomson,2005.1

3.李春葆著,数据结构教程,清华大学出版社,2005.1

其它

说明

1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

教研室主任:

指导教师:

向毅、陈刘奎、熊茜

2010年12月20日

 

 

摘要

现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。

本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。

关键词:

无向图、查找信息、最短距离、校园导游咨询

 

目录

摘要I

1设计内容和要求1

1.1设计内容1

1.1设计要求1

2概要设计2

2.1程序的模块图2

2.2主函数的概要设计3

2.3查找介绍函数的概要设计3

2.4查找最短路径函数的概要设计3

2.5退出函数的概要设计3

3详细设计4

3.1程序的流程图4

3.2主函数的详细设计5

3.3查找介绍函数的详细设计5

3.4查找最短路径函数的详细设计6

3.5退出函数的详细设计8

3.6数据结构的详细设计8

4软件测试10

4.1菜单的测试10

4.2查找景点简介的测试10

4.3查找两个景点之间的最短距离的测试11

4.4退出的测试11

5软件使用说明12

6致谢13

7参考文献14

8附录15

1设计内容和要求

1.1设计内容

依据课程设计的要求,利用一个无向图的结构,将景点当作图的顶点,将景点之间的距离当作权值来储存,然后根据游客自己的需求,按照显示屏上的提示来进行查找景点介绍,查找两个景点之间的最短距离,退出程序等基本操作。

1.1设计要求

本软件为校园导游咨询系统,根据游客的实际需求而设计,首先创建一个无向图,然后从文件当中读取所有景点的编号、名称、介绍和两点之间的权值,并将它们写入到无向图当中。

功能主要包括查找已知景点的信息,查找从一个景点到另一个景点的最短路径,退出等基本操作。

软件的界面要求使用VC++6.0的运行环境。

软件的数据库包括校园景点的编号、名称、介绍和两个景点之间的距离(权值),首先要定义顶点的数据类型结构体,里面包括景点的编号、名称、介绍,然后定义一个邻接矩阵结构体来储存边的信息,最后定义一个无向图类型的结构体来储存顶点的信息,边的信息,顶点的个数,边的个数。

最后游客按照显示屏上的提示来进行相关的操作。

 

2概要设计

2.1程序的模块图

本软件的算法依据无向图的操作通过查找函数查找景点的信息,通过迪杰斯特拉函数来查找最短距离,开始时首先从文件当中读取景点的编号、名称、介绍和两个景点之间的距离即权值,然后将其加入到图当中,再调用查找函数查找景点的信息,调用迪杰斯特拉函数来查找最短距离,调用退出函数实现退出功能,其模块图如图2.5所示:

 

 

 

图2.5模块图

2.2主函数的概要设计

基于程序的操作要求,对于主函数的设计首先是显示一个可视化的操作界面提醒游客进行相关的操作和提示游客其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。

而后就是一个switch();的选择函数,提供查找景点信息,查找两个景点之间的最短距离和退出的相关的选择操作而后进入到每一个操作界面当中,从而实现所需要的功能。

2.3查找介绍函数的概要设计

当游客选择了要查找景点的信息的介绍这一项功能的时候,就会进入到查找的界面,对于查找景点信息就是利用strcmp();函数,当游客输入景点的名称的时候看其是否与文件当中的数据相匹配,如果有则输出它的介绍,如果没有则输出错误的提示提醒游客进行相关的操作来进入到正确的操作过程当中。

2.4查找最短路径函数的概要设计

对于查找最短路径的这一项功能,则是利用迪杰斯特拉函数

(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。

若(vi,vj)不存在,则置arcs[i][j]为无穷大。

S为已找到从v出发的最短路径的终点集合,它的初始状态为空集。

那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:

D[i]=arcs[v][i];

(2)选择vj,使得D[j]=Min{D[i]|vi∈V–S}vj就是当前求得的一条从v出发的最短路径的终点。

令S=S∪{j};(3)修改从v出发到集合V–S上任意顶点vk可到达的最短路径的长度。

如果D[j]+arcs[j][k]

(2)、(3)共n–1次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。

从而求得了从一个景点到另一个景点的最短路径的问题。

2.5退出函数的概要设计

关于退出函数,则是当游客执行完了他想要进行的操作过后选择退出的功能的时候就调用退出函数exit(0);跳入到退出界面实现退出的功能。

3详细设计

3.1程序的流程图

当我们想要更加实际的了解一个程序的算法过程的时候,我们就要依据程序的流程图来给我们一个比较实际的过程,从流程图当中能够更加清楚整个程序实现的过程是怎样的。

其流程图如图3.1所示:

图3.1流程图

3.2主函数的详细设计

主函数是一个程序的主体,当我们要进行我们所需要的操作的时候我们就要根据主函数中的显示信息和它给我们的相关的提示信息来进行所需要的操作,因此在这次的程序实现的过程当中,首先调用CreateUDN(G);函数创建一个无向图,然后利用一个for();循环语句

for(intk=0;k

{

if(k-5==0)

{

cout<

cout<<""<<'\t'<

}

else

{

cout<<""<<'\t'<

}

}将景点的名称打印在显示屏上,最后是一个switch();的选择语句,提示游客根据选择来进入到相关的操作界面实现程序的基本功能。

3.3查找介绍函数的详细设计

当游客选择了要查找景点的信息的介绍这一项功能的时候,程序就会调用DisIntroduction(G);函数进入到查找景点的介绍的界面,当游客输入了需要查找的景点的名称的时候,程序利用for();循环语句来查找是否有这个景点for(inti=0;i

{

intm=strcmp(G.vexs[i].name,n1);

if(m==0)

{

v1=i;

count1=count1+1;

}

},找到将它的编号返回,并输出它的介绍,没有找到这输出错误提示,提醒游客进行相关的操作进入正确的操作过程当中。

3.4查找最短路径函数的详细设计

当游客选择了要查找两个景点之间的最短距离这一项功能的时候,程序就会调用DisPath(G);函数进入到查找两个景点之间的最短距离的操作界面当中,当游客输入了两个景点的名称过后,程序会调用strcmp();函数查看是否有这两个景点,如果有则返回他们各自的编号,并调用ShortPath_DIJ(G,v1,v2);函数进入到查找最短路径问题的程序当中。

for(v=0;v

{

final[v]=FALSE;//从V出发的最短路径的空集合

D[v]=G.arcs[v0][v];//从V出发到图上其余各个定点v0可能到达的最短路径的初始值

for(w=0;w

{

P[v][w]=FALSE;//设空路径

}

if(D[v]

{

P[v][v0]=TRUE;

P[v][v]=TRUE;

}

}

D[v0]=0;

final[v0]=TRUE;

inta[20];

for(i=0;i

{

for(j=0;j

{

Path[i][j]=1000;

}

}

for(i=0;i

{

a[i]=1;

}

for(v=0;v

{

Path[v][0]=v0;

}

//开始主循环,每次求解得到v0到某个v顶点的最短路径,并加入到S集合中

for(i=1;i

{

m=MAXNUM;//当前所知的离v0最近的距离

for(w=0;w

{

if(!

final[w])//w顶点在V-S中

{

if(D[w]

{

v=w;

m=D[w];

}

}

}

Path[v][a[v]]=v;//离v0顶点最近的v加入s集合

final[v]=TRUE;

for(w=0;w

{

if((!

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

{

D[w]=m+G.arcs[v][w];//修改当前的最短路径的值

intk0=1;

a[w]=1;

while(Path[v][k0]!

=1000)

//如果上述条件成立,Path[w]路径需要改变,因为从v0到w的路径显然经过了v0和v之间的所有的点(包括v)

{

Path[w][k0]=Path[v][k0];

k0++;

a[w]++;

}

}

}

}

cout<<"两个景点之间的最短路径为:

"<<'\t';

intk=0;

while(Path[v2][k]!

=1000)

{

intm=Path[v2][k];

cout<

k++;

}

cout<

cout<<"两个景点之间的最短距离为:

"<

cout<<"请选择要进行的操作(I:

查询景点信息,P:

查询两个景点之间的最短路径,Q:

退出)"<

(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。

若(vi,vj)不存在,则置arcs[i][j]为无穷大。

S为已找到从v出发的最短路径的终点集合,它的初始状态为空集。

那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:

D[i]=arcs[v][i];

(2)选择vj,使得D[j]=Min{D[i]|vi∈V–S}vj就是当前求得的一条从v出发的最短路径的终点。

令S=S∪{j};

(3)修改从v出发到集合V–S上任意顶点vk可到达的最短路径的长度。

如果D[j]+arcs[j][k]

(4)重复操作

(2)、(3)共n–1次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。

从而求得了从一个景点到另一个景点的最短路径的问题。

3.5退出函数的详细设计

对于退出函数,当游客选择了退出这一个操作的时候,程序就会调用Exit();函数从而进入到退出函数的界面

voidExit()//退出

{

cout<<"欢迎下次继续使用!

"<

exit(0);

}程序会提示游客感谢使用,欢迎下次继续使用的提示语,然后调用exit(0);函数实现退出主函数的功能。

3.6数据结构的详细设计

本软件的数据结构包括3个部分:

1.邻接矩阵

typedefintAdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

定义一个邻接矩阵,用邻接矩阵来定义和储存边的相关信息。

2.顶点的结构体

typedefstructVertex//定义图中顶点的数据类型

{

intnum;//景点编号

charname[14];//景点名称

charintroduction[100];//景点介绍

}Vertex;

定义一个顶点的结构体,用来储存景点的编号、景点得名称和景点的介绍等关于景点的信息。

3.无向图的结构体

typedefstruct//定义图的数据类型

{

Vertexvexs[MAX_VERTEX_NUM];//顶点的结构体

AdjMatrixarcs;//边的邻接矩阵

intvexnum,arcnum;//顶点的个数,边的个数

}MGraph;

定义一个图的结构体,用来储存顶点的信息、边的信息、顶点的个数和边的个数等相关的信息便于我们以后在用的时候能够方便快捷的调用。

定义好这些结构体后,当我们以后需要调用的时候,我们就能够方便快捷的调用这些结构体,从而使得我们在运行程序的时候能够更加的快速能够提高我们的程序的运行效率,大大的节省了我们的时间还使得程序变得更加的简单。

 

4软件测试

4.1菜单的测试

对于菜单函数的测试,首先菜单是一个可示化的界面,它能够提示游客依据显示屏上出现的提示来进行相关的操作,查看所有的景点从而方便游客进行相关的操作,因而我们在运行程序的时候首先就会进入到菜单函数当中,经过测试其能够实现我们所要实现得基本功能,其效果图如图4.1所示:

图4.1菜单

4.2查找景点简介的测试

对于查找景点的介绍的测试,首先依据显示屏上的提示首先输入要进行的操作输入‘i’进入查找景点信息的操作界面,然后输入需要查找的景点的名称即可显示出景点的介绍信息,经过测试可以得出其没有什么错误,程序能够按照我的要求实现它的功能,其效果图如图4.2所示:

图4.2查找景点信息

4.3查找两个景点之间的最短距离的测试

同查找景点的信息一样,对于查找景点之间的最短距离的测试,我们就要依据提示输入‘p’进入到查询最短路径的界面,依次输入所需要查找的两个景点就会显示出怎样到达这两个景点并显示出它们之间的最短路径,经过测试可见程序能够按照我的要求来实现其所需要的功能,其效果图如图4.3所示:

图4.3查找两个景点之间的最短距离

4.4退出的测试

原理同上,对于退出函数的测试,我需要依据显示屏上的提示,首先需要输入‘q’进入到退出的界面,系统就会直接调用退出的函数,显示出“欢迎下次继续使用!

”的话让后按任意键就退出了系统,其效果图如图4.4所示:

图4.4退出界面

5软件使用说明

对于软件的使用,对于第一次使用软件的游客来说,要让他们在第一次用的时候就能够快速轻松的掌握软件的用法,因此在程序一开始运行的时候,我们要进行如下的操作:

(1)首先我会给游客提供一个可视化的菜单操作界面,在显示屏上提示用户其可以进行的操作和他能够查询的景点的名称。

(2)用户输入了“i”后,进入到查询景点简介的界面,当用户输入了想要查找的景点的名称过后就会显示出这个景点的介绍来。

(3)当用户输入了“p”后,进入到查询最短路径的界面,然后依据提示用户依次输入两个景点的名称,程序就会将这两个景点的最短路径给我们表示出来并显示出最短路径是多少。

(4)当用户输入了“q”后,进入到退出界面,这是系统就会提示用户程序将要运行结束,欢迎下次继续使用的提示语,最后按下任意键程序结束。

 

6致谢

在本次的实验过程当中,虽然有各种各样的问题在困扰着我,但是好在我的身边总会有人在这个时候出现为我解决这些问题,而他们就是我的老师和同学们,一个人做事的时候总是会遇到问题的,有问题并不可怕只要我们相信我们不是一个人在战斗而是有很多的同学和老师与我们站在一起的这样我们就能够战胜各种困难,感谢我的老师和我的同学们。

是他们在我遇到问题的时候给我指明了解决的方法,从而克服了一个又一个的问题最终解决了所有的问题实现了程序所需要的功能,感谢我的同学们,不论是上课还是下课,只要是遇到了困难找到他们的时候只要是能够解决的他们会义不容辞的献出自己的力量。

感谢老师们的谆谆教诲,他们不辞辛劳为了我们能够顺利的解决问题无时无刻不在我们的身边,当我们一遇到问题的时候他就会出现,从没有半点怨言。

最后还要感谢学校感谢给我们提供了良好的实验环境,使我们能够安心轻松的在好的额环境当中完成我们的实验。

签名周杨

日期2011年1月13日

 

7参考文献

【1】数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社2002

【2】C程序设计经典教程,[美]Deitel,H.M.,[美]Deitel,P.J.著,清华大学出版社2006

【3】Windows程序设计,[美]CharlesPetzold著,北京大学出版社2004

【4】DataStructures:

APseudecode(ApproachwithC)[美]RichardF.Gilberg,[美]BehrouzA.Forouzan著

 

8附录

main.cpp

#include

#include

#include

#include"GraphADT.h"

usingnamespacestd;

voidmain()

{

MGraphG;

CreateUDN(G);

inti=0;

charchoice[10];

cout<<"\t********************欢迎使用重庆科技学院校园导游程序***************"<

cout<<"\t___________________________________________________________________"<

cout<<"\t****************************景点名称****************************

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1