溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

發(fā)布時間:2022-03-14 13:36:28 來源:億速云 閱讀:283 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹如何使用C++實現(xiàn)航空訂票系統(tǒng)課程,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體內(nèi)容如下

一、題目

1.錄入功能

可以錄入航班信息(如航班號,起飛降落時間,城市,座位數(shù),票價)

2.查詢功能

可以查詢航班的各項信息(如根據(jù)航班號,起飛降落城市查找航班并顯示航班信息)

3.修改刪除功能

可以修改刪除航班的信息

4.追加航線

在原本的航線之后可以繼續(xù)添加航線方便操作

5.訂票功能

可以訂票并且記錄下乘客的相關(guān)信息(如姓名,身份證號碼)

6.退票功能

可以退票并且記錄乘客的相關(guān)信息以及退票信息

二、代碼

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
using namespace std;

typedef struct Node
{
    int hangbanhao;//航班號
    char qifeichengshi[10];//起飛城市
    char jiangluochengshi[10];//降落城市
    char qifeishijian[10];//起飛時間
    char jiangluoshijian[10];//降落時間
    int zuoweishu;//座位數(shù)
    int piaojia;//票價
    struct Node *next;//結(jié)點的指針域
}LNode,*LinkList;//定義航班信息 LinkList為指向結(jié)構(gòu)體LNode的指針類型


typedef struct CK
{
  char name[10];//乘客姓名
  char id[18];//乘客身份證號
  struct CK *next;//結(jié)點的指針域
}ck,*cke;//乘客信息


void import(int n,LinkList &L)//錄入航班函數(shù): n為所要錄入航班的數(shù)量:
{//建立一個帶頭結(jié)點的單鏈表L
    L=(LinkList)malloc(sizeof(LNode));//申請表空間
    L->next=NULL;//頭結(jié)點的指針域置空
    LNode * tail=L;//將尾賦給尾指針,等價LinkList tail=L;
    for(int i=0; i<n; i++)//逐個賦值
     {
        LNode *p=(LinkList)malloc(sizeof(LNode));//創(chuàng)建一個p結(jié)點
        cout<<"請輸入第"<<i+1<<"個航班的航班號 ";
        cin>>p->hangbanhao;
        cout<<"請輸入第"<<i+1<<"個航班的起飛城市 ";
        cin>>p->qifeichengshi;
        cout<<"請輸入第"<<i+1<<"個航班的降落城市 ";
        cin>>p->jiangluochengshi;
        cout<<"請輸入第"<<i+1<<"個航班的起飛時間 ";
        cin>>p->qifeishijian;
        cout<<"請輸入第"<<i+1<<"個航班的降落時間 ";
        cin>>p->jiangluoshijian;
        cout<<"請輸入第"<<i+1<<"個航班的座位數(shù) ";
        cin>>p->zuoweishu;
        cout<<"請輸入第"<<i+1<<"個航班的票價";
        cin>>p->piaojia;
        p->next=NULL;//頭結(jié)點的指針域置空
        tail->next=p;//將新結(jié)點插入尾部
        tail=p;//插入的結(jié)點變?yōu)槲步Y(jié)點,尾插法
    }
}
//寫入本地文件,并讀取輸出顯示


void show_L(LinkList &L)//輸出瀏覽機票信息
{
  ofstream out("out.txt");//實例化一個對象
   if (out.is_open())
   {
      LinkList p=L->next;
      while(p)
      {
        out<<"航班號:";
        out<<p->hangbanhao;
        out<<" 起飛城市:";
        out <<p->qifeichengshi;
        out<<" 降落城市:";
        out <<p->jiangluochengshi;
        out<<" 起飛時間:";
        out <<p->qifeishijian;
        out<<" 降落時間:";
        out <<p->jiangluoshijian;
        out<<" 座位數(shù):";
        out<<p->zuoweishu;
        out<<" 票價:";
        out<<p->piaojia;
        out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
        p=p->next;
      }
  }
   out.close(); //寫完
    char buffer[256];
    ifstream in("out.txt");
    if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

//按航班號查找
LinkList GetElem_L(LinkList &L,int e)
{
      LinkList p=L->next;
      while(p)
      {
        if(p->hangbanhao!=e)
            p=p->next;
        else return p;
      }
     return 0;
}

//按航班起降城市查找
LinkList GetElem_Lc(LinkList &L,char qi[10],char ji[10])
{
      LinkList p=L->next;
      while(p)
      {
        if(strcmp(p->qifeichengshi,qi)!=0||strcmp(p->jiangluochengshi,ji)!=0)
            p=p->next;
        else return p;
      }
      return 0;
}


//刪除
int ListDelete_L(LinkList &L,int e){
    LinkList p=L;
    while(p->next&&p->next->hangbanhao!=e){
        p=p->next;//直到查找到要刪除的結(jié)點
    }
    if(!p->next)
        return 0;
    LinkList q=p->next;
    p->next=q->next;//p->next=p->next->next;
    free(q);//本題q是需要刪除的結(jié)點
    return 1;
}


//插入
int ListInsert_L(LinkList &L,int i){
    LinkList p=L;//i為插入的位置
    int j=0;
    while(p&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return 0;
    LNode *s=(LinkList)malloc(sizeof(LNode));
    cout<<"輸入航班號:";
    cin>>s->hangbanhao;
    cout<<"輸入起飛城市:";
    cin>>s->qifeichengshi;
    cout<<"輸入降落城市:";
    cin>>s->jiangluochengshi;
    cout<<"輸入起飛時間:";
    cin>>s->qifeishijian;
    cout<<"輸入降落時間:";
    cin>>s->jiangluoshijian;
    cout<<"輸入座位數(shù):";
    cin>>s->zuoweishu;
    cout<<"輸入票價:";
    cin>>s->piaojia;
    s->next=p->next;
    p->next=s;//s->next=p->next;p->next=s;
    return 1;
}


//修改
LinkList xiugai(LinkList &L,int yxg)
{
  LinkList q=L->next;
      while(q)
      {
        if(q->hangbanhao!=yxg)
            q=q->next;
        else return q;
      }
  return 0;
}


//乘客信息錄入
void importren(int n,cke &C)//錄入航班函數(shù): n為所要錄入航班的數(shù)量:
{
    C=(cke)malloc(sizeof(ck));
    C->next=NULL;
    ck*ta=C;
    for(int i=0; i<n; i++)
     {
        ck *p=(cke)malloc(sizeof(ck));//就是創(chuàng)建一個p結(jié)點,關(guān)鍵就是寫法,LNdoe *p;
        cout<<"請輸入第"<<i+1<<"個乘客的姓名 ";
        cin>>p->name;
        cout<<"請輸入第"<<i+1<<"個航班的身份證ID ";
        cin>>p->id;
         p->next=NULL;
        ta->next=p;
        ta=p;//尾插法,根據(jù)循環(huán)畫圖可知,tail指針始終在最后
    }
}


//訂票乘客信息和航班信息寫入本地和讀取
void show_dp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//實例化一個對象
   if (out.is_open())
   {
      cke p=C->next;
      while(p){
        out<<"姓名 ";
        out<<p->name;
        out<<"  身份證ID ";
        out<<p->id;
        out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
        p=p->next;
      }
      if(R->zuoweishu-1>=0)
      {
       out<<"航班號:"<<R->hangbanhao;
       out<<" 起飛城市:"<<R->qifeichengshi;
       out<<" 降落城市:"<<R->jiangluochengshi;
       out<<" 起飛時間:"<<R->qifeishijian;
       out<<" 降落時間:"<<R->jiangluoshijian;
       out<<" 座位數(shù):"<<R->zuoweishu-1;//訂票之后座位數(shù)減一
       out<<" 票價:"<<R->piaojia;
       out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
       out<<"訂票成功";
       out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
      }
      else
      {
        out<<"航班號:"<<R->hangbanhao;
        out<<" 起飛城市:"<<R->qifeichengshi;
        out<<" 降落城市:"<<R->jiangluochengshi;
        out<<" 起飛時間:"<<R->qifeishijian;
        out<<" 降落時間:"<<R->jiangluoshijian;
        out<<" 座位數(shù):"<<R->zuoweishu;
        out<<" 票價:"<<R->piaojia;
        out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
        out<<"該航班暫無票,請選擇其他航班";
        out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
      }
   }
   out.close(); //寫完
    char buffer[256];
    ifstream in("dinpiao.txt");
    if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

//退票乘客信息和航班信息寫入本地和讀取
void show_tp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//實例化一個對象
   if (out.is_open())
   {
      cke p=C->next;
      while(p){
        out<<"姓名 ";
        out<<p->name;
        out<<"身份證ID ";
        out<<p->id;
        out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
        p=p->next;
      }
      out<<"航班號 "<<R->hangbanhao;
      out<<" 起飛城市:"<<R->qifeichengshi;
      out<<" 降落城市:"<<R->jiangluochengshi;
      out<<" 起飛時間:"<<R->qifeishijian;
      out<<" 降落時間:"<<R->jiangluoshijian;
      out<<" 座位數(shù):"<<R->zuoweishu;//退票之后不需要加1,用最初的座位數(shù);
      out<<" 票價:"<<R->piaojia;
      out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
      out<<"退票成功";
      out<< "\n";//用于換行,是下面in.getline的關(guān)鍵
   }
   out.close(); //寫完
    char buffer[256];
    ifstream in("dinpiao.txt");
    if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

void menu()//顯示菜單界面
{
    cout<<"=================================歡迎使用航空訂票系統(tǒng)==============================="<<endl;
    cout<<"*                                1請先錄入航班信息                                 *"<<endl;
    cout<<"*                                2根據(jù)航班號查找航班                               *"<<endl;
    cout<<"*                                3根據(jù)起降城市查找航班                             *"<<endl;
    cout<<"*                                4刪除航班                                         *"<<endl;
    cout<<"*                                5插入航班                                         *"<<endl;
    cout<<"*                                6修改航班                                         *"<<endl;
    cout<<"*                                7訂票錄入乘客信息                                 *"<<endl;
    cout<<"*                                8退票                                             *"<<endl;
    cout<<"===================================================================================="<<endl;
}
int main()
{
   LinkList L;//L是指針 航班
   cke C;//乘客
    while(1)
    {
      menu();
      int caozuo;
      cout<<"請選擇操作";
      cin>>caozuo;
      switch(caozuo)
      {
    case 1:
//創(chuàng)建
      int num;
      cout<<"請輸入要錄入的航班數(shù):";
      cin>>num;
      cout<<endl;
      import(num,L);//錄入航班函數(shù): n為所要錄入航班的數(shù)量:
      cout<<endl;
      cout<<"航班信息錄入成功";
      cout<<endl<<endl;
//寫入本地文件,并讀取輸出顯示
      show_L(L);
      break;
    case 2:
//根據(jù)航班號查找
      int dchbh;//根據(jù)航班號查找
       printf("請輸入待查航班號:");
      cin>>dchbh;
      LinkList p;
      p=GetElem_L(L,dchbh);//查找
      cout<<"待查航班為:";
      cout<<"航班號:"<<p->hangbanhao;
      cout<<" 起飛城市:"<<p->qifeichengshi;
      cout<<" 降落城市:"<<p->jiangluochengshi;
      cout<<" 起飛時間:"<<p->qifeishijian;
      cout<<" 降落時間:"<<p->jiangluoshijian;
      cout<<" 座位數(shù):"<<p->zuoweishu;
      cout<<" 票價:"<<p->piaojia;
      cout<<endl<<endl;
      break;
    case 3:
//根據(jù)起降城市查找
       char qi[10];
       char ji[10];
       printf("請輸入待查航班起降城市:");
       cout<<"輸入起飛城市:";
       cin>>qi;
       cout<<"輸入降落城市:";
       cin>>ji;
       LinkList J;
       J=GetElem_Lc(L,qi,ji);//查找
       cout<<"待查航班為:";
       cout<<"航班號:"<<J->hangbanhao;
       cout<<" 起飛城市:"<<J->qifeichengshi;
       cout<<" 降落城市:"<<J->jiangluochengshi;
       cout<<" 起飛時間:"<<J->qifeishijian;
       cout<<" 降落時間:"<<J->jiangluoshijian;
       cout<<" 座位數(shù):"<<J->zuoweishu;
       cout<<" 票價:"<<J->piaojia;
       cout<<endl<<endl;
       break;
    case 4:
//刪除
      int shanchu;
      printf("請輸入要刪除的航班號:");
      scanf("%d",&shanchu);
      ListDelete_L(L,shanchu);//刪除
      show_L(L);
      cout<<endl<<endl;
      break;
    case 5:
//插入
   //這里位置始終在第一行
      ListInsert_L(L,1);//插入
      show_L(L);
      cout<<endl<<endl;
      break;
    case 6:
//修改
      printf("請輸入要修改的航班號:");
      int yxg;
      cin>>yxg;
      LinkList q;
      q=xiugai(L,yxg);//修改
      cout<<"航班號修改為:";
      cin>>q->hangbanhao;
      cout<<"航班起飛城市修改為:";
      cin>>q->qifeichengshi;
      cout<<"航班降落城市修改為:";
      cin>>q->jiangluochengshi;
      cout<<"航班起飛時間修改為:";
      cin>>q->qifeishijian;
      cout<<"航班降落時間修改為:";
      cin>>q->jiangluoshijian;
      cout<<"航班座位數(shù)修改為:";
      cin>>q->zuoweishu;
      cout<<"航班票價修改為:";
      cin>>q->piaojia;
      show_L(L);
      cout<<endl<<endl;
      break;
    case 7:
//訂票
      int renshu;
      cout<<"請選擇您要訂票的人數(shù):";
      cin>>renshu;
      cout<<endl;
      importren(renshu,C);//錄入乘客信息
      cout<<endl;
      cout<<"乘客信息錄入成功";
      cout<<endl;
      int m;
      cout<<"請輸入您要訂的航班號:";
      cin>>m;
      cout<<endl<<endl;
      LinkList R;
      R=GetElem_L(L,m);//查找乘客訂的航班
      show_dp(C,R);//寫入本地文件,并讀取輸出顯示
      cout<<endl<<endl;
      break;
    case 8:
//退票
     cout<<"請輸入您要退票的航班號:";
     int yt;
     cin>>yt;
     cout<<endl<<endl;
     LinkList K;
     K=GetElem_L(L,yt);//查找乘客訂的航班
     show_tp(C,K);//寫入本地文件,并讀取輸出顯示
     cout<<endl<<endl;
     break;
      }//swith的大括號
    }//while的大括號
  return 0;
}//主函數(shù)的大括號

三、運行結(jié)果

1、錄入航班信息

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

2、查找航班(根據(jù)航班號、起降城市查找航班)

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

3、刪除航班

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

4、插入航班

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

5、修改航班

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

6、訂票、退票

如何使用C++實現(xiàn)航空訂票系統(tǒng)課程

以上是“如何使用C++實現(xiàn)航空訂票系統(tǒng)課程”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI