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

📄 airbook.cpp

📁 航空定票 是用于前台操作的 不提供客户操作 主要动能有: 定票 修改 查询 特色:候补函数
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"
#include "stdlib.h"
#define OK     1
#define ERROR  0
typedef int Status;


typedef struct ClientNode
{	//已订票客户结点
	char  name[20];
	char  ID[20];     //客户的身份证号
	int   booknum;
	int   grade;
	ClientNode *next;
}ClientNode;

typedef struct 
{	//已订票客户单链表(按ID有序)
	ClientNode *client;
	int      length;
}ClientLink;

typedef struct WClientNode
{	//侍订票客户结点
	char  name[20];
	char  ID[20];
	char  phoneno[15];
	int    neednum;
	WClientNode *next;
}WClientNode;

typedef struct
{	//侍订票客户链队列
    WClientNode *front; //对头指针
    WClientNode *rear;  //队尾指针
}WClientQueue;

typedef struct flightnode 
{	//航班结点
	char  *airline;
	int    number;
	char  *flight_no;
	int    weekday;
	int    total;
	int    remain;
	flightnode    *next;
	ClientLink    client;
	WClientQueue  nclient;
}flightnode;

typedef struct
{	//航班顺序线性表
	flightnode *flight;
	int  length;
}SqFlight;

Status InitList_Sq(SqFlight &LF)
{
    //构造一个空的线性表LF
    LF.flight=(flightnode*)malloc(sizeof(flightnode)); //数组指针指向flight指向线性表的基地址
    if(!LF.flight)
		exit(ERROR);
    LF.length=0;
    LF.flight->next=NULL;
    return(OK);
}

Status InitList_CL(ClientLink &CL)
{	//为客户链表建一个空链表
    CL.client=(ClientNode*)malloc(sizeof(ClientNode));
    if(!CL.client)
		exit(ERROR);
    CL.length=0;
    CL.client->next=NULL;
    return(OK);
}

Status InitList_WCQ(WClientQueue &WCQ)
{	//为待票客户建一个空的队列
    WCQ.front=WCQ.rear=(WClientNode*)malloc(sizeof(WClientNode));
    if(!WCQ.front)
		exit(ERROR);
    WCQ.front->next=NULL;
    return(OK);
}

Status InitFlightNode(SqFlight &LF)
{   //对航线结点赋值并接到航班顺序表
    flightnode *p,*q;
    ClientLink CL1;       //订票客户
    InitList_CL(CL1);
    WClientQueue WCQ1;
    InitList_WCQ(WCQ1);
    if(!LF.flight)
	{
		printf("无法找到指向航线结点的指针\n");
		exit(ERROR);
	} 
    LF.flight->airline="Xiamen--Tokyo";    //头结点赋值
    LF.flight->client=CL1;
    LF.flight->flight_no="FU127";
    LF.flight->nclient=WCQ1;
    LF.flight->number=8427;
    LF.flight->remain=200;
    LF.flight->total=200;
    LF.flight->weekday=1;
    p=(flightnode*)malloc(sizeof(flightnode));
    if(!p)
	{
		printf("申请不到航线结点\n");
		exit(ERROR);
	}
    LF.flight->next=p;     
    ClientLink CL2;
    InitList_CL(CL2);
    WClientQueue WCQ2;
    InitList_WCQ(WCQ2);
    p->airline="Xiamen--Tokyo";     //结点1赋值
    p->client=CL2;
    p->flight_no="BU127";
    p->nclient=WCQ2;
    p->number=8757;
    p->remain=180;
    p->total=180;
    p->weekday=5;
    q=p;
    p=NULL;
    p=(flightnode*)malloc(sizeof(flightnode));
    if(!p)
	{
		printf("申请不到航线结点\n");
		exit(ERROR);
	}
    q->next=p;          
    ClientLink CL3;
    InitList_CL(CL3);
    WClientQueue WCQ3;
    InitList_WCQ(WCQ3);
    p->airline="Fuzhou--Shenzhen";  //结点2赋值
    p->client=CL3;
    p->flight_no="FU786";
    p->nclient=WCQ3;
    p->number=3216;
    p->remain=200;
    p->total=200;
    p->weekday=2;
    q=p;
    p=NULL;
    p=(flightnode*)malloc(sizeof(flightnode));
    if(!p)
	{
		printf("申请不到航线结点\n");
		exit(ERROR);
	}
    q->next=p;
    ClientLink CL4;
    InitList_CL(CL4);
    WClientQueue WCQ4;
    InitList_WCQ(WCQ4);
    p->airline="Fuzhou--Shenzhen";  //结点3赋值,有四个航班,共4个结点
    p->client=CL4;
    p->flight_no="FU236";
    p->nclient=WCQ4;
    p->number=5712;
    p->remain=230;
    p->total=230;
    p->weekday=6;
    p->next=NULL;
    return(OK);
}


//-----------------------------------------------航线查询函数:lookup---------------------------------------
Status lookup(char *airline,SqFlight LF)
{	//查询系统
    //形参指针airline指向查询时输入的航线的首地址
    //引用航班顺序线性表LF
    flightnode *p=LF.flight;
	InitList_Sq(LF);
	char *h,*q=airline;
    int i=0;
    while(p)
	{
			
        h=p->airline;
        while(*airline==*h)
		{	//查询航线是否与在LF的航班航线里有
            if(*airline=='\0'||*h=='\0')
				break;
            airline++,h++;
        }
			
        if(*airline=='\0'&&*h=='\0')//若有该航线输出航线信息
        {
		
            i++;
            printf("%s   %s    %d     %d     %d     %d\n",p->airline,p->flight_no,p->number,p->remain,p->total,p->weekday);
        }
        airline=q;
        p=p->next;          //航班结点指针后移
    }
    if(i)
		printf("有此航班%d条\n",i);
	
	else
	{   system("cls");
		printf("输入有误,请核对后重新输入!\n");
					
	}
    return(OK);
}

//==============================按航班号查询飞机信息==============================
flightnode *search(int number,SqFlight LF)
{
    //形参number查看时输入的航班号
    //引用航班顺序线性表LF
     flightnode *p=LF.flight;
     while(p)
	 {
         if(number==p->number)
			 break;//查看的航班号是否在LF的航班号里有
         p=p->next;
     }
     return(p);        //返回指向该航班结点的指针
}

//==============================按照ID查找客户============================
ClientNode *searchID(flightnode *p,char *ID)
{
    //p是指向某个航班结点的指针
    //ID是要查询的ID
    ClientNode *h=p->client.client->next;
    ClientNode *prior_h=NULL;          //指向这个ID客户的前驱的指针
    prior_h=p->client.client;
    int i=0;
    char *p_ID=ID;
    char *h_ID=NULL;
    while(h)
	{
         ID=p_ID;h_ID=h->ID;
         while(*ID==*h_ID)
		 {        //查询的ID在已订客户链表中是否有     
             if(*ID=='\0'||*h_ID=='\0')break;
             ID++,h_ID++;
         }
         if(*ID=='\0'&&*h_ID=='\0')
			 break;//若有结束循环
         prior_h=prior_h->next;
         h=h->next;
    }
    if(!h)
		prior_h=NULL;
    return(prior_h);//返回前驱指针
}


//===========================等待客户队列建立函数=================================
Status wbook(SqFlight LF,flightnode *p)
{	//待票客户队列
    //引用航班顺序线性表LF
    //p是指向某个航班结点的指针
    WClientNode *h=NULL;
loop:     
    h=(WClientNode *)malloc(sizeof(WClientNode));
	if(!h)
		goto loop;
	printf("请输入客户的名字:\n");
	scanf("%s",h->name);
	printf("请输入客户的ID:\n");
	scanf("%s",h->ID);
	printf("请输入客户的电话号码:\n");
	scanf("%s",h->phoneno);
	printf("请输入客户需要的票数:\n");
	scanf("%d",&h->neednum);
	h->next=NULL;
	p->nclient.rear->next=h;
	p->nclient.rear=h;
    return(OK);
}

//=====================================替换航班查询====================================
Status find_oth(char *airline,SqFlight LF,int plannumber)//寻找相同航线其他飞机
{	//用地址搜索出
	Status book(int number,SqFlight LF);
	flightnode *p=LF.flight;
   	char *h,*q=airline;
    int i=0;
	int number;
    while(p)
	{
        h=p->airline;
        while(*airline==*h)
		{	//查询航线是否与在LF的航班航线里有
            if(*airline=='\0'||*h=='\0')
				break;
            airline++,h++;
        }
		 if((*airline=='\0'&&*h=='\0')&&p->number!=plannumber&&p->remain!=0)//若有该航线输出航线信息
        {
            i++;
            printf("\n第%d同航线不同飞机的飞机号为:%d\n",i,p->number);
        }
        airline=q;
        p=p->next;          //航班结点指针后移
    }
    if(i)
	{	
		printf("请输入要预定的航班号:\n");
		scanf("%d",&number);
		book(number,LF);
		return OK;
	}
	else
	{
		printf("对不起,没有相同航线的飞机有剩余机票!谢谢惠顾!");
		return ERROR;
	}

}

⌨️ 快捷键说明

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