Advertisement

数据结构课程设计之航空订票系统

阅读量:
复制代码
 /***************************************************** * 版权所有(C)2015,马笑媛
    
 * *文件名称:A.C   航空售票系统
    
 *文件标识:无
    
 *内容摘要:航空售票系统
    
 *其他说明:无
    
 *当前版本:V1.0
    
 *作者:马笑媛
    
 *完成日期:2015.12.25
    
 * ******************************************************/
    
 #include<iostream>
    
 #include<fstream>
    
 using namespace std;
    
 #include<stdlib.h>
    
 #include<string.h>
    
 /***************************************************** *功能描述:定义客户信息
    
 *输入参数:name,id,line_num,time1,time2,seat_num
    
 *输出参数:client
    
         txt文件
    
 ******************************************************/
    
 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,seat_num,start_place,end_place,total
    
 *输出参数:airline
    
         txt
    
 ******************************************************/
    
 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;//剩余座位
    
     struct airline *next;//下一个结点
    
 } airline;
    
 //头结点
    
 typedef struct airlinehead
    
 {
    
     int count;
    
     airline *next;
    
 } airlinehead;
    
 /***************************************************** *功能描述:录入航班函数
    
 *输入参数:line_num,start_place,end_place,time1,time2,total,left
    
 *输出参数:第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<<"本航班的剩余座位数:"<<left<<endl;
    
     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;
    
 }
    
 /***************************************************** *功能描述:查询航班功能
    
 *输入参数:select,1,2
    
 *输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数
    
 *返回值: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;
    
 //display_line(find);
    
             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;
    
 //airline *temp;
    
     temp=phead->next;
    
     while(temp)
    
     {
    
         if(strcmp(temp->start_place,start_place)==0 &&
    
                 strcmp(temp->end_place,end_place)==0)
    
         {
    
             find=temp;
    
 //return temp;
    
             break;
    
         }
    
         temp = temp->next;
    
     }
    
     if(!temp)
    
     {
    
         cout<<"没有找到该航班的信息。"<<endl;
    
         return NULL;
    
     }
    
     break;
    
     }
    
     default:
    
     cout<<"输入错误。"<<endl;
    
     break;
    
     }
    
     return find;
    
 }
    
 /***************************************************** *功能描述:查询航班功能
    
 *输入参数:select,1,2
    
 *输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数
    
 ******************************************************/
    
 void display_line(airline *node)//输出一个航班结点的所有信息到屏幕
    
 {
    
     if(node==NULL)
    
     {
    
     cout<<"参数为空!输出失败."<<endl;
    
     return;
    
     }
    
     cout<<endl;
    
     cout<<"航班号\t\t 起飞地\t\t 目的地\t\t 起飞时间\t 降落时间\t 座位总数\t 剩余座位\t"<<endl;
    
     cout<<node->line_num<<"\t\t"
    
     <<node->start_place<<"\t\t"
    
     <<node->end_place<<"\t\t"
    
     <<node->time1<<"\t"
    
     <<node->time2<<"\t"
    
     <<node->total<<"\t"
    
     <<node->left<<"\t"
    
     <<endl;
    
 }
    
 /****************************************************** *功能描述:输出所有的航班信息到屏幕
    
 *输入参数:无
    
 *输出参数:headline
    
 *******************************************************/
    
 void display_all_line(airlinehead *headline)
    
 {
    
     cout<<endl;
    
     airline *node;
    
     node = headline->next;
    
     if(!node)
    
     {
    
     cout<<"当前没有航班信息"<<endl;
    
     return ;
    
     }
    
     cout<<"航班数目: "<<headline->count<<endl;
    
     while(node)
    
     {
    
     display_line(node);
    
     node=node->next;
    
     }
    
 }
    
 /****************************************************** *功能描述:修改航班信息
    
 *输入参数:select
    
 *输出参数:无
    
 *返回值:0-正确,1-错误
    
 *******************************************************/
    
 int change_line(airlinehead *headline)//修改航班信息。
    
 {
    
     cout<<"当前所有航班的信息为:"<<endl;
    
     airline *temp;
    
     temp = headline->next;
    
     while(temp)
    
     {
    
     display_line(temp);
    
     temp=temp->next;
    
     }
    
     cout<<endl;
    
     cout<<"请选择你要进行的操作:"<<endl;
    
     cout<<"1,增加航班。"<<endl;
    
     cout<<"2,删除航班。"<<endl;
    
     cout<<"3,修改当前航班的信息。"<<endl;
    
     int select;
    
     cin>>select;
    
     cout<<endl;
    
     if(select>3 || select<1)
    
     {
    
     cout<<"输入错误。"<<endl;
    
     return 0;
    
     }
    
     switch(select)
    
     {
    
     case 1:
    
     {
    
 // temp->next = (airline*)malloc(sizeof(airline));
    
     temp->next = new airline;
    
     temp = temp->next;
    
     cout<<"请输入要增加的航班号: ";
    
     cin>>temp->line_num;
    
     cout<<"请输入航班的起飞地: ";
    
     cin>>temp->start_place;
    
     cout<<"请输入航班的目的地: ";
    
     cin>>temp->end_place;
    
     cout<<"请输入航班的起飞时间:";
    
     cin>>temp->time1;
    
     cout<<"请输入航班的降落时间:";
    
     cin>>temp->time2;
    
     cout<<"请输入航班的座位总数: ";
    
     cin>>temp->total;
    
     temp->left=temp->total;
    
     temp->next=NULL;
    
     headline->count++;
    
     cout<<"增加成功。"<<endl;
    
     break;
    
     }
    
     case 2:
    
     {
    
     cout<<"请输入您要删除的航班的航班号: ";
    
     char line_num[10];
    
     cin>>line_num;
    
     airline * delline;
    
     delline = headline->next;
    
     while(delline)
    
     {
    
         if(strcmp(delline->next->line_num, line_num)==0)
    
         {
    
             airline *plink;
    
             plink = delline->next->next;
    
 //free(delline->next);
    
             delete delline->next;
    
             delline->next=plink;
    
             headline->count--;
    
         }
    
         delline=delline->next;
    
     }
    
     if(delline == 0)
    
     {
    
         cout<<"没有找到输入的航班号。"<<endl;
    
         return 0;
    
     }
    
     break;
    
     }
    
     case 3:
    
     {
    
     cout<<"请输入您要修改的航班的航班号:";
    
     char line_num3[10];
    
     cin>>line_num3;
    
     temp = headline->next;
    
     while(temp)
    
     {
    
         if(strcmp(temp->next->line_num, line_num3)==0)
    
         {
    
             cout<<"请选择要修改的内容??"<<endl;
    
             cout<<"--1,座位总数。--"<<endl;
    
             cout<<"--2,起始地址。--"<<endl;
    
             cout<<"--3,目的地址。--"<<endl;
    
         }
    
         temp=temp->next;
    
     }
    
     if(temp==0)
    
     {
    
         cout<<"没有找到输入的航班号。"<<endl;
    
         return 0;
    
     }
    
     break;
    
     }
    
     }
    
     return 1;
    
 }
    
 /***************************************************** *功能描述:输出一个客户信息到屏幕
    
 *输入参数:无
    
 *输出参数:姓名,证件号码,座号,航班号,起飞时间,降落时间,
    
 ******************************************************/
    
 void display_client(client *node=NULL)//输出一个客户节点的信息到屏幕。
    
 {
    
     if(node==NULL)
    
     {
    
     cout<<"参数为空!输出失败。"<<endl;
    
     return;
    
     }
    
     cout<<endl;
    
     cout<<"姓名\t\t"<<"证件号码\t"<<"座号\t"<<"起飞时间\t"<<"降落时间\t"<<"航班\t\t"<<endl<<endl;
    
     cout<<node->name<<"\t\t"
    
     <<node->id<<"\t\t"
    
     <<node->seat_num<<"\t\t"
    
     <<node->time1<<"\t"
    
     <<node->time2<<"\t"
    
     <<node->line_num<<"\t\t"
    
     <<endl;
    
 }
    
 /***************************************************** *功能描述:输出全部客户信息到屏幕
    
 *输入参数:无
    
 *输出参数:姓名,证件号码,座号,航班号,起飞时间,降落时间,
    
 ******************************************************/
    
 void display_all_client(clienthead *headclient)//打印所有客户信息到屏幕。。
    
 {
    
     client *node=headclient->next;
    
     if(!node)
    
     {
    
     cout<<"当前没有客户信息。"<<endl;
    
     return ;
    
     }
    
     while(node)
    
     {
    
     display_client(node);
    
     node=node->next;
    
     }
    
 }
    
 /***************************************************** *功能描述:输出未售完票航班信息
    
 *输入参数:无
    
 *输出参数:headline
    
 ******************************************************/
    
 void display_left_airline(airlinehead *headline)//输出未售完票的航班的信息。
    
 {
    
     airline *node = headline->next;
    
     if(!node)
    
     {
    
     cout<<"当前没有航班。。";
    
     }
    
     for(; node->left!=node->total; node = node->next)
    
     {
    
     display_line(node);
    
     }
    
 }
    
 /***************************************************** *功能描述:订票
    
 *输入参数:line_num,id
    
 *输出参数:
    
 *返回值:1-正确,0-错误
    
 ******************************************************/
    
 int bookticket(airlinehead * headline,clienthead *headclient)//订票
    
 {
    
 //headclient->count=0;
    
     cout<<"请输入航班号: ";
    
     char line_num[10] ;
    
     cin>>line_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<<"请选择其他合适的航班.";
    
     }
    
     client *custom=new client;
    
     cout<<"请输入你的证件号码: ";
    
     cin>>custom->id;
    
     cout<<endl;
    
     cout<<"请输入你的姓名:";
    
     cin>>custom->name;
    
     cout<<endl;
    
     custom->seat_num=temp->total-temp->left+1;
    
     custom->next=NULL;
    
     strcpy(custom->line_num,line_num);
    
  
    
     temp->left--;
    
     headclient->count++;
    
     custom->next = headclient->next;
    
     headclient->next = custom;
    
     cout<<"订票成功!祝您旅途愉快~~";
    
     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;
    
     delete clienttemp;
    
     while(airlinetemp)//修改对票客户所对应的航班的售票信息。
    
     {
    
         if(strcmp(line_num,airlinetemp->line_num)== 0 )
    
         {
    
             airlinetemp->left++;
    
             break;
    
         }
    
         airlinetemp = airlinetemp->next;
    
     }
    
     cout<<"退票成功!希望有机会与您继续合作。";
    
     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(strcpy(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;
    
 }
    
 /***************************************************** *功能描述:退票
    
 *输入参数:id
    
 *输出参数:
    
 *返回值:1-正确,0-错误
    
 ******************************************************/
    
 int savemessage(airlinehead *headline,clienthead *headclient)//保存航班和客户的信息到相应的txt 文件中。
    
 {
    
     ofstream outline("airline.txt");
    
     if(!outline)
    
     {
    
     cout<<"航班信息文件打开失败。"<<endl;
    
     return 0;
    
     }
    
     cout<<"正在保存航班信息..."<<endl;
    
     outline<<headline->count<<endl;
    
     airline *linetemp = headline->next;
    
     while(linetemp)
    
     {
    
     outline<<linetemp->line_num<<" "
    
            <<linetemp->start_place<<" "
    
            <<linetemp->end_place<<" "
    
            <<linetemp->total<<" "
    
            <<linetemp->left<<" "
    
            <<endl;
    
     linetemp=linetemp->next;
    
     }
    
     outline.close();
    
     cout<<"航班信息保存成功..."<<endl;
    
     ofstream outclient("client.txt");
    
     if(!outclient)
    
     {
    
     cout<<"客户信息文件打开失败。"<<endl;
    
     return 0;
    
     }
    
     cout<<"正在保存客户信息文件..."<<endl;
    
     outclient<<headclient->count<<endl;
    
     client *clienttemp = headclient->next;
    
     while(clienttemp)
    
     {
    
     outclient<<clienttemp->name<<" "
    
              <<clienttemp->id<<" "
    
              <<clienttemp->line_num<<" "
    
              <<clienttemp->seat_num<<" "
    
              <<endl;
    
     clienttemp = clienttemp->next;
    
     }
    
     outclient.close();
    
     cout<<"客户信息保存成功。"<<endl;
    
     return 1;
    
 }
    
 /***************************************************** *功能描述:保存
    
 *输入参数:
    
 *输出参数:
    
 *返回值:1-正确,0-错误
    
 ******************************************************/
    
 int loadmessage(airlinehead *headline,clienthead *headclient)//加载保存在文件中的信息。。
    
 {
    
     headline->next = NULL;
    
     headclient->next = NULL;
    
     ifstream inair("airline.txt");
    
     if(!inair)
    
     {
    
     cout<<"航班文件不能打开,信息加载失败。。。"<<endl;
    
     return 0;
    
     }
    
     cout<<"正在加载航班信息。。。"<<endl;
    
     inair>>headline->count;
    
     for(int i = 0; i<headline->count; i++)
    
     {
    
     airline *nodeline = new airline;
    
     inair>>nodeline->line_num
    
          >>nodeline->start_place
    
          >>nodeline->end_place
    
          >>nodeline->total
    
          >>nodeline->left;
    
     nodeline->next = headline->next;
    
     headline->next = nodeline;
    
     }
    
     inair.close();
    
     cout<<"航班信息加载完毕"<<endl;
    
     ifstream inclient("client.txt");
    
     if(!inclient)
    
     {
    
     cout<<"客户文件不能打开,信息加载失败"<<endl;
    
     return 0;
    
     }
    
     cout<<"正在加载客户信息。。。"<<endl;
    
     inclient>>headclient->count;
    
     for( int i=0; i<headclient->count; i++)
    
     {
    
     client *nodeline=new client;
    
     inclient>>nodeline->name>>nodeline->id>>nodeline->line_num>>nodeline->seat_num;
    
     nodeline->next=headclient->next;
    
     headclient->next=nodeline;
    
     }
    
     inclient.close();
    
     cout<<"客户信息加载完毕。。。"<<endl;
    
     return 1;
    
 }
    
 //主函数
    
 void main_menu()
    
 {
    
     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<<"*** 7---- 输出所有航班信息。***"<<endl<<endl;
    
     cout<<"*** 8---- 输出所有顾客信息。***"<<endl<<endl;
    
     cout<<"*** 0---- 退出系统 。***"<<endl<<endl;
    
     cout<<"****************************************************************"<<endl<<endl;
    
 }
    
 int main()
    
 {
    
     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;
    
 //display_all_line(headline);
    
         cout<<"航班信息成功录入。。";
    
         cout<<endl<<endl;
    
         break;
    
     case 2:
    
         loadmessage(headline,headclient);
    
         break;
    
     case 3:
    
         airline *find;
    
         find=query(headline);
    
         if(find)
    
         {
    
             display_line(find);
    
         }
    
         break;
    
     case 4:
    
         bookticket( headline,headclient);
    
 //display_all_client(headclient);
    
         break;
    
     case 5:
    
         returnticket(headline,headclient);
    
         break;
    
     case 6:
    
         savemessage(headline,headclient);
    
         break;
    
     case 7:
    
         display_all_line(headline);
    
         break;
    
     case 8:
    
         display_all_client(headclient);
    
         break;
    
     case 0:
    
         exit(1);
    
         break;
    
     }
    
     }
    
 }

运行结果:

全部评论 (0)

还没有任何评论哟~