【数据结构课设】校园导游系统

来源:互联网 发布: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;    }}