#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
#define PR printf
typedef int status;
typedef struct airlinenode{
char line_num[8]; //航班号
char plane_num[8]; //飞机号
char end_place[20]; //目的地
int total; //座位总数
int left; //剩余座位
struct airlinenode *next; //下一个结点
} *airline;
typedef struct customernode{
char name[20]; //顾客名
char line_num[8]; //航班号
int seat_num; //座位号
struct customernode *next; //下一个结点
} *customer;
//1
airline init_airline(){ //初始化链表
airline l;
l=(airline)malloc(sizeof(airlinenode));
if(l==NULL)exit(0);
l->next=NULL;
return l;
}
//2
customer init_customer(){//初始化链表
customer l;
l=(customer)malloc(sizeof(customernode));
if(l==NULL)exit(0);
l->next=NULL;
return l;
}
//3
status insert_airline(airline &p,char *line_num,char *plane_num,char *end_place,int total,int left){//airline链表插入操作
airline q;
q=(airline)malloc(sizeof(airlinenode));
strcpy(q->line_num , line_num);
strcpy(q->plane_num , plane_num);
strcpy(q->end_place , end_place);
q->total =total;
q->left =left;
q->next =NULL;
p->next =q;
p=p->next;
return OK;
}
//4
status insert_customer(customer &p,char *name,char *line_num,int seat){//customer链表插入操作
customer q;
q=(customer)malloc(sizeof(customernode));
strcpy(q->name , name);
strcpy(q->line_num , line_num);
q->seat_num =seat;
q->next=NULL;
p->next=q;
p=p->next;
return OK;
}
//5
airline modefy_airline(airline &l,char *line_num)//修改航班操作
{
airline p;
p=l->next ;
while(p!=NULL)
{
if(strcmp(line_num,p->line_num )==0)
{
p->left ++;
PR("modefy %s\n",p->line_num );
return l;
}
p=p->next;
}
PR("没有这个航班,无法完成修改操作!\n");
return 0;
}
//6
airline delete_airline(airline &h,char *line_num)//删除航班
{
airline p,pr;
for(pr=h,p=pr->next;p!=NULL;pr=pr->next,p=pr->next)
{
if(strcmp(line_num,p->line_num )==0){
pr->next =p->next ;
PR("成功删除 %s 航班\n",p->line_num );
free(p);return h ;
}
}
PR("此航班不存在!");
return h;
}
//7
customer delete_customer(customer &h,char *line_num)//删除顾客信息
{
customer p,pr;
for(pr=h,p=pr->next ; p!=NULL; pr=pr->next,p=pr->next)
{
if(strcmp(line_num,p->line_num )==0){
pr->next =p->next ;
PR("成功删除已定次航班的顾客:%s",p->name);
}
}
return h;
}
//8
customer delete_cus(customer &h,airline &l,char *name)//退票
{
customer p,pr;
char line_num[8];
// qr=h;
pr=h;
p=pr->next ;
// PR("开始删除\n");
while(p!=NULL)
{
if(strcmp(name,p->name )==0)
{
strcpy(line_num,p->line_num );
l=modefy_airline(l,line_num);
pr->next =p->next ;
PR("顾客 %s 退票成功!\n",p->name );
return h;
}
pr=pr->next ;
p=pr->next ;
}
PR("无此顾客,无法退票!\n");
return 0;
}
//9
status book(airline &l,char *line_num,customer &c,char *name)//订票
{
airline p=l;
customer q=c->next ;
p=l->next ;
for(;q->next !=NULL;q=q->next){}
// PR("%s\n",q->name );
for(;p!=NULL;p=p->next )
{
if(strcmp(line_num,p->line_num )==0)
{
if(p->left >0)
{
PR("恭喜您!订票成功!\n");
PR("你的座位号是: %d\n",(p->total -p->left +1));
insert_customer(q,name,line_num,p->total -p->left +1);
p->left --;
return OK;
}
else PR("对不起,座位已满!\n");
return 0;
}
}
PR("对不起,没有这个航班号!\n");
return ERROR;
}
//10
status save_airline(airline &l)//保存航班信息
{
FILE *fp_airline;
char ch='#';
airline p=l->next ;
char filename[]="c:\\airline.dat";
if((fp_airline=fopen(filename,"wb"))==NULL)
{
printf("can not open file to write:%s\n",filename);
return ERROR;
}
for(;p!=NULL;p=p->next )
{
// printf("%s,%s,%s,%d,%d\n",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left );
fprintf(fp_airline,"%s,%s,%s,%d,%d%c\n",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left ,ch);
}
fclose(fp_airline);
return OK;
}
//11
status save_customer(customer l)//保存顾客信息
{
FILE *fp_customer;
char ch='#';
customer p=l->next ;
char filename[]="c:\\customer.dat";
if((fp_customer=fopen(filename,"wb"))==NULL)
{
printf("can not open file to write:%s\n",filename);
return ERROR;
}
for(;p!=NULL;p=p->next )
{
// PR("%s,%s,%d\n",p->name ,p->line_num ,p->seat_num );
fprintf(fp_customer,"%s,%s,%d%c",p->name ,p->line_num ,p->seat_num ,ch);
}
fclose(fp_customer);
return OK;
}
//12
int changStrInt(char *ch)//将字符串转化为整形
{
int a=1,b=0,c=0,i;
for (i=strlen(ch)-1;i>=0;i--)
{
if (ch[i]<58&&ch[i]>47)
{
b=a*(ch[i]-48);
a=a*10;
c=c+b;
}
else
{
PR("%c 不合法,无法将此字符串转化为整形!\n",ch[i]);
return 0;
}
// printf("the c is %d\n",c);
}
return c;
}
//13
status load_airline(airline &l)//载入函数
{
FILE *fp_airline;
int flag=0,i=0;
char ch;
char line_num[8]; //航班号
char plane_num[8]; //飞机号
char end_place[20]; //目的地
char total_str[5];
char left_str[5];
int total; //座位总数
int left; //剩余座位
airline p=l;
char filename[50]="c:\\airline.dat";
if((fp_airline=fopen(filename,"rb"))==NULL)
{
printf("can not open file to load:%s\n",filename);
return ERROR;
}
while(!feof(fp_airline))
{
ch=fgetc(fp_airline);
if(ch!='#')
{
if(flag==0&&ch!=',')
{
line_num[i]=ch;
i++;
}
else if(flag==1&&ch!=',')
{
plane_num[i]=ch;
i++;
}
else if(flag==2&&ch!=',')
{
end_place[i]=ch;
i++;
}
else if(flag==3&&ch!=',')
{
total_str[i]=ch;
i++;
}
else if(flag==4&&ch!=',')
{
left_str[i]=ch;
i++;
}
else if (ch==',')
{
flag++;
i=0;
}
else
{
PR("错误\n");
return ERROR;
}
}
else
{
flag=0;
total=changStrInt(total_str);
left=changStrInt(left_str);
insert_airline(p,line_num,plane_num,end_place,total,left);
p=p->next ;
}
}
fclose(fp_airline);
return OK;
}
//14
status load_customer(customer &l)
{
FILE *fp_customer;
int flag=0,i=0;
char ch;
char name[9];
char line_num[8];//航班号
char seat_num_str[5];
int seat_num;//座位
customer p=l;
char filename[50]="c:\\customer.dat";
if((fp_customer=fopen(filename,"rb"))==NULL)
{
printf("can not open file to load:%s\n",filename);
return ERROR;
}
while(!feof(fp_customer))
{
ch=fgetc(fp_customer);
printf("%c\n",ch);
if(ch!='#')
{
if(flag==0&&ch!=',')
{
name[i]=ch;
i++;
}
else if(flag==1&&ch!=',')
{
line_num[i]=ch;
i++;
}
else if(flag==2&&ch!=',')
{
seat_num_str[i]=ch;
i++;
}
else if (ch==',')
{
flag++;
i=0;
}
else
{
PR("错误\n");
return ERROR;
}
}
else
{
flag=0;
seat_num=changStrInt(seat_num_str);
PR("%10s %10s %d\n",p->name ,p->line_num ,p->seat_num );
insert_customer(p,name,line_num,seat_num);
p=p->next ;
}
}
fclose(fp_customer);
return OK;
}
//15
status creat_customer(customer &l)
{
customer p=l;
int i=0;
char *name[3]={"hui","li","wu"};
char *line_num[3]={"bjnc01","bjsh02","shgz03"};
int seat_num[3]={1,5,10};
for (i=0;i<3;i++){
insert_customer(p,name[i],line_num[i],seat_num[i]);
}
return OK;
}
//16
status increase_air(airline &l,char *line_num,char *plane_num,char *end_place,int total)
{
airline p=l->next ;
for(;p->next !=NULL;p=p->next);
insert_airline(p,line_num,plane_num,end_place,total,total);
PR("增加航班 %s 成功!\n",line_num);
return OK;
}
//17
status creat_airline(airline &l)
{
airline p=l;
int i=0;
char *line_num[3]={"bjnc01","bjsh02","shgz03"};
char *plane_num[3]={"plane1","plane2","plane3"};
char *end_place