⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 航班.cpp

📁 航班查询删除
💻 CPP
字号:
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
#include <fstream.h>
#define MAXSIZE 50
typedef struct{
int hour;
int minute;
}time;
typedef struct{
int year;
int month;
int day;
}date;
typedef struct information
{
char number[7];        //航班号
time start;             //起点站
time end;             //终点站
char start_station[16];   //起飞时间
char end_station[16];   //到达时间
char pay[7];           //票价
char sche[7];           //班期
char style[7];          //机型
date date_1;          //有效期
date date_2;
information *next;
}info;

void screen()                  
{
cout<<"              ★ 【航班信息的查询与检索】 ★"<<endl;
cout<<"           ★*******************************★"<<endl;
cout<<"               **1.插入航班信息    "<<endl;
cout<<"               **2.修改航班信息    "<<endl;
cout<<"               **3.按起终点查询    "<<endl;
cout<<"               **4.按出行日期查询  "<<endl;
cout<<"               **5.按航班号进行查询"<<endl;
cout<<"               **6.退出系统        " <<endl;
cout<<"           ★*******************************★"<<endl;
}
void Init_info(info *info_1[],int &count)             //建立文本存储
{
fstream iofile("hangban.txt",ios::in|ios::out|ios::binary);
while(1)
{
   info_1[count]=new info;
   iofile.read((char*)info_1[count],sizeof(info));
   if(iofile.eof())break;
   if(count) info_1[count-1]->next=info_1[count];
   info_1[count]->next=NULL;
   count++;
}
}

void insert_info(info *info_1[],int &count)       //插入航班信息
{
   info_1[count]=new info;
   cout<<"航班号:";
   cin>>info_1[count]->number;
   cout<<"起点站:";
   cin>>info_1[count]->start_station;
   cout<<"终点站:";
   cin>>info_1[count]->end_station;
   cout<<"起飞时间(时 分):";
   cin>>info_1[count]->start.hour>>info_1[count]->start.minute;
   cout<<"到达时间(时 分):";
   cin>>info_1[count]->end.hour>>info_1[count]->end.minute;
   cout<<"票价:";
   cin>>info_1[count]->pay;
   cout<<"班期:";
   cin>>info_1[count]->sche;
   cout<<"机型:";
   cin>>info_1[count]->style;
   cout<<"有效期(年 月 日 年 月 日):";
   cin>>info_1[count]->date_1.year>>info_1[count]->date_1.month>>info_1[count]->date_1.day
    >>info_1[count]->date_2.year>>info_1[count]->date_2.month>>info_1[count]->date_2.day;
   if(count) info_1[count-1]->next=info_1[count];
   info_1[count]->next=NULL;
   count++;
}
void distribute(info *info_1[],info *info_2[],info *info_3[],int count,int state)
{
for(int i=0;i<26;i++)
{
   info_2[i]=NULL;
   info_3[i]=NULL;
}
for(int j=0;j<count;j++)
{
   int value;
   if('a'<=info_1[j]->number[state]) 
    value=info_1[j]->number[state]-'a';
   else
    value=info_1[j]->number[state]-'0';
   if(!info_2[value])
   {
    info_2[value]=info_1[j];
    info_3[value]=info_1[j];
   }
   else
   {
    info_3[value]->next=info_1[j];
    info_3[value]=info_1[j];
   }
}
}
void collect(info *info_1[],info *info_2[],info *info_3[])
{
for(int i=0,j=0;i<26;i++)
{
   while(info_2[i])
   {
    info_1[j++]=info_2[i];
    if(info_2[i]==info_3[i]) break;
    info_2[i]=info_2[i]->next;
   }
}
}
void radix(info *info_1[],info *info_2[],info *info_3[],int count)
{
for(int i=strlen(info_1[0]->number)-1;0<=i;i--)
{
   distribute(info_1,info_2,info_3,count,i);
   collect(info_1,info_2,info_3);
}
}
int bin_search(info *info_1[],char *str,int low,int high)                //按航班名二分查找
{
int mid;
while(low<=high)
{
   mid=(low+high)/2;
   if(!strcmp(info_1[mid]->number,str)) 
    return mid;
   if(strcmp(info_1[mid]->number,str)<0) 
    low=mid+1;
   else 
    high=mid-1;
}
return (-1);
}
void print(info *info_1[],int state)
{
    cout<<"航班号:"<<info_1[state]->number<<endl;
cout<<"起点站-->终点站:"<<info_1[state]->start_station<<"-->"<<info_1[state]->end_station<<endl;
cout<<"起飞时间-->到达时间:"<<info_1[state]->start.hour<<":"<<info_1[state]->start.minute
   <<"-->"<<info_1[state]->end.hour<<":"<<info_1[state]->end.minute<<endl;
cout<<"票价:"<<info_1[state]->pay<<endl;
cout<<"班期;"<<info_1[state]->sche<<endl;
cout<<"机型:"<<info_1[state]->style<<endl;
cout<<"有效期:"<<info_1[state]->date_1.year<<"."
   <<info_1[state]->date_1.month<<"."<<info_1[state]->date_1.day
   <<"-->"<<info_1[state]->date_1.year<<"."
   <<info_1[state]->date_2.month<<"."<<info_1[state]->date_2.day<<endl;
}
int *serach_adress(info *info_1[],char str_1[],char str_2[],int count)
{
int *data;
data=new int[count+1];
for(int i=0,j=0;i<count;i++)
{
   if(!strcmp(info_1[i]->start_station,str_1)&&!strcmp(info_1[i]->end_station,str_2))
   {
    print(info_1,i);
    data[++j]=i;
   }
}
data[0]=j;
cout<<"共有"<<data[0]<<"个记录!!!"<<endl;
return data;
}
void search_date(info *info_1[],int data[],int data_1,int data_2,int data_3,int count)          //按日期二分查找
{
int i,j,k,m=0;
int value_1,value_2,value_3;
if(data) k=data[0];
else k=count;
for(i=0;i<k;i++)
{
   if(data) j=data[i+1];
   else j=i;
   value_1=(info_1[j]->date_1.year-2000)*12*30+info_1[j]->date_1.month*30+info_1[j]->date_1.day;
   value_2=(info_1[j]->date_2.year-2000)*12*30+info_1[j]->date_2.month*30+info_1[j]->date_2.day;
   value_3=(data_1-2000)*12*30+data_2*30+data_3;
   if(value_1<=value_3&&value_3<=value_2)
   {
    print(info_1,j);
    m++;
   }
}
cout<<"共有"<<m<<"个记录!!!"<<endl;
}


void main()
{
int count=0;
int i;
int data_1,data_2,data_3,data_4=1,data_5,*data;
char str_1[16],str_2[16];
info *info_1[MAXSIZE],*info_2[26],*info_3[26]; 
Init_info(info_1,count);
radix(info_1,info_2,info_3,count);
screen();
while(1)
{
   char flag;
   cout<<"欢迎进入本系统请选者所要进行的操作:";
   cin>>flag;
   switch(flag)
   {
  

    case '1':
    insert_info(info_1,count);
    radix(info_1,info_2,info_3,count);
    break;
 

case '3':
    cout<<"请输入起点站,终点站:";
    cin>>str_1>>str_2;
    data=serach_adress(info_1,str_1,str_2,count);
    if(!data[0]) break;
    cout<<"是否继续按出行日期查询(Y/N):";
    cin>>flag;
    if(flag=='N'||flag=='n') break;
    cout<<setfill('*')<<setw(81)<<endl;
    data_4=0;
 

  case '4':
    cout<<"请输入出行日期(年 月 日):";
    cin>>data_1>>data_2>>data_3;
    if(data_4) data=NULL;
    search_date(info_1,data,data_1,data_2,data_3,count);
    break;

 case '5':
    cout<<"请输入航班号:";
    cin>>str_1;
    data_5=bin_search(info_1,str_1,0,count-1);
    if(data_5==-1) 
    {
     cout<<"无记录!!!"<<endl;
     break;
    }
    print(info_1,data_5);
break;

case'6':
{
cout<<"Bye bye!"<<endl;
}
   
case '0':
    {
     fstream iofile("hangban.txt",ios::in|ios::out|ios::binary);
     for(i=0;i<count;i++)
     {
     iofile.write((char*)info_1[i],sizeof(info));
     }
     return;
    }
   default:
    cout<<"输入错误!!!"<<endl;
   }
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -