校园导游课程设计.docx

上传人:b****7 文档编号:11499602 上传时间:2023-03-02 格式:DOCX 页数:21 大小:53.52KB
下载 相关 举报
校园导游课程设计.docx_第1页
第1页 / 共21页
校园导游课程设计.docx_第2页
第2页 / 共21页
校园导游课程设计.docx_第3页
第3页 / 共21页
校园导游课程设计.docx_第4页
第4页 / 共21页
校园导游课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

校园导游课程设计.docx

《校园导游课程设计.docx》由会员分享,可在线阅读,更多相关《校园导游课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

校园导游课程设计.docx

校园导游课程设计

校园导游课程设计

一、问题描述:

用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求能够回答有关景点介绍、游览路径等问题。

二、实验内容:

基本要求:

查询各景点的相关信息;查询图中任意两个景点间的最短路径;查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。

选作内容:

求多个景点的最佳(最短)游览路径。

区分机动车道和人行道。

实现导游图的仿真界面。

三、数据结构:

typedefstructmessage

{

intnum;//景点代码

charname[100];//景点名称

charpro[500];//简介

}Ciceroni;

Ciceronischool[10]={{1,"行政楼\n"},{2,"食堂\n"},{3,"赛博楼,信息分院办公室所在地\n"},{4,"求是楼,实验楼计算机中心\n"},{5,"格致楼,法学管理学院"},

{6,"工程实习中心,金工实习\n"},{7,"仰仪楼,机电计测分院\n"},{8,"体育馆,旁边有篮球场`足球场`还有网球场\n"},{9,"一号教学楼,主要以阶梯教室为主\n"},{10,"二号教学楼,小教室为多\n"}};/*景点名称和简介*/

操作:

/*给景点之间的路径赋最大值*/

/*最短路径的C语言函数*/

/*输出最短路径和最短距离函数*/

/*输入景点代码查景点名称和简介*/

/*输入景点代码查到其它景点的最短距离*/

四、需求分析:

现在大多数学校由于不断扩张,造成学校面积大而造成人们人出游困难的问题,人们如果不熟悉该地点。

找到一个地方就会很困难,然而如果有一个校园导游系统,人们出行就会方便很多。

五、概要设计:

用图的算法进行构造,用链表建立无向图,然后再用深度优先遍历进行搜索,查找所需的路径。

再用弗洛伊德算法求出两个景点之间的最短路径。

系统结构图:

六、详细设计:

浏览学校全景:

用数组存放这个学校的全部景点,再通过遍历数组打印出学校的所有景点及其信息。

寻找最短路径:

利用佛洛伊德算法,在两个节点之间设置节点通过对比权值大小,找出权值最小的路径,即为所求路径。

增加项目:

在链表中增加一个元素,调整元素指针指向该元素,将该元素的指针指向后一个元素。

删除项目:

在链表中删除一个元素,将该元素前面的元素指针断开指向该元素后的元素,再将该元素的指针断开。

七、程序源代码:

#include

#include

#include

#include

#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,"锦绣");

strcpy(p->date.number,"1");

strcpy(p->date.introduce,"又称一教,是学校主要教学楼之一,位于春华路与校园西路交叉口西北150米(来自高德地图),是同学们上课的主要场所之一");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=2;

strcpy(p->date.name,"丹青");

strcpy(p->date.number,"2");

strcpy(p->date.introduce,"又称二教,是学校主要教学楼之一,位于哈尔滨市香坊区和兴路26号(来自高德地图),是同学们上课的主要场所之一");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=3;

strcpy(p->date.name,"俭德园");

strcpy(p->date.number,"3");

strcpy(p->date.introduce,"位于学校9A公寓东北方150M处,是学生们经常去的地方,适合平民消费,价格实惠。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=4;

strcpy(p->date.name,"行政楼");

strcpy(p->date.number,"4");

strcpy(p->date.introduce,"位于学校操场西行200M处,是学生,老师日常处理教学事务的地点,也是学校的行政地点。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=5;

strcpy(p->date.name,"图书馆");

strcpy(p->date.number,"5");

strcpy(p->date.introduce,"位于篮球场西行200M处,是同学们日常,考研的学习地点,同时有大量的图书可供借阅,是黑龙江高校中藏书量最多的地点。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=6;

strcpy(p->date.name,"成栋");

strcpy(p->date.number,"6");

strcpy(p->date.introduce,"位于学校新食堂颐丰园西北方400米处,是各个学院事务的主要办公地点。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=7;

strcpy(p->date.name,"主楼");

strcpy(p->date.number,"7");

strcpy(p->date.introduce,"位于哈尔滨市香坊区农林七道街与和兴路交叉口南150米(来自高德地图)是学校众多行政,组织部门的主要办公地点。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=8;

strcpy(p->date.name,"颐丰园");

strcpy(p->date.number,"8");

strcpy(p->date.introduce,"位于成栋东南方400M处,是学校在15年新开放的食堂,环境优美怡人,但是物价偏高,味道一般。

");

p->next=q->next;

q->next=p;

q=p;

 

p=(Place*)malloc(sizeof(Place));

p->num=9;

strcpy(p->date.name,"9A");

strcpy(p->date.number,"9");

strcpy(p->date.introduce,"位于学校俭德园西南方行150M处,是信息学院男生的主要休息场所,现在在该公寓楼居住的601寝室的人将会在二十年后成为男神。

");

p->next=q->next;

q->next=p;

q=p;

 

inti,j;//定义服务间的距离

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

MGr.legs[i][j]=Road;

}

}

 

for(i=1;i<=N;i++)

 

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;

 

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

shortest[i][j]=MGr.legs[i][j];

path[i][j]=0;

}

}

for(k=1;k<=N;k++)

{

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

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

{

cout<

while(path[i][j]!

=0)

{

cout<<"->"<

if(i

j=path[i][j];

else

i=path[j][i];

}

cout<<"->"<

cout<<""<

cout<<"您所查找的"<"<

"<

"<

}

else

{

cout<

while(path[i][j]!

=0)

{

 

cout<<"->"<

if(i

j=path[i][j];

else

i=path[j][i];

}

cout<<"->"<

cout<<"您所查找的"<"<

"<

"<

 

}

cout<<""<

}

 

intshortdistance(Place*head)//查找两服务之间最短路径

{

inti,j;

Place*t=head->next,*q=head->next;

cout<<"请输入要查询的两个服务的位置序号:

"<

cin>>i>>j;

while(t)

{

if(t->num==i)break;

elset=t->next;

}

while(q)

{

if(q->num==j)break;

elseq=q->next;

}

if(q==NULL||t==NULL)

cout<<"抱歉,没有通向的路径!

"<

 

else

{

folyd();

display(i,j);

}

cout<

return1;

 

}

 

voidadd(Place*&head)//增加服务

{

Place*p,*t=head->next;

p=(Place*)malloc(sizeof(Place));

inta;

intb;

intx;

inty;

inti;

cout<<"请输入添加的服务位置(需输入大于9的整数)。

";

cin>>p->num;

cout<

while(t)

{

if(t->num==p->num)

{

cout<<"此位置已被其它服务占用,请重新输入其它空白的位置。

"<

cout<<""<

cin>>p->num;continue;

}

elset=t->next;

}

if(t==NULL)

{

cout<<"服务编号:

";

cin>>p->date.number;

cout<<"服务名字:

";

cin>>p->date.name;

cout<<"服务简介:

";

cin>>p->date.introduce;

x=p->num;

cout<

cout<<"请输入路径条数、相关服务的位置y、路径长度"<

cin>>a;

cout<

for(i=1;i<=a;i++)

{

cin>>y;

cin>>b;

MGr.legs[x][y]=MGr.legs[y][x]=b;

}

cout<<"服务位置:

"<num<

cout<<"服务编号:

"<date.number<

cout<<"服务名称:

"<date.name<

cout<<"服务简介:

"<date.introduce<

cout<<""<

Place*q=head->next;

while(q->next)

{

q=q->next;

}

p->next=q->next;

q->next=p;

Num++;

}

}

 

voiddeleted(Place*&head)//删除服务

{

inttext=0;

charcnum[10];

Place*p=head;

cout<<"输入删除的服务编号:

"<

cout<<""<

cin>>cnum;

while(p->next)

{

if(strcmp(p->next->date.number,cnum)==0)

{

cout<<"恭喜您,您已成功将服务"<next->date.name<<"关闭!

"<

p->next=p->next->next;

Num--;

break;

}

else

{

if(p->next==NULL)

 

cout<<"该服务不存在!

"<

cout<<""<

p=p->next;

 

}

}

 

cout<

}

 

voidfind(Place*&head)//查询服务

{

intn;

Place*p=head;

cout<<"输入查询的服务位置序号:

";

cout<<""<

 

cin>>n;

 

while(p->next)

{

if(p->next->num==n)

{

cout<<"服务位置:

"<next->num<

cout<<"服务编号:

"<next->date.number<

cout<<"服务名称:

"<next->date.name<

cout<<"服务简介:

"<next->date.introduce<

break;

}

elsep=p->next;

 

}

if(p->next==NULL)

 

cout<<"该服务不存在!

"<

cout<<""<

cout<<""<

}

 

voidreplace(Place*&head)//修改服务

{

 

charname1[20];

charnumber1[10],number2[10];

charintroduce1[100];

 

Place*p=head;

 

cout<<"输入要修改的的服务编号:

"<

cout<<""<

cin>>number1;

while(p->next)

{

if(strcmp(p->next->date.number,number1)==0)

 

{

 

cout<<"请输入新的服务名称:

";

cin>>name1;

cout<<"请输入新的服务编号:

";

cin>>number2;

cout<<"请输入新的服务简介:

";

cin>>introduce1;

strcpy(p->next->date.name,name1);

strcpy(p->next->date.number,number2);

strcpy(p->next->date.introduce,introduce1);

cout<

cout<<"服务位置:

"<next->num<

cout<<"服务编号:

"<next->date.number<

cout<<"服务名称:

"<next->date.name<

cout<<"服务简介:

"<next->date.introduce<

cout<

break;

}

elsep=p->next;

}

 

if(p->next==NULL)

cout<<"该服务不存在!

"<

cout<<""<

cout<

}

 

voidmenu()//主菜单

 

{cout<<""<

cout<<""<

cout<<"1查询服务请按1键;"<

 

cout<<"2修改服务请按2键;"<

 

cout<<"3增加服务请按3键;"<

 

cout<<"4删除服务请按4键"<

 

cout<<"5路径搜索请按5键"<

 

cout<<"6退出系统请按6键;"<

cout<<""<

cout<<""<

 

}

intmain()//主函数

{

 

cout<<"欢迎使用东北林业大学校园导游查询系统"<

cout<<""<

cout<

intx;

init(p);

while

(1)

{

cout<<"当前存在的服务个数为:

"<

cout<

menu();

cin>>x;

switch(x)

{

 

case1:

find(p);break;

case2:

replace(p);break;

case3:

add(p);break;

case4:

deleted(p);break;

 

case5:

shortdistance(p);break;

case6:

 

cout<<"恭喜您,成功退出系统!

"<

 

exit(0);

}

 

}

 

}

 

 

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

当前位置:首页 > 表格模板 > 表格类模板

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

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