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

📄 manage_flight.cpp

📁 用MFC做的航空售票系统
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<iostream.h>
#include"DataStruct_Define.h"
#define MAXSIZE 10
void printftinf(struct flightinf *inf);/*输出航线信息*/
void printallfltinf();/*打印所有航班信息*/
void querymanage();//查询管理
void queryfltno();//按航班号查询
void queryfendname();//按终点站名查询
void queryday();//按周日查询
struct flightinf *addflight(char fendname[],char fltno[],char pno[],char day,int passengersum,int fchecknum);/*添加航线*/
void initflight(struct flightinf m[]);/*初始化航班*/
struct flightinf *find();/*查找航线*/
void printcustomerinf();/*打印客户信息*/
linklist *insertlink(linklist *L,int num,char name[],int sticketclass);/*登记订票信息*/
linkqueue add(linkqueue q,char name[],int num);/*添加客户信息到客户队列中*/
void book();/*客户订票*/
int findotherflight(char fltno[],char fendname[] );/*查找相同站点的其它航班信息*/
void backcheck();/*客户退票*/
/*****************************************************************************/
/*主函数*/
void main()
{
	struct flightinf m[10];
	initflight(m);
	while(1)
	{
		char c=' ';
		cout<<"\n****************************************************************************";
	    cout<<"\t\t\t\t航空客运订票系统\n\n";
    	cout<<"\n\t客票预定-1"<<"\t航线查询-2"<<"\t\t办理退票-3";
    	cout<<"\n\n\t所有航线信息-4"<<"\t所有已订票客户信息-5"<<"\t\t退出-6";
    	cout<<"\n****************************************************************************\n";
        cout<<"请您输入:1,2,3,4,5 or 6中的任意一个数字字符";
		cout<<"\n****************************************************************************\n";
		cout<<"选择业务:";
		cin>>c;
		for(;!isdigit(c);)
		{
          cout<<"请选择正确的业务:";
		  cin>>c;
		}
        switch(c)
		{

		    case '1':book();break;
			case '2':querymanage();break;
			case '3':backcheck();break;
			case '4':printallfltinf();break;
		    case '5':printcustomerinf();break;
            case '6':exit(0);break;
           
		}
	}
}
/*****************************************************************************/


/*****************************************************************************/
/*添加航线*/
struct flightinf *addflight(char fendname[],char fltno[],char pno[],char day,int passengersum,int fchecknum)
{
	struct flightinf *inf;
	inf=new flightinf;
    strcpy(inf->fendname,fendname);
    strcpy(inf->fltno,fltno);
	strcpy(inf->pno,pno);
	inf->day=day;
	inf->passengersum=passengersum;
    inf->fchecknum=fchecknum;
	inf->order=NULL;
    inf->wait.front=NULL;
	inf->wait.rear=NULL;	
	return inf;
}
/*****************************************************************************/




/*****************************************************************************/
/*初始化航班*/
void initflight(struct flightinf m[])
{
	start=m;
	start=NULL;
	m[0]=*addflight("西安","F100","P1",'1',30,30);
	m[1]=*addflight("北京","F101","P2",'1',200,200);
	m[2]=*addflight("西安","F102","P4",'2',400,400);
	m[3]=*addflight("天津","F103","P5",'3',50,50);
	m[4]=*addflight("西安","F104","P10",'5',20,20);
	m[5]=*addflight("深圳","F105","P3",'4',350,350);
	m[6]=*addflight("天津","F106","P6",'5',280,280);
	m[7]=*addflight("珠海","F107","P7",'6',230,230);
	m[8]=*addflight("南京","F108","P8",'3',150,150);
	m[9]=*addflight("杭州","F109","P9",'7',350,350);
	start=m;			 
}

/*****************************************************************************/





/*****************************************************************************/
//输出航线信息
void printfltinf(struct flightinf *inf)
{  
	char c;
    c=inf->day;
	cout<<inf->fendname;
	cout<<"      "<<inf->fltno;
	cout<<"      "<<inf->pno;
    /****************************************************/
	//输出周日“星期×”
	switch (c)
    {
      case '1':cout<<"      星期一";break;
      case '2':cout<<"      星期二";break;
	  case '3':cout<<"      星期三";break;
	  case '4':cout<<"      星期四";break;
	  case '5':cout<<"      星期五";break;
	  case '6':cout<<"      星期六";break;
	  case '7':cout<<"      星期日";break;
    }
    /****************************************************/
	cout<<"      "<<inf->passengersum;
	cout<<"      "<<inf->fchecknum<<endl;
}
/*****************************************************************************/


/*****************************************************************************/
/*打印所有航班信息*/
void printallfltinf()
{
	int i=0,j=0;
	struct flightinf *inf;
	inf=start;
	cout<<"\n****************************************************************************\n";
	cout<<"\t\t\t\t所有航线信息\n";
	cout<<"终点站名  航班号  飞机号  飞行周日  乘员定额  余票量\n";
	while(i<MAXSIZE && inf->fltno!=NULL)
   {
		printfltinf(inf);
		//cout<<endl;
        inf++;
        i++;
   }
	cout<<"\n****************************************************************************\n";
  
}
/*****************************************************************************/


/*****************************************************************************/
/*航线查询*/
void querymanage()//查询管理
{
	char queryway;
	int  flag=1;
    while(flag)
	{
		cout<<"\t\t\t"<<"请选择查询方式"<<endl;
	    cout<<"****************************************************************************\n";
    	cout<<"按航班号查询-1\t按终点站名查询-2\t按周日查询-3\t返回主菜单-4"<<endl;
    	cout<<"****************************************************************************\n";
    	cout<<"选择查询方式:";
    	cin>>queryway;
		for(;!isdigit(queryway);)
		{
			cout<<"请重新输入:";
	    	cin>>queryway;
		}
    	switch(queryway)
		{
		   case '1': queryfltno();break;
	       case '2': queryfendname();break;
	       case '3': queryday();break;
	       case '4': flag=0;break;
		}
	}
}
void queryfltno()//按航班号查询
{
   struct flightinf *inf;
   char fltno[50];
   int i=0,flag=0;
   inf=start;
   cout<<"请输入航班号:";
   cin>>fltno; 
   while(i<MAXSIZE)
    {
     if(!strcmp(fltno,inf->fltno))
	 {
		 flag=1;
		 cout<<"终点站名  航班号  飞机号  飞行周日  乘员定额  余票量\n";
		 printfltinf(inf);
	 }
     inf++;
     i++;
   }
   if(!flag)
     cout<<"没有符合您要找的航线\n";
}
void queryfendname()//按终点站名查询
{
   struct flightinf *inf;
   char name[50];
   int i=0,flag=0;
   inf=start;
   cout<<"请输入终点站名:";
   cin>>name; 
   while(i<MAXSIZE)
    {
     if(!strcmp(name,inf->fendname))
	 {
		 flag=1;
		 cout<<"终点站名  航班号  飞机号  飞行周日  乘员定额  余票量\n";
		 printfltinf(inf);
	 }
     inf++;
     i++;
   }
   if(!flag)
     cout<<"没有符合您要找的航线\n";
}
void queryday()//按周日查询
{
   struct flightinf *inf;
   char day;
   int i=0,flag=0;
   inf=start;
   cout<<"请输入飞行周日:";
   cin>>day; 
   while(i<MAXSIZE)
    {
     if(day==inf->day)
	 {
		 flag=1;
		 cout<<"终点站名  航班号  飞机号  飞行周日  乘员定额  余票量\n";
		 printfltinf(inf);
	 }
     inf++;
     i++;
   }
   if(!flag)
     cout<<"没有符合您要找的航线\n";
}
/*****************************************************************************/


/*****************************************************************************/
/*查找航线*/
struct flightinf *find()
{  struct flightinf *inf;
   char fltno[50];
   int i=0;
   inf=start;
   cout<<"请输入航班号:";
   cin>>fltno;
   while(i<MAXSIZE && inf!=NULL) 
   {
     if(!strcmp(fltno,inf->fltno))return inf;
     inf++;
     i++;
   }
   cout<<"没有找到您所要的航班号,请您两谅解!!!!";
   return NULL;
}

/*****************************************************************************/



/*****************************************************************************/
/*打印客户信息*/
void printcustomerinf()
{  linklist *p;
   struct flightinf *inf;
   inf=find();
   if(inf==NULL) 
	   return;
   p=inf->order;
   if(p!=NULL)
   {
	cout<<"客户姓名\t订票量\t舱位等级"<<endl;
    while(p)
	{
	  cout<<"\t"<<p->name
		  <<"\t"<<p->bnum
		  <<"\t"<<p->sticketclass
		  <<endl;
      p=p->next;
    }
   }
   else
      printf("该航线没有客户信息!!\n");
}
/*****************************************************************************/








/*****************************************************************************/
/*登记订票信息*/
linklist *insertlink(linklist *L,int num,char name[],int sticketclass)
{  linklist *p,*q;
   p=L;   
   q=new linklist;
   strcpy(q->name,name);
   q->bnum=num;
   q->sticketclass=sticketclass;
   q->next=NULL;
   if(L==NULL)
     {L=q;q->next=NULL;}
   else
   {
     L=q;
     q->next=p;
   }
   return L;
}
/*****************************************************************************/


/*****************************************************************************/
/*添加客户信息到客户队列中*/
linkqueue add(linkqueue q,char name[],int num)
{ pwaitcheck  temp;
  temp=(pwaitcheck)malloc(sizeof(wnode));
  strcpy(temp->name,name);
  temp->wnum=num;
  temp->next=NULL;
  if(q.front==NULL)
    q.front=temp;
  else
    q.rear->next=temp;
  q.rear=temp;
  return q;
}
/*****************************************************************************/


/*****************************************************************************/
/*客户订票*/
void book()
{  
   struct flightinf *inf;
   int num,sclass,i;
   char name[50],ch=' ';
   inf=start;
   if(!(inf=find())) return;
   cout<<"请输入您的订票数量:";
   cin>>num;

   if(num<=inf->fchecknum)
   {
	   cout<<"请输入客户姓名:";
	   cin>>name;
     
	   do
	   {
		   cout<<"请输入舱位等级(1,2,3):";
           cin>>sclass;
	   }
	   while(sclass<1||sclass>3);
     inf->order=insertlink(inf->order,num,name,sclass);
	 cout<<"客户名\t订票数\t舱位等级"<<endl;
	 cout<<name
		 <<"\t"<<num
		 <<"\t"<<sclass;
     for(i=1;i<=num;i++)
         cout<<endl<<"您的第"<<i
		     <<"张票的座位号是:"
		     <<inf->passengersum-inf->fchecknum+i;
      
     inf->fchecknum=inf->fchecknum-num;

   }
   else
   {
	   cout<<"\n您购买的票太多了,您需要排队等待 还是 查看到达同一站的其它航班?(p/q):";
	   cin>>ch;
      if(ch=='p'||ch=='P')
      {  
		 cout<<"\n请输入您的姓名:";
         cin>>name;
         inf->wait=add(inf->wait,name,num);
		 cout<<"\n您现在需要等待,请稍候!!!!"<<endl;
      }
      else 
	  {
		  if(findotherflight(inf->fltno ,inf->fendname))
			  cout<<"上面的航线可供您参考!!!";

	  }
    }
}

/*****************************************************************************/
//////////////////////////////////////////////////////////////////////////////////
/*查找相同站点的其它航班号的航班信息*/
int findotherflight(char fltno[],char fendname[] )
{  
   struct flightinf *inf;
   int i=0,flag=0;
   inf=start;
   cout<<"\n****************************************************************************\n";
   cout<<"到达 "<<fendname<<"站 的其它航线为";
   cout<<"\n---------------------------------------------------------\n";
   cout<<"终点站名  航班号  飞机号  飞行周日  乘员定额  余票量\n";
   while(i<MAXSIZE && inf!=NULL) 
   {
     if(strcmp(fltno,inf->fltno) && !strcmp(fendname,inf->fendname))
	 {
		printfltinf(inf);
		flag++;
	 }
     inf++;
     i++;
   }
   cout<<"\n---------------------------------------------------------\n";
   cout<<"共有 "<<flag<<" 条航线";
   cout<<"\n****************************************************************************\n";
   return flag;
}
/////////////////////////////////////////////////////////////////////////////////


/*****************************************************************************/
/*客户退票*/
void backcheck()
{  
   struct flightinf *inf;
   wnode *t,*back,*f,*r;
   int sticketclass;
   linklist *p1,*p2,*head;
   char cusname[50];
   if(!(inf=find())) return;
   head=inf->order;
   p1=head;
   cout<<"请输入客户名):";
   cin>>cusname;
 
   while(p1!=NULL)
   {
     if(!strcmp(cusname,p1->name)) break;
     p2=p1;p1=p1->next;
   }
   if(p1==NULL)
   { 
	   cout<<"你还没有订票!!!"<<endl;
	   return;
   }
   else
   {
        if(p1==head) head=p1->next;
        else p2->next=p1->next;
        inf->fchecknum+=p1->bnum;
		sticketclass=p1->sticketclass;
        cout<<"恭喜您,成功退票了!!!!"<<endl;
        free(p1);
   }
   inf->order=head;/*指向订票单链表的头指针*/
   f=(inf->wait).front;/*f队列的头结点*/
   r=(inf->wait).rear;/*r队列的尾结点*/
   t=f;/*t为当前满点条件的排队候补名单域*/
   while(t)
   {      
       if(inf->fchecknum>=inf->wait.front->wnum)
	   {
          int i;
          inf->wait.front=t->next;
		  cout<<"祝贺您,订票成功!!!"<<endl;
          for(i=1;i<=t->wnum;i++)/*输出座位号*/
			 cout<<endl<<"您的第"<<i
		     <<"张票的座位号是:"
		     <<inf->passengersum-inf->fchecknum+i;
          inf->fchecknum=t->wnum;
          inf->order=insertlink(inf->order,t->wnum,t->name,sticketclass);/*插入到订票客户名单链表中*/
          free(t);
          break;
      }
      back=t;t=t->next;
      if(t!=NULL&&(inf->fchecknum)>=(t->wnum))
      {  int i;
         back->next=t->next;
          cout<<"祝贺您,订票成功!!!"<<endl;
          for(i=1;i<=t->wnum;i++)/*输出座位号*/
			 cout<<endl<<"您的第"<<i
		     <<"张票的座位号是:"
		     <<inf->passengersum-inf->fchecknum+i;
         inf->fchecknum-=t->wnum;
         inf->order=insertlink(inf->order,t->wnum,t->name,sticketclass);/*插入到订票客户名单链表中*/
         free(t);break;
      }  
      if(f==r) break; 
   }  
}
/*****************************************************************************/



⌨️ 快捷键说明

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