C++校园导游系统
HappyNewStart 人气:0校园导游系统
问题描述:设计一个校园导游程序,完成校园信息的维护以及为来访的客人提供信息查询等服务功能。
基本要求:
设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,顶点的信息包括:景点名称、代号、简介等,以边表示道路,边上信息包括:两点距离、所需时间等相关信息。(注:数据的输入可以是键盘输入或文件输入两种方式)
提供对校园景点信息的编辑(如:添加、删除、修改等)的功能;
为来访客人提供图中任意景点相关信息的查询(可提供多种查询方式);
为来访客人提供从校门口到图中任意景点的问路查询(最短路径);
为来访客人提供图中任意景点间的问路查询。
#include<iostream> using namespace std; int main() { int n; const int MAX=1000; static int r [MAX][MAX]={ {0,100,20,200,MAX,MAX,MAX,MAX,MAX,MAX}, {100,0,MAX,80,MAX,MAX,MAX,90,MAX,MAX}, {20,MAX,0,MAX,MAX,MAX,200,MAX,MAX,MAX}, {200,80,MAX,0,40,MAX,MAX,70,MAX,50}, {MAX,MAX,MAX,40,0,300,MAX,MAX,MAX,60}, {MAX,MAX,MAX,MAX,300,0,50,MAX, MAX,MAX}, {MAX,MAX,200,MAX,MAX,50,0,MAX,MAX,400}, {MAX,90,MAX,70,MAX,MAX,MAX,0,50,50}, {MAX,MAX,MAX,MAX,MAX,MAX,MAX,50,0,70}, {MAX,MAX,MAX,50,60,MAX,400,50,70,0} }; struct vertex {string name; int number; string introduction; }ver[MAX]={ {"校门",0,"学校主校门"}, {"体育场",1,"学校举办体育活动的地方"}, {"六号公寓",2,"校内学生宿舍"}, {"沉思广场",3,"大草地"}, {"知源亭",4,"小亭子"}, {"图书馆",5,"书的栖息地"}, {"综合实验楼",6,"实验室云云"}, {"大学会馆",7,"举办会议和活动的地方"}, {"鹏远公寓",8,"鹏远学生宿舍"}, {"工学馆",9,"主教楼"} }; int b; for(b=0;b<1000;b++) { cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"| 欢迎来到校园导游系统 |"<<endl; cout<<"| 1.管理员登陆 |"<<endl; cout<<"| 2.游客登录 |"<<endl; cout<<"| 3.退出校园导游系统 |"<<endl; cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"校园导游图:"<<endl; cout<<" 8----------9--------------------------"<<endl; cout<<" | /|| | "<<endl; cout<<" | ---/ | | | "<<endl; cout<<" | / | --- | "<<endl; cout<<" 7 | | | "<<endl; cout<<" | | | | | "<<endl; cout<<" | | | | | "<<endl; cout<<" | ---3-------4--------------5 | "<<endl; cout<<" | ---/| | | "<<endl; cout<<" | / | || "<<endl; cout<<" 1 | ------- 6 "<<endl; cout<<" | | / "<<endl; cout<<" | | ------------ "<<endl; cout<<" | | / "<<endl; cout<<" | | / "<<endl; cout<<" | | 2 "<<endl; cout<<" |/ "<<endl; cout<<" 0 "<<endl; cout<<"景点编号:"<<endl; cout<<"0.校门 1.体育场"<<endl; cout<<"2.六号公寓 3.沉思广场"<<endl; cout<<"4.知源亭 5.图书馆"<<endl; cout<<"6.综合实验楼 7.大学会馆"<<endl; cout<<"8.鹏远公寓 9.工学馆"<<endl; cout<<"请按对应数字选择您操作:"; cin>>n; if(n==1) { cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"| 管理员您好,欢迎来到校园导游系统 |"<<endl; cout<<"| 1.添加校园景点信息 |"<<endl; cout<<"| 2.删除校园景点信息 |"<<endl; cout<<"| 3.修改校园景点信息 |"<<endl; cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"请输入您将要进行的编辑操作编号:"; int a; cin>>a; if(a==1){ cout<<"请输入你将要添加的校园景点编号:"; int m; cin>>m; ver[m].number=m; cout<<"请输入你将要添加的校园景点的名称:"; string x; cin>>x; ver[m].name=x; cout<<"请输入你将要添加的校园景点的介绍:"; string y; cin>>y; ver[m].introduction=y; cout<<"添加成功~" <<endl; } if(a==2){ cout<<"请输入你将要删除的校园景点编号:"; int m; cin>>m; ver[m]=ver[MAX-1]; cout<<"删除成功~"<<endl; } if(a==3){ cout<<"请输入你将要修改的校园景点编号:"; int m; cin>>m; cout<<"你将要修改的景点信息如下:"<<endl; cout<<"景点名称:"<<ver[m].name<<endl; cout<<"景点介绍:"<<ver[m].introduction<<endl; cout<<"请输入修改后的景点名称:"; string x; cin>>x; ver[m].name=x; cout<<"请输入修改后的景点介绍信息:"; string y; cin>>y; ver[m].introduction=y; cout<<"修改成功~"<<endl; } } else if(n==2) { cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"| 游客您好,欢迎来到校园导游系统 |"<<endl; cout<<"| 1.查询校园景点信息 |"<<endl; cout<<"| 2.校门问路查询 |"<<endl; cout<<"| 3.任意景点问路查询 |"<<endl; cout<<"|-----------------------------------------------------------------------------|"<<endl; cout<<"请按对应数字选择您所需要的服务:"; int o; cin>>o; switch(o) { case 1:{cout<<"查询校园景点信息"<<endl<<"请输入所要查询的景点号码:"; int m; cin>>m; cout<<"景点名称:"<<ver[m].name<<endl; cout<<"景点介绍:"<<ver[m].introduction<<endl; }break; case 2:{ cout<<"校门问路查询"<<endl; cout<<"请输入您想要到达的目的地:"; static int x=0; static int y; cin>>y; cout<<"最短路径为:" ; static int u; static int v; static int w; static int i; int t; static int s[MAX]; static int D[MAX][MAX]; static bool P[10][10][10]; for(v=0;v<10;v++) for(w=0;w<10;w++){ D[v][w]=r[v][w]; for(u=0;u<10;u++) P[v][w][u]=0; if(D[v][w]<MAX){ P[v][w][v]=1;P[v][w][w]=1; } } for(u=0;u<10;u++) for(v=0;v<10;v++) for(w=0;w<10;w++) if(D[v][u]+D[u][w]<D[v][w]){ D[v][w]=D[v][u]+D[u][w]; for(i=0;i<10;i++) P[v][w][i]=P[v][u][i]||P[u][w][i]; } int q=0; for(t=0;t<10;t++) if(P[x][y][t]==true) { s[q]=t; q++; } int d; int h; int f[10]={100}; static int l=0; int z=x; for(d=0;d<q-1;d++) for(h=0;h<q;h++) if(D[z][s[h]]==r[z][s[h]]&&D[z][s[h]]>0&&s[h]!=f[l]){ cout<<z<<"-->"; l=l+1; f[l]=z; z=s[h]; break; } cout<<y; cout<<"这两个地点间的最短距离为"<<D[0][y]<<"m"<<endl; cout<<"从所在地步行到目的地约用时为"<<D[0][y]/80.0<<"min"<<endl; }break; case 3:{cout<<"任意景点问路查询"<<endl<<"请输入您现在所在的地点"; static int x; cin>>x; cout<<"请输入您想要到的地点"; static int y; cin>>y; cout<<"最短路径为:" ; static int u; static int v; static int w; static int i; int t; static int s[MAX]; static int D[MAX][MAX]; static bool P[10][10][10]; for(v=0;v<10;v++) for(w=0;w<10;w++){ D[v][w]=r[v][w]; for(u=0;u<10;u++) P[v][w][u]=false; if(D[v][w]<MAX){ P[v][w][v]=true;P[v][w][w]=true; } } for(u=0;u<10;u++) for(v=0;v<10;v++) for(w=0;w<10;w++) if(D[v][u]+D[u][w]<D[v][w]){ D[v][w]=D[v][u]+D[u][w]; for(i=0;i<10;i++) P[v][w][i]=P[v][u][i]||P[u][w][i]; } int q=0; for(t=0;t<10;t++) if(P[x][y][t]==true) { s[q]=t; q++; } int d; int h; int f[10]={100}; static int l=0; int z=x; for(d=0;d<q-1;d++) for(h=0;h<q;h++) if(D[z][s[h]]==r[z][s[h]]&&D[z][s[h]]>0&&s[h]!=f[l]){ cout<<z<<"-->"; l=l+1; f[l]=z; z=s[h]; break; } cout<<y; cout<<"这两个地点间的最短距离为"<<D[x][y]<<"m"<<endl; cout<<"从所在地步行到目的地约用时为"<<D[x][y]/80.0<<"min"<<endl; }break; } } else {cout<<"感谢使用校园导游系统"<<endl; exit(0); } } }
加载全部内容