标题:一点小问题 文件问题 调试不通 求大佬指点一下 可以有偿回报 具体可以@我
取消只看楼主
天道好轮回
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-1-7
结帖率:0
已结贴  问题点数:20 回复次数:1 
一点小问题 文件问题 调试不通 求大佬指点一下 可以有偿回报 具体可以@我
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "stdlib.h"
struct station   //公交站
{int num;  //站序号
 char name[20];//站名称
}stop[50];

typedef struct busline  //公交路线
{int busnum; //公交车号码
 struct station stop[50]; //线路上的站
 struct busline *next;
}BL;
BL *head;
/**********************菜单显示***********************/
void Menu()
{printf("\n\n");
 printf("\t\t========公交路线管理系统========\n");
 printf("\t\t========功能显示=========\n");
 printf("\t\t0----退出---\n");
 printf("\t\t1----显示线路信息-----\n");
 printf("\t\t2----增加线路信息-----\n");
 printf("\t\t3----删除线路信息-----\n");
 printf("\t\t4----修改线路信息-----\n");
 printf("\t\t5----查询路线---------\n");
 printf("\t\t6----将信息保存到文件中\n");
}
/******************从文件读取路线信息************************/
BL *Creat()
{BL *p,*q;
 int j=1;
 char ch[5]={"end"};
 FILE *fp;
 fp=fopen("busline.txt","r+");
 if(fp==NULL)
 {printf("不能打开此文件!");
  exit(0);
 }
 p=(BL *)malloc(sizeof(BL));
 head=p;
 q=p;
 fscanf(fp,"%d",&(p->busnum));
 do
 {fscanf(fp,"%d %s",&(p->stop[j].num),p->stop[j].name);
 j++;
 }while(strcmp(p->stop[j-1].name,ch)==1);
 while(!feof(fp))
 {j=1;
  p=(BL *)malloc(sizeof(BL));
  q->next=p;
  q=p;
  fscanf(fp,"%d",&(p->busnum));
  do
  {fscanf(fp,"%d %s",&(p->stop[j].num),p->stop[j].name);
   j++;
  }while(strcmp(p->stop[j-1].name,ch)!=0);
 }
 q->next=NULL;
 fclose(fp);
 return head;
}
/*************************显示线路信息****************************/
void Put()
{BL *p=head;
 int j;
 char ch[5]={"end"};
 puts("线路信息为-----");
 while(p!=NULL)
 {
  printf("%d\n",p->busnum);
  j=1;
  do
  {
   printf("%d%s---",p->stop[j].num,p->stop[j].name);
   j++;
  }while(strcmp(p->stop[j].name,ch)!=0);
  p=p->next;
  printf("\n");
 }
 }
/****************************增加线路信息****************************/
BL *Add()
{BL *p=head,*q,*t;
char nme[20];
 int j,choise,k,r,key,x,c;
 char ch[5]={"end"};
 printf("您要添加公交路线还是公交站点?\n");
 puts("1--添加公交路线    2--添加公交站点\n");
 printf("请选择:");
 scanf("%d",&choise);
 switch(choise)
 {
  case 1:j=1;
         t=(BL *)malloc(sizeof(BL));
         printf("输入你要添加的公交路线信息:\n");
         scanf("%d",&(t->busnum));
         do
         {
           scanf("%d%s",&(t->stop[j].num),t->stop[j].name);
           j++;
         }while(strcmp(t->stop[j-1].name,ch)!=0);
         while(p!=NULL)
         {
           q=p;
           p=p->next;        /*在表尾插入*/
         }
         q->next=t;   
         t->next=NULL;
         return head;
         
  case 2:j=1;
         printf("选择你要添加站点的公交路线:");
         scanf("%d",&key);
         while(p!=NULL)
         {q=p;
          if(p->busnum==key) break;
          p=p->next;
         }
         printf("输入你要添加的站序号及站名称:");
         scanf("%d",&x);
         scanf("%s",nme);
         while(strcmp(p->stop[j].name,ch)!=0)
         {if(x==(p->stop[j].num))
             {
              r=j;
              break;
             }
          j++;
         }
         r=j;
         c=j;
        while(strcmp(p->stop[c].name,ch)!=0)
            c++;
        for(k=c;k>=r;k--)
           strcpy(p->stop[k+1].name,p->stop[k].name);
        strcpy(p->stop[r].name,nme);
        return head;
 }
}
/****************************删除线路信息******************************/
BL *Delete()
{BL *q,*p=head;
 int key,r,j=1,x,choise,k;
 char ch[5]={"end"};
 printf("您是要删除公交路线还是线路站点:\n");
 printf("1---删除公交路线    2---删除站点\n");
 printf("你的选择:");
 scanf("%d",&choise);
 switch(choise)
 {case 1:printf("请输入你要删除的公交路线号");
         scanf("%d",&key);
         while(key!=p->busnum && p!=NULL)
         {q=p;
          p=p->next;
         }
         if(p->busnum==key)
         { if(p==head)
               head=p->next;
           else
               q->next=p->next;
         }
         else
               printf("没有找到你要删除的公交路线!");
         return head;
  case 2:printf("选择线路:");
          scanf("%d",&key);
          while(key!=p->busnum && p!=NULL)
          { q=p;
            p=p->next;
          }
          printf("输入你要删除的站点序号:");
          scanf("%d",&x);
         
          for(j=1;j<=x;j++)
          {if(x==p->stop[j].num)
              break;
           j++;
          }
          r=j;
          for(k=r;strcmp(p->stop[k].name,ch)!=0;k++)
              strcpy(p->stop[k].name,p->stop[k+1].name);
          strcpy(p->stop[k-1].name,p->stop[k].name);
          return head;
 }   
 }
/*******************************修改线路信息*******************************/
BL *Correct()
{BL *p=head,*q;
 int key,j=1;
 char ch[5]={"end"};
 printf("选择你要修改的路线号:");
 scanf("%d",&key);
 while(p!=NULL)
 {if(p->busnum==key) break;
  q=p;
  p=p->next;
 }
 printf("重新输入该条路线信息(包括路线号、站序号、站名称,各个站的站数不变):\n");
 scanf("%d",&p->busnum);
 do
 {
  scanf("%d%s",&(p->stop[j].num),p->stop[j].name);
  j++;
 }while(strcmp(p->stop[j-1].name,ch)!=0);
 return head;
}
/****************************查询路线信息*******************************/
void Search()
{BL *p=head,*q;
 int key,j=1,c,d;
 char str1[20],str2[20],ch[5]={"end"};
 printf("输入公交车号:");
 scanf("%d",&key);
 printf("\n输入起始站和终点站名称:");
 scanf("%s%s",str1,str2);
 while(p!=NULL)
 {if(p->busnum==key) break;
  q=p;
  p=p->next;
 }
 while(strcmp(p->stop[j].name,ch)!=0)
 {if(strcmp(p->stop[j].name,str1)==0)
     c=j;
  if(strcmp(p->stop[j].name,str2)==0)
     d=j;
  j++;
 }
 printf("起始站和终点站之间共有%d站\n",d-c-1);
 printf("各个站的序号及名称为:\n");
 for(j=c;j<=d;j++)
 printf("%d%s\t",p->stop[j].num,p->stop[j].name);
 printf("\n");
}
/****************************将信息保存到文件中***************************/
Save()
{
 FILE *fp;
 BL *t;
 int j;
 char ch[5]={"end"};
 //head=Creat();
 t=head;
 fp=fopen("123.txt","w+");
 if(fp==NULL)  
 {printf("File can not open!\n");
  exit(0);
 }   
while(t!=NULL)
  {fprintf(fp,"%d\t",t->busnum);
   j=1;
   do
   {
    fprintf(fp,"%d%s--",t->stop[j].num,t->stop[j].name);  
    j++;
   }while(strcmp(t->stop[j].name,ch)!=0);
   fprintf(fp,"\n");
  t=t->next;  
 }
fclose(fp);
}
/*******************************主函数*********************/
int main()
{
 int choise;
 head=Creat();
 Put();
 Menu();
 while(1)
 {
  printf("请选择:");
  scanf("%d",&choise);   
  switch(choise)
  {case 0:exit(0);
   case 1:system("cls");
          Put();
          Menu();
          break;
   case 2:system("cls");
          Put();
          Menu();
          Add();
          break;
   case 3:system("cls");
          Put();
          Menu();
          Delete();
          break;
   case 4:system("cls");
          Put();
          Menu();
          Correct();
          break;
   case 5:system("cls");
          Put();
          Menu();
          Search();
          break;
   case 6:Save();
          break;
   default:printf("输入错误,请重新输入!\n");
          break;
  }
 }
}
搜索更多相关主题的帖子: name next head printf while 
2018-01-07 15:55
天道好轮回
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-1-7
得分:0 
可以rmb回报 大佬们快现身吧
2018-01-07 18:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484046-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.336294 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved