📄 hangkongqitong.cpp
字号:
cout<<"\n\t\t\t 请输入乘员定额:";
cin>>p2->Customer_Amount;
cout<<"\n\t\t\t 请输入头等舱票价:";
cin>>p2->Price[0];
cout<<"\n\t\t\t 请输入普通舱票价:";
cin>>p2->Price[1];
cout<<"\n\t\t\t 请输入经济舱票价:";
cin>>p2->Price[2];
p2->Free_Amount=p2->Customer_Amount; //剩余票数与乘员定额相同
p2->CustName=NULL; //该航线定票乘客头指针为空
p2->ReplName=NULL; //初始候补名单为空
fout<<setiosflags(ios::left)
<<setw(11)<<p2->Des_Name
<<setw(9)<<p2->Flight_No
<<setw(10)<<p2->Plane_No
<<setw(10)<<p2->Week_Day
<<setw(9)<<p2->Customer_Amount//<<setw(9)<<p2->Free_Amount
<<setw(5)<<p2->Price[0]
<<setw(6)<<p2->Price[1]
<<setw(6)<<p2->Price[2]
<<endl;
if(Continue()=='n')
{
p2->Next=NULL; //航线的下一结点为空
return;
}
}
fout.close();
}
//------------航线是否为空函数-------------
int Empty_Flight()
{
if(Head==NULL)
{
system("cls");
cout<<"\n\n\n\n\n\n\n\n\t\t 对不起,没有相关航线。按任意键返回..."<<endl;
getch();
return 1;
}
else
return 0;
}
//------------航线查看函数-----------------
void Line_See()
{
int Day;
Flight *p1;
p1=Head;
char *Week_Day[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
if(Empty_Flight()) //航班线为空
return;
prefix("航班查看");
cout<<" ┌────┬───┬───┬────┬────┬────┬────────┐"<<endl;
cout<<" │ │ │ │ │ │ │ 票 价 │"<<endl;
cout<<" │终点站名│航班号│飞机号│飞行周日│乘员定额│剩余票数├──┬──┬──┤"<<endl;
cout<<" │ │ │ │ │ │ │头舱│普舱│经舱│"<<endl;
cout<<" ├────┼───┼───┼────┼────┼────┼──┼──┼──┤"<<endl;
while(p1!=NULL)
{
Day=p1->Week_Day-'0'-1;//数字转换相应星期数
cout<<" │"<<setiosflags(ios::left)<<setw(8)<<p1->Des_Name<<"│"<<setw(6)<<p1->Flight_No<<
"│"<<setw(6)<<p1->Plane_No<< "│"<<setw(8)<<Week_Day[Day]<< "│ "<<setw(5)<<p1->Customer_Amount<<
"│ "<<setw(5)<<p1->Free_Amount<<"│"<<setw(4)<<p1->Price[0]<<"│"<<setw(4)<<p1->Price[1]<<"│"<<setw(4)<<p1->Price[2]<<"│"<<endl;
p1=p1->Next;
if(p1!=NULL)
cout<<" ├────┼───┼───┼────┼────┼────┼──┼──┼──┤"<<endl;
}
cout<<" └────┴───┴───┴────┴────┴────┴──┴──┴──┘"<<endl;
cout<<"\n\t\t\t 按任意键返回子菜单..."<<endl;
getch();
}
void Sub1Menu()
{
string MenuItem[4]={"│ 航空客运航线管理子菜单 │",
"│ │[1]. 航 线 增 设 │ │",
"│ │[2]. 航 线 查 看 │ │",
"│ │[3]. 返 回 主 菜 单 │ │"};
while(1)
switch(ModelMenu(MenuItem,4))
{
case '1':{Line_Add();break;}
case '2':{Line_See();break;}
case '3':{return;}
default:{ErrorMess();}
}
}
//---------------订票办理函数---------------
void Sub2Menu()
{
int Ticket_Count,Seat_No,i,flag=0;
int Flight_No=0; //记录满足条件的航线的定票结点
Flight *p1; //记下满足条件的航线结点地址
Customer *p2; //临时性定票乘员结点
Replace *p3; //临时性候补乘员结点
char answer[7]; //用户输入的航班数据
char temp;
int tag=0; //候补乘客标志位
int Amount;
int IsRepl=0; //是否执行候补操作标志位
if(Empty_Flight()) //航班线为空
return;
while(1)
{
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -