校园导游Word文档下载推荐.docx
《校园导游Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《校园导游Word文档下载推荐.docx(26页珍藏版)》请在冰点文库上搜索。
![校园导游Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/43d2e509-3235-4bae-ae43-ce36f05cd065/43d2e509-3235-4bae-ae43-ce36f05cd0651.gif)
附1:
源代码………………………………………………………………………………………6
附2:
调试结果……………………………………………………………………………………13
附3:
南通大学主校区平面图……………………………………………………………………16
一、课程设计目的
1.训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题的能力。
2.初步掌握程序开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和程序开发一般规范进行程序开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作与学习作风。
二、问题描述
校园占地几千亩,生活设施分布较散;
校园内景色优美,景点甚多。
在校园内移动,因时间、交通工具和用户兴趣等原因,需要选择线路。
本设计的主要任务是为在南通大学新校区内生活、购物、参观的人们提供行走路线查询、选择、景点介绍的帮助。
需实现的基本功能如下。
(1)景点信息的查询。
(2)邻接景点信息的查询。
(3)给出到某个景点的最佳路线。
(4)给出到所有景点的最佳路线。
(5)修改景点信息。
(1)基本要求
①设计校园游览图,景点不少于6个。
②设计全景图的显示方式。
③设计图的存储结构。
④文件读入或键盘方式输入图的顶点信息和边信息,在内存中创建图。
⑤一旦创建完地图,以文件形式保存,以免重复创建。
⑥实现上述基本功能。
⑦设计足够多的测试用例。
(2)较高要求
①为管理员提供图的编辑功能:
增、删景点;
增、删道路;
修改已有信息等。
②提供任意场所的问路查询功能,即任意两个景点之间的所有路径。
③根据该软件用途,增加其他功能。
④校园导游图的仿真界面。
1.定义数据类型:
(1)包含景点序号(num)、景点名称(view)、简介(info)等;
(2)定义无向网,实际情况每两个不相同的景点间均有权值;
2.主要操作函数:
(1)ArcCell();
权值,弧的相关信息;
(2)VertexType();
景点序号、景点名称、景点简介;
(3)MGraph();
顶点表,两个地点的距离,顶点数与边数;
(4)ShortestPath();
用Dijkstra算法求最短路径,查询两景点间最短路径;
(5)Menu();
主菜单;
(6)Main();
主函数;
(7)output();
输出函数;
五、详细设计
(1)权值,弧的相关信息
structArcCell{
intadj;
char*info;
};
(2)景点序号、景点名称、景点简介
structVertexType{
intnumber;
char*view;
(3)顶点表,两个地点的距离,顶点数与边数
structMGraph{
VertexTypevex[NUM];
ArcCellarcs[NUM][NUM];
intvexnum,arcnum;
(4)用Dijkstra算法求最短路径,查询两景点间最短路径
voidShortestPath(intnum)
{
intv,w,i,t;
intfinal[NUM];
intmin;
for(v=1;
v<
NUM;
v++)
{
final[v]=0;
D[v]=G.arcs[num][v].adj;
for(w=1;
w<
w++)
P[v][w]=0;
if(D[v]<
32767)
{
P[v][num]=1;
P[v][v]=1;
}
}
D[num]=0;
final[num]=1;
for(i=1;
i<
++i)
min=Max;
++w)
if(!
final[w])
if(D[w]<
min)
{
v=w;
min=D[w];
}
final[v]=1;
for(w=1;
if(!
final[w]&
&
((min+G.arcs[v][w].adj)<
D[w]))
{
D[w]=min+G.arcs[v][w].adj;
for(t=0;
t<
t++)
P[w][t]=P[v][t];
P[w][w]=1;
}
}
(5)主菜单
charMenu()
charc;
intflag;
do{
flag=1;
cout<
<
"
****************************************"
'
\n'
;
欢迎使用南通大学导航图系统"
1.景点信息的查询"
2.邻接景点信息查询"
3.给出到某个景点的最佳路线"
4.给出到所有景点的最佳路线"
5.修改景点信息"
e.退出"
请输入您的选择:
"
cin>
>
c;
if(c=='
1'
||c=='
2'
3'
4'
5'
e'
)
flag=0;
}while(flag);
returnc;
(6)输出函数
voidoutput(intview1,intview2)
inta,b,c,d,q=0;
a=view2;
if(a!
=view1)
G.vex[view1].view<
-->
G.vex[view2].view<
<
最短距离为"
<
D[a]<
\t'
G.vex[view1].view;
d=view1;
for(c=0;
c<
++c)
gate:
P[a][view1]=0;
for(b=0;
b<
b++)
{
if(G.arcs[d][b].adj<
32767&
P[a][b])
cout<
走"
G.vex[b].view;
q=q+1;
P[a][b]=0;
d=b;
if(q%8==0)cout<
gotogate;
}
六、总结与体会
经过了几天的课程设计,我对数据结构程序设计有了全新的认识。
尤其是当拿到一个不小的任务时,如何去分析,先干什么,接着干什么,最后干什么,有了比较明确的思路。
通过本次课程设计,我觉得熟练掌握所学的算法对于编程解决实际问题非常有效。
我们应该在平时多用我们所学的数据结构知识编写程序,尝试解决实际的问题。
选定一个项目后,我们应该先对这个项目进行概要的分析、设计,分析出这个程序是干什么用的,应该实现什么功能,这些功能应该包含哪些函数,函数之间应该是怎样的调用关系,比如说我做的“南通大学导游”系统,它就是一个为人们提供南通大学相关信息的软件,它包括南通大学主校区主要景点的名称、简介,能够查询任意两个景点间的最短距离,为大家提供更便捷的服务,为人们规划多条路线供选择,可以让管理员自己对景点进行动态添加。
进行这些是做项目时首先应该考虑的,如果概要设计做不好,那下面的其他设计也就很难做好。
概要设计做好后,我们就要开始做详细设计,详细设计就是将做好的概要设计进行完善,将每个函数要实现的功能用伪代码写出来,或者是用流程图画出来,因为伪代码更容易转换为C++源代码,因此我采用伪代码的方式进行详细设计,详细设计做好后,我们就能基本上知道每个程序应该如何实现它自身的功能,写源代码是也就不会那么盲目。
写源代码将详细设计转化为C++代码的过程,上面的详细设计做好后,我们只需在其基础上将一些简单的或者是用汉语代替的语句用C++语句写出来,再将一些语法错误改过来,并将概要设计和详细设计时未考虑到的东西在C++语句中完善,最终形成一个可执行的C++文件。
刚开始的时候,我根据书上的提示自己编写好程序输入电脑,然后编译的时候,出现了许许多多各种各样的问题,回头查看程序,自己却很难找到问题所在,于是查阅各种资料,问了身边很多同学,终于将程序顺利调试出来了。
通过这个系统的实现,我从输入代码跟运行调试的整个过程中学习到了很多东西,也了解到系统出现问题的时候的各种错误应该如何解决。
写完程序后并不是意味着项目结束,还有一件很重要的步骤就是调试,也就是将自己写的软件从头到尾将每个功能试用一下,如果运行的结果与预期一样,那程序通过测试,如果结果与预期的不一样,那说明程序还有问题,还需要继续改。
这次的实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。
越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
数据结构这门课程更加注重设计灵活、巧妙的算法,提高程序运行效率,这对我逻辑思维能力的提高有相当大的帮助。
虽然这次课程设计还算圆满完成,但我在以后的学习中也决不会放下数据结构,而是经常回顾和温习,并多从生活中寻找和发现问题,进而尝试用数据结构的知识设计算法,并进行简单的实现。
相信这样的积累过程对我今后的学习生活大有帮助,让我受益终生。
最后,再次衷心感谢丁卫平老师在本次课程设计中对我的悉心指导!
附1(源代码):
#include<
iostream>
usingnamespacestd;
#defineMax10000
#defineNUM12
structArcCell{
//权值
//该弧的相关信息
//景点序号
//景点名称
//景点简介
//顶点表
//两个地点的距离
//顶点数与边数
MGraphG;
intP[NUM][NUM];
longintD[NUM];
intx[13]={0};
voidCreateUDN(intv,inta);
voidpingmu();
voidShortestPath(intnum);
//两个地点最短路径
voidoutput(intview1,intview2);
charMenu();
voidNextValue(int);
voidmain()//主函数
{
intv0,v1,v2,v3,n,j;
charck1,ck2;
charchar1[10],char2[10];
CreateUDN(NUM,12);
do
ck1=Menu();
switch(ck1)
{
case'
:
inti;
cout<
#######################################"
南通大学景点概况"
景点序号"
景点名称"
景点简介"
endl;
for(i=1;
i++)
G.vex[i].view<
G.vex[i].info<
请按回车键继续..."
getchar();
getchar();
break;
case'
cout<
该景点序号为:
cin>
v3;
n=v3;
其邻接景点有:
for(j=1;
j<
12;
j++)
if(G.arcs[n][j].adj<
=1200)
G.vex[j].number<
G.vex[j].view<
G.vex[j].info<
请选择出发地序号(1~11):
v0;
while(v0>
11||v0<
1){
输入的出发地序号错误v0error"
请重新选择出发地序号(1~11):
请选择目的地序号(1~11):
v1;
while(v1>
11||v1<
1){
输入的目的地序号错误v1error"
请重新选择目的地序号(1~11):
ShortestPath(v0);
output(v0,v1);
case'
output(v0,i);
要修改的景点的景点序号"
cin>
v2;
要修改的信息是:
1.景点名称2.景点简介"
ck2;
switch(ck2)
{
case'
cout<
输入新的景点名称:
cin>
char1;
G.vex[v2].view=char1;
break;
case'
输入新的景点简介:
cin>
char2;
G.vex[v2].info=char2;
break;
};
};
}while(ck1!
='
);
charMenu()//主菜单
voidCreateUDN(intv,inta)//创建图的函数
inti,j;
G.vexnum=v;
G.arcnum=a;
G.vexnum;
++i)G.vex[i].number=i;
G.vex[0].view="
各个景点名称"
G.vex[0].info="
各个景点简介"
G.vex[1].view="
西门"
G.vex[1].info="
可乘301,616,35,48路等公交车"
G.vex[2].view="
北门"
G.vex[2].info="
可乘301路,35路公交车"
G.vex[3].view="
综合专业楼群"
G.vex[3].info="
教学楼10#-12#楼,纺化楼"
G.vex[4].view="
西操场"
G.vex[4].info="
足球、篮球、排球场,运动场"
G.vex[5].view="
东操场"
G.vex[5].info="
足球场、篮球场、排球场、网球场"
G.vex[6].view="
方肇周楼群"
G.vex[6].info="
教学楼1#-5#楼"
G.vex[7].view="
逸夫楼群"
G.vex[7].info="
教学楼6#-9#楼"
G.vex[8].view="
一食堂"
G.vex[8].info="
学校一号食堂"
G.vex[9].view="
二食堂"
G.vex[9].info="
学校二号食堂,有二号超市"
G.vex[10].view