开发者社区> 问答> 正文

数据结构校园导游系统(C语言):报错 

做一个校园导游系统,先做用户部分,之后再做管理员部分,那么运行之后再管理员处进行的修改,用户那部分会有变化吗?(用户那部分的地图使用printf打印出来的,景点简介也差不多) 具体代码(未完成,void AddPlace()这部分还不能运行) #include "string.h" #include "stdio.h" #include "malloc.h" #include "stdlib.h" #define Max 20000 #define NUM 9 typedef struct ArcCell {  int adj; }ArcCell; typedef struct VertexType {  int number;  char sight;  char description; }VertexType;   typedef struct {  VertexType vex[NUM];  ArcCell arcs[NUM][NUM];  int vexnum,arcnum; }MGraph;   MGraph G; int P[NUM][NUM]; long int D[NUM]; int   x[9]={0}; void CreateUDN(int v,int a); void narrate(); void ShortestPath(int num); void output(int sight1,int sight2); char Menu(); void search(); char SearchMenu(); void   HaMiTonian(int); void   NextValue(int);   void   display(); int  display_1(); int map(); int denglu(); void AddPlace(); void main() {  printf("欢迎使用某某大学的景点导游系统");  printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");  printf("\t\t\t┃   0.进入管理员更改界面       ┃\n");  printf("\t\t\t┃                              ┃\n");  printf("\t\t\t┃   1.进入游客使用界面         ┃\n");  printf("\t\t\t┃                              ┃\n");  printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");  printf("请输入你的选择:");  int v0,v1;  char ck;  int y;   scanf("%d",&y);  switch(y)  {  case 0: denglu();        break;  case 1: CreateUDN(NUM,11);  do  {   ck=Menu();   switch(ck)   {   case '1':    printf("\n\n\t\t\t请选择起点景点(0~8):");    scanf("%d",&v0);    printf("\t\t\t请选择终点景点(0~8):");    scanf("%d",&v1);    ShortestPath(v0);    output(v0,v1);      printf("\n\n\t\t\t\t请按任意键继续...\n");    getchar();    getchar();    break;   case '2':search();    break;   case '3':    system("cls");    //narrate();    x[0]=1;    HaMiTonian(1);    printf("\n\n\t\t\t\t请按任意键继续...\n");    getchar();    getchar();    break;     case '4':    system("cls");    printf("\n\n\t\t景点地图:\n");    map();      break;   }  }while(ck!='e');  } } char Menu() {  char c;  int flag;  do{   flag=1;   system("cls");   narrate();   printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");   printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┃      1、查询景点路径         ┃\n");   printf("\t\t\t┃      2、查询景点信息         ┃\n");   printf("\t\t\t┃      3、推荐参观路线         ┃\n");   printf("\t\t\t┃      4、查询景点地图         ┃\n");   printf("\t\t\t┃      e、退出                 ┃\n");   printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");   printf("\t\t\t输入您的选择:");   scanf("%c",&c);   if(c=='1'||c=='2'||c=='3'||c=='4'||c=='e')    flag=0;  }while(flag);  return c; }   char SearchMenu() {  char c;  int flag;  do{   flag=1;   system("cls");   narrate();   printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");   printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┃      1、按照景点编号查询     ┃\n");   printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┃      e、返回                 ┃\n");   printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");   printf("\t\t\t\t请输入您的选择:");   scanf("%c",&c);   if(c=='1'||c=='e')    flag=0;  }while(flag);  return c; } void search() {  int num;  int i;  char c;    do  {   system("cls");   c=SearchMenu();   switch (c)   {   case '1':    system("cls");    narrate();    printf("\n\n\t\t请输入您要查找的景点编号:");    scanf("%d",&num);    for(i=0;i<NUM;i++)    {     if(num==G.vex[i].number)     {      printf("\n\n\t\t\t您要查找景点信息如下:");      printf("n\n\t\t\t%-25snn",G.vex[i].description);      printf("n\t\t\t按任意键返回...");      getchar();      getchar();      break;     }    }    if(i==NUM)    {     printf("n\n\t\t\t没有找到!");     printf("n\n\t\t\t按任意键返回...");     getchar();     getchar();    }      break;         }  }while(c!='e'); } void CreateUDN(int v,int a) {  int i,j;  G.vexnum=v;  G.arcnum=a;  for(i=0;i<G.vexnum;++i) G.vex[i].number=i;  G.vex[0].sight="行政楼";  G.vex[0].description="学校领导,办公室之地。";  G.vex[1].sight="大礼堂";  G.vex[1].description="业余活动,举办各种晚会。";  G.vex[2].sight="教学楼";  G.vex[2].description="教室,自习室";  G.vex[3].sight="体育馆";  G.vex[3].description="教室,自习室";  G.vex[4].sight="图书馆";  G.vex[4].description="阅览,借阅图书";  G.vex[5].sight="食堂";  G.vex[5].description="餐饮休闲";  G.vex[6].sight="学生公寓";  G.vex[6].description="休闲,放松心情";  G.vex[7].sight="游泳馆";  G.vex[7].description="餐饮休闲";  G.vex[8].sight="美术馆";  G.vex[8].description="休息";       for(i=0;i<G.vexnum;++i)   for(j=0;j<G.vexnum;++j)   G.arcs[i][j].adj=Max;   G.arcs[0][1].adj=G.arcs[1][0].adj=12;   G.arcs[0][2].adj=G.arcs[2][0].adj=6;   G.arcs[0][3].adj=G.arcs[3][0].adj=5;   G.arcs[1][4].adj=G.arcs[4][1].adj=11;   G.arcs[2][4].adj=G.arcs[4][2].adj=2;   G.arcs[3][5].adj=G.arcs[5][3].adj=4;   G.arcs[5][7].adj=G.arcs[7][5].adj=9;   G.arcs[4][6].adj=G.arcs[6][4].adj=2;   G.arcs[4][7].adj=G.arcs[7][4].adj=14;   G.arcs[6][8].adj=G.arcs[8][6].adj=7;   G.arcs[7][8].adj=G.arcs[8][7].adj=3; }   int map() {     printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");     printf("\t\t┃                                                        ┏━━━━━━━┓          ┃\n");     printf("\t\t┃                                                  ━━━┫1.大礼堂      ┣━        ┃\n");     printf("\t\t┃                                                        ┗━━━━━━━┛          ┃\n");     printf("\t\t┃                                                                                    ┃\n");     printf("\t\t┃              ┏━━━━━┓                                                       ┃\n");     printf("\t\t┃              ┃  4.      ┃       ┏━━━━┓                                     ┃\n");     printf("\t\t┃              ┃ 图书馆   ┃       ┃2. 教   ┃                                     ┃\n");     printf("\t\t┃              ┗━━━━━┛       ┃   学   ┃                                     ┃\n");     printf("\t\t┃                                   ┃   楼  ┃                                     ┃\n");     printf("\t\t┃                                  ┃        ┃      ┏━━━━━━┓           ┃\n");     printf("\t\t┃ ┏━━━━━━━━━┓           ┗━━━━┛         ┃  0.        ┃           ┃\n");     printf("\t\t┃ ┃    6.学生公寓    ┃                              ┃ 行政楼     ┃           ┃\n");     printf("\t\t┃ ┃━━━━━━━━━┃                                  ┗━━━━━━┛   ┏━━┓┃\n");     printf("\t\t┃ ┃   一号楼         ┃                                               ┃ 学 ┃┃\n");     printf("\t\t┃ ┃                  ┃                                  ┏━━━━━━┓   ┃ 校 ┃┃\n");     printf("\t\t┃ ┃━━━━━━━━━┃                                  ┃ 3.体育馆   ┃   ┃ 出 ┃┃\n");     printf("\t\t┃ ┃   二号楼         ┃                                  ┗━━━━━━┛   ┃ 口 ┃┃\n");     printf("\t\t┃ ┃                  ┃                                                     ┃    ┃┃\n");     printf("\t\t┃ ┃━━━━━━━━━┃                                                     ┃    ┃┃\n");     printf("\t\t┃ ┃   三号楼         ┃                                   ┏━━━━━━┓  ┗━━┛┃\n");     printf("\t\t┃ ┃                  ┃                                   ┃  5.  食堂  ┃          ┃\n");     printf("\t\t┃ ┃━━━━━━━━━┃                                   ┗━━━━━━┛          ┃\n");     printf("\t\t┃ ┃   四号楼         ┃                                                             ┃\n");     printf("\t\t┃ ┃                  ┃                                                             ┃\n");     printf("\t\t┃ ┃━━━━━━━━━┃                                                             ┃\n");     printf("\t\t┃ ┃   五号楼         ┃                                                             ┃\n");     printf("\t\t┃ ┗━━━━━━━━━┛                                    ┏━━━━━━┓         ┃\n");     printf("\t\t┃                                                           ┃            ┃         ┃\n");     printf("\t\t┃                                                           ┃7.游泳馆    ┃         ┃\n");     printf("\t\t┃                                                           ┃            ┃         ┃\n");     printf("\t\t┃                                                           ┗━━━━━━┛         ┃\n");     printf("\t\t┃                                                                                    ┃\n");     printf("\t\t┃                                                                                    ┃\n");     printf("\t\t┃     ┏━━━━━━━━━┓                                                         ┃\n");     printf("\t\t┃     ┃   8.美术馆       ┃                                                         ┃\n");     printf("\t\t┃     ┃                  ┃                                                         ┃\n");     printf("\t\t┃     ┗━━━━━━━━━┛                                                         ┃\n");     printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");        system("pause");        system("cls");    return 1; } void narrate() {  int i,k=0;  printf("\n\t\t\t\t****************欢迎使用校园导游程序************\n");  printf("\n\t\t\t\t**********************某某大学********************\n");        printf("\t\t景点名称\t\t|\t景点描述\n");  printf("\t________________________________|____________________________\n");  for(i=0;i<NUM;i++)  {   printf("\t (%2d)%-10s\t\t\t|\t%-25s\n",i,G.vex[i].sight,G.vex[i].description);   k=k+1;  }  printf("\t____________________________|________________________________\n"); } void ShortestPath(int num) {  int v,w,i,t;  int final[NUM];  int min;  for(v=0;v<NUM;v++)  {   final[v]=0;   D[v]=G.arcs[num][v].adj;   for(w=0;w<NUM;w++)    P[v][w]=0;   if(D[v]<20000)   {    P[v][num]=1;    P[v][v]=1;   }  }    D[num]=0;  final[num]=1;            for(i=0;i<NUM;++i)    {   min=Max;     for(w=0;w<NUM;++w)    if(!final[w])       if(D[w]<min)     {      v=w;      min=D[w];     }     final[v]=1;     for(w=0;w<NUM;++w)      if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))      {       D[w]=min+G.arcs[v][w].adj;       for(t=0;t<NUM;t++)        P[w][t]=P[v][t];       P[w][w]=1;      }  } }       void output(int sight1,int sight2)   {  int a,b,c,d,q=0;  a=sight2;    if(a!=sight1)    {   printf("\n\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);   printf("\t(最短距离为 %dm.)\n\n\t",D[a]);   printf("\t%s",G.vex[sight1].sight);   d=sight1;       for(c=0;c<NUM;++c)   { gate:;            P[a][sight1]=0;      for(b=0;b<NUM;b++)      {       if(G.arcs[d][b].adj<20000&&P[a][b])       {        printf("-->%s",G.vex[b].sight);        q=q+1;          P[a][b]=0;        d=b;          if(q%8==0) printf("n");        goto gate;       }      }   }  }   } void HaMiTonian(int m) {  if(m>8)   return; L: NextValue(m);    if(x[m]==0)     return;    if(m==7&&G.arcs[0][x[8]-1].adj!=20000)     display();    else     HaMiTonian(m+1);    goto   L; } void NextValue(int k) {  int j; l:x[k]=(x[k]+1)%10;   if(x[k]==0)    return;   if(G.arcs[x[k-1]-1][x[k]-1].adj!=20000)   {    for(j=0;j<k;j++)     if(x[j]==x[k])      goto l;     return;       }   else    goto l;     } void display() {  int i=0;  printf("\n\n\t");  for(i=0;i<8;i++)   printf("%s->",G.vex[x[i]-1].sight);  printf("出口");  printf("\n"); } int display_1()//管理员界面 {     int command;     int i;     printf("----------------------------------------\n");     printf("----------------------------------------\n");     printf("||                    管理员系统说明:本系统可实现如下功能:                   ||\n");     printf("||                           0 返  回  主  菜  单                             ||\n");     printf("||                           2 录  入  路  径                                 ||\n");     printf("||                           3 添  加  景点                                 ||\n");                   printf("||                           4 删  除  路  径                                 ||\n");     printf("||                           5 修  改  路  径                                 ||\n");     printf("||                           6 显  示  路  径                                 ||\n");     printf("||                           7 查 询 两 点 间 最 短 路径                      ||\n");     printf("||                                                                            ||\n");     printf("----------------------------------------\n");     printf("----------------------------------------\n");     printf("请选择您要进行的操作...");     scanf("%d",&command);     for(i=0;i<350;i++)     {     if(command<0||command>7)     {       printf("    输入错误!!!\n");       printf("    请重新输入:\n");       scanf("%d",&command);     }     else         switch(command)     {         case 3:  AddPlace(); break;     }              }  return command; } int denglu() {     int zh,mm;     printf("请输入管理员账号:");             printf("请输入管理员密码:");         scanf("%d",&zh);         scanf("%d",&mm);         if(zh==0&&mm==0)         display_1();         else  printf("账号密码错误!你还有两次机会!");          scanf("%d",&zh);         scanf("%d",&mm);         if(zh==0&&mm==0)         display_1();         else             printf("账号密码错误!你还有一次机会!");          scanf("%d",&zh);         scanf("%d",&mm);         if(zh==0&&mm==0)         display_1();         else             printf("账号密码错误!你没有机会了!请退出\n");         exit(0);         return 0; }  void AddPlace()  {          //增加景点函数   int i,j,k;   char c='y';   while(c=='y')   {   system("cls");   printf("\n\t\t\t输入要添加的景点编号:");   scanf("%d",&i);   if(i>G.vexnum)   {   i-=1;   printf("n\n\t\t\t\t输入要添加的景点名称:");   G.vex[i].sight=(char *)malloc(50);   flushall();   gets(G.vex[i].sight);   printf("\n\n\t\t\t输入节点的简介:\n");   G.vex[i].description=(char *)malloc(1000);   flushall();   gets(G.vex[i].description);   printf("\n\n\t\t\t\t\输入他的权值:\n");   scanf("%d",&k);   G.arcs[i][j]=G.arcs[j][i]=k;   printf("\n\n\t\t\t\增加成功!\n");   printf("n\n\t\t\t按任意键继续....");   getch();   }   else   { printf("\n\t\t\t\t您输入的景点编号已经存在!\n"); printf("n\n\t\t\t按任意键继续....");   c= getchar();   getchar();   }   system("cls");  }  

展开
收起
kun坤 2020-06-08 16:23:54 568 0
1 条回答
写回答
取消 提交回答
    1.   游泳馆的功能,不是“餐饮休闲”,故要改成 G.vex[7].sight="游泳馆"; G.vex[7].description="健身休闲";
      1.   管理员无论是 添加景点、删除或修改路径,都要改动基本数据,改动 MGraph 中的属性,如邻接矩阵, arcs[][]。改动之后,用户再选项获得的结果,当然可能会有所变化。所以,管理员一旦变更数据,就必须做到MGraph中的属性值即刻更新。
      2.  如果程序初始化,由管理员手工录入数据,太费时间。建议,将数据预先写入一个文档之中,程序起始的第一步,就是读入数据。每次关闭程序之前,都要将现有数据存(写)入文档,以备下次使用。
    2020-06-08 16:24:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何使用Tair增强数据结构构建丰富在线实时场景 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载
属兔的处子——Clojure太灵活,臣妾驾驭不住啊 立即下载