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

📄 第四题.c

📁 (1)录入航班信息(航班数据可以先存储在一个数据文件中
💻 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 + -