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 <iostream>
#include <malloc.h>
#include<ctime>
#include <string.h>
#include <stdio.h>
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<<"按照航班号、起点站、终点站、班期、起飞时间、到达时间、机型、票价,输入航班信息"<<endl;
    cin>>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<<"没有此选择!"<<endl;
    }
}

void s_welcome()
{
    cout<<"\n\n\n\t\t\t即将进入航班信息查询系统!";                     //准备开始
    double start;
    for (int i = 3; i >= 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进入倒计时:"<<i<<endl;            //倒计时
        }
        else
        {
            system("cls");                                        //系统中的函数,表示清屏
            admin_or_user();                                            //进入欢迎界面
        }

    }
}

/*
选择函数
*/
void hello_choose()
{
    char choice;   //读取用户选择
    char number[10];
    char num[10];
    char s_addr[10];
    char a_addr[10];
    char  date[10];
    char s_time[10];
    char a_time[10];
    cout<<"请输入您的选择: ";
    while(cin>>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<<"输出按航班号排序后的航班:"<<endl;
            Bubsort_number(L);
            show_info(L);//浏览所有航班信息
            cout<<"请输入您的选择: ";
            continue;
        }
        if('4' == choice)
        {
            cout<<"输出按起飞时间排序后的航班:"<<endl;
            Bubsort_statime(L);
            show_info(L);//浏览所有航班信息
            cout<<"请输入您的选择: ";
            continue;
        }
        if('5'==choice)
        {
            admin_or_user();
            cout<<"请输入您的选择: ";
            continue;
        }
        else
        {
            //输入错误提示并返回 欢迎界面
            cout<<"没有此选择.\n";
            if(define)
                admin_welcome();
            else
                user_welcome();
            cout<<"请输入您的选择: \n";
        }
    }
}

/*
main函数
*/
int main()
{
    init_N(&L);    //初始化链表
    open_file();   //打开文件
    Bubsort_number(L);//航班号排序
    s_welcome();     //进入欢迎界面
    hello_choose();      //进入选择界面
    return 0;
}

资源:

运行结果:




  • 20
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个简单的C++航班订票系统的实现,包括添加航班信息、查询航班信息、订票、修改航班信息和退票等功能: ```c++ #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; // 定义航班信息结构体 struct Flight { string flightNo; // 航班号 string departureCity; // 出发城市 string arrivalCity; // 到达城市 string departureTime; // 出发时间 string arrivalTime; // 到达时间 double price; // 票价 double discount; // 折扣 int tickets; // 票数 }; // 定义航班信息数组 vector<Flight> flights; // 添加航班信息 void addFlight() { Flight flight; cout << "请输入航班号:"; cin >> flight.flightNo; cout << "请输入出发城市:"; cin >> flight.departureCity; cout << "请输入到达城市:"; cin >> flight.arrivalCity; cout << "请输入出发时间:"; cin >> flight.departureTime; cout << "请输入到达时间:"; cin >> flight.arrivalTime; cout << "请输入票价:"; cin >> flight.price; cout << "请输入折扣:"; cin >> flight.discount; cout << "请输入票数:"; cin >> flight.tickets; flights.push_back(flight); cout << "添加成功!" << endl; } // 按照航班查询航班信息 void searchByFlightNo() { string flightNo; cout << "请输入航班号:"; cin >> flightNo; for (int i = 0; i < flights.size(); i++) { if (flights[i].flightNo == flightNo) { cout << "航班号:" << flights[i].flightNo << endl; cout << "出发城市:" << flights[i].departureCity << endl; cout << "到达城市:" << flights[i].arrivalCity << endl; cout << "出发时间:" << flights[i].departureTime << endl; cout << "到达时间:" << flights[i].arrivalTime << endl; cout << "票价:" << flights[i].price << endl; cout << "折扣:" << flights[i].discount << endl; cout << "票数:" << flights[i].tickets << endl; return; } } cout << "未找到航班信息!" << endl; } // 按照目的地查询航班信息 void searchByArrivalCity() { string arrivalCity; cout << "请输入目的地城市:"; cin >> arrivalCity; bool found = false; for (int i = 0; i < flights.size(); i++) { if (flights[i].arrivalCity == arrivalCity) { cout << "航班号:" << flights[i].flightNo << endl; cout << "出发城市:" << flights[i].departureCity << endl; cout << "到达城市:" << flights[i].arrivalCity << endl; cout << "出发时间:" << flights[i].departureTime << endl; cout << "到达时间:" << flights[i].arrivalTime << endl; cout << "票价:" << flights[i].price << endl; cout << "折扣:" << flights[i].discount << endl; cout << "票数:" << flights[i].tickets << endl; found = true; } } if (!found) { cout << "未找到航班信息!" << endl; } } // 订票 void bookTicket() { string flightNo; cout << "请输入航班号:"; cin >> flightNo; for (int i = 0; i < flights.size(); i++) { if (flights[i].flightNo == flightNo) { if (flights[i].tickets > 0) { flights[i].tickets--; cout << "订票成功!" << endl; } else { cout << "该航班已售罄!" << endl; } return; } } cout << "未找到航班信息!" << endl; } // 修改航班信息 void modifyFlight() { string flightNo; cout << "请输入需要修改的航班号:"; cin >> flightNo; for (int i = 0; i < flights.size(); i++) { if (flights[i].flightNo == flightNo) { cout << "请输入新的出发城市:"; cin >> flights[i].departureCity; cout << "请输入新的到达城市:"; cin >> flights[i].arrivalCity; cout << "请输入新的出发时间:"; cin >> flights[i].departureTime; cout << "请输入新的到达时间:"; cin >> flights[i].arrivalTime; cout << "请输入新的票价:"; cin >> flights[i].price; cout << "请输入新的折扣:"; cin >> flights[i].discount; cout << "请输入新的票数:"; cin >> flights[i].tickets; cout << "修改成功!" << endl; return; } } cout << "未找到航班信息!" << endl; } // 退票 void refundTicket() { string flightNo; cout << "请输入航班号:"; cin >> flightNo; for (int i = 0; i < flights.size(); i++) { if (flights[i].flightNo == flightNo) { flights[i].tickets++; cout << "退票成功!" << endl; return; } } cout << "未找到航班信息!" << endl; } int main() { while (true) { cout << "请选择功能:" << endl; cout << "1.添加航班信息" << endl; cout << "2.按照航班查询航班信息" << endl; cout << "3.按照目的地查询航班信息" << endl; cout << "4.订票" << endl; cout << "5.修改航班信息" << endl; cout << "6.退票" << endl; cout << "7.退出系统" << endl; int choice; cin >> choice; switch (choice) { case 1: addFlight(); break; case 2: searchByFlightNo(); break; case 3: searchByArrivalCity(); break; case 4: bookTicket(); break; case 5: modifyFlight(); break; case 6: refundTicket(); break; case 7: return 0; default: cout << "无效的选择!" << endl; break; } } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值