C++—航班查询系统

/********************************************
设计并实现一个航班信息查询和检索系统。
要求:对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
航班信息表的样式如下:
            航班号	起点站	终点站     班期	      起飞时间	  到达时间    机型	票价
            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<<"输出按航班号排序后的航班:"<

资源:

C++—航班查询系统_第1张图片

运行结果:

C++—航班查询系统_第2张图片


C++—航班查询系统_第3张图片


你可能感兴趣的:(数据结构)