⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hangkongqitong.cpp

📁 数据结构课程的作业,航空售票管理系统,希望对大家有用!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
       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 + -