航空售票系统

代码:

/*****************************************************  
* 版权所有(C)2016 
*文件名称:航空售票系统  
*文件标识:无  
*内容摘要:航空售票系统  
*其他说明:无  
*当前版本:V1.0  
*作者:房斐  
*完成日期:2015.12.30  
*****************************************************/ 

a.h

#ifndef BTREE_H_INCLUDED      
#define BTREE_H_INCLUDED    
#include<iostream>    
#include <windows.h>  
#include<fstream> //文件下的类和函数   
using namespace std;    
#include<stdlib.h>    
#include<string.h>  
void sleep1();  
void sleep2();  
/*****************************************************  
*功能描述:定义客户信息  
*输入参数:name,id,line_num,time1,time2,seat_num  
*输出参数:client 
******************************************************/    
typedef struct client    
{    
    char name[20];//顾客名    
    char id[10];//顾客证件号    
    char line_num[10];//航班号    
    char time1[10];//起飞时间    
    char time2[10];//降落时间    
    int seat_num;//座位号    
    struct client *next;//下一个结点    
} client;    
//头结点    
typedef struct clienthead    
{    
    int count;    
    client *next;    
} clienthead;    
/*****************************************************  
*功能描述:定义航班信息  
*输入参数:line_num,time1,time2,start_place,end_place,total,money.  
*输出参数:airline  
******************************************************/    
typedef struct airline    
{    
    char line_num[10];//航班号    
    char start_place[20];//起飞地    
    char end_place[20];//目的地    
    char time1[10];//起飞时间    
    char time2[10];//降落时间    
    int total;//座位总数    
    int left;//剩余座位  
    int money;//票价  
    struct airline *next;//下一个结点    
} airline;    
//头结点    
typedef struct airlinehead    
{    
    int count;    
    airline *next;    
} airlinehead;    
airlinehead* import(int n,airlinehead *pheadline);//录入航班函数: n为所要录入航班的数量:    
airline* query(airlinehead *phead );//查询航班情况    
void display_line(airline *node);//输出一个航班结点的所有信息到屏幕  
void display_all_line(airlinehead *headline); 输出所有航班结点的所有信息到屏幕  
void display_client(client *node);//输出一个客户节点的信息到屏幕。  
void display_all_client(clienthead *headclient);//输出所有客户信息到屏幕。。    
int bookticket(airlinehead * headline,clienthead *headclient);//订票    
int returnticket(airlinehead * headline,clienthead *headclient);//退票。   
#endif //BTREE_H_INCLUDED      

a.cpp

#include "a.h"  
#include <stdio.h>  
  
/*****************************************************  
*功能描述:录入航班函数  
*输入参数:line_num,start_place,end_place,time1,time2,total,left,money.  
*输出参数:第i+1个航班录入  
******************************************************/    
airlinehead* import(int n,airlinehead *pheadline)//录入航班函数: n为所要录入航班的数量:    
{    
    airline *temp = new airline;    
    temp->next=NULL;  //尾链表插入  
    pheadline->next=temp;    
    pheadline->count = n;  //航班数  
    for(int i=0; i<n; i++)    
    {    
        cout<<"请输入第"<<i+1<<"个航班的航班号 ";    
        cin>>temp->line_num;    
        cout<<"请输入第"<<i+1<<"个航班的起飞地 ";    
        cin>>temp->start_place;    
        cout<<"请输入第"<<i+1<<"个航班的目的地 ";    
        cin>>temp->end_place;    
        cout<<"请输入第"<<i+1<<"个航班的起飞时间";    
        cin>>temp->time1;    
        cout<<"请输入第"<<i+1<<"个航班的降落时间";    
        cin>>temp->time2;    
        cout<<"请输入第"<<i+1<<"个航班的座位总数 ";    
        cin>>temp->total;    
        cout<<"请输入第"<<i+1<<"个航班的票价 ";    
        cin>>temp->money;    
       
        temp->left=temp->total;  //剩余数初定义  
        cout<<"第"<<i+1<<"个航班成功录入。"<<endl;    
        if(i<n-1)    
        {    
            temp->next = new airline;    
            if(temp->next == NULL)    
            {    
                cout<<"分配内存失败"<<endl;    
                exit(1);    
            }    
            temp->next->next=NULL;    
            temp = temp->next;    
        }    
    }    
    return pheadline;    
}    
/*****************************************************  
*功能描述:查询航班功能  
*输入参数:select1,select2  
*输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数 ,票价 
*返回值:temp-成功,NULL-失败  
******************************************************/    
airline* query(airlinehead *phead )//查询航班情况    
{    
    airline *find=NULL;    
    airline *temp;    
    cout<<"**********************************"<<endl;    
    cout<<"* 1,按航班号查询航班情况。       *"<<endl;    
    cout<<"* 2,按起飞抵达城市查询航班情况。 *"<<endl;    
    cout<<"**********************************"<<endl;    
    cout<<"请选择:";    
    int select;    
    cin>>select;    
    cout<<endl;    
    switch(select)    
    {    
    case 1:    
    {    
        cout<<"请输入航班号:";    
        char line_num[10];    
        cin>>line_num;    
        temp = phead->next;    
        while(temp )    
        {    
            if(strcmp(temp->line_num,line_num) == 0)//输出航班信息    
            {    
                find= temp;    
                return temp;    
                break;    
            }    
            else  //向下继续搜索  
            {    
                temp = temp->next;    
            }    
        }    
        if(!temp)    
        {    
            cout<<"没有找到该航班的信息。"<<endl;    
            return NULL;    
        }    
        break;    
    }    
    case 2:    
    {    
        char start_place[20];//起飞地    
        char end_place[20];//目的地    
        cout<<"请输入起飞地址:";    
        cin>>start_place;    
        cout<<"请输入目的地:";    
        cin>>end_place;    
        temp=phead->next;    
        while(temp)    
        {    
            if(strcmp(temp->start_place,start_place)==0 &&    
                    strcmp(temp->end_place,end_place)==0)    
            {    
                find=temp;     
                break;    
            }    
            temp = temp->next;    
        }    
        if(!temp)    
        {    
            cout<<"没有找到该航班的信息。"<<endl;    
            return NULL;    
        }    
        break;    
    }    
    default:    
        cout<<"输入错误。"<<endl;    
        break;    
    }    
    return find;    
}    
/*****************************************************  
*功能描述:输出航班信息功能  
*输入参数:select1,select2  
*输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数 ,票价 
******************************************************/    
void display_line(airline *node)//输出一个航班结点的所有信息到屏幕    
{    
    if(node==NULL)    
    {    
        cout<<"参数为空!输出失败."<<endl;    
        return;    
    }    
    cout<<endl;    
   cout<<"航班号:"<<node->line_num<<endl;  
   cout<<"起飞地:"<<node->start_place<<endl;  
   cout<<"目的地:"<<node->end_place<<endl;  
   cout<<"起飞时间:"<<node->time1<<endl;  
   cout<<"降落时间:"<<node->time2<<endl;  
   cout<<"座位数:"<<node->total<<endl;  
   cout<<"剩余座位:"<<node->left<<endl;  
   cout<<"票价:"<<node->money<<endl;  
}    
/******************************************************  
*功能描述:输出所有的航班信息到屏幕  
*输入参数:无  
*输出参数:headline  
*******************************************************/    
void display_all_line(airlinehead *headline)    
{    
    cout<<endl;    
    airline *node;  //初定义node  
    node = headline->next;    
    if(!node)    
    {    
        cout<<"当前没有航班信息"<<endl;    
        return ;    
    }    
    cout<<"航班数目: "<<headline->count<<endl;    
    while(node)    
    {    
        display_line(node); //调用单个航班信息输出函数   
        node=node->next;    
    }    
}    
  
/*****************************************************  
*功能描述:输出一个客户信息到屏幕  
*输入参数:无  
*输出参数:姓名,证件号码,座号,航班号。 
******************************************************/    
void display_client(client *node)//输出一个客户节点的信息到屏幕。    
{       
    if(node==NULL)    
    {    
        cout<<"参数为空!输出失败。"<<endl;    
        return;    
    }    
    cout<<endl;    
    cout<<"姓名:"<<node->name<<endl;  
    cout<<"证件号码:"<<node->id<<endl;  
    cout<<"座号:"<<node->seat_num<<endl;  
    cout<<"航班号:"<<node->line_num<<endl;  
  
}    
/*****************************************************  
*功能描述:输出全部客户信息到屏幕  
*输入参数:无  
*输出参数:姓名,证件号码,座号,航班号。 
******************************************************/    
void display_all_client(clienthead *headclient)//打印所有客户信息到屏幕。。    
{    
    client *node=headclient->next;    
    if(!node)    
    {    
        cout<<"当前没有客户信息。"<<endl;    
        return ;    
    }    
    while(node)    
    {    
        display_client(node);  //调用单个客户信息输出  
        node=node->next;    
    }    
}    
  
/*****************************************************  
*功能描述:订票  
*输入参数:line_num,id  
*输出参数:  
*返回值:1-正确,0-错误  
******************************************************/    
int bookticket(airlinehead * headline,clienthead *headclient)//订票    
{    
    cout<<"请输入航班号: ";//检测目标航班是否有余票    
    char line_num[10] ;    
    cin>>line_num;    
    int num;  
    airline *temp;    
    temp=headline->next;   
    while(temp)    
    {    
        if(strcmp(temp->line_num,line_num)==0)    
        {    
  
            break;    
        }    
        temp=temp->next;    
    }    
    if(!temp)    
    {    
        cout<<"未找到该航班"<<endl;    
        return 0;    
    }    
    if(temp->left==0)    
    {    
        cout<<"对不起,该航班票已经售完。"<<endl;    
        cout<<"请选择其他合适的航班."<<endl;    
    }    
 if(temp!=NULL && temp->left!=0)  
 {    
    client *custom=new client;    
    cout<<"请输入你的证件号码: ";    
    cin>>custom->id;    
    cout<<"请输入你的姓名:";    
    cin>>custom->name;    
    cout<<endl;  
    for(int i=1;i<=temp->total;i++)//每个人从第一个位置开始寻找,找到位置没人输出  
    {   
        client *client1;    
        client1=headclient->next;   
        if(headclient->count==0)   //第一次执行,航班没人时执行,输出第一个位置。       
        {  
            num=i;  
            break;  
        }  
        while(client1) //  
        {  
            if(client1->seat_num==i)//位置有人  
            break;//跳出for循环  
                    client1=client1->next;//没人时指向下一个客户  
        }    
             if(!client1)  //没有冲突,没有人占位,输出位置。                        
             {        
                 num=i;  //位置赋值                                  
                 break;    
             }    
               
               
             //     冲突时执行下一个i    
             //     没冲突时执行下一个client(该次的i直至执行到最后一个client时没冲突 num=i  直接退出  )  
                                                                       //最后一个之前有冲突 从头开始 执行下一个i  
      
    }  
      
    custom->seat_num=num; //座位号按购票顺序排序  
    strcpy(custom->line_num,line_num);  //保存客户航班号  
    custom->next=NULL;   
    temp->left--;//余票-1    
    headclient->count++;  //客户+1  
    custom->next = headclient->next;//头插法增加客户    
    headclient->next = custom;    
    cout<<"订票成功!祝您旅途愉快~~";    
    cout<<endl;  
    return 1;  
}  
}    
/*****************************************************  
*功能描述:退票  
*输入参数:id  
*输出参数:  
*返回值:1-正确,0-错误  
******************************************************/    
int returnticket(airlinehead * headline,clienthead *headclient)//退票。    
{    
    cout<<"请输入顾客的证件号码:id: ";    
    char id[10];    
    cin>>id;    
    airline *airlinetemp= headline->next;    
    client *clienttemp= headclient->next;    
    if(NULL==airlinetemp)    
    {    
        cout<<"当前没有客户信息。"<<endl;    
        return 0;    
    }    
    char line_num[10];    
    client *delnext ;    
    if(strcmp(clienttemp->id,id)==0)//要删除的节点为第一个时。。。    
    {    
        strcpy(line_num,clienttemp->line_num);    
        headclient->next=clienttemp->next;//删除节点的下一个连上headclient下一位    
        delete clienttemp;    
        while(airlinetemp)//修改对票客户所对应的航班的售票信息。    
        {    
            if(strcmp(line_num,airlinetemp->line_num)== 0 )    
            {    
                airlinetemp->left++;    
                break;    
            }    
            airlinetemp = airlinetemp->next;    
        }    
        cout<<"退票成功!希望有机会与您继续合作。";    
        cout<<endl;  
        return 1;    
    }    
    while(clienttemp->next)//要删除 的节点不是第一个时。。。    
    {    
        if(strcmp(clienttemp->next->id,id)==0)    
        {    
            strcpy(line_num,clienttemp->next->line_num);    
            delnext = clienttemp->next->next;//定义为删除节点的下一个    
            delete clienttemp->next;  //删除  
            clienttemp->next=delnext;  //链接  
            while(airlinetemp)//修改对票客户所对应的航班的售票信息。    
            {    
                if(strcmp(line_num,airlinetemp->line_num)== 0 )    
                {    
                    airlinetemp->left++;    
                    break;    
                }    
                airlinetemp = airlinetemp->next;    
            }    
            cout<<"退票成功!有机会继续合作。"<<endl<<endl;    
            return 1;    
            break;    
        }    
        clienttemp = clienttemp->next;    
    }    
    cout<<"未找到该客户的信息。"<<endl;    
    return 0;    
}


main.cpp

#include "a.h"  
#include <stdio.h>  
//主函数    
void main_menu()    
{   system("color 0B");  
    cout<<"******************** 欢迎使用飞机售票系统************************"<<endl<<endl;    
    cout<<"** 1---- 录入航班信息。"<<endl<<endl;    
    cout<<"** 2---- 查询航线信息。"<<endl<<endl;    
    cout<<"** 3---- 客户订票。"<<endl<<endl;    
    cout<<"** 4---- 客户退票。"<<endl<<endl;    
    cout<<"** 5---- 输出所有航班信息。"<<endl<<endl;    
    cout<<"** 6---- 输出所有顾客信息。"<<endl<<endl;    
    cout<<"** 0---- 退出系统 。"<<endl<<endl;    
    cout<<"****************************************************************"<<endl<<endl;    
}    
  
void main()    
{    
    printf("                               *************                      \n");  
    printf("                              *   *     *   *                     \n");  
    printf("                             *    *     *    *                    \n");  
    printf("                            *  ************** *                   \n");  
    printf("                            *     *     *     *                   \n");  
    printf("                            *     *******     *                   \n");  
    printf("                             *    *     *    *                    \n");  
    printf("                              *   *******   *                     \n");  
    printf("                               *************                      \n");  
        printf("         \n\n\n                              正在加载  ING~~~           \n\n\n");  
    sleep1();  
    airlinehead *headline=new airlinehead;    
    headline->count=0;  //航班数初始化  
    headline->next=NULL;    
    clienthead *headclient=new clienthead;    
    headclient->count=0;  //客户数初始化  
    headclient->next=NULL;    
    while(1)    
    {    
        main_menu();    
        int n;    
        cout<<"请选择您要进行的操作: ";    
        cin>>n;    
        cout<<endl;    
        switch(n)    
        {    
        case 1:    
            int num;    
            cout<<"请选择您要录入的航班的数目: ";    
            cin>>num;    
            cout<<endl;    
            import(num,headline);    
            cout<<endl;    
            cout<<"航班信息成功录入。。";    
            cout<<endl<<endl;  
            sleep1();  
            break;    
  
        case 2:    
            airline *find;    
            find=query(headline);    
            if(find)    
            {    
                display_line(find);    
            }    
            sleep2();  
 break;    
        case 3:    
            bookticket( headline,headclient);    
            sleep1();  
            break;    
        case 4:    
            returnticket(headline,headclient);    
            sleep1();  
            break;    
        case 5:    
            display_all_line(headline);    
            sleep2();  
            break;    
        case 6:    
            display_all_client(headclient);    
            sleep2();  
            break;    
        case 0:    
            exit(1);    
            break;    
        }    
    }    
}    
void sleep1()  
{  
for(int j=0;j<70;j++)  
    {  
        Sleep(20);  
        printf(">");  
    }  
 system("cls");  
}  
void sleep2()  
{  
for(int j=0;j<70;j++)  
    {  
        Sleep(40);  
        printf(">");  
    }  
 system("cls");  
}


操作页面

录入信息

安航班号查询航班信息

按起始地目的地查询航班信息

订票



查询航班信息

查询客户信息

退票


 

猜你喜欢

转载自blog.csdn.net/qq_35254240/article/details/53953888
今日推荐