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

📄 03061078 李静静 航空定票系统.c

📁 一、民航管理系统设计: 民航系统功能:能给客户提供订票、退票的功能
💻 C
字号:
/*航空客运订票系统*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
#define MAX 1
#define num1 2
int num2;/*替补客户人数*/
int sum;
/*清屏函数*/
 void clearscreen()
{
	getchar();
	system("cls");
}
struct custom1
{
	char name[11];
	int booknum;/*订票量*/
	struct custom1 *next11;
};
struct custom2
{
	char name[11];
	int neednum;/*所需票量*/
	struct custom2 *next22;
};
struct airline
{
	char destination[10];/*终点站名*/
	char linenumber[11];/*航班号*/
	char airnum[10];/*飞机号*/
	char time[3];/*飞行周日(星期几)*/
	int totalnum;/*成员定额*/
	int extranum;/*余票量*/
	struct custom1 *next1;/*已订票的客户名单(包括姓名、订票量)*/
	struct custom2 *next2;/*等候替补的客户名单(包括姓名、所需票量)*/
}airline[MAX];
struct custom1 *tail;
struct custom2 *front,*rear;
/*所有数据存放在文件中*/
/*查询航线*/
/*根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票量*/
/*承办订票业务*/
/*根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余额,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求。若需要,可登记排队候补*/
/*承办退票业务*/
/*根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户*/

/*录入信息*/
int input_message()                           
{
	struct custom1 *p1;
	int i=0,j=0,k=0;
	do
	{
		clearscreen();
		printf("录入航线信息(最多%d个)\n",MAX);  /*各条航线之间呈线性关系*/
	    printf(" \n           第%d条航线",i+1);
		printf("\n            终点站名:");
		scanf("%s",airline[i].destination);
        printf("\n             航班号:");
        scanf("%s",airline[i].linenumber);
		printf("\n           飞机号:");
		scanf("%s",airline[i].airnum);
	    printf("\n          飞行周日(星期几):");
        scanf("%s",airline[i].time);
		printf("\n          成员定额:");
		scanf("%d",&airline[i].totalnum);
		printf("\n          余票量:");
        scanf("%d",&airline[i].extranum);
		airline[i].next1=NULL;
		airline[i].next2=NULL;
/*订票客户用线性表存储,链表实现*/
		    for(j=1;j<=num1;j++)
			{
				if(j==1)
                  airline[i].next1=tail=p1=(struct custom1 *)malloc(sizeof(struct custom1));
				else
					p1=(struct custom1 *)malloc(sizeof(struct custom1));
				printf("请输入订票客户姓名  订票量\n");
			    scanf("%s%d",p1->name,&p1->booknum);
				p1->next11=NULL;
				tail->next11=p1;
				tail=p1;
			}
/*等候替补客户之间用队列存储,链表实现*/
			front=rear=NULL;/*替补队列初始化*/
		/*	for(j=1;j<=num2;j++)
			{
				if(j==1)
				{
				    airline[i].next2=front=rear=p=(struct custom2 *)malloc(sizeof(struct custom2));
				    printf("请输入替补姓名  订票量\n");
				    scanf("%s%d",p->name,&p->neednum);
				    p->next22=NULL;
				}
				else
				{
                    p=(struct custom2 *)malloc(sizeof(struct custom2));
                    printf("请输入替补姓名  订票量\n");
				    scanf("%s%d",p->name,&p->neednum);
				    p->next22=NULL;
					rear->next22=p;
					rear=p;
				}
			} */      
		printf("\n");         /********一条航线信息输完后换行*********/ 
		i++;
        k++;
	  }while(i<MAX);
	  printf("\n          ---%d个航线信息输入完毕!--\n",i);
	  printf(" \n      按回车键返回主菜单!\n");
	  getchar();        /*接受回车*/
      sum=k+sum;
	  return i;
}
/*航线信息浏览*/
output_message()
{
	int i;
	struct custom1 *p1;
	struct custom2 *p2;
	clearscreen();
	printf("\n\n         ----航线信息----       \n\n");
    printf("终点站名-航班号-飞机号-星期几-成员定额-余票量\n");
    for(i=0;i<MAX;i++)
	{
		p1=airline[i].next1;
		p2=airline[i].next2;
	    printf("%-4s %-5s %6s %6s %10d %10d\n",airline[i].destination,airline[i].linenumber,airline[i].airnum,airline[i].time,airline[i].totalnum,airline[i].extranum);
        printf("已订票的客户名单:\n");
		while(p1!=NULL)
		{
			printf("%s,%d\n",p1->name,p1->booknum);
			p1=p1->next11;
		}
   		printf("\n");   
        printf("等候替补的客户名单:\n");
        while(p2!=NULL)
		{
			printf("%s,%d\n",p2->name,p2->neednum);
			p2=p2->next22;
		}
	    printf("\n");          
	 }
	return 0;
}
/*根据终点站名查询航线*/
void find_message()
{
	char findname[10];
	
	int i,j;
	printf("请输入要查询的终点站名:\n");
	scanf("%s",findname);
    for(i=0;i<sum;i++)
		  {
			
			if(strcmp(airline[i].destination,findname)==0)
			{  
				printf("\n                        --%s的信息--\n",airline[i].destination);
			    printf("终点站名-航班号-飞机号-星期几-余票量\n");
                printf("%-4s %-5s %6s %6s %10d",airline[i].destination,airline[i].linenumber,airline[i].airnum,airline[i].time,airline[i].extranum);
			}
			else 
				j++;
		  }
		if(j==sum)                       /*j用来控制查找范围*/
		    printf("\n\n          该航线不存在!");
}
/*承办订票业务*/
void book()
{
	char name[10],des[10];
    int ch;
	int number;
	int i,j;
	struct custom1 *p1;
	struct custom2 *p2;
	printf("请输入此人姓名 终点站名和票额数:\n");
	scanf("%s%s%d",name,des,&number);
    for(i=0;i<MAX;i++)
		{
		   if(strcmp(airline[i].destination,des)==0)
			{
			   if(airline[i].extranum>=number)
			   {
				   printf("可以办理此业务!\n");
				   airline[i].extranum-=number;
				   printf("座位号为:\n");
				   for(j=1;j<=number;j++)
					   printf("%-3d",airline[i].totalnum-airline[i].extranum+j);/*输出座位号*/
				   	p1=(struct custom1 *)malloc(sizeof(struct custom1));
					strcpy(p1->name,name);/*赋值*/
					p1->booknum=number;
					p1->next11=NULL;
					tail->next11=p1; /*入栈   将此人接在订票栈顶*/
					tail=p1;
			   }
	           else
			   {
				   printf("询问客户需求(1/2)\n");
				   
				   scanf("%d",&ch);
				  
				   switch(ch)
				   {
				     case 1:	 printf("需排队候补!\n");
						         
						         if(front==NULL) /*接在替补队列尾*/
								 {
                                    airline[i].next2=front=rear=p2=(struct custom2 *)malloc(sizeof(struct custom2));
				                    strcpy(p2->name,name);
						            p2->neednum=number;
						            p2->next22=NULL;
								 }
				                 else
								 {
                                     p2=(struct custom2 *)malloc(sizeof(struct custom2));
                                     strcpy(p2->name,name);
						             p2->neednum=number;
						             p2->next22=NULL;
					                 rear->next22=p2;
					                 rear=p2;
								 }
								 break;
						  
						  
						  
					  case 2:
						  printf("无法办理此业务!\n");
				   }
			   }
		   }
		}


}
/*退票*/
reticket()
{
	int i,z=0,k=0;
	struct custom1 *p1,*p2,*r;
	struct custom2 *q1,*q2;
	char rname[10],dest[10];
	printf("请输入要退票的人的姓名  终点站名!\n");
	scanf("%s %s",rname,dest);
	for(i=0;i<MAX;i++)
		if(strcmp(airline[i].destination,dest)==0)/*找到退票人的终点站名*/
		{
			p1=airline[i].next1;
			while(strcmp(p1->name,rname)!=0)/*找到此人姓名*/
			{
		       p2=p1;
		       p1=p1->next11;
			   z++;
			}
		       
            airline[i].extranum+=p1->booknum;/*余票量加*/
			if(z==0)
			{
				airline[i].next1=p1->next11;
			    free(p1);
			}
            else
			{
                p2->next11=p1->next11;/*将此节点从订票线性表中删除*/
			    free(p1);
				z=0;
			}
			  
	       q1=airline[i].next2;
	       while(airline[i].extranum<q1->neednum)
		   {
		     q2=q1;
		     q1=q1->next22;
			 k++;
		   }
           airline[i].extranum-=q1->neednum;/*余票量减*/
		     if(k==0)
			 {
                r=(struct custom1 *)malloc(sizeof(struct custom1));
			    strcpy(r->name,q1->name);
			    r->booknum=q1->neednum;
			    r->next11=NULL;
                airline[i].next2=q1->next22;
				free(q1);
			 }
			 else
			 {
                r=(struct custom1 *)malloc(sizeof(struct custom1));
			    strcpy(r->name,q1->name);
			    r->booknum=q1->neednum;
			    r->next11=NULL;
			    q2->next22=q1->next22;   /*从替补队列中删除*/
			    free(q2);
				z=0;
			 }
			  tail->next11=r;        /*接在订票线性表之后*/
			  tail=r;
		}
}

int main()
{
   int choice;
   do
   {
	   printf("\n\n\n  *****************************航线信息*************************\n\n");
	   printf("                              1.信息录入;\n\n");
	   printf("                              2.信息浏览;\n\n");
       printf("                              3.信息查询;\n\n");
	   printf("                              4.订票;\n\n");
	   printf("                              5.退票;\n\n");
       printf("                              0.退出系统.\n\n");
	   printf("                             请选择(0--5):");
       scanf("%d",&choice);
       switch(choice)
	   { 
           case 1: input_message();break;
           case 2: output_message();break;
           case 3: find_message();break;
           case 4: book();break;
	   case 5: reticket();break;
           case 0:{
                    getchar();
                    return 0; 
			        break;
				  }
	   }
	 }while(choice!=0);
     return 0;  
}



	

⌨️ 快捷键说明

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