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

📄 hangkongqitong.cpp

📁 数据结构课程的作业,航空售票管理系统,希望对大家有用!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
               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()
{
   string MenuItem[4]={"│   航空客运乘客管理子菜单   │",
                       "│ │ [1]. 订票乘客信息  │ │",
                       "│ │ [2]. 候补乘客信息  │ │",
                       "│ │ [3]. 返回系统菜单  │ │"};
   while(1)
       switch(ModelMenu(MenuItem,4))
       {
           case '1':{Display_Reserve();break;}
           case '2':{Display_Replace();break;}
           case '3':{return;}
           default:{ErrorMess();}
       }
}
//-------下面为主程序画面函数----------
int main()
{
    ifstream fin;
    fin.open("in.txt");
    if(!fin.is_open())  exit(EXIT_FAILURE);
    string s;
    getline(fin,s);
    Flight* p4;
    Flight* p3;
    Head=new Flight;
    p2=Head;
    p2->Next=NULL;
    while(fin>>p2->Des_Name)//fin>>p2->Star_Name
          {
           fin>>p2->Flight_No;
           fin>>p2->Plane_No;
           fin>>p2->Week_Day;
           fin>>p2->Customer_Amount;
           //fin>>p2->Free_Amount;
           fin>>p2->Price[0];
           fin>>p2->Price[1];
           fin>>p2->Price[2];
           p2->Free_Amount=p2->Customer_Amount;     //剩余票数与乘员定额相同
           p2->CustName=NULL;                         //该航线定票乘客头指针为空
           p2->ReplName=NULL;                         //初始候补名单为空 
           p3=new Flight;
           p4=p2;
           p2->Next=p3;
           p2=p3;
          }
    p2=p4; 
    p2->Next=NULL;
    fin.close();
    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 0;break;}    //退出系统          
       default:ErrorMess();
       }
   }
   while(Head!=NULL)
   {    Flight* temp;
        temp=Head;
        Head=Head->Next;
        delete temp;            
   }
        
   system("PAUSE");
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -