校园导游课程设计Word下载.docx
《校园导游课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《校园导游课程设计Word下载.docx(21页珍藏版)》请在冰点文库上搜索。
![校园导游课程设计Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/eb276e2d-e5a5-4845-9b06-1fe930577e29/eb276e2d-e5a5-4845-9b06-1fe930577e291.gif)
{6,"
工程实习中心,金工实习\n"
},{7,"
仰仪楼,机电计测分院\n"
},{8,"
体育馆,旁边有篮球场`足球场`还有网球场\n"
},{9,"
一号教学楼,主要以阶梯教室为主\n"
},{10,"
二号教学楼,小教室为多\n"
}};
/*景点名称和简介*/
操作:
/*给景点之间的路径赋最大值*/
/*最短路径的C语言函数*/
/*输出最短路径和最短距离函数*/
/*输入景点代码查景点名称和简介*/
/*输入景点代码查到其它景点的最短距离*/
四、需求分析:
现在大多数学校由于不断扩张,造成学校面积大而造成人们人出游困难的问题,人们如果不熟悉该地点。
找到一个地方就会很困难,然而如果有一个校园导游系统,人们出行就会方便很多。
五、概要设计:
用图的算法进行构造,用链表建立无向图,然后再用深度优先遍历进行搜索,查找所需的路径。
再用弗洛伊德算法求出两个景点之间的最短路径。
系统结构图:
六、详细设计:
浏览学校全景:
用数组存放这个学校的全部景点,再通过遍历数组打印出学校的所有景点及其信息。
寻找最短路径:
利用佛洛伊德算法,在两个节点之间设置节点通过对比权值大小,找出权值最小的路径,即为所求路径。
增加项目:
在链表中增加一个元素,调整元素指针指向该元素,将该元素的指针指向后一个元素。
删除项目:
在链表中删除一个元素,将该元素前面的元素指针断开指向该元素后的元素,再将该元素的指针断开。
七、程序源代码:
#include<
stdio.h>
iostream>
stdlib.h>
string.h>
#defineN100//服务个数最大100
#defineRoad1000//定义路径为1000
intNum=9;
//目前服务个数
usingnamespacestd;
typedefstructElemtype
charname[30];
charnumber[10];
charintroduce[200];
}Elemtype;
typedefstructPlace
intnum;
//位置序号
Place*next;
Elemtypedate;
//服务信息
}Place;
//定义服务
typedefstructMGraph
Placeplace;
intlegs[N][N];
//存放路径长
}MGraph;
MGraphMGr;
//全局变量,定义MGr为MGraph类型
intshortest[N][N];
//定义全局变量存贮最小路径
intpath[N][N];
//定义存贮路径
Place*p;
voidinit(Place*&
head)//定义服务位置
Place*p,*q;
head=(Place*)malloc(sizeof(Place));
head->
next=NULL;
q=head;
p=(Place*)malloc(sizeof(Place));
p->
num=1;
strcpy(p->
date.name,"
锦绣"
);
date.number,"
1"
date.introduce,"
又称一教,是学校主要教学楼之一,位于春华路与校园西路交叉口西北150米(来自高德地图),是同学们上课的主要场所之一"
next=q->
next;
q->
next=p;
q=p;
num=2;
丹青"
2"
又称二教,是学校主要教学楼之一,位于哈尔滨市香坊区和兴路26号(来自高德地图),是同学们上课的主要场所之一"
num=3;
俭德园"
3"
位于学校9A公寓东北方150M处,是学生们经常去的地方,适合平民消费,价格实惠。
"
num=4;
行政楼"
4"
位于学校操场西行200M处,是学生,老师日常处理教学事务的地点,也是学校的行政地点。
num=5;
图书馆"
5"
位于篮球场西行200M处,是同学们日常,考研的学习地点,同时有大量的图书可供借阅,是黑龙江高校中藏书量最多的地点。
num=6;
成栋"
6"
位于学校新食堂颐丰园西北方400米处,是各个学院事务的主要办公地点。
num=7;
主楼"
7"
位于哈尔滨市香坊区农林七道街与和兴路交叉口南150米(来自高德地图)是学校众多行政,组织部门的主要办公地点。
num=8;
颐丰园"
8"
位于成栋东南方400M处,是学校在15年新开放的食堂,环境优美怡人,但是物价偏高,味道一般。
num=9;
9A"
9"
位于学校俭德园西南方行150M处,是信息学院男生的主要休息场所,现在在该公寓楼居住的601寝室的人将会在二十年后成为男神。
inti,j;
//定义服务间的距离
for(i=1;
i<
=N;
i++)
for(j=1;
j<
j++)
MGr.legs[i][j]=Road;
}
shortest[i][j]=0;
MGr.legs[0][1]=MGr.legs[1][0]=200;
MGr.legs[0][2]=MGr.legs[2][0]=500;
MGr.legs[1][3]=MGr.legs[3][1]=150;
MGr.legs[3][4]=MGr.legs[4][3]=50;
MGr.legs[3][5]=MGr.legs[5][3]=800;
MGr.legs[4][5]=MGr.legs[5][4]=850;
MGr.legs[1][2]=MGr.legs[2][1]=550;
MGr.legs[2][7]=MGr.legs[7][2]=1000;
MGr.legs[8][7]=MGr.legs[7][8]=950;
MGr.legs[7][9]=MGr.legs[9][7]=26;
voidfolyd()//佛洛依德算法
inti,j,k;
shortest[i][j]=MGr.legs[i][j];
path[i][j]=0;
for(k=1;
k<
k++)
if(shortest[i][j]>
(shortest[i][k]+shortest[k][j]))
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
//记录经过的路径
voiddisplay(inti,intj)//输出两个服务的路径及最短路径
inta,b;
a=i;
b=j;
cout<
<
我们向您推荐的最短路径是:
"
;
if(i<
j)
a;
while(path[i][j]!
=0)
->
path[i][j];
j=path[i][j];
else
i=path[j][i];
b<
endl;
您所查找的"
a<
两个服务之间的最短距离为:
shortest[a][b]<
米。
两个服务之间的最短路径是:
米。
intshortdistance(Place*head)//查找两服务之间最短路径
Place*t=head->
next,*q=head->
请输入要查询的两个服务的位置序号:
cin>
>
i>
j;
while(t)
if(t->
num==i)break;
elset=t->
while(q)
if(q->
num==j)break;
elseq=q->
if(q==NULL||t==NULL)
抱歉,没有通向的路径!
folyd();
display(i,j);
return1;
voidadd(Place*&
head)//增加服务
Place*p,*t=head->
inta;
intb;
intx;
inty;
inti;
请输入添加的服务位置(需输入大于9的整数)。
num;
num==p->
num)
此位置已被其它服务占用,请重新输入其它空白的位置。
continue;
if(t==NULL)
服务编号:
date.number;
服务名字:
date.name;
服务简介:
date.introduce;
x=p->
请输入路径条数、相关服务的位置y、路径长度"
=a;
y;
b;
MGr.legs[x][y]=MGr.legs[y][x]=b;
服务位置:
num<
date.number<
服务名称:
date.name<
date.introduce<
Place*q=head->
while(q->
next)
q=q->
Num++;
voiddeleted(Place*&
head)//删除服务
inttext=0;
charcnum[10];
Place*p=head;
输入删除的服务编号:
cnum;
while(p->
if(strcmp(p->
next->
date.number,cnum)==0)
恭喜您,您已成功将服务"
关闭!
next=p->
Num--;
break;
if(p->
next==NULL)
该服务不存在!
p=p->
voidfind(Place*&
head)//查询服务
intn;
输入查询的服务位置序号:
n;
num==n)
elsep=p->
voidreplace(Place*&
head)//修改服务
charname1[20];
charnumber1[10],number2[10];
charintroduce1[100];
输入要修改的的服务编号:
number1;
date.number,number1)==0)
请输入新的服务名称:
name1;
请输入新的服务编号:
number2;
请输入新的服务简介:
introduce1;
date.name,name1);
date.number,number2);
date.introduce,introduce1);
voidmenu()//主菜单
{cout<
1查询服务请按1键;
2修改服务请按2键;
3增加服务请按3键;
4删除服务请按4键"
5路径搜索请按5键"
6退出系统请按6键;
intmain()//主函数
欢迎使用东北林业大学校园导游查询系统"
init(p);
while
(1)
当前存在的服务个数为:
Num<
menu();
x;
switch(x)
case1:
find(p);
break;
case2:
replace(p);
case3:
add(p);
case4:
deleted(p);
case5:
shortdistance(p);
case6:
恭喜您,成功退出系统!
exit(0);