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

📄 新建 文本文档.txt

📁 ,这个系统是我在大2的时候自己编写的。感觉还可以。也许有-,C-C++,交通/航空行业/transportation applications
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   {
       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 + -