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

📄 flightmanagement.txt

📁 基本实现航班管理系统功能
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0

struct Address                   /*定义结构体*/
{
	char Airline[20];             /*航向名称*/
	char  Number[20];             /*航班号*/
	long int Date;                /*航班日期*/
    int Plane;                    /*机型*/
	char Company[20];             /*所属公司*/
	struct Address *next;
};
 
int n=0;                                  /*定义一个全局变量 n*/
 
/****************添加记录函数*******************/

struct Address * creat(struct Address *head)        /*定义函数。创建并判断链表是否已经存在,然后添加记录*/
{
	struct Address *p1,*p2;
	if(head==NULL)                          /*判断链表是否存在*/
	{
		p1=p2=(struct Address *)malloc(sizeof(struct Address));/*链表不存在,开辟一个新单元*/
		scanf("%s%s%ld%d%s",p1->Airline,p1->Number,&p1->Date,&p1->Plane,p1->Company);/*录入信息*/
		while(p1->Date!=0)                     /*若输入值是0,则链表创建结束*/
		{
			n=n+1;
			if(n==1)head=p1;                    /*只有一条记录时*/
			else p2->next=p1;
			p2=p1;
			p1=(struct Address *)malloc(sizeof(struct Address));  /*新开辟一个结点*/
			scanf("%s%s%ld%d%s",p1->Airline,p1->Number,&p1->Date,&p1->Plane,p1->Company);
		}
		p2->next=NULL;        /*结束链表*/
	}
	else                     /*添加记录*/
	{
		p1=head;
		while(p1)            /*寻找原链表最后结点*/
		{
			p2=p1;
			p1=p1->next;                  
		}
		p1=(struct Address *)malloc(sizeof(struct Address));  /*新开辟一个结点*/
		scanf("%s%s%ld%d%s",p1->Airline,p1->Number,&p1->Date,&p1->Plane,p1->Company);
		while(p1->Date!=0)                     /*输入信息结束标志*/
		{
			n=n+1;                               
			p2->next=p1;                        /*将链表链接*/
			p2=p1;
			p1=(struct Address *)malloc(sizeof(struct Address));
			scanf("%s%s%ld%d%s",p1->Airline,p1->Number,&p1->Date,&p1->Plane,p1->Company);
		}
		p2->next=NULL;
	}
	return(head);                   /*返回头指针*/
}

/*******************显示记录函数***********************/

void print(struct Address *head)         /*定义输出函数*/
{
	struct Address *p;
	printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
	p=head;                               /*指针赋值*/
	if(head!=NULL)                        /*输出整个链表*/
		do
		{
			printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			p=p->next;
		}while(p!=NULL);                    /*判断链表结束标志*/
	printf("\n");
}

void menu1()               /*定义查询菜单函数*/      
{
	printf("\n\t\t     ~~~~~~~~~~~~~~~~~~~\n");
	printf("\t\t\t欢迎您来查询!\n");
    printf("\t\t     ~~~~~~~~~~~~~~~~~~~\n");
	printf("查询菜单:\n\n");
	printf("1.航线\n");
	printf("2.航班号\n");
	printf("3.航班日期\n");
	printf("4.机型\n");
	printf("5.所属公司\n");
	printf("6.返回主菜单\n\n");
    printf("请选择您需要查询的类别<1~6>:\n");
}

/******************分类查询记录函数**********************/

void inqurement(struct Address *head)              /*定义查找函数*/
{                                   /*判断标志*/
	int c,flag;

	struct Address *p;
start:                                         /*位置标志*/
	menu1();
repeat3:
	scanf("%d",&c); 
	if(c<1 || c>6)
	{
		printf("输入有误!请重输:\n");
		goto repeat3;
	}
	switch(c)                                       
	{
	case(1):                                       /*实现输入航线所有信息的查询*/
		p=head;	
		char inqureline[20];
        flag=0; 
	    system("cls");                         /*清屏*/
	    printf("请输入您需要查询的航线:\n");
	   scanf("%s",inqureline);
	   while(p)
	   {
		   if(strcmp(inqureline,p->Airline)==0)       /*判断信息*/
		   {
			   if(flag==0)                            
			   {
				   flag=1;                              /*定义标志*/                    
				   system("cls");
				   printf("您所需的航班信息为:\n\n");
				   printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
				   printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			   } 
				else
		    	   printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			}
					p=p->next;       /*p后移一个结点*/
	   }
		if(flag==0)     
		{
			printf("\n对不起,没有您所需要的航班信息!\n");
			p=head;                                            /*使指针重新回到链表头*/
		}
		getchar();               /*此语句用来接收在执行scanf语句时最后输入的回车符*/
		printf("\n按回车键返回查询菜单!\n");
		getchar();
		system("cls");
		goto start;                           /*返回页面*/
		break;
	case(2):                                        /*实现对输入航班号的所有信息查询*/
		char inqurenumber[20];
		p=head;flag=0; 
		system("cls");
		printf("请输入您需要查询的航班号:\n\n");
		scanf("%s",inqurenumber);
		while(p)
		{		
			if(strcmp(inqurenumber,p->Number)==0)
			{
				if(flag==0)
				{
					flag=1;
					system("cls");
					printf("您所需的航班信息为:\n");
					printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
					printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
				}
				else
					printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			}
			p=p->next;
		}

		if(flag==0) 
			printf("\n对不起,没有您所需要的航班信息!\n");	
		getchar();
		printf("\n按回车键返回查询菜单!\n");
        getchar();
		system("cls");
		goto start;
		break;
	case(3):                            /*实现对输入航班日期所有信息查询*/
		long int inquredate;
		p=head;flag=0; 
		system("cls");
		printf("请输入您需要查询的航班日期:\n\n");
		scanf("%ld",&inquredate);
		while(p)
			{
				if(inquredate==p->Date)
				{
					if(flag==0)
				    {
						flag=1;
						system("cls");
					    printf("您所需的航班信息为:\n\n");
				        printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
				        printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
				    } 
				    else
					    printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			    }
					p=p->next;
			}
			if(flag==0) 
				printf("\n对不起,没有您所需要的航班信息!\n");
		getchar();
		printf("\n--按回车键返回查询菜单!~\n");
        getchar();
		system("cls");
		goto start;
		break;
		break;
	case(4):                                  /*实现对输入机型所有信息查询*/ 
	    int inqureplane;
		p=head;flag=0; 
		system("cls");
		printf("请输入您需要查询的机型:\n\n");
		scanf("%ld",&inqureplane);
		while(p)
			{
				if(inqureplane==p->Plane)
				{
					if(flag==0)
				    {
						flag=1;
						system("cls");
					    printf("您所需的航班信息为:\n\n");
				        printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
				        printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
				    } 
				    else
					    printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			    }
					p=p->next;
			}
			if(flag==0) 
				printf("\n对不起,没有您所需要的航班信息!\n");
		getchar();
		printf("\n按回车键返回查询菜单!\n");
        getchar();
		system("cls");
		goto start;
		break;
		break;		
	case(5):                        /*实现对输入公司名称所有信息查询*/
		char inqurecompany[20];
		p=head;flag=0; 
		system("cls");
		printf("请输入您需要查询的公司名称:\n\n");
		scanf("%s",inqurecompany);
		while(p)
			{
				if(strcmp(inqurecompany,p->Company)==0)
				{
					if(flag==0)
				    {
						flag=1;
						system("cls");
					    printf("您所需的航班信息为:\n\n");
				        printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
				        printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
				    } 
				    else
					    printf("%s\t%s\t%ld\t%d\t%s\n",p->Airline,p->Number,p->Date,p->Plane,p->Company);
			    }
					p=p->next;
			}
		if(flag==0) 
			printf("\n对不起,没有您所需要的航班信息!\n");
		getchar();
		printf("\n按回车键返回查询菜单!\n");
        getchar();
		system("cls");
		goto start;
		break;
	case(6):break;              /*退出函数*/
	}
}

/*******************航班号排序函数*********************/

struct Address *list(struct Address *head)      /*定义排序函数*/ 
{                                               /*选择法排序。bfp1为p1前一地址,bfmin为min前一地址。*/
	struct Address *p1=NULL,*p2=NULL;
	struct Address *bfp1=NULL,*min=NULL,*bfmin=NULL;   /*定义结构体指针变量*/
	p1=head;
	while(p1->next)                 /*判断链尾*/
	{
		min=p2=p1;
		while(p2->next)                /*判断链尾*/
		{
			if(strcmp(min->Number,p2->next->Number)>0)
			{
				bfmin=p2;
				min=p2->next;
			}
			p2=p2->next;                  /*下移*/
		}
		if(min!=p1)                    /*成立则修改链表*/
		{
			bfmin->next=min->next;        /*删除节点*/
			min->next=p1;                 /*插入节点*/
			if(p1==head) head=min;
			else 
				bfp1->next=min;               /*建立连接*/
			bfp1=min;
		}
		else
		{
			bfp1=p1;
			p1=p1->next;/*下移*/
		}
	}
	return(head);
} 

struct Address *dele(struct Address * head)  /*创建删除记录函数,返回链表表头*/ 
{
	struct Address *p1,*p2;
	p1=head;
	int a,b,c;
	char line[20];
	if(head==NULL)                        /*系统信息有无判断*/ 
	{
		system("cls");
		printf("\n对不起,系统中暂时没有可删除的信息!\n");
	}
	else                                     /*系统存在记录,进入删除程序*/ 
	{
		system("cls");
		int i;
		printf("*您需要:\n\n");
	    printf("1.逐条删除\n");          
	    printf("2.全部删除\n");
	    printf("\n~请选择1~2:\n");
back:
	    scanf("%d",&i);
		if(i<1||i>2)
		{
			printf("输入有误!请重输:\n");                 /*输入正误判断*/
			goto back;
		}
	    switch(i)
		{  
		case(1):
repeat:
			printf("请输入您要删除的航线名称:\n");      /*实现逐条删除*/ 
			printf("如:bjsh\n");
			scanf("%s",line);
			while(strcmp(line,p1->Airline)!=0&&p1->next!=0)         /*寻找需要查找的结点*/
			{
				p2=p1;p1=p1->next;
		    }
			if(strcmp(line,p1->Airline)==0)     /*判断信息是否找到*/
		    {
				system("cls");
				printf("您要删除的信息为:\n");
				printf("航线\t航号班\t航班日期\t机型\t所属公司\n\n");
				printf("%s\t%s\t%ld\t%d\t%s\n",p1->Airline,p1->Number,p1->Date,
					p1->Plane,p1->Company);
				printf("请选择:\n1.确认\t2.取消\n\n");
repeat1:
				scanf("%d",&a);
				if(a<1||a>2)
				{
					printf("输入有误!请重输:\n");                 /*输入正误判断*/
					goto repeat1;
				}
				switch(a)
				{
				case(1):
					{
						if(p1==head)                        /*删除头结点*/
							head=p1->next;        
					    else
						    p2->next=p1->next;
						system("cls");
						printf("*****删除航线%s成功!\n",line);
					    n=n-1;
					    break;
					}
				case(2):	break;
				}
		     }
			else
			{
				system("cls");
				printf("对不起,系统中没有您要找的%s \n",line);
				printf("\n请选择:\n1.重输2.返回\n\n");

⌨️ 快捷键说明

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