课程设计

来源:互联网 发布:朗读配音软件 编辑:程序博客网 时间:2024/06/03 09:13
  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");}

原创粉丝点击