1.功能介绍
1.显示各航班信息(1,显示航班信息。2,显示客户信息)
2.查询各航班信息 (1,航班号查询。2,出发城市查询。3,终点城市查询。)
3.订 票 (如果没有相关航班,则提供其他选项)
4.退 票
5.修改各航班信息 (1,增加航班。2,删除航班。3,修改航班信息)
2.代码
//使用链表完成系统,航班信息一个链表,乘客信息一个链表//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char tep[500];char title[500];
//乘客信息结构体//
struct passenger
{
char airnum[8];//航班号
char name[20];//客户姓名
char DID[6];//身份证号
int amount;//订票数量
struct passenger *next;//指向下一个结点//
};
//航班信息结构体//
struct airplane
{
char air[8];//航班号
char start[6];//出发地
char end[6];//目的地
char sche[6];//飞行日
char time1[8];//出发时间
char time2[8];//到达时间
char mode[5];//机型
int price;//票价
int full;//乘客定额
int remain;//余票
struct airplane *front;//指向下一个结点//
};
//读取航班信息//
struct airplane *readair(struct airplane *a)
{
struct airplane *r=NULL;
FILE *fp;//定义文件指针
a=(struct airplane *)malloc(sizeof(struct airplane));
a->front=NULL;
if ((fp = fopen("航班信息.txt", "r")) == NULL)
printf("航班文件不存在
");
else
{
fgets(tep, 500, fp);//读取第一行说明:航班号 起点 终点 略..;
while (!feof(fp))//如果文件没有读取结束,继续读取//
{
r=(struct airplane *)malloc(sizeof(struct airplane));
//读取正确的信息;
fscanf(fp,"%s%s%s%s%s%s%s%d%d%d",&r->air,&r->start,&r->end,&r->sche,&r->time1,&r->time2,&r->mode,&r->price,&r->full,&r->remain);
r->front=a->front;
a->front=r;
}
}
fclose(fp);
return a;
}
//读取乘客信息//
struct passenger *readpassenger(struct passenger *p)
{
struct passenger *r=NULL;
FILE *fp;//定义文件指针
p=(struct passenger *)malloc(sizeof(struct passenger));
p->next=NULL;
if ((fp = fopen("乘客信息.txt", "r")) == NULL) //以只读的方式打开
printf("乘客信息.txt文件不存在
");
else
{
fgets(title, 500, fp);
while (!feof(fp)) //C提供了一个测试文件状态的函数feof(pf),当文件未结束时feof函数的值为0,否则为非0值。使用函数feof来判断文件是否结束既可用于文本文件,还可用于二进制文件
{
r=(struct passenger *)malloc(sizeof(struct passenger));
fscanf(fp,"%s%s%s%d",&r->airnum,&r->name,&r->DID,&r->amount);
r->next=p->next;
p->next=r;
}
}
fclose(fp);
return p;
}
//显示所有航班信息//
void showair(struct airplane *a)
{
struct airplane *r=NULL;
int t=0;
r=a->front;
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
while(r!=NULL)
{
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
r=r->front;
t=1;
}
if(t==0)
printf("没有航班!
");
printf("
");
}
//显示所有客户信息//
int showpassenger(struct passenger *p)
{
struct passenger *r=NULL;
int s,t;
int q=0;
printf("显示内容涉及隐私
");
while(1)
{
printf("请输入密码:");
scanf("%d",&t);
if(t==123)
{
printf("密码正确
");
break;
}
else
{
printf("密码错误
");
printf("请选择1.放弃,返回;2.重新输入密码;
");
printf("请输入选项(点击任意键,继续输入密码):");
scanf("%d",&s);
switch(s)
{
case 1:
return 0;
default:
break;
}
}
}
r=p->next;
printf("航班号 客户姓名 身份证号 订票数量
");
while(r!=NULL)
{
printf("%s %s %s %d
",r->airnum,r->name,r->DID,r->amount);
r=r->next;
q=1;
}
if(q==0)
printf("没有客户!
");
printf("
");
return 0;
}
int show(struct airplane *a,struct passenger *p)
{
int i;
while(1)
{
printf("
");
printf("* 显示各航班信息 *
");
printf("* 1.显示所有航班信息 *
");
printf("* 2.显示所有客户信息 *
");
printf("* 3.返回主菜单 *
");
printf("*请输入选项:");
scanf("%d",&i);
switch(i)
{
case 1:
showair(a);
break;
case 2:
showpassenger(p);
break;
case 3:
return 0;
default :
printf("输入选项非法,请重新输入!
");
break;
}
}
}
//按航班号查询//
int findair(struct airplane *a)
{
int i,t;
struct airplane *r=NULL;
char s[8];
char c;
while(1)
{
r=a->front;
printf("请输入已知航班号:");
gets(s);
t=0;
while(r!=NULL)
{
if(strcmp(r->air,s)==0)
{
t=1;
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
break;
}
else
r=r->front;
}
if(t==0)
printf("没有查询到此航班的信息!
");
printf("请选择 1.继续查询;2.退出;
");
printf("请输入选项(点击任意键,继续查询):");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 2:
return 0;
default :
break;
}
}
}
//按出发城市查询//
int findstart(struct airplane *a)
{
int i,t;
struct airplane *r=NULL;
char s[6];
char c;
while(1)
{
r=a->front;
printf("请输入出发城市:");
gets(s);
t=0;
while(r!=NULL)
{
if(strcmp(r->start,s)==0)
{
if(t==0)
{
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
t=1;
}
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
r=r->front;
}
else
r=r->front;
}
if(t==0)
printf("没有查询到此航班的信息!
");
printf("请选择 1.继续查询;2.退出;
");
printf("请输入选项(点击任意键,继续查询):");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 2:
return 0;
default :
break;
}
}
}
//按终点城市查询//
int findend(struct airplane *a)
{
int i,t;
struct airplane *r=NULL;
char s[6];
char c;
while(1)
{
r=a->front;
printf("请输入终点城市:");
gets(s);
t=0;
while(r!=NULL)
{
if(strcmp(r->end,s)==0)
{
if(t==0)
{
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
t=1;
}
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
r=r->front;
}
else
r=r->front;
}
if(t==0)
printf("没有查询到此航班的信息!
");
printf("请选择 1.继续查询;2.退出;
");
printf("请输入选项(点击任意键,继续查询):");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 2:
return 0;
default :
break;
}
}
}
int find(struct airplane *a)
{
int i;
char c;
while(1)
{
printf("* 请选择查询方式: *
");
printf(" 1.已知航班号查询;
");
printf(" 2.已知出发地查询;
");
printf(" 3.已知目的地查询;
");
printf(" 4.返回主菜单
");
printf("请输入选项:");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 1:
findair(a);
break;
case 2:
findstart(a);
break;
case 3:
findend(a);
break;
case 4:
return 0;
default:
printf("输入选项不存在,请重新输入!
");
break;
}
}
}
//保存修改的航班信息到文本//
void saveairplane(struct airplane *a)
{
struct airplane *r=NULL;
FILE *fp;//定义文件指针
r=a->front;
fp=fopen("航班信息1.txt","w+");
fputs(tep,fp);
while(r!=NULL)
{
fprintf(fp,"
%s %s %s %s %s %s %s %d %d %d",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
r=r->front;
}
fclose(fp);
}
//保存修改的乘客信息到文本//
void savepassenger(struct passenger *p)
{
struct passenger *r=NULL;
FILE *fp;
r=p->next;
fp=fopen("乘客信息1.txt","w+");
fputs(title,fp);
while(r!=NULL)
{
fprintf(fp,"
%s %s %s %d",r->airnum,r->name,r->DID,r->amount);
r=r->next;
}
fclose(fp);
}
//订票//
struct passenger *reserve(struct airplane *a,struct passenger *p)
{
int i,t,k,flag=1;
char c;
struct passenger *q=NULL;
struct airplane *r=NULL,*f=NULL;
while(1)
{
r=a->front;
f=a->front;
if(flag)
q=(struct passenger *)malloc(sizeof(struct passenger));
printf("请输入航班号:");
gets(q->airnum);
t=0;
while(r!=NULL)
{
if(strcmp(r->air,q->airnum)==0)
{
t=1;
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
if(r->remain<=0)
{
printf("此航班没有余票
");
t=0;
break;
}
printf("请输入订票数量:");
scanf("%d",&q->amount);
c=getchar();
while(q->amount>r->remain)
{
printf("余票不足!请重新订票!
");
printf("请输入订票数量:");
scanf("%d",&q->amount);
c=getchar();
}
r->remain=r->remain-q->amount;
saveairplane(a);
printf("请输入姓名:");
gets(q->name);
printf("请输入身份证号:");
gets(q->DID);
q->next=p->next;
p->next=q;
printf("订票成功!
");
flag=1;
savepassenger(p);
break;
}
else
r=r->front;
}
if(t==0)
{
k=0;
flag=0;
printf("没有查询到有用的信息!
");
printf("为你提供其他航班:
");
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
while(f!=NULL)
{
if(f->remain>0)
{
printf("%s %s %s %s %s %s %s %d %d %d
",f->air,f->start,f->end,f->sche,f->time1,f->time2,f->mode,f->price,f->full,f->remain);
k=1;
}
f=f->front;
}
if(k==0)
printf("对不起,没有可用航班!
");
}
printf("请选择 1.继续订票;2.退出;
");
printf("请输入选项(点击任意键,继续查询):");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 2:
return p;
default :
break;
}
}
}
//退票//
struct passenger *recede(struct passenger *p,struct airplane *a)
{
int t=1,k;
struct airplane *w=NULL;
struct passenger *r=NULL,*q=NULL;
char s[20];
q=p;
r=q->next;
w=a->front;
printf("请输入姓名:");
gets(s);
while(r!=NULL)
{
if(strcmp(r->name,s)==0)
{
printf("请核实信息!
");
printf("航班号 客户姓名 身份证号 订票数量
");
printf("%s %s %s %d
",r->airnum,r->name,r->DID,r->amount);
printf("1.确定退票;2.退出
");
printf("请输入选项(按任意键退出):");
scanf("%d",&k);
switch(k)
{
case 1:
while(w!=NULL)
{
if(strcmp(r->airnum,w->air)==0)
{
w->remain=w->remain+r->amount;
break;
}
w=w->front;
}
q->next=r->next;
free(r);
printf("退票成功!
");
savepassenger(p);
saveairplane(a);
break;
default :
return p;
}
t=0;
break;
}
q=q->next;
r=q->next;
}
if(t)
printf("您没有订票!
");
return p;
}
//增加航班//
struct airplane *add(struct airplane *a)
{
char c;int i;
struct airplane *r=NULL;
while(1)
{
r=(struct airplane *)malloc(sizeof(struct airplane));
printf("请输入航班号:");
gets(r->air);
printf("起点:");
gets(r->start);
printf("终点:");
gets(r->end);
printf("飞行日:");
gets(r->sche);
printf("起飞时间:");
gets(r->time1);
printf("到达时间:");
gets(r->time2);
printf("机型:");
gets(r->mode);
printf("价格:");
scanf("%d",&r->price);
printf("乘员定额:");
scanf("%d",&r->full);
printf("余票量:");
scanf("%d",&r->remain);
r->front=a->front;
a->front=r;
saveairplane(a);
printf("航班添加完成!
");
printf("请选择:1.继续增加航班。2.退出!
");
printf("请输入选项(点击任意键继续增加航班):");
scanf("%d",&i);
c=getchar();
switch(i)
{
case 2:
return a;
default :
break;
}
}
}
//删除航班//
struct airplane *Remove(struct airplane *a)
{
int t=1,k;
struct airplane *r=NULL,*q=NULL;
char s[8];
char c;
while(1)
{
printf("为你显示所有航班信息:
");
showair(a);
q=a;
r=q->front;
printf("请输入航班号:");
gets(s);
while(r!=NULL)
{
if(strcmp(r->air,s)==0)
{
printf("请核实信息!
");
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
printf("1.确定删除航班;2.退出
");
printf("请输入选项(按任意键退出):");
scanf("%d",&k);
c=getchar();
switch(k)
{
case 1:
q->front=r->front;
free(r);
printf("航班删除成功!
");
saveairplane(a);
return a;
default :
return a;
}
}
q=q->front;
r=q->front;
}
if(t)
printf("航班号输入错误!");
}
}
//修改航班信息//
struct airplane *recompose(struct airplane *a)
{
int t=1,k;
char c;
struct airplane *r=NULL,*q=NULL,*m=NULL;
char s[8];
while(1)
{
printf("为你显示所有航班信息:
");
showair(a);
q=a;
r=q->front;
printf("请输入航班号:");
gets(s);
while(r!=NULL)
{
if(strcmp(r->air,s)==0)
{
printf("航班号 起点 终点 飞行日 起飞时间 到达时间 机型 价格 乘员定额 余票量
");
printf("%s %s %s %s %s %s %s %d %d %d
",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
m=(struct airplane *)malloc(sizeof(struct airplane));
printf("请输入新信息:
");
printf("航班号:");
gets(m->air);
printf("起点:");
gets(m->start);
printf("终点:");
gets(m->end);
printf("飞行日:");
gets(m->sche);
printf("起飞时间:");
gets(m->time1);
printf("到达时间:");
gets(m->time2);
printf("机型:");
gets(m->mode);
printf("价格:");
scanf("%d",&m->price);
printf("乘员定额:");
scanf("%d",&m->full);
printf("余票量:");
scanf("%d",&m->remain);
printf("1.确定修改信息;2.退出
");
printf("请输入选项(按任意键退出):");
scanf("%d",&k);
c=getchar();
switch(k)
{
case 1:
m->front=r->front;
q->front=m;
free(r);
printf("信息修改成功!
");
saveairplane(a);
return a;
default :
return a;
}
}
q=q->front;
r=q->front;
}
if(t)
printf("航班号输入错误!");
}
}
struct airplane *adjust(struct airplane *a)
{
struct airplane *r=NULL;
int s,t;char c;
int q=0;
printf("修改航班信息需要权限
");
while(1)
{
printf("请输入密码:");
scanf("%d",&t);
if(t==123)
{
printf("密码正确
");
break;
}
else
{
printf("密码错误
");
printf("请选择1.放弃,返回;2.重新输入密码;
");
printf("请输入选项(点击任意键,继续输入密码):");
scanf("%d",&s);
switch(s)
{
case 1:
return a;
default:
break;
}
}
}
while(1)
{
printf("* 航班信息修改目录 *
");
printf("* 1.增加航班 *
");
printf("* 2.删除航班 *
");
printf("* 3.修改航班信息 *
");
printf("* 4.返回主菜单 *
");
printf("请输入选项:");
scanf("%d",&s);
c=getchar();
switch(s)
{
case 1:
a=add(a);
break;
case 2:
a=Remove(a);
break;
case 3:
a=recompose(a);
break;
case 4:
return a;
default :
printf("输入错误选项请重新输入!
");
break;
}
}
}
int main()
{
int e;
char c;
struct airplane *a=NULL;
struct passenger *p=NULL;
a=readair(a);//读取航班信息//
p=readpassenger(p);//读取乘客信息//
while (1)
{
printf("* 欢迎进入航班订票系统
");
printf("*****************************
");
printf("* 航空订票客运系统 *
");
printf("* 1.显示各航班信息 *
");//1,显示航班信息。2,显示客户信息//
printf("* 2.查询各航班信息 *
");//1,航班号查询。2,出发城市查询。3,终点城市查询。//
printf("* 3.订 票 *
");//如果没有相关航班,则提供其他选项//
printf("* 4.退 票 *
");
printf("* 5.修改各航班信息 *
");//1,增加航班。2,删除航班。3,修改航班信息//
printf("* 6.退 出 系 统 *
");
printf("*****************************
");
printf("请输入你的选择:");
scanf("%d",&e);
c=getchar();
switch(e)
{
case 1:
show(a,p);
break;
case 2:
find(a);
break;
case 3:
p=reserve(a,p);
break;
case 4:
p=recede(p,a);
break;
case 5:
a=adjust(a);
break;
case 6:
return 0;
default:
printf("输入的选项错误,请重新输入!
");
break;
}
}
}
3.辅助文档