📄 airbook.cpp
字号:
//==================================订票函数===============================
Status book(int number,SqFlight LF)
{
//形参number查看时输入的航班号
//引用航班顺序线性表LF
flightnode *p=NULL;
ClientNode *h=NULL;
char a;
p=search(number,LF); //调用search(),返回指向这个航班号的航班结点的指针
if(!p)
{
printf("无此航班号\n");
return(ERROR);
}
if(p->remain>=0)
{ //余票量大于0
loop:
h=(ClientNode *)malloc(sizeof(ClientNode));
if(!h)
goto loop;
printf("请输入客户的定票数:\n");
scanf("%d",&h->booknum);
if((h->booknum)<=(p->remain))
p->remain=p->remain-h->booknum; //余票量减去客户的订票量
else
{ //若余票量不足,询问客户是否要候补
int i=0;
printf("余票数:%d\n",p->remain);
printf("\n");
printf("已无足够的票,您是否要候补?\n");
printf("\n");
printf("1.要 2.不要 3.按余票定票 4.寻找同路径的其他航班\n");
scanf("%d",&i);
switch(i)
{
case 1:
wbook(LF,p);//调用候补函数,实现候补
free(h);h=NULL;
break;
case 2:
free(h);h=NULL;
break;
case 3:
if(p->remain!=0)
{
h->booknum=p->remain;
p->remain=0;
}
else
{
printf("无法按余票购票,余票已为零\n");
return(ERROR);
}
break;
case 4:
find_oth(p->airline,LF,p->number);
return (OK);
default: printf("选择有误\n");
}
if(i==1)
{
printf("候票成功\n");
return(OK);
}
else if(i==2)
{
printf("祝您下次购票成功\n");
return(OK);
}
}
printf("请输客户的姓名:\n");
scanf("%s",h->name);
printf("请输入客户的ID:\n");
scanf("%s",h->ID);
loop1:
{
printf("请输入客户的舱位等级1或2或3:\n");
scanf("%s",&a);
h->grade=a-48;
}
if(h->grade!=3&&h->grade!=2&&h->grade!=1)
{
printf("无此等级舱位\n");
goto loop1;
}
printf("购票成功\n");
h->next=p->client.client->next;
p->client.client->next=h;
}
return(OK);
}
//==================================询问函数==============================
Status ask_clien(flightnode *p,SqFlight LF)
{
//p是指向某个航班结点的指针
////引用航班顺序线性表LF
int i,j;
WClientNode *h=p->nclient.front->next;
WClientNode *prior_h=p->nclient.front;
if(!h)
printf("无人候票\n");
while(h)
{
i=0;j=0;
printf("余票数:%d\n",p->remain);
printf("\n");
if(p->remain>=h->neednum)
printf("%s要不要购票?\n",h->name);
else
printf("余票数不够%s的需要,您要不要购票?\n",h->name);
printf("客户的名字:%s\n",h->name);
printf("客户的ID:%s\n",h->ID);
printf("客户需要的票数:%d\n",h->neednum);
printf("客户的联系方式:%d\n",h->phoneno);
printf("\n");
loop:
{ i=2;
printf("\n");
printf("1.要 2.不要\n");
scanf("%d",&i);
}
switch(i)
{
case 1:
book(p->number,LF);
if(!prior_h->next->next)
p->nclient.rear=prior_h;
prior_h->next=prior_h->next->next;
j=1; //j=1,表示prior_h将跳过一个队列结点
break;
case 2:
printf("谢谢您对本航班的关注\n");
break;
default:
printf("选择有误\n");
goto loop;
}
if(j==0)
prior_h=prior_h->next;
h=h->next;
if(p->remain<=0)
printf("余票已被购尽!!\n");
}
return(OK);
}
//=======================================退票函数===============================
Status back_ticket(int number,SqFlight LF){
int flog;
char a;
char ID[20];
ClientNode *prior_h=NULL;
flightnode *p=NULL;
ClientNode *h=NULL;
p=search(number,LF);
if(!p)
{
printf("无此航班号\n");
return(ERROR);
}
loop:
printf("请输入退票客户的ID:\n");
scanf("%s",ID);
prior_h=searchID(p,ID);
if(!prior_h)
{
printf("无此客户的ID~~~~\n");
printf("1.重新输入客户ID\n2.返回主菜单");
scanf("%s",&a);
flog=a-48;
if(flog==1)
goto loop;
else if(flog==2)
return(ERROR);
else
{
printf("对不起,输入错误,返回主菜单!");
return (ERROR);
}
}
else{
p->remain=p->remain+prior_h->next->booknum;
prior_h->next=prior_h->next->next;
}
printf("退票成功\n");
printf("\n");
printf("询问待票客户:\n");
ask_clien(p,LF);
return(OK);
}
//================================菜单函数======================================
void menu()
{
printf(" \n");
printf("===========*****欢迎使用闽江航空订票系统****==============\n");
printf(" *****选择菜单**** \n");
printf(" \n");
printf(" 1.现有航线查询\n 2.旅客出游预定\n 3.需要办理退票\n 4.查看订票情况\n 5.清屏并返回主菜单\n 6.退出\n");
printf(" \n");
printf(" \n");
printf("=========*****祝您旅途愉快****============\n");
}
//=====================================查询函数 getelem==============================
Status GetElem(SqFlight LF,int number)
{
//用e返回L中第i个数据的值,1<=i<=Listlength(L).用于查询订票情况
flightnode *p=NULL;
p=search(number,LF);
ClientNode *h=p->client.client->next;
WClientNode *q=p->nclient.front->next;
if(!h)
printf("尚未有客户\n");
while(h)
{
printf("客户的名字:%s\n",h->name);
printf("客户的ID:%s\n",h->ID);
printf("客户票数:%d\n",h->booknum);
h=h->next;
}
if(!q)
printf("尚未有排队客户\n");
while(q)
{
printf("等待客户名字:%s\n",q->name);
printf("等待客户ID:%s\n",q->ID);
printf("等待客户欲订票数:%d\n",q->neednum);
q=q->next;
}
return OK;
}
//======================================主函数========================================
void main()
{
char airline[20];
int number=0;
int quit=0;
char a;
int i;
SqFlight LF;
InitList_Sq(LF);
InitFlightNode(LF);
loop2:
printf("航班号可以通过查看航线得知;\n");
printf("\n");
while(quit!=1)
{
menu();
printf("\n\n请选择菜单:\n");
scanf("%1s",&a);
i=a-48;
switch(i)
{
case 1:
system("cls");
printf(" -航线有两条,输入格式:\n");
printf(" Xiamen--Tokyo\n");
printf(" Fuzhou--Shenzhen\n");
printf(" -返回主菜单请输入:b\n");
printf("\n -请输入要查询的航线:\n");
scanf("%s",airline);
if(*airline!='b')
{
printf("\n=============================================================\n");
printf("\n航线\n");
printf("\n起点 -- 终点 飞机号 航班号 余票数 总票数 飞行周日\n");
lookup(airline,LF);
printf("\n==============================================================\n");
printf("输入Enter确认信息??\n");
getchar();getchar();
}
else goto loop2;
break;
case 2:
system("cls");
printf("-请输入要预定的航班号:\n");
scanf("%d",&number);
book(number,LF);
printf("输入Enter确认信息??\n");
getchar();getchar();
break;
case 3:
system("cls");
printf("-请输入要退票的航班号:\n");
scanf("%d",&number);
back_ticket(number,LF);
printf("输入Enter确认信息??\n");
getchar();getchar();
break;
case 4:
system("cls");
printf("-查看客户资料,输入客户的航班号\n");
scanf("%d",&number);
GetElem(LF,number);
printf("输入Enter确认信息??\n");
getchar();getchar();
break;
case 5:
system("cls");
goto loop2;
case 6:
quit=1;
break;
default:
printf("选择有误\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -