📄 第四题.c
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
#define PR printf
typedef int status;
typedef struct airline{
char line_num[8];
char plane_num[8];
char end_place[20];
int total;
int left;
struct airline *next;
}airline;
typedef struct customer{
char name[9];
char line_num[8];
int seat_num;
struct customer *next;
}customer;
airline *init_airline(){
airline *l;
l=(airline*)malloc(sizeof(airline));
if(l==NULL){
exit(0);
}
l->next=NULL;
return l;
}
customer * init_customer(){
customer *l;
l=(customer*)malloc(sizeof(customer));
if(l==NULL){
exit(0);
}
l->next=NULL;
return l;
}
status insert_airline(airline **p,char *line_num,char *plane_num,char *end_place,int total,int left){/*飞机系统链表插入操作*/
airline *q;
q=(airline*)malloc(sizeof(airline));
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;
// printf("insert %d ,%dis succssed!\n",e,bl);
return OK;
}
status insert_customer(customer **p,char *name,char *line_num,int seat){
customer *q;
q=(customer*)malloc(sizeof(customer));
/* {
printf("内存分配失败\n");
return OVERFLOW;
}*/
strcpy(q->name , name);
strcpy(q->line_num , line_num);
q->seat_num =seat;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
//printf("insert %d ,%dis succssed!\n",e,bl);
return OK;
}
airline *modefy_airline(airline *l,char *line_num)
{
airline *p;
p=l->next ;
for(;p!=NULL;p=p->next )
{
if(strcmp(line_num,p->line_num )==0)
{
p->left ++;
// PR("modefy %s\n",p->line_num );
return l;
}
}
printf("NO!The airline is not exist.You can not change it! \n");
return 0;
}
status delete_airline(airline *h,char *line_num)
{
airline *p,*pr;
pr=h;
p=pr->next ;
while(p!=NULL)
{
if(strcmp(line_num,p->line_num )==0)
{
pr->next =p->next ;
printf("delete the %s airline\n",p->line_num );
return OK;
}
pr=pr->next ;
p=pr->next ;
}
printf("the airline is not exist,so can not be deleted!\n");
return ERROR;
}
status delete_customer(customer *h,char *line_num)
{
customer *p,*pr;
pr=h;
p=pr->next ;
while(p!=NULL)
{
if(strcmp(line_num,p->line_num )==0)
{
pr->next =p->next ;
}
pr=pr->next ;
p=pr->next ;
}
//printf("the airline is not exist,so can not be deleted\n");
return OK;
}
status delete_cus(customer *h,airline *l,char *name)
{
customer *p,*pr;
char line_num[8];
// qr=h;
pr=h;
p=pr->next ;
//printf("开始删除\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 ;
printf("customer %s refund successful !\n",p->name );
return OK;
}
pr=pr->next ;
p=pr->next ;
}
printf("the customer is not existed,so can not refund!\n");
return ERROR;
}
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;
}
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 )
{
// printf("%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;
}
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
{
printf("%c is unlawful,can not change this string into int!\n",ch[i]);
return 0;
}
// printf("the c is %d\n",c);
}
return c;
}
status insert_air(airline *l,char *line_num,char *plane_num,char *end_place,int total,int left){
airline *q;
q=(airline*)malloc(sizeof(airline));
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=l->next ;
l->next=q;
// printf("insert %d ,%dis succssed!\n",e,bl);
return OK;
}
status insert_cus(customer *l,char *name,char *line_num,int seat){
customer *q;
q=(customer*)malloc(sizeof(customer));
strcpy(q->name , name);
strcpy(q->line_num , line_num);
q->seat_num =seat;
q->next=l->next ;
l->next=q;
return OK;
}
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[]="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
{
printf("错误\n");
return ERROR;
}*/
}
else
{
flag=0;
i=0;
total=changStrInt(total_str);
left=changStrInt(left_str);
printf("%s%s%s%d%d\n",line_num ,plane_num ,end_place ,total ,left );
insert_air(l,line_num,plane_num,end_place,total,left);
}
}
fclose(fp_airline);
return OK;
}
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
{
printf("Wrong!\n");
return ERROR;
}
}
else
{
flag=0;
seat_num=changStrInt(seat_num_str);
printf("%s %s %d\n",name ,line_num ,seat_num );
insert_cus(l,name,line_num,seat_num);
// p=p->next ;
}
}
fclose(fp_customer);
return OK;
}
status creat_airline(airline **l)
{
airline *p=*l;
int i=0;
char *line_num[3]={"CA01","CA02","CA03"};
char *plane_num[3]={"plane1","plane2","plane3"};
char *end_place[3]={"BJ","SH","CQ"};
int total[3]={100,100,100};
int left[3]={23,43,15};
for (i=0;i<3;i++){
insert_airline(&p,line_num[i],plane_num[i],end_place[i],total[i],left[i]);
}
return OK;
}
status creat_customer(customer **l)
{
customer *p=*l;
int i=0;
char *name[3]={"wangming","lihui","huangyan"};
char *line_num[3]={"CA01","CA02","CA03"};
int seat_num[3]={2,6,9};
for (i=0;i<3;i++){
insert_customer(&p,name[i],line_num[i],seat_num[i]);
}
return OK;
}
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);
printf("increase airline %s success!\n",line_num);
return OK;
}
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){}
// printf("%s\n",q->name );
for(;p!=NULL;p=p->next )
{
if(strcmp(line_num,p->line_num )==0)
{
if(p->left >0)
{
printf("Congratulations!Booking is successful!\n");
printf("Your seat number is: %d\n",(p->total -p->left +1));
insert_customer(&q,name,line_num,p->total -p->left +1);
p->left --;
return OK;
}
else printf("Sorry,the seat is full!\n");
return 0;
}
}
printf("Sorry,this airline is not exist!\n");
return ERROR;
}
status print_airline(airline *l)
{
airline *p=l->next ;
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 );
}
return OK;
}
status print_customer(customer *l)
{
customer *p=l->next ;
for(;p!=NULL;p=p->next )
{
printf("%s %s %d\n",p->name ,p->line_num ,p->seat_num );
}
return OK;
}
void main()
{
char choice,choice2,name[9],line_num[8],password[9],plane_num[8],end_place[9];
char pass[9]="wj024",re_pass_1[9],re_pass_2[9];
int t=1,tt=1,total;
airline *air=init_airline();
customer *cus=init_customer();
printf(" Welcome to the air booking system \n");
printf(" ***************************************** \n");
printf(" * the airline and customer information * \n");
printf(" * CA01 plane1 BeiJing 100 23 * \n");
printf(" * CA02 plane2 ShangHai 100 43 * \n");
printf(" * CA03 plane3 ChongQing 100 15 * \n");
printf(" ***************************************** \n");
printf(" * wangming CA01 2 * \n");
printf(" * lihui CA02 6 * \n");
printf(" * huangyan CA03 9 * \n");
printf(" ***************************************** \n");
creat_airline(&air);
creat_customer(&cus);
// save_airline(air);
// save_customer(cus);
while(t==1)
{
printf("******************************************\n");
printf("* air booking system *\n");
printf("* booking ticket-------0 *\n");
printf("* refund ticket-------1 *\n");
printf("* search ticket-------2 *\n");
printf("* modified route ------3 *\n");
printf("* exit-----------------4 *\n");
printf("******************************************\n");
printf("Make a choose: ");
choice = getch();
printf("%c\n",choice);
if(choice=='0')
{
printf("Please input the line_num: ");
scanf( "%s",line_num);
printf("Please input your name: ");
scanf( "%s",name);
book(air,line_num,cus,name);
save_airline(air);
save_customer(cus);
}
else if(choice=='1')
{
printf("\n Please input your name: ");
scanf( "%s",name);
delete_cus(cus,air,name);
save_airline(air);
save_customer(cus);
}
else if(choice=='2')
{
printf("\n line_num plane_num end_place total_ticket lave_ticket\n");
print_airline(air);
printf(" name line_num seat_num\n");
print_customer(cus);
}
else if(choice=='3')
{
tt=1;
printf("Please input the password: ");
scanf("%s",password);
if(strcmp(password,pass)==0)
{
while (tt==1){
printf("\n************************************************\n");
printf("* modify route information: *\n");
printf("* add the line_num--------------'0' *\n");
printf("* delete the line_num-----------'1' *\n");
printf("* modify the password-----------'2' *\n");
printf("* search route information -----'3' *\n");
printf("* exit route information -------'4' *\n");
printf("************************************************\n");
printf("Please make a choose: ");
choice2=getch();
printf("%c\n",choice2);
if(choice2=='0')
{
printf("Please input the line_num that you add: ");
scanf("%s",line_num);
printf("Please input the plane_num: ");
scanf("%s",plane_num);
printf("Please input the end_place ");
scanf("%s",end_place);
printf("Please input the seat_num: ");
scanf("%d",&total);
increase_air(air,line_num,plane_num,end_place,total);
save_airline(air);
save_customer(cus);
}
else if (choice2=='1')
{
printf("Please input the line_num that you delete: ");
scanf("%s",line_num);
delete_airline(air,line_num);
delete_customer(cus,line_num);
save_airline(air);
save_customer(cus);
}
else if(choice2=='2')
{
printf("Attention: Password can not be more than 8 bit!\n");
printf("Please input the new password:");
scanf("%s",re_pass_1);
printf("Please input the password again: ");
scanf("%s",re_pass_2);
if(strcmp(re_pass_1,re_pass_2)==0)
{
strcpy(pass,re_pass_1);
printf("Modify the password successful!Remember it.\n");
}
else {
printf("the twice enter password is inconsistent !\n");
}
}
else if(choice2=='3')
{
printf("\n line_num plane_num end_place total_ticket lave_ticket\n");
print_airline(air);
}
else if(choice2=='4')
{
tt=0;
}
else {
printf("Your input get wrong!\n");
tt=0;
}
}
}
else {
printf("Sorry!Your password is wrong!\n");
}
}
else if(choice=='4')
{
printf("Goodbye!");
t=0;
}
else
{
printf("Your input get wrong!\n");
}
}
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -