📄 flightmanagement.txt
字号:
#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 + -