输入多条信息,只有第一条被录入
```c
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define N 1000
/*定义一个结构体*/
struct air
{
char fightNO[10]; //航班号
char start[10]; //起始站
char end[10]; //终点站
char day[10]; //飞行时间
char totalTicket[10]; //预售票数
char sellTicket[10]; //已售票数
}Flight[N];
/*定义各函数*/
void menu(); //菜单
void save(int); //保存
int load(); /*导入函数*/
void display(); //浏览
void add(); //添加
void search(); //查询
void search_fightNO(); //按航班号查
void search_start(); //按起始站查
void search_end(); //按终点站查
void search_day(); //按时间查
void modify(); //修改
void main()
{
int n;
char a;
menu(); //调用菜单函数
printf("请选择你需要操作的步骤(1--5):\n");
scanf("%d",&n);
while(n<1&&n>5)
{
printf("您输入有误,请重新选择!");
scanf("%d",&n);
}
while(1)
{
switch(n)
{
case 1:
printf(" ◆◆◆添加航班信息◆◆◆\n");
printf("\n");
add();
break;
case 2:
printf(" ◆◆◆浏览航班信息◆◆◆\n");
printf("\n");
display();
break;
case 3:
printf(" ◆◆◆按航班号查询航班信息◆◆◆\n");
printf("\n");
search();
break;
case 4:
printf(" ◆◆◆修改航班信息◆◆◆\n");
printf("\n");
modify();
break;
case 5:
exit(0);
break;
default :
break;
}
getchar();
printf("\n");
printf("是否继续进行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
system("cls");
/*清屏*/
menu();
/*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--5):\n");
scanf("%d",&n);
printf("\n");
}
else
{
exit(0);
}
}
}
void menu() /*菜单函数*/
{
printf(" ************欢迎进入航班信息管理系统**********\n");
printf(" 1.添加航班信息");
printf(" 2.浏览航班信息\n");
printf(" 3.查询航班信息");
printf(" 4.修改航班信息\n");
printf(" 5.退出\n");
printf(" ********************谢谢使用******************\n");
printf("\n"); printf("\n");
}
void save(int m) /*保存文件函数*/
{
int i;
FILE*fp;
fp=fopen("Hangban.txt","wb");
for(i=0;i<m;i++) /*将内存中航班的信息输出到磁盘文件中去*/
{
if(fwrite(&Flight[i],sizeof(struct air),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
}
int load() /*导入+测长度函数*/
{
FILE*fp;
int i=0;
if((fp=fopen("Hangban.txt","rb"))==NULL)/*判断是否能打开*/
{
return 0;
}
else
{
do
{
fread(&Flight[i],sizeof(struct air),1,fp); //读文件到数组
i++;
}
while(feof(fp)==0); //判断文件是否读完
}
fclose(fp); //关文件操作
return(i-1); //返回文件长度
}
void display() /*浏览函数*/
{
int i;
int m=load();
for(i=0;i<m;i++)
{
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数\n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
printf("\n");
printf("\n");
}
}
void add()/*添加函数*/
{
FILE *fp;
int n; /*增加航班的个数*/
int i;
int m=load();/*定义一个变量接受函数的返回值*/
printf("请输入想增加的航班个数:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++) /*从第m个数组开始,继续填充数组数据*/
{
printf("\n 请输入新增加航班的信息:\n");
printf("请输入航班号: ");
scanf("%s",&Flight[i].fightNO);
printf("请输入起始站: ");
scanf("%s",Flight[i].start);
printf("请输入终点站: ");
scanf("%s",&Flight[i].end);
printf("请输入飞行时间: ");
scanf("%s",&Flight[i].day);
printf("请输入预售票数: ");
scanf("%s",Flight[i]. totalTicket);
printf("请输入已售票数: ");
scanf("%s",Flight[i].sellTicket);
printf("\n");
}
printf("\n添加完毕!\n");
m=m+n; /*总航班数*/
save(m);/*将得到的航班数返回到文本中*/
}
void search()/*查询函数*/
{
int t;
printf("\n1:按航班号查询请按 2:按起始站查询请按 3:按终点站查询请按 4:按时间查询请按\n");
scanf("%d",&t);
while(t>2&&t<1)/*输入的t必须是1或者2*/
{
printf("输入出错,请从新输入:\n");
scanf("%d",&t);
}
switch(t)
{
case 1:
printf("按职学号查询\n");
search_fightNO();
break;
case 2:
printf("按起始站查询\n");
search_start();
break;
case 3:
printf("按起始站查询\n");
search_end();
break;
case 4:
printf("按起始站查询\n");
search_day();
break;
default:break;
}
}
void search_fightNO() //按航班号查询函数
{
char fightNO[20];
int i,t,k=0;
int m=load();/*把文本里面的所有数据读出*/
printf("请输入要查找的航班号:\n");
scanf("%d",&fightNO);
for(i=0;i<m;i++)
if(strcmp(fightNO,Flight[i].fightNO))/*比较输入的和文本里面的字符串*/
{
printf("\n已找到,其记录为:\n");
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t 已售票数\n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
k=1;
}
if(k==0)
printf("\n对不起,查无此航班\n");
printf("\n");
printf("继续查询请按1,结束查询请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:
search();
break;
case 2:
break;
default:break;
}
}
void search_start() //按起始站查询
{
char start[10];
int i,t,k=0;
int m=load();
printf("请输入要查找的起始站:\n");
scanf("%s",start);
for(i=0;i<m;i++)
if(strcmp(Flight[i].start,start)==0)
{
printf("\n已找到,其记录为:\n");
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
k=1;
}
if(k==0) /*记录航班存不存在*/
{
printf("\n对不起,查无此航班\n");
printf("\n");
printf("继续查询请按1,结束查询请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:
search();
break;
case 2:
break;
default:
break;
}
}
}
void search_end() //按终点站查询
{
char end[10];
int i,t,k=0;
int m=load();
printf("请输入要查找的终点站:\n");
scanf("%s",end);
for(i=0;i<m;i++)
if(strcmp(Flight[i].end,end)==0)
{
printf("\n已找到,其记录为:\n");
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
k=1;
}
if(k==0) /*记录航班存不存在*/
{
printf("\n对不起,查无此航班\n");
printf("\n");
printf("继续查询请按1,结束查询请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:
search();
break;
case 2:
break;
default:
break;
}
}
}
void search_day() //按时间查询
{
char day[10];
int i,t,k=0;
int m=load();
printf("请输入要查找的起始站:\n");
scanf("%s",day);
for(i=0;i<m;i++)
if(strcmp(Flight[i].day,day)==0)
{
printf("\n已找到,其记录为:\n");
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
k=1;
}
if(k==0) /*记录航班存不存在*/
{
printf("\n对不起,查无此航班\n");
printf("\n");
printf("继续查询请按1,结束查询请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:
search();
break;
case 2:
break;
default:
break;
}
}
}
void modify() /*修改函数*/
{
char fightNO[20];
char start[10];
char end[2];
char day[5];
char totalTicket[20];
char sellTicket[20];
int c,i,t,flag;
int m=load();
printf("\n 原来的航班信息:\n");
display();
printf("\n");
printf("请输入要修改的航班的起始站:\n");
scanf("%s",start);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(Flight[i].start,start)==0)
{
printf("\n已找到此航班,原始记录为:\n");
printf("\t\t航班号\t\t起始站\t\t终点站\t\t飞行时间\t\t预售票数\t\t已售票数 \n");
printf("\t\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t\t%s\n",Flight[i].fightNO,Flight[i].start,Flight[i].end,Flight[i].day,Flight[i]. totalTicket,Flight[i].sellTicket);
printf("\n需要进行修改的选项\n 1.航班号 2.起始站 3.终点站 4.飞行时间 5.预售票数 6. 已售票数\n");
printf("请输入你想修改的那一项序号:\n");
scanf("%d",&c);
while(c>6||c<1)
{
printf("\n选择错误,请重新选择!\n");
scanf("%d",&c);
}
flag=0;
}
}
if(flag==1)
{
printf("\n对不起,查无此航班!\n");
}
if(flag==0)
{
switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个航班*/
{
case 1:printf("航班号改为: ");
scanf("%s",fightNO);
strcpy(Flight[i-1].fightNO,fightNO);
break;
case 2:printf("起始站改为: ");
scanf("%s",start);
strcpy(Flight[i-1].start,start);
break;
case 3:
printf("终点站改为: ");
scanf("%s",end);
strcpy(Flight[i-1].end,end);
break;
case 4:
printf("飞行时间改为: ");
scanf("%s",day);
strcpy(Flight[i-1].day,day);
break;
case 5:printf("预售票数改为: ");
scanf("%s", totalTicket);
strcpy(Flight[i-1]. totalTicket, totalTicket);
break;
case 6:printf("已售票数改为: ");
scanf("%s",sellTicket);
strcpy(Flight[i-1].sellTicket,sellTicket);
break;
}
printf("修改成功\n");
}
save(m);
printf("\n继续修改请按1,不再修改请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();
break;
case 2:
break;
default :break;
}
}
选择1.添加航班信息,输入多条时,只有第一条会被录入
会输出“file write error”
可以正常的录入
void save(int m) /*保存文件函数*/
{
int i;
FILE* fp;
fp = fopen("Hangban.txt", "wb");
for (i = 0; i < m; i++) /*将内存中航班的信息输出到磁盘文件中去*/
{
if (fwrite(&Flight[i], sizeof(struct air), 1, fp) != 1)
printf("file write error\n");
}
fclose(fp);
}
不知道你这个问题是否已经解决, 如果还没有解决的话: