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

📄 airbook.cpp

📁 航空定票 是用于前台操作的 不提供客户操作 主要动能有: 定票 修改 查询 特色:候补函数
💻 CPP
📖 第 1 页 / 共 2 页
字号:

//==================================订票函数===============================     
Status book(int number,SqFlight LF)
{
     //形参number查看时输入的航班号
     //引用航班顺序线性表LF
     flightnode *p=NULL;
     ClientNode *h=NULL;
	 char a;
     p=search(number,LF);     //调用search(),返回指向这个航班号的航班结点的指针
     if(!p)
	 {
		 printf("无此航班号\n");
		 return(ERROR);
	 }
     if(p->remain>=0)
	 {        //余票量大于0
loop:         
		h=(ClientNode *)malloc(sizeof(ClientNode));
		if(!h)
			goto loop;
        printf("请输入客户的定票数:\n");
        scanf("%d",&h->booknum);
        if((h->booknum)<=(p->remain))
            p->remain=p->remain-h->booknum;     //余票量减去客户的订票量
        else
		{                                  //若余票量不足,询问客户是否要候补
            int i=0;
            printf("余票数:%d\n",p->remain);
            printf("\n");
            printf("已无足够的票,您是否要候补?\n");
            printf("\n");
            printf("1.要 2.不要 3.按余票定票 4.寻找同路径的其他航班\n");
            scanf("%d",&i);
            switch(i)
            {
             case 1:
                 wbook(LF,p);//调用候补函数,实现候补
                 free(h);h=NULL;
                 break;
             case 2:
                 free(h);h=NULL;
                 break;
             case 3:
                 if(p->remain!=0)
                 {
                     h->booknum=p->remain;
                     p->remain=0;
                 }
                 else
				 {
                     printf("无法按余票购票,余票已为零\n");
                     return(ERROR);
                 }
                 break;
             case 4:
				 find_oth(p->airline,LF,p->number);
				 return (OK);
			 default: printf("选择有误\n");
            }
             if(i==1)
			 {
				 printf("候票成功\n");
				 return(OK);
			 }
             else if(i==2)
			 {
				 printf("祝您下次购票成功\n");
				 return(OK);
			 }
			
         }
         
         printf("请输客户的姓名:\n");
         scanf("%s",h->name);
         printf("请输入客户的ID:\n");
         scanf("%s",h->ID);
loop1:
         {
             printf("请输入客户的舱位等级1或2或3:\n");
             scanf("%s",&a);
			 h->grade=a-48;
         }
         if(h->grade!=3&&h->grade!=2&&h->grade!=1)
         {
            printf("无此等级舱位\n");
            goto loop1;
         }
         printf("购票成功\n");
         h->next=p->client.client->next;
         p->client.client->next=h;
     }
     return(OK);
}

//==================================询问函数==============================
Status ask_clien(flightnode *p,SqFlight LF)
{
    //p是指向某个航班结点的指针
    ////引用航班顺序线性表LF
     int i,j;
     WClientNode *h=p->nclient.front->next;
     WClientNode *prior_h=p->nclient.front;
     if(!h)
		 printf("无人候票\n");
     while(h)
	 {
         i=0;j=0;
         printf("余票数:%d\n",p->remain);
         printf("\n");
         if(p->remain>=h->neednum)
             printf("%s要不要购票?\n",h->name);
         else 
             printf("余票数不够%s的需要,您要不要购票?\n",h->name);
		 printf("客户的名字:%s\n",h->name);
         printf("客户的ID:%s\n",h->ID);
         printf("客户需要的票数:%d\n",h->neednum);
		 printf("客户的联系方式:%d\n",h->phoneno);
         printf("\n");
loop:
         {   i=2;
             printf("\n");
             printf("1.要   2.不要\n");
             scanf("%d",&i);
         }
         switch(i)
         {
         case 1:
             book(p->number,LF);
             if(!prior_h->next->next)
				 p->nclient.rear=prior_h;
             prior_h->next=prior_h->next->next;
             j=1;      //j=1,表示prior_h将跳过一个队列结点
             break;
         case 2:
             printf("谢谢您对本航班的关注\n");
             break;
         default:
             printf("选择有误\n");
             goto loop;
         }
         if(j==0)
			 prior_h=prior_h->next;
         h=h->next;
         if(p->remain<=0)
             printf("余票已被购尽!!\n");
     }
     return(OK);
}

//=======================================退票函数===============================
Status back_ticket(int number,SqFlight LF){
     int flog;
	 char a;
	 char ID[20];
     ClientNode *prior_h=NULL;
     flightnode *p=NULL;
     ClientNode *h=NULL;
     p=search(number,LF);
     if(!p)
	 {
		 printf("无此航班号\n");
		 return(ERROR);
	 }
loop:
	 printf("请输入退票客户的ID:\n");
     scanf("%s",ID);
     prior_h=searchID(p,ID);
	 
     if(!prior_h)
	 {
		 printf("无此客户的ID~~~~\n");
		 printf("1.重新输入客户ID\n2.返回主菜单");
		 scanf("%s",&a);
		 flog=a-48;
		 if(flog==1)
			 goto loop;
		 else if(flog==2)
				return(ERROR);
			else
			{
				printf("对不起,输入错误,返回主菜单!");
				return (ERROR);
			}

	 }
     else{
         p->remain=p->remain+prior_h->next->booknum;
         prior_h->next=prior_h->next->next;
     }
     printf("退票成功\n");
     printf("\n");
     printf("询问待票客户:\n");
     ask_clien(p,LF);
     return(OK);
}

//================================菜单函数======================================
void menu()
{
    printf("                              \n");
	printf("===========*****欢迎使用闽江航空订票系统****==============\n");
	printf("     *****选择菜单****         \n");
    printf("                              \n");
    printf("     1.现有航线查询\n     2.旅客出游预定\n     3.需要办理退票\n     4.查看订票情况\n     5.清屏并返回主菜单\n     6.退出\n");
	printf("                                     \n");
	printf("                                     \n");

	printf("=========*****祝您旅途愉快****============\n");
}

//=====================================查询函数 getelem==============================
Status GetElem(SqFlight LF,int number)
{
    //用e返回L中第i个数据的值,1<=i<=Listlength(L).用于查询订票情况
    flightnode *p=NULL;
    p=search(number,LF);
    ClientNode *h=p->client.client->next;
	WClientNode	*q=p->nclient.front->next; 
    if(!h)
		printf("尚未有客户\n");
    while(h)
	{
        printf("客户的名字:%s\n",h->name);
        printf("客户的ID:%s\n",h->ID);
        printf("客户票数:%d\n",h->booknum);
        h=h->next;
    }
   if(!q)
		printf("尚未有排队客户\n");
	while(q)
	{
		printf("等待客户名字:%s\n",q->name);
		printf("等待客户ID:%s\n",q->ID);
		printf("等待客户欲订票数:%d\n",q->neednum);
		q=q->next;
	}
	return OK;
}



//======================================主函数========================================
void main()
{
	char airline[20];
	int number=0;
	int quit=0;
	char a;
	int i;
	SqFlight LF;
	InitList_Sq(LF);
	InitFlightNode(LF);
loop2:
	printf("航班号可以通过查看航线得知;\n");
	printf("\n");
	while(quit!=1)
	{
		menu();
		printf("\n\n请选择菜单:\n");
		scanf("%1s",&a);
	    i=a-48;
		switch(i)
		{
			case 1:
				system("cls");
				printf("   -航线有两条,输入格式:\n");
				printf("              Xiamen--Tokyo\n");
				printf("              Fuzhou--Shenzhen\n");
				printf("   -返回主菜单请输入:b\n");
				printf("\n   -请输入要查询的航线:\n");
				scanf("%s",airline);
				if(*airline!='b')
				{
					printf("\n=============================================================\n");
					printf("\n航线\n");
					printf("\n起点  --  终点    飞机号  航班号  余票数  总票数 飞行周日\n");
					lookup(airline,LF);
					printf("\n==============================================================\n");
					printf("输入Enter确认信息??\n");
					getchar();getchar();
				}
				else	goto loop2;
				break;
			case 2:
				system("cls");
				printf("-请输入要预定的航班号:\n");
				scanf("%d",&number);
				book(number,LF);		
				printf("输入Enter确认信息??\n");
					getchar();getchar();
				break;
			case 3:
				system("cls");
				printf("-请输入要退票的航班号:\n");
				scanf("%d",&number);
				back_ticket(number,LF);
					printf("输入Enter确认信息??\n");
					getchar();getchar();
				break;
			case 4:
				system("cls");
				printf("-查看客户资料,输入客户的航班号\n");
				scanf("%d",&number);
				GetElem(LF,number);
					printf("输入Enter确认信息??\n");
					getchar();getchar();
				break;
			case 5:
				system("cls");
				goto loop2;
			case 6:
				quit=1;
				break;
			default:
				printf("选择有误\n");
		}
	}
}

⌨️ 快捷键说明

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