📄 新建 文本文档.txt
字号:
{
prefix("订票办理");
flag=0; //标志位清零以重新作出判断
Flight_No=0;
tag=0;
cout<<"\n\t\t\t 请输入航班号:";
cin>>answer;
if(Find_Line(Head,answer,p1,Flight_No)) //调用航线查找函数,若存在则进行以下操作
{
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入定票数:";
cin>>Ticket_Count;
if(Ticket_Count==0)
{
cout<<"\n\t\t\t请输入大于零的数,按任意键继续输入."<<endl;
getch();
}
else
break;
}
if(p1->Free_Amount>=Ticket_Count)
{
Customer_Count++; //定票乘客总数增1
flag=1; //表明进入了订票实际操作
IsRepl=1; //定票量满足,无需进入候补操作
Amount=p1->Free_Amount; //记录剩余票数
if(p1->CustName==NULL) //首个定票乘客,并记录相关属性
{
Custp1[Flight_No]=p2=new Customer; //建立该航线的首位乘客结点
p1->CustName=Custp1[Flight_No];
}
else //建立该航线的后续乘客结点
{
p2=new Customer;
Custp1[Flight_No]->Next=p2;
Custp1[Flight_No]=p2;
}
IsEmpty=0; //定票乘员不为空
Custp1[Flight_No]->Amount=Ticket_Count; //订票数
Seat_No=p1->Customer_Amount-p1->Free_Amount+1; //算出座位号
Custp1[Flight_No]->Seat_No=Seat_No; //赋座位号
p1->Free_Amount-=Ticket_Count; //减去定票数
cout<<"\n\t\t\t 请输入你的姓名:";
cin>>Custp1[Flight_No]->Name;
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入舱位等级(1-3):";
cin>>Custp1[Flight_No]->Rank;
if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3'))
{
cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."<<endl;
getch();
}
else
break;
}
cout<<"\n\t\t\t 您的座位号为:"<<endl;
if(Ticket_Count<10) //为显示规整,作相应处理
cout<<"\n\t\t\t\t";
else
cout<<"\n\t\t\t";
for(i=1;i<=Ticket_Count;i++) //打印座位号
{
cout<<Seat_No++<<" ";
if(i%10==0)
cout<<"\n\t\t\t";
}
cout<<endl;
}//满足定票数
else if(p1->Free_Amount==0)
{
cout<<"\n\t\t 对不起,该航线的票已经全部售完!"<<endl;
IsRepl=0;
}
else
{
cout<<"\n\t\t 对不起,该航线的剩余票额数少于你的订票数。"<<endl;
IsRepl=0;
}
if(!IsRepl)
{
cout<<"\n\t\t 是否列入该航线候补乘客名单(Y/N)?";
cin>>temp;
if(temp=='y'||temp=='Y')//以下为候补操作
{
if(p1->ReplName==NULL)
{
Replp1[Flight_No]=p3=new Replace; //建立该航线的首位候补乘客结点
p1->ReplName=Replp1[Flight_No];
}
else
{
p3=new Replace;
Replp1[Flight_No]->Next=p3;
Replp1[Flight_No]=p3;
}
IsReplace=0; //候补乘客不为空
tag=1; //已选择列入候补乘客名单
Replp1[Flight_No]->Amount=Ticket_Count;
cout<<"\n\t\t\t 请输入你的姓名:";
cin>>Replp1[Flight_No]->Name;
Replp1[Flight_No]->Seat_No=Seat_No; //候补乘客的座位
Replp1[Flight_No]->Amount=Ticket_Count; //候补乘客的订票数
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入舱位等级(1-3):";
cin>>Replp1[Flight_No]->Rank;
if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3'))
{
cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."<<endl;
getch();
}
else
break;
}
cout<<"\n\t\t\t 该乘客暂时无座位!"<<endl;//候补乘客无座提示
}//进入候补名单
}//票数满足
}//航线存在
else
cout<<"\n\t\t 对不起,没有该次航班,按任意继续操作."<<endl;//航线不存在
if(flag) //此处不作处理,则会地址溢出
Custp1[Flight_No]->Next=NULL;//末位定票乘客的指针置空
if(tag)
{
Replp1[Flight_No]->Next=NULL;//末位候补乘客的指针置空
cout<<"\n\t\t 该乘客已成功列入该航线的候补名单."<<endl;
}
if(Continue()=='n')
return;
}//while
}
//-----------------订票乘客信息-----------------
void Display_Reserve()
{
Flight *p1;
Customer *p2;
p1=Head;
int flag=0;
if(Empty_Flight())
return;
prefix("定票乘客名单");
if(IsEmpty)
{
cout<<"\n\n\n\n\t\t\t对不起,系统中无定票的乘客。"<<endl;
getch();
return;
}
cout<<"\t ┌───┬───┬───┬───┬────┬───┬───┐"<<endl;
cout<<"\t │ 姓名 │航班号│飞机号│订票量│ 终点站 │ 舱等 │座位号│"<<endl;
cout<<"\t ├───┼───┼───┼───┼────┼───┼───┤"<<endl;
while(p1!=NULL)
{
if(p1->CustName!=NULL)
{
p2=p1->CustName;
while(p2!=NULL)
{
cout<<"\t │"<<setiosflags(ios::left)<<setw(6)<<p2->Name<<"│"<<setw(6)\
<<p1->Flight_No<<"│"<<setw(6)<<p1->Plane_No<<"│"<<setw(6)<<p2->Amount<<"│"<<setw(8)<<p1->Des_Name<<"│"<<setw(6)<<p2->Rank\
<<"│ ";
if(p2->Amount>1)
cout<<setw(5)<<"多票"<<"│"<<endl;
else
cout<<setw(5)<<p2->Seat_No<<"│"<<endl;
p2=p2->Next;
if(p2!=NULL||p1->Next!=NULL)
cout<<"\t ├───┼───┼───┼───┼────┼───┼───┤"<<endl;
}
}
p1=p1->Next;
}
cout<<"\t └───┴───┴───┴───┴────┴───┴───┘"<<endl;
cout<<"\n\t\t\t 按任意键返回子菜单..."<<endl;
getch();
}
//-----------------候补乘客信息-----------------
void Display_Replace()
{
Flight *p1;
Replace *p2;
p1=Head;
int flag=0;
if(Empty_Flight())
return;
prefix("候补乘客名单");
if(IsReplace)
{
cout<<"\n\n\n\n\t\t\t对不起,系统中无候补乘客。"<<endl;
getch();
return;
}
cout<<"\t ┌───┬───┬───┬───┬────┬───┬───┐"<<endl;
cout<<"\t │ 姓名 │航班号│飞机号│订票量│ 终点站 │ 舱等 │座位号│"<<endl;
cout<<"\t ├───┼───┼───┼───┼────┼───┼───┤"<<endl;
while(p1!=NULL)
{
if(p1->ReplName!=NULL)
{
p2=p1->ReplName;
while(p2!=NULL)
{
cout<<"\t │"<<setiosflags(ios::left)<<setw(6)<<p2->Name<<"│"<<setw(6)\
<<p1->Flight_No<<"│"<<setw(6)<<p1->Plane_No<<"│"<<setw(6)<<p2->Amount<<"│"<<setw(8)<<p1->Des_Name<<"│"<<setw(6)<<p2->Rank\
<<"│ ";
if(p2->Amount>1)
cout<<setw(5)<<"多票"<<"│"<<endl;
else
cout<<setw(5)<<"无座"<<"│"<<endl;
p2=p2->Next;
if(p2!=NULL||p1->Next!=NULL)
cout<<"\t ├───┼───┼───┼───┼────┼───┼───┤"<<endl;
}
}
p1=p1->Next;
}
cout<<"\t └───┴───┴───┴───┴────┴───┴───┘"<<endl;
cout<<"\n\t\t\t 按任意键返回子菜单..."<<endl;
getch();
}
//-----------------退票办理函数-----------------
void Sub3Menu()
{
int Flight_No=0,flag=0; //记录满足条件的航线的定票结点
Flight *p1; //记下满足条件的航线结点地址
Customer *p2,*p4; //临时性定票乘员结点
Replace *p3,*p5; //临时性候补乘员结点
char answer[7],name[7]; //用户输入的航班数据
int tag=0; //若第二乘客满足条件,则它的首地址会发生冲突,注意此处
int Seat_No; //记录座位号
if(Empty_Flight()) //航班线为空
return;
prefix("退票办理");
if(IsEmpty)
{
cout<<"\n\n\t\t 对不起,系统中暂时无定票乘客..."<<endl;
getch();
return;
}
while(1)
{
flag=0;
tag=0;
Flight_No=0;
prefix("退票办理");
cout<<"\n\t\t\t 请输入航班号:";
cin>>answer;
if(Find_Line(Head,answer,p1,Flight_No)) //航线存在
{
p2=p1->CustName; //指向该航线的乘客名单的首地址
cout<<"\n\t\t\t 请输入您的姓名:";
cin>>name;
if(p2==NULL) //该航线无定票乘客
{
cout<<"\n\t\t 很抱歉,该航线暂时无人定票,无法进行退票操作."<<endl;
if(Continue()=='n')//是否继续操作
return;
else
continue; //提前结束本次循环,重新进行退票处理
}
else
while(p2!=NULL)//查找有无此乘客名
{
if(strcmp(p2->Name,name)==0)//此外括号不能省略,否则功能会转变
{
if(p2==p1->CustName) //若为首位乘客满足
{
prior=p1->CustName; //记录指针
Seat_No=p2->Seat_No;
flag=1;
break;
}
}
else if(p2->Next!=NULL)//记录满足航线的的前结点地址
{
if(strcmp(p2->Next->Name,name)==0)
{
tag=1; //特别注意此处
prior=p2; //记录满足定乘客的前一地址,以作删除操作
Seat_No=p2->Next->Seat_No;
flag=1;
break;
}
}
p2=p2->Next; //指向下一乘客结点
}//while
if(!flag)
cout<<"\n\t\t 很抱歉,该航线无此乘客,请查证后再操作..."<<endl;
}//存在该航线
else
cout<<"\n\t\t 对不起,没有该次航班,按任意继续操作."<<endl; //没有该次航线
if(flag)
{
if(prior==p1->CustName&&!tag) //首结点满足条件且一个乘客,则该航线定票乘客置空
{
if(prior->Next==NULL) //仅一乘客,头指针置空
{
p1->Free_Amount+=prior->Amount;
p1->CustName=NULL;
}
else
{
p1->Free_Amount+=prior->Next->Amount;
p1->CustName=prior->Next; //指向下一乘客结点
}
}
else
{
p1->Free_Amount+=prior->Next->Amount;
prior->Next=prior->Next->Next; //删除操作
}
Customer_Count--;
if(Customer_Count==0)
IsEmpty=1;
}
if(flag)//存在退票操作
{
p3=p1->ReplName;
while(p3!=NULL)
{
if(p3->Amount<=p1->Free_Amount)//候补乘客的定票数小于或等于剩余票数
{
cout<<"\n\t\t 候补乘员"<<p3->Name<<"已经列入定票乘客名单中...\n"<<endl;
p4=Custp1[Flight_No]->Next=new Customer;
p4->Next=NULL;
IsEmpty=0;
if(p1->CustName==NULL)
p1->CustName=p4;
strcpy(p4->Name,p3->Name);
p4->Rank=p3->Rank;
p4->Amount=p3->Amount;
p4->Seat_No=Seat_No;
p1->Free_Amount-=p3->Amount; //减去相应的票数
Customer_Count++;
if(p3->Next==NULL) //无候补乘客
IsReplace=1;
if(p1->ReplName==p3)
{
if(p1->ReplName->Next==NULL)
p1->ReplName=NULL;//删除
else
p1->ReplName=p3->Next;
}
else
p5->Next=p3->Next->Next;
break;
}
if(p3->Next!=NULL)
if(p3->Next->Amount<=p1->Free_Amount)
p5=p3;
p3=p3->Next; //指向下一候补乘客结点
}
cout<<"\n\t\t 退票办理已经操作完毕,按任意键返回菜单..."<<endl;
getch();
return;
}//存在此乘客
if(Continue()=='n')
return;
}//while
}
//---------------乘客管理子菜单函数-----------------
void Sub4Menu()
{
char *MenuItem[]={"│ 航空客运乘客管理子菜单 │","│ │ [1]. 订票乘客信息 │ │","│ │ [2]. 候补乘客信息 │ │",\
"│ │ [3]. 返回系统菜单 │ │"};
while(1)
switch(ModelMenu(MenuItem,4))
{
case '1':{Display_Reserve();break;}
case '2':{Display_Replace();break;}
case '3':{return;}
default:{ErrorMess();}
}
}
//-------下面为主程序画面函数----------
void main()
{
Head=NULL;
if(Code_Verify())
return;
Cover();
while(1)
{
switch(MainMenu())
{
case '1':{Sub1Menu();break;} //航线管理
case '2':{Sub2Menu();break;} //订票办理
case '3':{Sub3Menu();break;} //退票办理
case '4':{Sub4Menu();break;} //乘客管理
case '5':{if(ExitSystem()) return;break;} //退出系统
default:ErrorMess();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -