/********************************************
设计并实现一个航班信息查询和检索系统。
要求:对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
航班信息表的样式如下:
航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价
CA1544 合肥 北京 1.2.4.5 10:55 12:40 733 960
MU5341 上海 广州 每日 14:20 16:15 M90 1280
CZ3869 重庆 深圳 2.4.6 08:55 10:35 733 1010
其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号,例如:CA1544,CA表示航空公司的名称,1544为航班编号。
**********************************************/
#include
#include
#include
#include
#include
using namespace std;
typedef struct //定义航班信息结构体类型
{
char number[10]; //航班号
char staddress[10]; //起始站
char arraddress[10]; //终点站
char DATE[10]; //班期
char stime[10]; //起飞时间
char atime[10]; //到达时间
char TYPE[4]; //机型
int value; //票价
} Data_type;
typedef struct node //定义存储航班信息结构体链表
{
Data_type *info;
struct node *next;
} Node_list;
Node_list *L; //定义存储链表
Data_type *E; //定义航班信息结构体
/*
用于存储链表的初始化
*/
bool init_N(Node_list **L)
{
(*L)=(Node_list *)malloc(sizeof(Node_list));
if( (*L)!=NULL )
{
(*L)->next=NULL;
return true;
}
else
{
cout<<"malloc failed!\n";
return false;
}
}
/*
航班信息结构体的初始化
*/
bool init_D(Data_type **E)
{
(*E)=(Data_type *)malloc(sizeof(Data_type));
if((*E)!=NULL)
return true;
else
{
cout<<"malloc failed!\n";
return false;
}
}
/*
插入链表存储
*/
bool save_insert(Node_list *L,Data_type *E)
{
Node_list *new_node; //定义一个链表节点
init_N(&new_node); //初始化链表
new_node->info=E; //给节点元素赋值
while(L->next != NULL)
L=L->next;
L->next=new_node; //将其插入到链表中
return true;
}
/*
根据航班号排序
*/
void Bubsort_number(Node_list *L)
{
Node_list *p,*q;
Data_type *tmp;
for(p=L->next; p != NULL; p=p->next)
for(q=p->next; q != NULL; q=q->next )
{
if(strcmp(p->info->number,q->info->number) > 0)
{
tmp=p->info;
p->info=q->info;
q->info=tmp;
}
}
}
/*
根据起飞时间排序(用于按航班日期查询显示函数)
*/
void Bubsort_statime(Node_list *L)
{
Node_list *p,*q;
Data_type *tmp;
for(p=L->next; p != NULL; p=p->next)
for(q=p->next; q != NULL; q=q->next )
{
if(strcmp(p->info->stime,q->info->stime) > 0)
{
tmp=p->info;
p->info=q->info;
q->info=tmp;
}
}
}
void show_one(Node_list *L) //封转打印函数,固定打印格式
{
printf("%-9s%-10s--> %-11s%-12s%-6s%-9s%-9s%-8d\n", L->info->number,L->info->staddress,L->info->arraddress,L->info->DATE,L->info->TYPE,L->info->stime,L->info->atime,L->info->value);
}
/*
显示当前链表的所有信息
*/
void show_info(Node_list *L)
{
cout<<"航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n";
while(L->next != NULL)
{
L=L->next;
show_one(L);
}
}
/*
根据航班号进行查找,并显示:
从链表第一个节点进行查找,如果表中节点的number等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_number(Node_list *L, char num[] )
{
L=L->next;
int flag=0;
while(L != NULL)
{
if(strcmp(num,L->info->number) == 0)
{
show_one(L);
flag=1;
break;
}
L=L->next;
}
if( flag == 0)
cout<<"对不起!没有此航班!\n";
}
/*
根据起飞地点查找,并显示:
从链表第一个节点进行查找,如果表中节点的staddress等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_staddress(Node_list *L,char s[])
{
int flag=0;
L=L->next;
while(L != NULL)
{
if(strcmp(s,L->info->staddress) == 0)
{
show_one(L);
flag=1;
}
L=L->next;
}
if(flag == 0)
cout<<"对不起!没有此航班!\n";
}
/*
根据降落地点查找,并显示:
从链表第一个节点进行查找,如果表中节点的arraddress等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_araddress(Node_list *L,char a[])
{
int flag=0;
L=L->next;
while(L != NULL)
{
if(strcmp(a,L->info->arraddress) ==0)
{
show_one(L);
flag=1;
}
L=L->next;
}
if( flag == 0 )
cout<<"对不起!没有此航班!\n";
}
/*
根据航班日期查找,并显示:
从链表第一个节点进行查找,如果表中节点的DATE等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_data(Node_list *L,char d[])
{
Node_list *N;
init_N(&N);
L=L->next;
int flag = 0;
while(L != NULL)
{
if(strcmp(d,L->info->DATE) == 0)
{
show_one(L);
flag=1;
}
L=L->next;
}
if(flag == 0)
cout<<"对不起!没有此航班!\n";
}
/*
根据起飞时间查找,并显示:
从链表第一个节点进行查找,如果表中节点的stime等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_stime(Node_list *L,char sd[])
{
Node_list *N;
init_N(&N);
L=L->next;
int flag = 0;
while(L != NULL)
{
if(strcmp(sd,L->info->stime) == 0)
{
show_one(L);
flag=1;
}
L=L->next;
}
if(flag == 0)
cout<<"对不起!没有此航班!\n";
}
/*
根据到达时间查找,并显示:
从链表第一个节点进行查找,如果表中节点的atime等于用户输入,则输出此航班信息;否则,继续查找下一个节点,直到链表结束。
*/
void inquire_by_atime(Node_list *L,char ad[])
{
Node_list *N;
init_N(&N);
L=L->next;
int flag = 0;
while(L != NULL)
{
if(strcmp(ad,L->info->atime) == 0)
{
save_insert(N,L->info);
flag=1;
}
L=L->next;
}
if(flag == 0)
cout<<"对不起!没有此航班!\n";
}
/*
删除所选航班号
*/
void delete_by(Node_list *L,char d[])
{
Node_list *p,*q;
p=q=L;
while(p!=NULL)
{
if(strcmp(d,p->info->number)==0)
{
if(L==p)
L=p->next;
else
q->next=p->next;
free(p);
break;
}
else
{
q=p;
p=p->next;
}
}
if(p==NULL)
printf("\n\t 查无此航班 \n");
}
void inseart_by(Node_list *L)
{
E=(Data_type *)malloc(sizeof(Data_type));
cout<<"按照航班号、起点站、终点站、班期、起飞时间、到达时间、机型、票价,输入航班信息"<>E->number>>E->arraddress>>E->staddress>>E->DATE>>E->stime>>E->atime>>E->TYPE>>E->value;
save_insert(L,E);
}
/*
文件导入链表
*/
void open_file()
{
FILE *fp;//文件指针
fp=fopen("flight_input.txt","r");
E=(Data_type *)malloc(sizeof(Data_type));
while(8 ==fscanf(fp,"%s %s %s %s %s %s %s %d",&E->number,E->staddress,E->arraddress,E->DATE,E->TYPE,E->stime,E->atime,&E->value))//读取文件内容,对应结构体各元素
{
save_insert(L,E);//将其放入链表存储
E=(Data_type *)malloc(sizeof(Data_type));//开辟结构体指针
}
}
/*
欢迎界面
*/
void user_welcome()
{
cout<<"*************************************\n";
cout<<"$ 航班信息查询和检索系统 $\n";
cout<<"-------------------------------------\n";
cout<<"$ 请选择查询方式 : $\n";
cout<<"$ A:所 有 航 班 $\n";
cout<<"$ B: 航 班 号 $\n";
cout<<"$ C: 起 点 站 $\n";
cout<<"$ D: 终 点 站 $\n";
cout<<"$ E: 班 期 $\n";
cout<<"$ F:起 飞 时 间 $\n";
cout<<"$ G:到 达 时 间 $\n";
cout<<"$ H:退 出 系 统 $\n";
cout<<"-------------------------------------\n";
}
/*
业务员登录系统界面
*/
void admin_welcome()
{
cout<<"-------------------------------------\n";
cout<<"$ 请输入操作项目 : $\n";
cout<<"$ 1:插 入 航 班 $\n";
cout<<"$ 2:删 除 航 班 $\n";
cout<<"$ 3:按航班号排序 $\n";
cout<<"$ 4:按起飞时间排序 $\n";
cout<<"$ 5:管理员退出 $\n";
user_welcome();
}
int define;
/*
选择管理员或者用户登录
*/
void admin_or_user()
{
int ch;
cout<<"-------------------------------------\n";
cout<<"$ 请选择登录方式: $\n";
cout<<"$ 1.业务员登录 $\n";
cout<<"$ 2. 用户登录 $\n";
cout<<"-------------------------------------\n";
cout<<"请输入您的选择:";
cin>>ch;
switch (ch)
{
case 1:
{
admin_welcome();
define=1;
break;
}
case 2:
{
define=0;
user_welcome();
break;
}
default:
cout<<"没有此选择!"<= 0; i--)
{
//clock()是C/C++中的计时函数,以毫秒为单位,除以CLOCKS_PER_SEC转化为秒
start = (double)clock() / CLOCKS_PER_SEC; //得到程序目前为止运行的时间
while ((double)clock() / CLOCKS_PER_SEC - start <= 1); //现在已运行时间-开始时的时间即时间差,表示经过1秒之后
if (i > 0)
{
system("cls"); //系统中的函数,表示清屏
cout<<"\n\n\n\t\t\t\t进入倒计时:"<>choice)
{
if('A' == choice)
{
show_info(L);//浏览所有航班信息
cout<<"请输入您的选择: ";
continue;
}
if('B' == choice)
{
cout<<"请输入航班号:";
cin>>num;
inquire_by_number(L,num);//根据航班号查找
cout<<"请输入您的选择: ";
continue;
}
if('C' == choice)
{
cout<<"请输入起飞地点:";
cin>>s_addr;
inquire_by_staddress(L,s_addr);//根据起飞地点查找
cout<<"请输入您的选择: ";
continue;
}
if('D' == choice)
{
cout<<"请输入到达地点:";
cin>>a_addr;
inquire_by_araddress(L,a_addr);//根据降落地点查找并显示
cout<<"请输入您的选择: ";
continue;
}
if('E' == choice)
{
cout<<"请输入航班日期:";
cin>>date;
inquire_by_data(L,date);//根据航班日期浏览,并根据起飞时间排序
cout<<"请输入您的选择: ";
continue;
}
if('F' == choice)
{
cout<<"请输入起飞时间:";
cin>>date;
inquire_by_stime(L,date);//根据航班日期浏览,并根据起飞时间排序
cout<<"请输入您的选择: ";
continue;
}
if('G' == choice)
{
cout<<"请输入到达时间:";
cin>>date;
inquire_by_atime(L,date);//根据航班日期浏览,并根据起飞时间排序
cout<<"请输入您的选择: ";
continue;
}
if('H' == choice)
{
cout<<"再见!!\n";
exit(1);//退出系统
}
if('1' == choice)
{
inseart_by(L);
cout<<"请输入您的选择: ";
continue;
}
if('2' == choice)
{
cout<<"输入所要删除的航班号:";
cin>>number;
delete_by(L,number);
cout<<"请输入您的选择: ";
continue;
}
if('3' == choice)
{
cout<<"输出按航班号排序后的航班:"<
资源:
运行结果: