本人的数据结构课设

#include <windows.h> 
#include<iostream>
#include <iomanip>
#include<string>
using namespace std;
#define max_size 100
typedef struct Customer_regist{//已订票的客户
 string name_end;//终点名称 
 string name_cust;//客户名称
 string num_line;//航班号
    string num_plane;//飞机号
 string date;//飞行日期
 int toatl;//票数
 //Customer_regist *r;//表头
    Customer_regist *next_Cust;//下一个客户
}Cust_reg, * L_Cust_reg;


typedef struct HouBu_node{//候补乘客
 string name_end;//终点名称 
 string name_cust;//客户名称
 string num_line;//航班号
    string num_plane;//飞机号
 string date;//飞行日期
    int num_tickets;//需要的票数
    HouBu_node *next_Cust_No_Reg;//下一个候补成员
}HoBuNode,* houbuNode;
typedef struct Customer_not_regist{
    HouBu_node *front,*rear;
}HoBu;
typedef struct airline//航班
{
 string name_end;//终点名称
 string num_line;//航班号
    string num_plane;//飞机号
 string date;//飞行日期
    int num_all;//成员总数
 int num_rest;//剩余票数 
}airline;
struct Airline{
 airline *data;
 L_Cust_reg h_cust;//订票成员
 HouBu_node *front,*rear;//候补
 int length;//航班数量
};


int static cust=1;
int static hou=1;
void init_cust(L_Cust_reg &l)
{
 l=new Cust_reg[sizeof(Cust_reg)];
 l->next_Cust=NULL;
}

//初始化候补乖客
void init_hobu(HoBu &hb)
{
    hb.front=hb.rear=new HouBu_node;
 hb.front->next_Cust_No_Reg=NULL;
}
//初始化航线表
void init_airline(Airline &al,L_Cust_reg &l,HoBu &hb)//录入航班表
{
 al.data=new airline[max_size];
 al.h_cust=l;
 hb.rear=hb.front;
 al.front=al.rear=hb.front;
 al.length=0;
}
//向候补表中加入乘客
void insert_hobu(HoBu &hb,string name,string name_end,string num_line,string num_plane,string date,int num)
{
 HouBu_node *p=new HouBu_node;
 p->name_cust=name;
 p->name_end=name_end;
 p->num_line=num_line;
 p->num_plane=num_plane;
 p->date=date;
 p->num_tickets=num;
 p->next_Cust_No_Reg=NULL;
 hb.rear->next_Cust_No_Reg=p;
 hb.rear=p;
}

 

//输出候补乘员
void print_houbu(HoBu hb)
{
 HouBu_node *p=new HouBu_node;
 cout<<setiosflags(ios::left)<<setw(9);
 cout<<"候补乘客姓名"<<setw(10)<<"航班目的地"<<setw(10)<<"航班号"<<setw(10)<<"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"所需票量"<<setw(10)<<endl;
 p=hb.front->next_Cust_No_Reg;
 if(p=hb.rear)
 {cout<<p->name_cust<<setw(10)<<p->name_end<<setw(10)<<p->num_line<<setw(10)<<p->num_plane<<setw(10)<<p->date<<setw(10)<<p->num_tickets<<setw(10)<<endl;}
 while(p!=hb.rear)
 {
  cout<<p->name_cust<<setw(10)<<p->name_end<<setw(10)<<p->num_line<<setw(10)<<p->num_plane<<setw(10)<<p->date<<setw(10)<<p->num_tickets<<setw(10)<<endl;
  p=p->next_Cust_No_Reg;
 }
}

//出队
void out_houbu(HoBu &hb)
{if(hb.front==hb.rear)
cout<<"没有候补乘客!";
HouBu_node *p=new HouBu_node;
p=hb.front->next_Cust_No_Reg;
cout<<setiosflags(ios::left)<<setw(9);
cout<<"候补乘客姓名"<<setw(10)<<"航班目的地"<<setw(10)<<"航班号"<<setw(10)<<"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"所需票量"<<setw(10)<<endl;
cout<<p->name_cust<<setw(10)<<p->name_end<<setw(10)<<p->num_line<<setw(10)<<p->num_plane<<setw(10)<<p->date<<setw(10)<<p->num_tickets<<setw(10)<<endl;
//e=p->num_tickets;
hb.front->next_Cust_No_Reg=p->next_Cust_No_Reg;
if(hb.rear==p)
hb.rear=hb.front;

}

void add_airline(Airline &al,L_Cust_reg &l,HoBu &hb){
 cout<<"航班目的地:"<<endl;
 cin>>al.data[al.length].name_end;
 cout<<"航班名称:"<<endl;
 cin>>al.data[al.length].num_line;
 cout<<"飞机号:"<<endl;
 cin>>al.data[al.length].num_plane;
 cout<<"飞行日期"<<endl;
 cin>>al.data[al.length].date;
 cout<<"成员总数:"<<endl;
 cin>>al.data[al.length].num_all;
 al.data[al.length].num_rest=al.data[al.length].num_all;
 ++al.length;
 }

//输出航班表
void print_airline(Airline al)
{
 cout<<setiosflags(ios::left)<<setw(9);
 cout<<"目的地"<<setw(10)<<"航班号"<<setw(10)<<"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"乘客总数"<<setw(10)<<"剩余票数"<<setw(10)<<endl;
 for(int i=0;i<al.length;i++)
 { 
  cout<<setiosflags(ios::left)<<setw(9);
  cout<<al.data[i].name_end<<setw(10)<<al.data[i].num_line<<setw(10)<<al.data[i].num_plane<<setw(10)<<al.data[i].date<<setw(10)<<al.data[i].num_all<<setw(10)<<
   al.data[i].num_rest<<setw(10)<<endl;
 }
}

 


//向乖客表中添加乖客

void insert_cust(L_Cust_reg &l,int i,string name_end,string name_cust,string num_line,string num_plane,string date,int total)
{
 L_Cust_reg s,p=l;
 int j=0;
 while(p&&j<i-1)
 {p=p->next_Cust;++j;}
 if(!p&&j>i-1)
  cout<<"ERROR!";
 s=new Cust_reg[sizeof(Cust_reg)];
 s->name_end=name_end;
    s->name_cust=name_cust;
 s->num_line=num_line;
    s->num_plane=num_plane;
    s->date=date;
 s->toatl=total;
 s->next_Cust=p->next_Cust;
 p->next_Cust=s;
 s->next_Cust=NULL;
 p=p->next_Cust;
 cout<<"订票成功!"<<endl;
}

//删除乘客表中信息
void del_cust(L_Cust_reg &l,int i)
{
 L_Cust_reg p=l;
 int j=0;
 while(p->next_Cust&&j<i-1)
 {p=p->next_Cust;++j;}
 if(!(p->next_Cust)||j>i-1)
 
 {cout<<"ERROR!"<<endl;
 exit(0);}
 L_Cust_reg q=new Cust_reg;
 q=p->next_Cust;
 p->next_Cust=q->next_Cust;
 --cust;
 cout<<"删除成功!欢迎再来!"<<endl;
}
//打印乘客信息

void print_cust(L_Cust_reg l)
{
 L_Cust_reg p=l->next_Cust;
 while(p)
 {
  cout<<setiosflags(ios::left)<<setw(9);
  cout<<"姓名"<<setw(10)<<"航班目的地"<<setw(10)<<"航班号"<<setw(10)<<"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"票数"<<setw(10)<<endl;
  cout<<p->name_cust<<setw(10)<<p->name_end<<setw(10)<<p->num_line<<setw(10)<<p->num_plane<<setw(10)<<p->date<<setw(10)<<p->toatl<<setw(10)<<endl;
  p=p->next_Cust;
 }
}


//

//订票
void insert_airline(Airline &al,L_Cust_reg &l,HoBu &hb){
 if(al.data[0].name_end!=""){
  cout<<"本站提供以下站点的航班:"<<endl;
     for(int m=0;m<al.length;m++)
      cout<<al.data[m].name_end<<endl;
     string address,name_cust;
  cout<<"请输入航班目的地:"<<endl;
  cin>>address;
  for(int j=0;j<al.length;j++)
  {
   if(address==al.data[j].name_end)
   {
    cout<<"该航班的余票量:"<<al.data[j].num_rest<<endl;
    int total;
    cout<<"你的姓名:"<<endl;
    cin>>name_cust;
    cout<<"请输入你所需票量:"<<endl;
    cin>>total;
    if(total<=al.data[j].num_rest&&al.data[j].num_rest>0)
    { 
     cout<<endl;
     insert_cust(l,cust,al.data[j].name_end,name_cust,al.data[j].num_line,al.data[j].num_plane,al.data[j].date,total);//更新乖客表
     print_cust(l);
     ++cust;
     al.data[j].num_rest-=total;
     print_airline(al);
     break;
    }
    else
    {
     cout<<"你想等候吗?y(等)/n(不等)"<<endl;
     char c;
     cin>>c;
     if(c=='y')
     {
      insert_hobu(hb,name_cust,al.data[j].name_end,al.data[j].num_line,al.data[j].num_plane,al.data[j].date,total);
      cout<<"已排队中,请稍候!"<<endl;
     }
     else
     {cout<<"谢谢光临!";}
    }
   }
  else if(j==al.length&&address!=al.data[j].name_end)
   {cout<<"无此航班!如想继续,请重新输入!"<<endl;}
  } 
 }
 else
 {
  cout<<"ERROR!请先输入航班信息.";
 }  
}

//查询
void search(Airline al){
 if(al.data[0].name_end!="")
 {
  cout<<"1.根据终点站名查询:"<<
  "2.根据航班号查询: "<<endl;
     int choice;
     string c;
     cin>>choice;
  switch(choice)
  {case 1:
  {
      for(int j=0;j<al.length;j++)
   {
       cout<<"有以下站点";
          cout<<al.data[j].name_end<<endl;
   }
            cout<<"请输入终点站名:"<<endl;
      cin>>c;
      for(int i=0;i<al.length;i++){
    if(c==al.data[i].name_end)
    {
        cout<<"航班目的地    "<<"航班号  "<<"飞机号  "<<"飞行日期  "<<"剩余票数  "<<endl;
        cout<<al.data[i].name_end<<"     "<<al.data[i].num_line<<"   "<<al.data[i].num_plane<<"   "<<al.data[i].date<<
     "    "<<al.data[i].num_rest<<endl;
    }
       else
    {cout<<"无此航班!请重新输入!"<<endl;}
    break;
   }
  };break;
  case 2:
  {
      cout<<"有以下航班:"<<endl;
      for(int j=0;j<al.length;j++)
       cout<<al.data[j].num_line<<endl;
             cout<<"请输入航班号:"<<endl;
          cin>>c;
             for(int i=0;i<al.length;i++){
                    if(c==al.data[i].num_line)
     {
              cout<<"航班目的地   "<<"航班号  "<<"飞机号  "<<"飞行日期  "<<"剩余票数  "<<endl;
              cout<<al.data[i].name_end<<"     "<<al.data[i].num_line<<"   "<<al.data[i].num_plane<<"   "<<al.data[i].date<<
           "    "<<al.data[i].num_rest<<endl;
     }
           else
     {cout<<"无此航班!请重新输入!"<<endl;}
     break;
    }
  };break;
  default:cout<<"输入错误!请重新输入!"<<endl;
 }
 }
 else
 {
  cout<<"ERROR!请先录入航班信息!";
 }
}


//退票
void del(Airline &al,L_Cust_reg &l,HoBu &hb)
{
 cout<<"你需要根据以下选择来办理业务:"<<
  "1.姓名"<<"2.日期"<<"3.航班号"<<endl;
 int choice,i=1;
 string c;
 L_Cust_reg p=l;
 cin>>choice;
 switch(choice){
 case 1:
 {
  cout<<"请输入你的姓名:"<<endl;
  cin>>c;
  while(p)
  {
   if(c==p->name_cust){
   cout<<"姓名    "<<"航班目的地   "<<"航班号  "<<"飞机号  "<<"飞行日期  "<<"票数"<<"     "<<endl;
   cout<<p->name_cust<<"     "<<p->name_end<<"     "<<p->num_line<<"     "<<p->num_plane<<"     "<<p->date<<"     "<<p->toatl<<endl;
   cout<<"请问你是确定退票吗?"<<endl;
   cout<<"1.确定!     "<<"2.取消!"<<endl;
   int k;
   cin>>k;
   if(k==1)
   {
     for(int j=0;j<al.length;j++)
    {
     al.data[j].name_end=p->num_line;
     al.data[j].num_rest+=p->toatl;
     k=al.data[j].num_rest;
    
    
    del_cust(l,i);
    --cust;
    bool f=hb.front!=hb.rear;
    if(f){
    if(k>hb.front->next_Cust_No_Reg->num_tickets)
     {al.data[j].num_rest-=hb.front->next_Cust_No_Reg->num_tickets;
     insert_cust(l,cust,hb.front->next_Cust_No_Reg->name_end,hb.front->next_Cust_No_Reg->name_cust,
     hb.front->next_Cust_No_Reg->num_line,hb.front->next_Cust_No_Reg->num_plane,
     hb.front->next_Cust_No_Reg->date,hb.front->next_Cust_No_Reg->num_tickets);
     cout<<"候补乘客  :"<<hb.front->next_Cust_No_Reg->name_cust<<"订票成功!"<<endl;
     out_houbu(hb);
     }
    }
    else if(!f)
     {cout<<"没有候补乘客!"<<endl;
     break;}
    }
    break;
   }
   if(k==2)
   {exit(0);}

   }
   
   else {p=p->next_Cust;}
   if(!p)
   {cout<<"你没有订票!";}
  }
 };break;
 case 2:
  {
  cout<<"请输入你的日期:"<<endl;
  cin>>c;
  while(p)
  {
   if(c==p->date){
   cout<<"姓名    "<<"航班目的地   "<<"航班号  "<<"飞机号  "<<"飞行日期  "<<"票数"<<"     "<<endl;
   cout<<p->name_cust<<"     "<<p->name_end<<"     "<<p->num_line<<"     "<<p->num_plane<<"     "<<p->date<<"     "<<p->toatl<<endl;
   cout<<"请问你是确定退票吗?"<<endl;
   cout<<"1.确定!     "<<"2.取消!"<<endl;
   int k;
   cin>>k;
   if(k==1)
   {
    for(int j=0;j<al.length;j++)
    {
     al.data[j].name_end=p->num_line;
     al.data[j].num_rest+=p->toatl;
     k=al.data[j].num_rest;
    
    
    del_cust(l,i);
    --cust;
    bool f=hb.front!=hb.rear;
    if(f){
    if(k>hb.front->next_Cust_No_Reg->num_tickets)
     {al.data[j].num_rest-=hb.front->next_Cust_No_Reg->num_tickets;
     insert_cust(l,cust,hb.front->next_Cust_No_Reg->name_end,hb.front->next_Cust_No_Reg->name_cust,
     hb.front->next_Cust_No_Reg->num_line,hb.front->next_Cust_No_Reg->num_plane,
     hb.front->next_Cust_No_Reg->date,hb.front->next_Cust_No_Reg->num_tickets);
     cout<<"候补乘客  :"<<hb.front->next_Cust_No_Reg->name_cust<<"订票成功!"<<endl;
     out_houbu(hb); 
    }
    }
    else if(!f)
     {cout<<"没有候补乘客!"<<endl;
     break;}
    }
    break;
   }
   if(k==2)
   {exit(0);}

   }
   
   else {p=p->next_Cust;} 
   if(!p)
   {cout<<"你没有订票!";}
  }
 };break;
 case 3:
  {
  cout<<"请输入你的航班号:"<<endl;
  cin>>c;
  while(p)
  {
   if(c==p->num_line){
    cout<<setiosflags(ios::left)<<setw(9);
   cout<<"姓名"<<setw(10)<<"航班目的地"<<setw(10)<<"航班号"<<setw(10)<<"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"票数"<<setw(10)<<endl;
   cout<<p->name_cust<<setw(10)<<p->name_end<<setw(10)<<p->num_line<<setw(10)<<p->num_plane<<setw(10)<<p->date<<setw(10)<<p->toatl<<setw(10)<<endl;
   cout<<"请问你是确定退票吗?"<<endl;
   cout<<"1.确定!     "<<"2.取消!"<<endl;
   int k;
   cin>>k;
   if(k==1)
   {
    for(int j=0;j<al.length;j++)
    {
     al.data[j].name_end=p->num_line;
     al.data[j].num_rest+=p->toatl;
     k=al.data[j].num_rest;
    
    
    del_cust(l,i);
    --cust;
    bool f=hb.front!=hb.rear;
    if(f){
    if(k>hb.front->next_Cust_No_Reg->num_tickets)
     {al.data[j].num_rest-=hb.front->next_Cust_No_Reg->num_tickets;
     insert_cust(l,cust,hb.front->next_Cust_No_Reg->name_end,hb.front->next_Cust_No_Reg->name_cust,
     hb.front->next_Cust_No_Reg->num_line,hb.front->next_Cust_No_Reg->num_plane,
     hb.front->next_Cust_No_Reg->date,hb.front->next_Cust_No_Reg->num_tickets);
     cout<<"候补乘客  :"<<hb.front->next_Cust_No_Reg->name_cust<<"订票成功!"<<endl;
     out_houbu(hb);
     }
    }
    else if(!f)
     {cout<<"没有候补乘客!"<<endl;
     break;}
    }
    break;
   }
   if(k==2)
   {exit(0);}
   }
   else {p=p->next_Cust;}
   if(!p)
   {cout<<"你没有订票!";}
  }
 }
}
}
int main()
{
 Airline al;
    L_Cust_reg l;
    HoBu hb;
    init_cust(l);
 init_hobu(hb);
 init_airline(al,l,hb);
 int t=1;char choice;
 while(t==1)      //进入菜单
    {
  system("cls");
        cout<<"/n/n            ****************欢迎使用航空订票系统**************/n/n";
  cout<<"                                  请选择菜单/n/n";
  cout<<"                                  1 航班录入/n/n";  
        cout<<"                                  2 查    询/n/n";
        cout<<"                                  3 订    票/n/n";
        cout<<"                                  4 退    票/n/n";  
        cout<<"                                  0 退    出/n/n";
        cout<<"请选择: ";
  cin>>choice;
        switch(choice)
  {
  case '1':{     //航班信息录入
   system("cls");
   add_airline(al,l,hb); //录入航班信息
   print_airline(al);
   system("pause");
   
   };break;
  case '2':{     //查询
   system("cls");
   search(al);
   system("pause");
   
   };break;
  case '3':{     //订票
   system("cls");
            insert_airline(al,l,hb);
   system("pause");
           
   };break;
  case '4':{     //退票
   system("cls");
   del(al,l,hb);
   system("pause");
   
   };break; 
  case '0':{     //退出本系统
   system("cls");
   char qr;
   cout<<"确认退出(Y/N)?"; //确认退出
   cin>>qr;
   if(qr=='Y'||qr=='y')
   {
    cout<<"/n=====>谢谢您的使用!/n";
    cout<<"/n  〓正在退出系统.../n";
    cout<<"/n     ■■■■■■■■■■■■■■■■■■■■■■";
    cout<<"/r";
    for(int i=0;i<72;i++)
    {
     cout<<" ";
     Sleep(60);
    }
    cout<<endl;
    t=0;
    system("cls");
    cout<<"已退出本系统!/n";
    break;
   }
   else
   {
    break;
   }
   }
        default:{
   system("cls");
   cout<<"输入有误/n";
   system("pause");
   }
  }
    }

    return 0;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
' ' 窗口启动的时候,初始化类会把数据库载入内存,以增加运算速度,所以占用内存稍微大一点,如果不喜欢,可以修改类初始化部分{方初始化()} ' 子重置词典数据库() 这个功能用于自定义词库,吧文本词库转换为sqlite数据库词库 ' 词库文件保存在运行目录kic.txt ' 词库数据库为disk.db ' 词库数据保存在sqlite数据库中,没有找到更好的,更快的查找文本的方式,只能先用数据库了 在 子重置词典数据库(),和 方初始化() 这两个方法(函数)中有一定的信息框的错误提示,实际应用最好改成其他提示方式,而且提示错误后程序并不会终止,需要主程序自己判断 词库比较小,分词精度估计不高大,建议实际应用的时候才用更大,跟完整的词库,最好根据内容的相关性这样最好. 提供一个我自己用的词库,主要用于购物网站的分词的,在程序文件夹得kic1.txt里面 修改成kic.txt 然后重新生成数据库就行了 ' 此文件算法根据织梦中文分词php版本的简化版本修改而来,如果用于商业请自行考虑版权问题 '关键字自动获取php源码 这个文件夹里面的就是原来的php文件,应该是老版本的织梦cms里面提取出来的....这是一个简化版本的分词程序 .简化了一些算法,我也是根据这个php文件修改而来的.所以这个分词算法用于提权关键字是比较合适的 .用于更高的要求估计还不够合适 .sqlite采用的是kyozy的sqlite模块,因为他的模块可以吧数据库读入内存... .程序中还有许多可以提升速度的地方....比如说使用的数据库感觉应该有很好的方法...但是没有找到 .欢迎大家指正..做的更好 ' 作者: www.liuxingou.com 十年一剑

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值