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

📄 hk.cpp

📁 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。航空客运订票系统
💻 CPP
字号:
#include "iostream.h"
#include "iomanip.h"
#include "string.h"
#include "HK.h"

void CreateRoutes(int t,Sqlist &L) //建立航空客运订票系统
{
	int n;  //每条航线的航班数
	int i;
	cout<<"第"<<t<<"条航线的航班数"<<endl;
	cin>>n;
	cout<<"输入此航线的终点站名"<<endl;
	cin>>L.Elem[t].EndName;
    L.Elem[t].Len=n;  //每条航线的航班数
	
   	for(i=1;i<=n;i++)
	{	
		cout<<"输入此条航线的第"<<i<<"个航班号"<<endl;
		cin>>L.Elem[t].FL[i].Key;
		L.Elem[t].FL[i].keynum=strlen(L.Elem[t].FL[i].Key);//求航班号的长度

		cout<<"输入此航班号的其他信息"<<endl;
		cout<<"飞机号   飞行周日  乘员定额  余票量"<<endl;
		cin>>L.Elem[t].FL[i].others.Model>>L.Elem[t].FL[i].others.Day
			>>L.Elem[t].FL[i].others.MostCrew>>L.Elem[t].FL[i].others.LeftTickets;
		L.Elem[t].FL[i].others.HBC=NULL; //一开始已订票的客户名单为空
		L.Elem[t].FL[i].others.WBC=NULL; //一开始等候候补的客户名单为空  
	}
}

void Menu_select(Sqlist &L)
{
	int n;
	char c='y';
	while(c=='y'||c=='Y')
	{
		cout<<"欢迎光临,输入你要选择的业务对应的号码"<<endl;
	    cin>>n;
	    switch(n)
		{
		case 1: FindRoutes(L); break;    //查询航线
		case 2: BookTickets(L); break;   //办理订票业务
		case 3: RetreatTickets(L); break; //办理退票业务
		case 0: cout<<"退出系统!"<<endl; return;
		default:cout<<"输入错误,重新输入!"<<endl;
		}
		cout<<"欢迎光临,需要服务吗?(Y/N)"<<endl;
		cin>>c;
	}
}


void Display(Sqlist &L,int t)
{
	int i;
	cout<<"可以到达你去的地方的这条航线的信息为"<<endl;
	cout<<"航班号  飞机号  飞行日期"<<endl;
	for(i=1;i<=L.Elem[t].Len;i++)
	{
		cout<<L.Elem[t].FL[i].Key<<setw(7)
			<<L.Elem[t].FL[i].others.Model<<setw(7)
			<<L.Elem[t].FL[i].others.Day<<endl;
	}  //输出了一条航线的所有航班的一些相关信息

}

void FindRoutes(Sqlist &L)  //查询航线
{
	cout<<"欢迎你查询"<<endl;
	int i;
	char Name[Max];
	cout<<"输入你要到达的地方即终点站名"<<endl;
	cin>>Name;
  
	for(i=1;i<=L.lenght;i++)
	{
		if(strcmp(Name,L.Elem[i].EndName)==0)
		{
			Display(L,i);
			break;
		}
	}

	if(i>L.lenght)
		cout<<"对不起,没有航线可以到达你去的地方"<<endl;
}

void BookTickets(Sqlist &L) //承办订票业务
{
	cout<<"欢迎你来订票"<<endl;
	Has_BookCustomers  *ps;
	Will_BookCustomers *p;
	char CName[Max];  //客户名
	char EName[Max];  //终点站名
	char Key[Max];  //航班号
	char Level;
	int Num;  //定票量
	int i,j;
	int flag1=0;
	int flag2=0;
	char c;
	cout<<"尊敬的客户,请输入你的名字"<<endl;
	cin>>CName;

	cout<<"输入你的终点站"<<endl;
	cin>>EName;

	cout<<"输入航班号和定票量"<<endl;
	cin>>Key;
	cin>>Num;

	cout<<"输入你要的舱位等级"<<endl;
	cin>>Level;

	for(i=1;i<=L.lenght;i++)
	{
		if(strcmp(EName,L.Elem[i].EndName)==0) //判断航线
		{
			flag1++;
			for(j=1;j<=L.Elem[i].Len;j++)
			{
				if(strcmp(Key,L.Elem[i].FL[j].Key)==0) //判断航班号
				{
					flag2++;
					if(L.Elem[i].FL[j].others.LeftTickets>=Num)  //判断票够不够
					{//进入已订票的客户名单
						ps=new Has_BookCustomers;
						strcpy(ps->Name,CName);
						ps->NumOfTickets=Num;
						ps->Level=Level;
						if(L.Elem[i].FL[j].others.HBC==NULL)
							L.Elem[i].FL[j].others.HBC=ps;
						else
						{
							Has_BookCustomers *q;
							for(q=L.Elem[i].FL[j].others.HBC;q->next;q=q->next); //空语句
							q->next=ps;
						}
  						L.Elem[i].FL[j].others.LeftTickets-=Num;   //票量减少
						ps->next=NULL;
						NumOfStatue+=2*i+j;
						cout<<"你好,你定票成功!你的座位号是:"<<endl;
						cout<<NumOfStatue<<endl;
					
					}
					else
					{
						cout<<"对不起!现在没有你要的那么多票,你可以等待吗?(Y/N)"<<endl;
						cin>>c;
						if(c=='y'||c=='Y')     //进入候补的客户名单
						{
							p=new Will_BookCustomers;
							strcpy(p->Name,CName);
                            p->NumOfTickets=Num;
							p->level=Level;
							if(L.Elem[i].FL[j].others.WBC==NULL)
								L.Elem[i].FL[j].others.WBC=p;
							else
							{
								Will_BookCustomers *q;
								for(q=L.Elem[i].FL[j].others.WBC;q->next;q=q->next);//空语句
								q->next=p;
							}
							p->next=NULL;
							cout<<"你已经进入候补,等有票我们将和你联系.谢谢!"<<endl;
						}
					}
				}
			}
		   if(flag2==0)
		   cout<<"对不起,此航线没有你输入的航班"<<endl;
		   break;
		}
		break;
	}
	if(flag1==0)
		cout<<"对不起,没有到达你去的地方的航线"<<endl;
}

void ReBook(Sqlist &L,int i,int j)//退票后,检查等待买票的链表
{
	Will_BookCustomers *r;
	Will_BookCustomers *t;
	while(L.Elem[i].FL[j].others.WBC!=NULL)
	{
	    r=L.Elem[i].FL[j].others.WBC;
	    if(L.Elem[i].FL[j].others.LeftTickets>=r->NumOfTickets) //判断第一个候补的客户
		{//将原来等待买票的客户(现在剩下的票符合要求)插入到已订票的链表后
		  Has_BookCustomers *H1=L.Elem[i].FL[j].others.HBC;
          Has_BookCustomers *H2=new Has_BookCustomers;
		  strcpy(H2->Name,r->Name);
		  H2->Level=r->level;
		  H2->NumOfTickets=r->NumOfTickets;
		  L.Elem[i].FL[j].others.LeftTickets-=r->NumOfTickets;
		  if(L.Elem[i].FL[j].others.HBC==NULL)
			  L.Elem[i].FL[j].others.HBC=H2;
		  else
		  {
		  while(H1->next)
		     H1=H1->next;
		  H1->next=H2; 
		  }
		  H2->next=NULL;
		  L.Elem[i].FL[j].others.WBC=r->next;
          Will_BookCustomers *p=r;
		  Num+=2*i+j;
		  cout<<r->Name<<"你好,现在已帮你订好了票座位号是:"<<Num<<endl;
		  delete p;
		}
	   else
	   {
		   if(L.Elem[i].FL[j].others.WBC->next==NULL)
			   break;
	    for(t=r->next;t;)
		{
				        
		   if(L.Elem[i].FL[j].others.LeftTickets>=t->NumOfTickets)
		   {//将原来等待买票的客户(现在剩下的票符合要求)插入到已订票的链表后
             Has_BookCustomers *H1=L.Elem[i].FL[j].others.HBC;
             Has_BookCustomers *H2=new Has_BookCustomers;
			 strcpy(H2->Name,t->Name);
			 H2->Level=t->level;
			 H2->NumOfTickets=t->NumOfTickets;
			 L.Elem[i].FL[j].others.LeftTickets-=t->NumOfTickets;
			 if(L.Elem[i].FL[j].others.HBC==NULL)
			     L.Elem[i].FL[j].others.HBC=H2;
		     else
			 {
		        while(H1->next)
		          H1=H1->next;
		        H1->next=H2; 
			 }
			 H2->next=NULL;
			 Will_BookCustomers *k=t;
			 r->next=t->next;
			 Num+=2*i+j;
			 cout<<t->Name<<"你好,现在已帮你订好了票座位号是:"<<Num<<endl;
			 t=t->next;
		     delete k;
		   }
		   else
			   r=t;
		}
	   }
	}
}

void RetreatTickets(Sqlist &L)
{
	cout<<"欢迎你来退票"<<endl;
	char CName[Max];
	char Key[Max];
	char EName[Max];  //终点站名
	int i,j;
	int flag=0;
	int flag1=0;
	int flag2=0;
	Has_BookCustomers *p;
	Has_BookCustomers *q;

	cout<<"尊敬的客户,请输入你的名字"<<endl;
	cin>>CName;

	cout<<"输入你已定的票的终点站"<<endl;
	cin>>EName;

	cout<<"输入已定的票的航班号"<<endl;
	cin>>Key;

   for(i=1;i<=L.lenght;i++)
   {
	 if(strcmp(EName,L.Elem[i].EndName)==0) //判断航线
	 {
		 flag++;
	   for(j=1;j<=L.Elem[i].Len;j++)
	   {
		 if(strcmp(Key,L.Elem[i].FL[j].Key)==0) //判断航班号
		 {
			 flag1++;
    		 if(L.Elem[i].FL[j].others.HBC!=NULL)
        	    p=L.Elem[i].FL[j].others.HBC;  //判断该航班的订票名单是否为空
			else
			{
				cout<<"你没有订此条航线的这个航班的票"<<endl;
				break;
			}
	        if(strcmp(p->Name,CName)==0)  
			{//判断删除的是否为头指针
				flag2++;
	          cout<<"你退票成功"<<endl;
		      L.Elem[i].FL[j].others.LeftTickets+=p->NumOfTickets;
		      L.Elem[i].FL[j].others.HBC=p->next;
		      delete p;
			  ReBook(L,i,j);
			  break;
			}
		   else
		   {
		      for(q=p->next;q;q=q->next,p=q)
			  {
			     if(strcmp(q->Name,CName)==0)
				 {
					 flag2++;
				  cout<<"你退票成功"<<endl;
				  p->next=q->next;
				  L.Elem[i].FL[j].others.LeftTickets+=q->NumOfTickets;
				  delete q;
				  ReBook(L,i,j);
				  break;
				 }
			  }
		   }
		  
		   if(flag2==0)
			   cout<<"对不起,此航线的此航班没有你的订票信息.请确认!"<<endl;
		     break;
		 }
		  if(flag1==0)
			  cout<<"此航线没有这个航班"<<endl;
			break;
	   }
	   break;
	 }
   }
   if(flag==0)
	   cout<<"对不起,没有这条航线!请确认!"<<endl;
}
				  

	   
	   










                           


			

	

⌨️ 快捷键说明

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