武汉工商简单校园导游系统

来源:互联网 发布:minecraft mac java 编辑:程序博客网 时间:2024/04/27 22:52

这些代码是我们学校课程设计的作业,仅供参考,其中部分代码参考了csdn中大神的算法

#

  • 下面是jdxx.h头文件,介绍了数据结构以及功能函数声明

    #include stdio.h>
    #pragma once
    #define maxview 50//最大景点
    #define FINITY 8888//无穷大
    #define NOTVISITED 0//没有参观到
    #define VISITED 1
    #define MaxSize 100
    //typedef int edg;//权值类型
    typedef struct
    {
    char name[20];//景点名称
    char number[10];//景点数字编号
    char intro[500];//景点介绍
    }xinx;//存放景点信息
    typedef struct
    {
    int num;//顶点编号
    xinx date;//景点信息
    }view;//单个景点类型
    typedef struct
    {
    int n,e;//n为实际顶点数,e为实际边数
    view view1 [maxview];//存放顶点信息
    int len [maxview][maxview];//路径长度
    }way;//路径图类型
    way mgr;//全局变量,定义mgr为way类型
    void input();//录入信息
    void chage();//修改信息
    void map();//地图
    void show();//查询景点信息
    void sshort();//最短路径
    void all();//所有路径
    //void dfsm();//深度优先遍历
    void add();//增加信息
    void del();//删除信息
    void creat(way *g,char *s ,int c)//辅助函数文件导入
    {
    int i,j,k,w; /*建立网络的邻接矩阵存储结构*/
    FILE *rf ;
    rf = fopen(s, "r") ; /*从文件中读取图的边信息*/
    if (rf)
    {
    fscanf(rf,"%d%d",&g->n,&g->e); /*读入图的顶点数与边数*/
    for(i=0;i<g->n;i++) /*读入图中的顶点值*/
    fscanf(rf,"%1s",&g->view1[i]);
    for(i=0;i<g->n;i++) /*初始化邻接矩阵*/
    for(j=0;j<g->n;j++)
    if (i==j) g->len[i][j]=0;//主对角全零
    else g->len[i][j]=FINITY;//趋于正无穷大
    for(k=0;k<g->e;k++)
    {
    fscanf(rf,"%d%d%d", &i,&j,&w);
    g->len[i][j]=w;
    if (c==0) g->len[j][i]=w; /*如果C==0则建立无向网邻接矩阵,否 则建立有向网邻矩阵*/
    }
    fclose(rf);
    }
    else g->n=0;
    }//建立邻接表
    //void print(way g)
    //{ /*辅助函数,输出邻接矩阵表示的图g*/
    // int i,j;
    //
    // for (i=0;i<g.n;i++)
    // printf("%c ",g.view1[i]);
    //
    // printf("\n");
    // for (i=0;i<g.n;i++)
    // {
    // for (j=0;j<g.n;j++)
    // printf("%6d",g.len[i][j]);
    // printf("\n");
    // }
    //}

    上面代码中creat()函数表示建立邻接表存储结构,我们采用文件导入的方式建立一个图,这个图是我们自己在文件中自定义的,在我们需要的地方用creat()调用相应文件就可以达到建图目的
  • 下面是我们各功能的实现代码
#include "jdxx.h"//景点信息#include<stdlib.h>#include <string.h>#define N 14//现有最大景点数void input()//存入景点信息{    mgr.view1[1].num=1;    strcpy (mgr.view1[1].date.name,"校门");    strcpy (mgr.view1[1].date.number,"001");    strcpy (mgr.view1[1].date.intro,"毗邻三环,几经返修,终于形成现在的校门,正面武汉工商学院几个大字,背后是我们的校训:弘德博问,和谐拓新。");    mgr.view1[2].num=2;    strcpy (mgr.view1[2].date.name,"实验楼");    strcpy (mgr.view1[2].date.number,"002");    strcpy (mgr.view1[2].date.intro,"实验楼顾名思义肯定是我大工商学子做实验的地方,此楼是我校多个实验基地,人才的发源地,旁边有一个快递收发点。");    mgr.view1[3].num=3;    strcpy (mgr.view1[3].date.name,"综合楼");    strcpy (mgr.view1[3].date.number,"003");    strcpy (mgr.view1[3].date.intro,"综合楼是我们学校教学的主要地方,也是老师办公的主要集聚地,综合楼大气美丽,是我们学校楼群中的颜值担当。");    mgr.view1[4].num=4;    strcpy (mgr.view1[4].date.name,"外语楼");    strcpy (mgr.view1[4].date.number,"004");    strcpy (mgr.view1[4].date.intro,"此楼全名应叫外语艺术楼,因为它一般是外语楼,一半是艺术楼,我们却更习惯以叫它外语楼,因为我们是非艺术类专业,但它的正门是有艺术与设计学院的,要找到它这几个大字是很明显的标志");    mgr.view1[5].num=5;    strcpy (mgr.view1[5].date.name,"1-4栋宿舍群");    strcpy (mgr.view1[5].date.number,"005");    strcpy (mgr.view1[5].date.intro,"这四栋寝室住着我们学校各个学院的学生,其中单数是女生宿舍,双数为男生宿舍");    mgr.view1[6].num=6;    strcpy (mgr.view1[6].date.name,"一食堂");    strcpy (mgr.view1[6].date.number,"006");    strcpy (mgr.view1[6].date.intro,"这里呢是有3个建筑的,一食堂、弘德楼和5栋宿舍,一食堂分两层特色各不同,味道算是可以的,和一食堂紧挨的楼栋呢就是弘德楼,也是我们学校最高的楼,这栋楼以租房的形式呢提供给老师同学自由的住宿,5栋是女生宿舍,就没什么好说的呢,只是听说有段时间,都叫它考研楼,因为有一整个宿舍都一起考上了研究生");    mgr.view1[7].num=7;    strcpy (mgr.view1[7].date.name,"体育馆");    strcpy (mgr.view1[7].date.number,"007");    strcpy (mgr.view1[7].date.intro,"体育馆全名体育运动中心,室内有各种“小球”项目,室外一边是足球场一边是篮球场。学校医务室就在体育管的靠湖那边。");    mgr.view1[8].num=8;    strcpy (mgr.view1[8].date.name,"足球场");    strcpy (mgr.view1[8].date.number,"008");    strcpy (mgr.view1[8].date.intro,"我们学校最大的一块活动区域,是不是会有露天活动在这举行,同时每天都会有人在这跑步、散步、运动。");    mgr.view1[9].num=9;    strcpy (mgr.view1[9].date.name,"图书馆");    strcpy (mgr.view1[9].date.number,"009");    strcpy (mgr.view1[9].date.intro,"图书馆是一个大学的灵魂,我们学校也是,图书馆需刷卡进入,还会不定时举行各种读书活动,以及各类讲坛,6楼是考研的学长学姐们的聚集地");    mgr.view1[10].num=10;    strcpy (mgr.view1[10].date.name,"静思湖");    strcpy (mgr.view1[10].date.number,"010");    strcpy (mgr.view1[10].date.intro,"静思湖是我们学校的内湖,有一个不能过湖的桥所以久而久之我们都叫那个桥为“回心转意桥”,同时每天也会有人去那里散步。");    mgr.view1[11].num=11;    strcpy (mgr.view1[11].date.name,"二食堂");    strcpy (mgr.view1[11].date.number,"011");    strcpy (mgr.view1[11].date.intro,"总会觉得二食堂的饭会比一食堂好吃,因为本人是住在一食堂这边的。二食堂也是两层,各种风味都有");    mgr.view1[12].num=12;    strcpy (mgr.view1[12].date.name,"清真食堂");    strcpy (mgr.view1[12].date.number,"012");    strcpy (mgr.view1[12].date.intro,"由于我们学校有预科班,所以就为信仰伊斯兰教的少数民族专门准备了清真食堂。");    mgr.view1[13].num=13;    strcpy (mgr.view1[13].date.name,"6-13栋宿舍群");    strcpy (mgr.view1[13].date.number,"013");    strcpy (mgr.view1[13].date.intro,"6-13栋寝室的男女分布情况我就不是特别清楚了,只知道13栋是女生寝室,9栋是男寝,9栋一楼有一个小食堂一样吃东西的地方。");    mgr.view1[14].num=14;    strcpy (mgr.view1[14].date.name,"黄家湖");    strcpy (mgr.view1[14].date.number,"014");    strcpy (mgr.view1[14].date.intro,"黄家湖很大,我们学校只是沾了一个黄家湖的边而已");    way g;}void add(){    while(1)    {printf("请输入要添加的顶点编号:<按00结束添加>");        int a;        xinx b;        scanf("%d",&a);        if(a==00)        {            break;        }else{            N+1;        printf("请输入要添加的景点名称:");        scanf("%s",b.name);        printf("请输入要添加的景点编号:");        scanf("%s",b.number);        printf("请输入要添加的景点描述:");        scanf("%s",b.intro);        mgr.view1[a].num=a;        strcpy (mgr.view1[a].date.name,b.name);        strcpy (mgr.view1[a].date.number,b.number);        strcpy (mgr.view1[a].date.intro,b.intro);}    }}void chage()//修改信息 {    int n,a;    for(int i=0;i<N;i++)    {        printf("请输入要修改的景点编号<输入00结束插入>\n");        scanf("%d",&n);        if(n==00)        {            break;        }        printf("********************************************************\n");        printf("                     1.顶点编号                         \n");        printf("                     2.景点名称                         \n");        printf("                     3.景点编号                         \n");        printf("                     4.景点简介                         \n");        printf("                     5.退出                             \n");        printf("********************************************************\n");        printf("请按提示输入要修改的信息:");        scanf("%d",&a);        switch(a)        {        case 1:        printf("请输入顶点编号:");        scanf("%d",&mgr.view1[n].num);        break;        case 2:        printf("请输入景点名称:");        scanf("%s",mgr.view1[n].date.name);        break;        case 3:        printf("请输入景点编号:");        scanf("%s",mgr.view1[n].date.number);        break;        case 4:        printf("请输入景点简介:");        scanf("%s",mgr.view1[n].date.intro);        break;        case 5:return;        }    }}void map(){       printf("|------------------------------------------------------------------------------------------------------|\n");    printf("|   |-------------------------------------------------------------------|    |---------------------|   |\n");    printf("|   |               武  汉  工  商  学  院  地  图                      |    |  6-12   |  |        |   |\n");    printf("|   |                                           made in  vivi           |    |---------|  |--------|   |\n");    printf("|   |-------------------------------------------------------------------|    |  学 生  |  |     13   | |\n");    printf("|                                                                            |---------|  |----------| |\n");    printf("|                           |----------|                                     |  公 寓  |  |    13栋  | |\n");    printf("| |                         |  实验楼2 |                                     |-----------------------| |\n");    printf("| |                         |----------|                                              |-------------|  |\n");    printf("| |                 |--------------|                                                  | 清 真食堂12 |  |\n");    printf("|---|               |    综合楼3   |                          ~~~~~~~~                |-------------|  |\n");    printf("|校 |               |--------------|            /--\\        ~    静   ~          |---------|           |\n");    printf("|门 |                                     |---       ---|   ~    思    ~         |   二    |           |\n");    printf("| 1 |                                     |   图书馆 9  |   ~    湖    ~         |      11 |           |\n");    printf("|---|     |-------|---|                   |-------------|    ~    10   ~         |   食 堂 |           |\n");    printf("| |       |-------|---|                                       ~~~~~~~~           |         |           |\n");    printf("| |        外 语 楼 4 |             |-----------------------|                    |---------|           |\n");    printf("| |       |-------|---|             |     足  球  场        |                                          |\n");    printf("|         |-------|---|             |           8           |                                          |\n");    printf("|                                   |-----------------------|              ~ ~ ~                       |\n");    printf("|      |---------|------|             |-----   -----|                    ~             ~  ~            |\n");    printf("|      |         |      |             |   体 育 馆7 |                    ~                  ~          |\n");    printf("|      |-------|--------|             |---        --|                            ~黄~              ~   |\n");    printf("|      |1-4学生|  宿舍5 |                                              ~                          ~    |\n");    printf("|      |-------|--------|                                             ~                          ~     |\n");    printf("|                                                                    ~           ~家~             ~    |\n");    printf("|             |-----|                                                 ~                           ~    |\n");    printf("|             |  弘-|                  |----|                       ~                      14      ~   |\n");    printf("|             |  德-|----  -----  -----|- 5-|                                      ~湖~            ~   |\n");    printf("|             |  楼-|    一食堂 6      |-栋-|                          ~                          ~    |\n");    printf("|             |-----|__________________|----|                          ~                           ~   |\n");    printf("|                                                                      ~ ~                      ~~     |\n");    printf("|------------------------------------------------------------------------------------------------------|\n");}typedef int dist[N];//距离向量类型typedef int path[N];//路径类型//typedef enum{F,T} boolean;//F为0,T为1void dijkstra(way g,int v0,path p,dist d)//迪杰斯拉算法{    int final[N];    int i,j,k,v,min,x;    /*第一步 初始化集合s与距离向量d*/    for(v=0;v<g.n;v++)    {        final[v]=NOTVISITED;        d[v]=g.len[v0][v];        if (d[v]<FINITY&&d[v]!=0)            p[v]=v0;        else            p[v]=-1;//v无前驱        final[v0]=VISITED; d[v0]=0;//初始状态    }    /*第二步 依次找出n-1个节点加入到s*/    for (i=1;i<g.n;i++)    {        min=FINITY;        for (k=1;k<g.n;++k)//找最小边入节点            if(!final[k]&&d[k]<min)//!final[k]表示k还在v-s中            {                v=k;min=d[k];            }            //printf("\n%c---%d\n",g.view1[v],min);//输出本次入选的顶点距离            if(min==FINITY) return;            final[v]=VISITED;            /*第三步 修改s与v-s中各节点的距离*/            for(k=1;k<g.n;++k)                if(!final[k]&&(min+g.len[v][k]<d[k]))                {                    d[k]=min+g.len[v][k];                    p[k]=v;                }    }}void print_gpd(way g,path p,dist d)//输出路径{    int st[N],i,pre,top=-1;    for(i=0;i<g.n;i++)    {        printf("\n距离:%7d,路径:",d[i]);        st[++top]=i;        pre=p[i];        while(pre!=-1)        {            st[++top]=pre;            pre=p[pre];        }        while(top>0)            printf("-->%2d",st[top--]);    }}typedef int dist1[N][N];//距离向量类型typedef int path1[N][N];//路径void floyd(way g,path1 p,dist1 d)//佛洛依德算法{    int i,j,k;    for(i=0;i<g.n;i++)//初始化        for(j=0;j<g.n;j++)        {            d[i][j]=g.len[i][j];            if(/*i!=j&&*/d[i][j]<FINITY)                p[i][j]=i;               /* p[j][i]=i;*/            /*else p[i][j]=-1;*/        }        for (k=0;k<g.n;k++)//递推求解每一对定点间的最短距离          {              for(i=0;i<g.n;i++)                  for(j=0;j<g.n;j++)                      if(d[i][j]>(d[i][k]+d[k][j]))                      {                    d[i][j]=d[i][k]+d[k][j];                    p[i][j]=k;                    /*p[j][i]=k;*/                      }        }}void display(way g,dist1 d,path1 p,int i,int j)  {         /*打印两个景点的路径及最短路径*/      int x,y;  /*creat(&g,"map.txt",0);*/    x=i;      y=j;      printf("您要查询的两景点间最短路径是: \n\n");     fflush(stdin);    if(i<j)      {          printf("结束点:%d",y);          while(p[i][j]!=0)          {              printf("<--%d",d[i][j]);              if(i<j)                  j=d[i][j];              else                  i=d[j][i];          }          printf("<--开始点:%d\n\n",x);          printf("%d->%d的最短路径是: %d 米。\n\n",x,y,p[x][y]);      }      else      {          printf("开始点:%d",x);         while(p[i][j]!=0)          {              printf("-->%d",d[i][j]);              if(i<j)                  j=d[i][j];              else                  i=d[j][i];          }          printf("->%d结束点:\n\n",y);          printf("%d->%d的最短路径是: %d 米。\n\n",x,y,p[x][y]);      }  }void sshort()  {    /*要查找的两景点的最短路径*/      int i,j;    way g;dist1 d;path1 p;    creat(&g,"map.txt",0);    printf("请输入要查询的两个景点的数字编号(1->14)中间用空格间隔开。\n");      scanf("%d %d",&i,&j);      if(i>N||i<0||j>N||j<0)      {          printf("输入信息错误!\n\n");          printf("请输入要查询的两个景点的数字编号(1->14)中间用空格间隔开。\n");          scanf("%d %d",&i,&j);      }      else      {          floyd(g,d,p);          display(g,d,p,i,j);      }     }//void print_gpd1(way g,path1 p,dist1 d)//{//  int i,j,pre;//  for(i=0;i<g.n;i++)//      for(j=0;j<g.n;j++)//          /*if(i!=j)//          {//              printf("%d-->%d:",&i,&j);*///              if(d[i][j]==FINITY)//              {//                  if(i!=j)//                      printf("不存在路径");//              }//              else//              {//                  printf("%d->%d路径长度为%d:路径为:",i,j,d[i][j]);//                  printf("%d,",i);//输出路径上的//                  //Ppath(p,i,j);    //输出路径上的中间点//                   printf("%d\n",j);//输出路径上的终点//                  /*pre=d[i][j];//                  while(pre!=-1)//                  {//                      pre=d[pre][j];//                  }//                  printf("%d",j);*///              }//          }//void sshort()//{//  way g;path1 p;dist1 d;int i,j;//  creat(&g,"map.txt",0);//  printf("请输入您的所在位置:");//  scanf("%d",&i);//  printf("请输入您要去的位置:");//  scanf("%d",&j);//  floyd(g,p,d);//  print_gpd1(g,p,d);//}void all(){    way g;path p;dist d;int v0,v;    creat(&g,"map.txt",0);    printf("请输入您的所在位置v0:");    scanf("%d",&v0);    if(v0>N||v0<0)      {          printf("输入信息错误!\n\n");          printf("请输入您的所在位置v0:");          scanf("%d ",&v0);      }    else{    dijkstra(g,v0,p,d);    printf("从当前位置出发的所有路径如下:\n");    print_gpd(g,p,d);}}void show(){    int m;      printf("请输入查询景点序号(序号以地图标识为准):\n");      scanf("%d",&m); fflush(stdin);    if(m>maxview)        printf("\n输入错误");    else if(m){        printf("景点编号:%s\t",mgr.view1[m].date.number);          printf("景点名称:%s\n",mgr.view1[m].date.name);          printf("景点简介:%s\n",mgr.view1[m].date.intro);  }   /* switch(m)      {      case m:          printf("景点编号:%s\t",mgr.view1[m].date.number);          printf("景点名称:%s\n",mgr.view1[m].date.name);          printf("景点简介:%s\n",mgr.view1[m].date.intro);          break;      case 2:          printf("景点编号:%s\t",mgr.view1[2].date.number);          printf("景点名称:%s\n",mgr.view1[2].date.name);          printf("景点简介:%s\n",mgr.view1[2].date.intro);           break;      case 3:          printf("景点编号:%s\t",mgr.view1[3].date.number);          printf("景点名称:%s\n",mgr.view1[3].date.name);          printf("景点简介:%s\n",mgr.view1[3].date.intro);          break;      case 4:          printf("景点编号:%s\t",mgr.view1[4].date.number);          printf("景点名称:%s\n",mgr.view1[4].date.name);          printf("景点简介:%s\n",mgr.view1[4].date.intro);         break;      case 5:          printf("景点编号:%s\t",mgr.view1[5].date.number);          printf("景点名称:%s\n",mgr.view1[5].date.name);          printf("景点简介:%s\n",mgr.view1[5].date.intro);          break;      case 6:          printf("景点编号:%s\t",mgr.view1[6].date.number);          printf("景点名称:%s\n",mgr.view1[6].date.name);          printf("景点简介:%s\n",mgr.view1[6].date.intro);          break;      case 7:          printf("景点编号:%s\t",mgr.view1[7].date.number);          printf("景点名称:%s\n",mgr.view1[7].date.name);          printf("景点简介:%s\n",mgr.view1[7].date.intro);        break;      case 8:          printf("景点编号:%s\t",mgr.view1[8].date.number);          printf("景点名称:%s\n",mgr.view1[8].date.name);          printf("景点简介:%s\n",mgr.view1[8].date.intro);          break;      case 9:          printf("景点编号:%s\t",mgr.view1[9].date.number);          printf("景点名称:%s\n",mgr.view1[9].date.name);          printf("景点简介:%s\n",mgr.view1[9].date.intro);          break;      case 10:          printf("景点编号:%s\t",mgr.view1[10].date.number);          printf("景点名称:%s\n",mgr.view1[10].date.name);          printf("景点简介:%s\n",mgr.view1[10].date.intro);          break;      case 11:          printf("景点编号:%s\t",mgr.view1[11].date.number);          printf("景点名称:%s\n",mgr.view1[11].date.name);          printf("景点简介:%s\n",mgr.view1[11].date.intro);          break;      case 12:          printf("景点编号:%s\t",mgr.view1[12].date.number);          printf("景点名称:%s\n",mgr.view1[12].date.name);          printf("景点简介:%s\n",mgr.view1[12].date.intro);          break;      case 13:          printf("景点编号:%s\t",mgr.view1[13].date.number);          printf("景点名称:%s\n",mgr.view1[13].date.name);          printf("景点简介:%s\n",mgr.view1[13].date.intro);          break;      case 14:          printf("景点编号:%s\t",mgr.view1[14].date.number);          printf("景点名称:%s\n",mgr.view1[14].date.name);          printf("景点简介:%s\n",mgr.view1[14].date.intro);         break;      default:          printf("输入序号错误。\n");          break;      }  */    printf("\n");  }int visit[N];//标记数组//void init()//初始化标记术组//{//  for(int i=0;i<N;i++)//      visit[i]=0;//}//void dfsm(way g,int v)//{//  //  if(!visit[v])//  {//      printf("%d",g.len);//      visit[v]=1;//  }//  for(int i=0;i<g.n;i++)//      dfsm(g,v);//}//void dfsp()//{//  way g;init();//  creat(&g,"map.txt",0);//  //  dfsm(g,1);//}void del(){int n,a;     xinx c;      for(int i=0;i<N;i++)    {        printf("请输入要删除的景点编号<输入00结束插入>\n");        scanf("%d",&n);        if(n==00)        {            break;        }        printf("********************************************************\n");        printf("                     1.顶点编号                         \n");        printf("                     2.景点名称                         \n");        printf("                     3.景点编号                         \n");        printf("                     4.景点简介                         \n");        printf("                     5.退出                             \n");        printf("********************************************************\n");        printf("请按提示输入要删除的信息:");        scanf("%d",&a);        switch(a)        {        case 1:            mgr.view1[n].num=00/*mgr.view1[n+1].num*/;            N-1;        break;        case 2:            strcpy(mgr.view1[n].date.name,"删除成功"/*mgr.view1[n+1].date.name*/);            N-1;        break;        case 3:            strcpy(mgr.view1[n].date.number,"删除成功"/*mgr.view1[n+1].date.number*/);            N-1;        break;        case 4:            strcpy(mgr.view1[n].date.intro,"删除成功"/*mgr.view1[n+1].date.intro*/);            N-1;        break;        case 5:return;        }    }}void menu(){    while(1)    {        printf("**********************************************************************\n");        printf("*                    欢迎进入武汉工商学院导游系统                    *\n");        printf("**********************************************************************\n");        printf("                     1.武汉工商学院地图                               \n");        printf("                     2.查询景点信息                                   \n");        printf("                     3.修改景点信息                                   \n");        printf("                     4.最短路径查询                                   \n");        printf("                     5.所有路径查询                                   \n");        printf("                     6.删除景点信息                                   \n");        printf("                     7.添加景点信息                                   \n");        printf("                     8.退出                                           \n");        printf("**********************************************************************\n");    int m;way g;    printf("请输入你的选择:");    scanf("%d",&m);    switch(m)    {    case 1:        map();        break;    case 2:        show();        break;    case 3:        chage();        break;    case 4:sshort();        break;    case 5:all();        break;    case 6:del();        break;    case 7:add();        break;    case 8:        exit(0);        break;        default:          printf("输入序号错误。\n");          break;      }system("pause");    system("cls");}}void main(){   way g;    input();    menu();    system("pause");}
原创粉丝点击