#include
#include
#include
#define NOD struct plane_list
struct plane
{char number [10];
char start[10];
char arrive [10];
char date[10];
char starttime[10];
char arrivingtime[10];
char price[10];
char model[10];
};
NOD
{char number [10];
char start[10];
char arrive [10];
char date[10];
char starttime[10];
char arrivingtime[10];
char price[10];
char model[10];
NOD*next;
};
FILE *fp;
/*由文件中的数据生成一个飞机航班的链表,如果文件不存在,则是一个空链表*/ NOD *load(char planename[])
{ NOD *p,*q,*head;
struct plane per;
p=(NOD *)malloc(sizeof(NOD));
q=head=NULL;
if((fp=fopen(planename,"rb"))==NULL)
return head;
else
{ while(!feof(fp))
{ if(fread(&per,sizeof(struct plane),1,fp)==1)
{
p=(NOD *)malloc(sizeof(NOD));
strcpy(p->number,per.number);
strcpy(p->start,per.start);
strcpy(p->arrive,per.arrive);
strcpy(p->date,per.date);
strcpy(p->starttime,per.starttime);
strcpy(p->arrivingtime,per.arrivingtime);
strcpy(p->price,per.price);
strcpy(p->model,per.model);
head=p;
p->next=q;
q=head;
}
}
}
fclose(fp);
return(head);
}
/*输入*/
NOD *insert(NOD *head)
{ NOD *temp,*p;
p=head;
temp=(NOD *)malloc(sizeof(NOD));
printf("\n\t请输入航班号:");
scanf("%s",temp->number);
printf("\n\t请输入起点站:");
scanf("%s",temp->start);
printf("\n\t请输入终点站:");
scanf("%s",temp->arrive);
printf("\n\t请输入起飞时间:");
scanf("%s",temp->starttime);
printf("\n\t请输入到达时间:");
scanf("%s",temp->arrivingtime);
printf("\n\t请输入班期:");
scanf("%s",temp->date);
printf("\n\t请输入票价:");
scanf("%s",temp->price);
printf("\n\t请输入航班型号:");
scanf("%s",temp->model);
head=temp;
temp->next=p;
return head;
}
/*保存*/
void save(NOD *head, char filename[])
{NOD*p;
struct plane per;
if((fp=fopen(filename,"wb"))==NULL)
{printf(" 文件无法写入");
exit(0);
}
else
{ p=head;
while(p!=NULL)
{ strcpy(per.number,p->number);
strcpy(per.start,p->start);
strcpy(per.arrive,p->arrive);
strcpy(per.date,p->date);
strcpy(per.starttime,p->starttime);
strcpy(per.arrivingtime,p->arrivingtime);
strcpy(per.price,p->price);
strcpy(per.model,p->model);
if(fwrite(&per,sizeof(struct plane),1,fp)!=1)
{printf("文件不能写入数据,请检查后重新运行.\n");
exit(0);
}
p=p->next;
}
fclose(fp);
}
}
/*显示*/
void display(NOD *head)
{ NOD *p;
p=head;
while(p!=NULL)
{ printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
p=p->next;}
}
/*航班号查找*/
void finda(NOD *head)
{ NOD *p;
char number[10];
printf("请输入查找航班的编号:");
scanf("%s",number);
p=head;
while (p!=NULL)
{ if(strcmp(number,p->number)==0)
{ printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\t查无此航班\n");
}
/*起点站查找*/
void findb(NOD *head)
{ NOD *p;
char start[10];
printf("请输入查找航班的起点站:");
scanf("%s",start);
p=head;
while (p!=NULL)
{ if(strcmp(start,p->start)==0)
{ printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\t查无此航班\n");
}
/*终点站查找*/
void findc(NOD *head)
{ NOD *p;
char arrive[10];
printf("请输入查找航班的终点站:");
scanf("%s",arrive);
p=head;
while (p!=NULL)
{ if(strcmp(arrive,p->arrive)==0)
{ printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\t查无此航班\n");
}
/*起飞时间查找*/
void findd(NOD *head)
{ NOD *p;
char starttime[10];
printf("请输入查找航班的起飞时间:");
scanf("%s",starttime);
p=head;
while (p!=NULL)
{ if(strcmp(starttime,p->starttime)==0)
{ printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\t查无此航班\n");
}
/*到达时间查找*/
void finde(NOD *head)
{ NOD *p;
char arrivingtime[10];
printf("请输入查找航班的到达时间:");
scanf("%s",arrivingtime);
p=head;
while (p!=NULL)
{ if(strcmp(arrivingtime,p->arrivingtime)==0) { printf("航班号:%s\n",p->number);
printf("起点站:%s\n",p->start);
printf("终点站:%s\n",p->arrive);
printf("班期:%s\n",p->date);
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("票价:%s\n",p->price);
printf("飞机型号:%s\n",p->model);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\t查无此航班\n");
}
/*删除*/
NOD *dele(NOD *head)
{ NOD *p,*q;
char number[5];
printf(":请输入要删除的航班编号");
scanf("%s",number);
p=q=head;
while(p!=NULL)
{ if(strcmp(number,p->number)==0)
{
if(head==p)
head=p->next;
else
q->next=p->next;
free(p);
break;
}
else
{q=p;
p=p->next;
}
}
if(p==NULL)printf("\n\t查无此航班\n");
return head;
}
/*主函数*/
void main()
{ NOD *head;
char fnum[10];
int choise;
printf("\n\t欢迎光临航班查询系统:");
scanf("%s",fnum);
head=load(fnum);
while(1)
{ printf("\n\t\t 航班信息检索与查询\n");
printf("\t\t********************************\n");
printf("\t\t 1.航班号查找\n");
printf("\t\t 2.起点站查找\n");
printf("\t\t 3.终点站查找\n");
printf("\t\t 4.起飞时间查找\n");
printf("\t\t 5.到达时间查找\n");
printf("\t\t 6.航班号删除\n");
printf("\t\t 7.增加新航班\n");
printf("\t\t 8.显示所有航班\n");
printf("\t\t 9.存盘并退出\n");
printf("\n\t请选择1-9:");
scanf("%d",&choise);
switch(choise)
{ case 1:finda(head);break;
case 2:findb(head);break;
case 3:findc(head);break;
case 4:findd(head);break;
case 5:finde(head);break;
case 6:head=dele(head);break;
case 7:head=insert(head);break;
case 8:display(head);break;
case 9:save(head,fnum); exit(0);
default:printf("输入错误,重新输入\n");
}
}
}