一点小问题 文件问题 调试不通 求大佬指点一下 可以有偿回报 具体可以@我
#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;
}
}
}