【数据结构课设】校园导游系统
来源:互联网 发布:unity3d游戏源代码 编辑:程序博客网 时间:2024/04/28 18:53
/************************************************************ 版权所有 (C)2017,高兆港** 文件名称:main.cpp* 文件标识:无* 内容摘要:主函数* 其它说明:无* 当前版本: V1.0* 作 者:高兆港* 完成日期: 20171222** 修改记录1:* 修改日期:20171222* 版本号: V1.0* 修改人: 高兆港* 修改内容:创建**********************************************************/
#include <iostream>#include <malloc.h>#include "daohang.h"using namespace std;int main(){ cout << "******************************欢迎使用烟大导航**************************************" << endl; cout << "*********************************烟大景点*******************************************" << endl; INFO B[MAXV]={"钟楼","三元湖","第七餐厅","综合楼","八景园","东门看海","西门新世界"};int v;int A[MAXV][MAXV]= { 0,1,7,7,4,10,5, 1,0,LIMITFSS,5,LIMITFSS,LIMITFSS,3, 7,LIMITFSS,0,5,LIMITFSS,10,LIMITFSS, 7,5,5,0,LIMITFSS,LIMITFSS,LIMITFSS, 4,LIMITFSS,LIMITFSS,LIMITFSS,0,15,3, 10,LIMITFSS,10,LIMITFSS,15,0,LIMITFSS, 5,3,LIMITFSS,LIMITFSS,3,LIMITFSS,0 };MGraph *g;g=(MGraph*)malloc(sizeof(MGraph));CreateMGraph (g,A,B);page(g);cout<<endl;return 0;}
/************************************************************ 版权所有 (C)2017,高兆港** 文件名称:daohang.h* 文件标识:无* 内容摘要:函数声明* 其它说明:无* 当前版本: V1.0* 作 者:高兆港* 完成日期: 20171222** 修改记录1:* 修改日期:20171222* 版本号: V1.0* 修改人: 高兆港* 修改内容:创建**********************************************************/#ifndef DAOHANG_H#define DAOHANG_H#define MAXV 7#define LIMITFSS 100#include <iostream>using namespace std;typedef struct{ int no; //顶点编号 char info[10]; //顶点名称}VertexType; //顶点类型typedef struct //定义一个图{ int n,e; //顶点数 边数 int edges[LIMITFSS][LIMITFSS]; //邻接矩阵 VertexType vex[LIMITFSS]; //顶点信息}MGraph;typedef struct{ char ifm[100];}INFO;void CreateMGraph(MGraph *G,int A[][MAXV],INFO B[]); //创建邻接矩阵void page(MGraph *G); //主页void DispMGraph(MGraph *G); //显示邻接矩阵void Ppath(int path[],int i,int v,MGraph *L);void Dispath(int dist[],int path[],int s[],int v,MGraph *P);void Dijkstra(MGraph *G,int v);void Add(MGraph *&G); //景点增加void Del(MGraph *&G); //景点删除void Change(MGraph *&G); //景点修改void user(MGraph *G); //用户界面void admin(MGraph *G); //管理界面#endif // DAOHANG_H/************************************************************ 版权所有 (C)2017,高兆港** 文件名称:daohang.cpp* 文件标识:无* 内容摘要:函数库* 其它说明:无* 当前版本: V1.0* 作 者:高兆港* 完成日期: 20171222** 修改记录1:* 修改日期:20171222* 版本号: V1.0* 修改人: 高兆港* 修改内容:创建**********************************************************/#include "daohang.h"#include <iostream>#include <stdio.h>#include <string.h>#define MAXV 7#define LIMITFSS 100using namespace std;/********************************************************** 功能描述:创建邻接矩阵* 输入参数:MGraph *G,int A[][MAXV],INFO B[]* 输出参数:G->edges[i][j]piFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void CreateMGraph(MGraph *G,int A[][MAXV],INFO B[]) //创建邻接矩阵{ int i,j; G->n=7; G->e=24; for (i=0;i<G->n;i++) //初始化景点信息 { G->vex[i].no=i+1; for (j=0; B[i].ifm[j]!='\0'; j++) G->vex[i].info[j]=B[i].ifm[j]; } for (i=0;i<G->n;i++) //初始化邻接矩阵 for (j=0;j<G->n;j++) { if (i==j) G->edges[i][j]=0; else G->edges[i][j]=LIMITFSS; } for (i=0;i<G->n;i++) //赋值 for (j=0;j<G->n;j++) { G->edges[i][j]=A[i][j]; }}/********************************************************** 功能描述:主页* 输入参数:MGraph *G* 输出参数:G->vex[i].no G->vex[i].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void page(MGraph *G) //主页{ cout << "******************************欢迎使用烟大导航**************************************" << endl; cout << "*********************************烟大景点*******************************************" << endl; int i; int a; for(i=0;i<G->n;i++) {cout<<G->vex[i].no<<"."<<G->vex[i].info<<" ";} //输出景点编号及信息 cout<<endl; cout<<"请选择:"<<" "<<"1.管理员"<<" "<<"2.用户"<<" "<<"3.退出"<<endl; cin>>a; switch(a) { case 1: admin(G);break; case 2: user(G);break; case 3: cout<<"谢谢使用!"<<endl; break; }}/********************************************************** 功能描述:显示邻接矩阵* 输入参数:MGraph *G* 输出参数:G->n G->e G->vex[i].no G->vex[i].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void DispMGraph(MGraph *G) //显示邻接矩阵{ int i,j; cout<<"顶点数:"<<G->n<<endl; cout<<"边数:"<<G->e<<endl; for(i=0;i<G->n;i++) //显示景点信息 { cout<<G->vex[i].no<<G->vex[i].info<<endl; } cout<<"各点连接情况:"<<endl; cout<<" "; //显示邻接矩阵 for(j=0;j<G->n;j++) { cout<<j<<" "; } cout<<endl; for(i=0;i<G->n;i++) { cout<<i<<" "; for(j=0;j<G->n;j++) { if(G->edges[i][j]==LIMITFSS) cout<<"∞ "; else { cout<<G->edges[i][j]<<" "; } }cout<<endl; } cout<<"1.返回主页"<<" 2.退出"<<endl; int p; cin>>p; if(p==1) page(G); else if(p==2) cout<<"谢谢使用!"<<endl;}/********************************************************** 功能描述:多步时递归输出路径* 输入参数:int path[],int i,int v,MGraph *G* 输出参数:G->vex[k].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void Ppath(int path[],int i,int v,MGraph *G) //多步时递归输出路径{ int k; k=path[i]; if(k==v) return; Ppath(path,k,v,G); cout<<"→"<<G->vex[k].info;}/********************************************************** 功能描述:显示最短路径* 输入参数:int dist[],int path[],int s[],int v,MGraph *G* 输出参数:G->vex[i].info,(G->edges[v][i])*100piFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void Dispath(int dist[],int path[],int s[],int v,MGraph *G) //显示最短路径{ int i; cout<<"请输入终点:"; cin>>i; i=i-1; if(s[i]==1) { cout<<"从"<<G->vex[v].info<<"到"<<G->vex[i].info<<"的最短路径为:"; cout<<G->vex[v].info; Ppath(path,i,v,G); cout<<"→"<<G->vex[i].info<<endl; cout<<"距离您约"<<(G->edges[v][i])*100<<"米"<<endl; }}/********************************************************** 功能描述:一个顶点到各个顶点的最短路径* 输入参数:MGraph *G,int v* 输出参数:dist[j]piFileType-文件类型* 返回值:无 * 其它说明:无************************************************************/void Dijkstra(MGraph *G,int v) //一个顶点到各个顶点的最短路径{ //定义辅助存储及赋初值 int mindis,i,j,u; int s[MAXV];//是否加入了s int dist[MAXV];//距离 int path[MAXV];//经过点 for (i=0;i<G->n;i++) { s[i]=0; dist[i]=G->edges[v][i]; if (G->edges[v][i]<LIMITFSS) path[i]=v; else path[i]=-1; } s[v]=1; path[v]=0; //选取不在s中且具有最小距离的顶点u for (i=0;i<G->n;i++) { mindis=LIMITFSS; for (j=0;j<G->n;j++) { if(s[j]==0 && s[j]<LIMITFSS) { u=j; mindis=dist[j]; } } s[u]=1; //修改不在s中的顶点的距离 for(j=0;j<G->n;j++) { if(s[j]==0) { if(G->edges[u][j]<LIMITFSS && dist[u]+G->edges[u][j]<dist[j]) { dist[j]=dist[u]+G->edges[u][j]; path[j]; } } } } Dispath(dist,path,s,v,G);}/********************************************************** 功能描述:景点增加* 输入参数:MGraph *&G* 输出参数:G->vex[n-1].no,G->vex[n-1].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void Add(MGraph *&G) //景点增加{ int n; char info[200]; int distance;; int i; cout<<"请输入景点编号:"; cin>>n; G->vex[n-1].no=n; G->n=n; cout<<"请输入地点名称:"; cin>>info; for(i=0; info[i]!='\0'; i++) { G->vex[n-1].info[i]=info[i]; } cout<<"请输入"<<G->vex[n-1].info<<"到各个景点的距离:"; for(i=0; i<G->n; i++) { cout<<G->vex[n-1].info<<"到"<<G->vex[i].info<<"的距离为:"; cin>>distance; G->edges[n-1][i]=distance; G->edges[i][n-1]=distance; } cout<<"1.返回主页"<<" 2.退出"<<endl; int p; cin>>p; if(p==1) page(G); else if(p==2) cout<<"谢谢使用!"<<endl;}/********************************************************** 功能描述:景点删除* 输入参数:MGraph *&G* 输出参数:G->vex[n-1].no,G->vex[n-1].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void Del(MGraph *&G) //景点删除{ int n,i; cout<<"请输入您要删除的地点编号:"; cin>>n; if(n>=G->n) { cout<<"你输入的编号地点不存在,请重新输入:"; Del(G); } else { int j=n; int p=n; while(n<G->n) { G->vex[n-1].no=G->vex[n].no; G->vex[n-1].no--; strcpy(G->vex[n-1].info,G->vex[n].info); n++; } for(j; j<G->n; j++) for(i=0; i<G->n; i++) { if(i>=p) { G->edges[j][i]=G->edges[j+1][i+1]; G->edges[i][j]=G->edges[i+1][j+1]; } else { G->edges[j][i]=G->edges[j+1][i]; G->edges[i][j]=G->edges[i][j+1]; } } G->n--; printf("删除成功\n"); } cout<<"1.返回主页"<<" 2.退出"<<endl; int p; cin>>p; if(p==1) page(G); else if(p==2) cout<<"谢谢使用!"<<endl;}/********************************************************** 功能描述:景点修改* 输入参数:MGraph *&G* 输出参数:G->vex[n-1].no,G->vex[n-1].infopiFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void Change(MGraph *&G) //景点修改{ int n; int i; int distance; char info[100]; cout<<"请输入景点编号:"<<endl; cin>>n; G->vex[n-1].no=n; cout<<"请输入景点信息:"; cin>>info; strcpy(G->vex[n-1].info,info); cout<<"请输入"<<G->vex[n-1].info<<"到各个点的距离:"<<endl; for(i=0; i<G->n; i++) { cout<<G->vex[n-1].info<<"到"<<G->vex[i].info<<"的距离为:"; cin>>distance; G->edges[n-1][i]=distance; G->edges[i][n-1]=distance; } cout<<"1.返回主页"<<" 2.退出"<<endl; int p; cin>>p; if(p==1) page(G); else if(p==2) cout<<"谢谢使用!"<<endl;}/********************************************************** 功能描述:用户界面* 输入参数:MGraph *G* 输出参数:无piFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void user(MGraph *G) //用户界面{ cout<<"1.查询"<<" "<<"2.返回主页"<<endl; int a; cin>>a; switch (a) { case 1: int v; cout<<"请输入起点:"; cin>>v; Dijkstra(G,v); break; case 2: page(G); }}/********************************************************** 功能描述:管理员界面* 输入参数:Graph *G* 输出参数:无piFileType-文件类型* 返回值:无* 其它说明:无************************************************************/void admin(MGraph *G) //管理员界面{ cout<<"1.查询后台"<<" 2.增加景点"<<" 3.删除景点"<<" 4.修改景点"<<" 5.返回主页"<<endl; int a; cin>>a; switch (a) { case 1:DispMGraph (G);break; case 2:Add(G);break; case 3:Del(G);break; case 4:Change(G);break; case 5:page(G);break; }}
阅读全文
0 0
- 【数据结构课设】校园导游系统
- 数据结构-校园导游咨询系统
- 校园导游系统 数据结构课程设计
- 数据结构项目-校园导游系统
- 数据结构-校园导游咨询系统…
- 数据结构课设--4校园导游咨询(图的应用)
- 校园导游咨询系统
- 校园导游系统
- 小型校园导游系统
- 校园导游系统
- 校园交通导游系统
- 数据结构课程设计-校园导游系统-带注释
- C项目-校园导游系统
- 数据结构课程设计校园导游(吃货版)
- {数据结构课程设计}校园导游的多功能实现
- 校园导游咨询——数据结构课程设计
- 【算法设计】虎溪校园导游系统
- 【算法设计】虎溪校园导游系统
- VLC多线程
- C++类型转换
- iOS 实现3Dtouch
- System.IO.Directory.Delete 方法的使用
- postgresql ltree
- 【数据结构课设】校园导游系统
- MySQL函数
- linux实时查看更新日志命令
- C++ class 和 typename 的区别
- Node.js 安装配置
- Unet学习
- svn基本操作
- 设置nginx绑定多个域名
- 8大定位