#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
/*宏定义*/
#define OK 1
#define ERROR 0
#define Max 7
/*全局变量*/
char *air_num[3]={"CA1588","FM9258","OZ3085"};//航班号
char password[Max];
//飞机航线信息,包括飞机航班号,此航线飞机总装载量等
typedef struct airline
{
char air_num[8];//航班号
char plane_num[8];//飞机型号
char end_place[20];//达到地点
int total;//飞机总载量
int seat_number[130];
int left;//剩余座位
struct airline *next;//指向下一结点
}airline;
//乘客的信息,包括姓名,所乘飞机航班号,以及座位号等
typedef struct customer
{
char name[16];
char password[6];
char air_num[15];
int seat_num;
struct customer *next;//指向下一结点
}customer;
//实现首架飞机基本信息的插入
airline *start_air()
{
airline *air;
//分配动态内存
if(air=(airline*)malloc(sizeof(airline)))
{
if(air==NULL) //插入第一架飞机时
air->next=NULL;
}
else //分配内存失败
printf("Memory's allotment is error");
return air;
}
//实现首位乘客基本信息的插入
customer *start_customer()
{
customer *cus;
if(cus=(customer*)malloc(sizeof(customer)))//分配动态内存
{
if(cus==NULL) //插入第一个乘客
cus->next=NULL;
}
else //分配内存失败
printf("Memory's allotment is error");
return cus;
}
//实现乘客退票时,该飞机剩余座位数加1
airline *modefy_airline(airline *line,char *air_num,int seat_num)
{
airline *p;
p=line->next;
for(;p!=NULL;p=p->next)//当还被没全部删除完毕时
{
if(strcmp(p->air_num,air_num)==0)
{
//如果删除乘客有效
if(strcmp(air_num,p->air_num)==0)//字符串的比较
{
p->seat_number[seat_num]=0;
p->left++;//则飞机剩余座位数加1
return line;
}
//else printf("/nNO the airline!/n");
return 0;
}
}
}
//对飞机所形成链表节点的添加
int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int *seat_number,int total,int left)
{
airline *q;
q=(airline*)malloc(sizeof(airline));//开辟内存
strcpy(q->air_num,air_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end_place);//复制飞机航班号,飞机型号 ,飞往地点
strcpy(q->seat_number,seat_number);
q->total=total;
q->left=left;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;//添加节点数
return OK;
}
//对乘客所形成链表节点的添加
int insert_cus(customer **p,char *name,char *password,char *air_num,int seat_num)
{
customer *q;
q=(customer*)malloc(sizeof(customer));//开辟内存
strcpy(q->name,name);
strcpy(q->password,password);//储存密码