课程设计

  1. /*  
  2. 烟台大学计算机学院  
  3.   
  4. 文件名称:xiangmu.cpp  
  5.   
  6. 作者:张帅  
  7.   
  8. 完成日期:2017年12月19日  
  9.   
  10. 问题描述:校园导游系统
  11.  

  12.   
  13. */   
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include<string.h>
    #include"t.h"
    
    int main()
    {
        int S[MaxSize+1],P[MaxSize+1];
        int shuru1,shuru2;
    
    int step = 1;
        int top = -1;
        int D[MaxSize+1];
        int Stack[MaxSize+1];
    int A[MaxSize+1][MaxSize+1];
    
        int N=12;
        int path[MaxViewNum][MaxViewNum];         /*定义存贮路径*/
    
        int shortest[MaxViewNum][MaxViewNum];
    MGraph MGr;
        system("color 9f");
    
        char k;
        init( MGr,  shortest,N);
        printf("**********************************************************************\n");
        printf("*                                                                    *\n");
        printf("*                                                                    *\n");
        printf("*                                                                    *\n");
        printf("*               欢迎使用烟台大学导游系统 !                           *\n");
        printf("*                                                                    *\n");
        printf("*                                                                    *\n");
        printf("*                                                                    *\n");
        printf("**********************************************************************\n");
        printf("\n");
    
        while(1)
        {
            printf("1.景点信息查询请按“1”键;\n");
            printf("2.如果需要增加景点。请按“2”键;\n");
            printf("3.景点最短路径查询请按“3”键;\n");
            printf("4.校内景点地图查询请按“4”键;\n");
            printf("5.退出系统请按“5”键;\n");
            printf("请选择: \n");
            scanf("%c",&k);
    
          switch(k)
            {
            case '1':printf("景点介绍查询。\n");
                introduce( MGr,N);break;
            case '2':printf("需要增加景点");
               zengjia(MGr,N);break;
            case '3':printf("景点最短路径查询。");
                distance( MGr,N, Stack,D,top,step ,shuru1,shuru2,S,P);break;///调用distance函数//
            case '4':printf("景点地图。\n");
                map();break;
            case '5':printf("谢谢使用!\n");exit(0);
            }
        }
    
        system("pause");
        return 0;
    }
    #define MaxSize 100
    #define VISITED 1
    #define NOTVISITED 0
    #define Infinite 1073741823
    #define MaxViewNum 50     /*景点个数最大50*/
    #define MaxRoad 1000      /*定义路径为无穷大*/
     /*目前景点个数*/
    
    typedef struct
    {
        char name[30];          /*景点名称*/
        char number[10];        /*景点代号*/
        char introduce[200];    /*景点介绍*/
    }Elemtype;                  /*景点信息*/
    
    typedef struct
    {
        int num;              /*景点编号*/
        Elemtype date;        /*景点信息*/
    }View;                    /*定义景点*/
    
    
    typedef struct
    {
        View view[MaxViewNum];         /*存放顶点的一维数组,数组第零单元没有用上*/
        int length[MaxViewNum][MaxViewNum];  /*存放路径长度*/
        int m,n;
    }MGraph;
    
    void init( MGraph &MGr, int shortest[MaxViewNum][MaxViewNum],int &N);
    
    void introduce(MGraph &MGr,int &N);
    
    void display(int &i,int &j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum],int &N);
    
    void Push(int &value,int Stack[],int &top,int S[],int P[] );
    
    int Pop(int Stack[],int &top );
    int minD(int &N,int D[],int S[],int P[]);
    
    void input(MGraph &MGr,int &N,int D[],int &shuru1,int &shuru2,int S[],int P[]);
    void output_path(MGraph &MGr,int Stack[],int D[],int &top,int &shuru1,int &shuru2 ,int S[],int P[]);
    
    void distance(MGraph &MGr,int &N,int Stack[],int D[],int &top,int &step,int &shuru1,int &shuru2,int S[],int P[] );
    
    void map();
    void zengjia(MGraph &MGr,int &N);
    #include"t.h"
    #include <stdio.h>
    #include<string.h>
    #include <stdlib.h>
    #include <conio.h>
    
    void init(MGraph &MGr, int shortest[MaxViewNum][MaxViewNum],int &N)
    {
    
        MGr.view[1].num=1;
        strcpy(MGr.view[1].date.name,"学校南门");
        strcpy(MGr.view[1].date.number,"001");
        strcpy(MGr.view[1].date.introduce,"坐落于烟台大学南门,对面为运动场,有红绿灯,交通便利。");
    
        MGr.view[2].num=2;
        strcpy(MGr.view[2].date.name,"图书馆");
        strcpy(MGr.view[2].date.number,"002");
        strcpy(MGr.view[2].date.introduce,"学生看书的地方,里面摆满书籍。");
    
        MGr.view[3].num=3;
        strcpy(MGr.view[3].date.name,"综合楼");
        strcpy(MGr.view[3].date.number,"003");
        strcpy(MGr.view[3].date.introduce,"一共六层,常作为开会的场所");
    
        MGr.view[4].num=4;
        strcpy(MGr.view[4].date.name,"七餐");
        strcpy(MGr.view[4].date.number,"004");
        strcpy(MGr.view[4].date.introduce,"学校目前最大的餐厅");
    
        MGr.view[5].num=5;
        strcpy(MGr.view[5].date.name,"西门");
        strcpy(MGr.view[5].date.number,"005");
        strcpy(MGr.view[5].date.introduce,"前面为一个十字路口,右边有个公交站牌");
    
        MGr.view[6].num=6;
        strcpy(MGr.view[6].date.name,"一教二教三教");
        strcpy(MGr.view[6].date.number,"006");
        strcpy(MGr.view[6].date.introduce,"考研的地方");
    
        MGr.view[7].num=7;
        strcpy(MGr.view[7].date.name,"三元湖");
        strcpy(MGr.view[7].date.number,"007");
        strcpy(MGr.view[7].date.introduce,"三元胡上面有个桥,景色十分美丽。");
    
        MGr.view[8].num=8;
        strcpy(MGr.view[8].date.name,"钟楼");
        strcpy(MGr.view[8].date.number,"008");
        strcpy(MGr.view[8].date.introduce,"学校最高的地方,里面有各种计算机大神");
    
        MGr.view[9].num=9;
        strcpy(MGr.view[9].date.name,"一餐二餐三餐");
        strcpy(MGr.view[9].date.number,"009");
        strcpy(MGr.view[9].date.introduce,"种类比较丰富的美食,饭餐可口。");
    
        MGr.view[10].num=10;
        strcpy(MGr.view[10].date.name,"老校区西门");
        strcpy(MGr.view[10].date.number,"010");
        strcpy(MGr.view[10].date.introduce,"西门出去正对文化路,对面就是河南牧业经济学院。");
    
        MGr.view[11].num=11;
        strcpy(MGr.view[11].date.name,"北门");
        strcpy(MGr.view[11].date.number,"011");
        strcpy(MGr.view[11].date.introduce,"对面为新世纪,里面有各种好玩的好吃的。");
    
        MGr.view[12].num=12;
        strcpy(MGr.view[12].date.name,"家属院");
        strcpy(MGr.view[12].date.number,"012");
        strcpy(MGr.view[12].date.introduce,"emmm里面有学校领导以及各位家长,还有学生可以租借的房子。");
    
        int i,j;
    
        for(i=1;i<=N;i++)
        {
            for(j=1;j<=N;j++)
            {
                MGr.length[i][j]=MaxRoad;
            }
        }
    
        for(i=1;i<=N;i++)
        {
            shortest[i][j]=0;
        }
    
        MGr.length[1][2]=MGr.length[2][1]=50;
        MGr.length[2][3]=MGr.length[3][2]=50;
        MGr.length[3][4]=MGr.length[4][3]=60;
        MGr.length[3][5]=MGr.length[5][3]=100;
        MGr.length[5][6]=MGr.length[6][5]=100;
        MGr.length[6][7]=MGr.length[7][6]=220;
        MGr.length[6][9]=MGr.length[9][6]=80;
        MGr.length[7][8]=MGr.length[8][7]=250;
        MGr.length[8][9]=MGr.length[9][8]=100;
        MGr.length[8][10]=MGr.length[10][8]=150;
        MGr.length[9][11]=MGr.length[11][9]=50;
        MGr.length[10][11]=MGr.length[11][10]=60;
        MGr.length[11][12]=MGr.length[12][11]=40;
        MGr.length[1][1]=MGr.length[2][2]=MGr.length[3][3]=MGr.length[4][4]=0;
        MGr.length[5][5]=MGr.length[6][6]=MGr.length[7][7]=MGr.length[8][8]=0;
        MGr.length[9][9]=MGr.length[10][10]=MGr.length[11][11]=MGr.length[12][12]=0;
    
    }
    
    void introduce(MGraph &MGr,int &N)
    {
        int m,z,x;
    
        printf("请输入查询景点编号:\n");
        scanf("%d",&m);fflush(stdin);
            for(z=0;z<N+1;z++)
    
        if(z==m)
        {
             printf("景点编号:%s\t",MGr.view[z].date.number);
            printf("景点名称:%s\n",MGr.view[z].date.name);
            printf("景点简介:%s\n",MGr.view[z].date.introduce);
            x=1;
            break;
        }
    
    
    
    
    
    
    if(x!=1)
            printf("输入序号错误。\n");
    
        printf("\n");
    }
    
    
    void display(int i,int j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum],int &N)
    {         /*打印两个景点的路径及最短路径*/
        int a,b;
        a=i;
        b=j;
        printf("您要查询的两景点间最短路径是: \n\n");
        fflush(stdin);
        if(i<j)
        {
            printf("%d",b);
            while(path[i][j]!=0)
            {
                printf("<--%d",path[i][j]);
                if(i<j)
                    j=path[i][j];
                else
                    i=path[j][i];
            }
            printf("<-%d\n\n",a);
            printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]);
        }
        else
        {
            printf("%d",a);
            while(path[i][j]!=0)
            {      /*把i到j的路径上所有经过的景点按顺序打印出来*/
                printf("-->%d",path[i][j]);
                if(i<j)
                    j=path[i][j];
                else
                    i=path[j][i];
            }
            printf("->%d\n\n",b);
            printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]);
        }
    }/*display*/
    
    
    
    
    void display(int &i,int &j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum])
    {         /*打印两个景点的路径及最短路径*/
        int a,b;
        a=i;
        b=j;
        printf("您要查询的两景点间最短路径是: \n\n");
        fflush(stdin);
        if(i<j)
        {
            printf("%d",b);
            while(path[i][j]!=0)
            {
                printf("<--%d",path[i][j]);
                if(i<j)
                    j=path[i][j];
                else
                    i=path[j][i];
            }
            printf("<-%d\n\n",a);
            printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]);
        }
        else
        {
            printf("%d",a);
            while(path[i][j]!=0)
            {      /*把i到j的路径上所有经过的景点按顺序打印出来*/
                printf("-->%d",path[i][j]);
                if(i<j)
                    j=path[i][j];
                else
                    i=path[j][i];
            }
            printf("->%d\n\n",b);
            printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]);
        }
    }/*display*/
    
    
    
    void Push(int &value,int Stack[],int &top,int S[],int P[] )
    {
        if ( top >= MaxSize )
        {
            printf("没有路径存在!\n\n");
            exit(1);
        }
        else
            Stack[++top] = value;
    }
    int Pop(int Stack[],int &top )
    {
        if ( top < 0 )
        {
            printf("没有路径存在!\n\n");
            exit(1);
        }
        return Stack[top--];
    }
    
    
    
    int minD(int &N,int D[],int S[],int P[])
    {
    
    
        int i,t=0;
        long int minimum = Infinite;/无限大的数
        for ( i=1;i<=N;i++ )
            if ( (S[i] == NOTVISITED) && D[i] < minimum )
            {
                minimum = D[i];
                t = i;
            }
            return t;
    }
    
    
    void input(MGraph &MGr,int &N,int D[],int &shuru1,int &shuru2,int S[],int P[])///
    {
        int i;
        printf("\n请输入起始节点:");
        scanf("%d",&shuru1);
        printf("\n请输入结束节点:");
        scanf("%d",&shuru2);fflush(stdin);/
    
        for ( i = 1; i <= N; i++ )
        {
            S[i] = NOTVISITED;0
            D[i] = MGr.length[shuru1][i];
            P[i] = shuru1;/开始节点
        }
        S[shuru1] = VISITED;/1
        D[shuru1] = 0;
    }
    
    
    
    void output_path(MGraph &MGr,int Stack[],int D[],int &top,int &shuru1,int &shuru2 ,int S[],int P[])
    {
        int node = shuru2;
    
        if ( (shuru2 == shuru1) || (D[shuru2] == Infinite) )
        {
            printf("\n节点%d与节点%d之间没有路径存在!\n\n",shuru1,shuru2);
            return;
        }
        printf("\n");
    
        while ( node != shuru1 )
        {
            Push(node, Stack,top,S,P);
            node  = P[node];
        }
        printf("V%d到V%d的最短路径为:\n",shuru1,shuru2);
        printf("  V%d",shuru1);
        while( node != shuru2)
        {
            node = Pop( Stack,top);
            printf(" --%ld-->",MGr.length[ P[node] ][node]);
            printf("V%d",node);
        }
        printf("\n");
        printf("\n %d->%d的最短路径是: %ld\n",shuru1,shuru2,D[shuru2]);
        printf("\n");
    }
    
    
    
    
    void distance(MGraph &MGr,int &N,int Stack[],int D[],int &top,int &step,int &shuru1,int &shuru2,int S[],int P[] )
    {
        int t,I;
        input(MGr,N,D,shuru1,shuru2,S,P);
        for ( step =2;step <=N; step++ )
        {
    
            t = minD(N,D,S,P);
            S[t] = VISITED;
    
            for ( I=1; I <= N; I++ )
                if ( (S[I] == NOTVISITED) && (D[t]+MGr.length[t][I] <= D[I]) )
                {
                    D[I] = D[t] + MGr.length[t][I];
                    P[I] = t;
                }
        }
        output_path(MGr,Stack,D,top,shuru1,shuru2,S,P);
    }
    
    
    
    void map()
    {
        printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃┏━━━━━━━━┓┏━━━━━┓                      ┏━━━━━━━┓  ┃\n");
        printf("┃┃11.北门         ┃┃10.家属院 ┃                      ┃     12.  南门┃  ┃\n");
        printf("┃┗━━━━━━━━┛┗━━━━━┛                      ┗━━━━━━━┛  ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                 ┏━━━━━━┓                                          ┃\n");
        printf("┃                 ┃ 9 .        ┃ ┏━━━━┓                              ┃\n");
        printf("┃                 ┃一餐二餐三餐┃ ┃8.钟楼  ┃                              ┃\n");
        printf("┃                 ┗━━━━━━┛ ┗━━━━┛                              ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃┏━━━━━━━━━━━━━━┓  ┏━━━━┓                            ┃\n");
        printf("┃┃     6 . 一教二教三教       ┃ ┃7.三元湖┃       ┏━━━━━━┓   ┃\n");
        printf("┃┗━━━━━━━━━━━━━━┛ ┗━━━━┛          ┃  4.        ┃   ┃\n");
        printf("┃┏━━━━┓                                   ┃   七餐     ┃   ┃\n");
        printf("┃┃5 .西门 ┃                                      ┃            ┃   ┃\n");
        printf("┃┗━━━━┛                                       ┃            ┃   ┃\n");
        printf("┃                                                         ┗━━━━━━┛   ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃ ┏━━━━━━━━━┓                                                     ┃\n");
        printf("┃ ┃                  ┃                                                     ┃\n");
        printf("┃ ┃     2.图         ┃                                                     ┃\n");
        printf("┃ ┃       书         ┃                          ┏━━━━━━┓           ┃\n");
        printf("┃ ┃       馆         ┃                          ┃     综     ┃           ┃\n");
        printf("┃ ┃                  ┃                          ┃ 3.  合     ┃           ┃\n");
        printf("┃ ┃                  ┃                          ┃     楼     ┃           ┃\n");
        printf("┃ ┗━━━━━━━━━┛                          ┗━━━━━━┛           ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┃                             ┏━━━━━┓                                 ┃\n");
        printf("┃                             ┃1.学校南门┃                                 ┃\n");
        printf("┃                             ┗━━━━━┛                                 ┃\n");
        printf("┃                                                                            ┃\n");
        printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    
    
        printf("\n");
        fflush(stdin);
    
    }
    
    
    void zengjia(MGraph &MGr,int &N)
    
    {
        char jingdian[50],jieshao[1000];
        printf("请输入景点的名字\n");
         scanf("%s",&jingdian);
         printf("请输入景点介绍内容\n");
         scanf("%s",&jieshao);fflush(stdin);
         N=N+1;
    MGr.view[N].num=N;
        strcpy(MGr.view[N].date.name,jingdian);
        strcpy(MGr.view[N].date.number,"013");
        strcpy(MGr.view[N].date.introduce,jieshao);
        printf("添加完成\n");
    
    }
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值