中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      免費vc++航空客運訂票系統+論文(一)

      時間:2024-09-22 00:35:12 計算機畢業論文 我要投稿
      • 相關推薦

      免費vc++航空客運訂票系統+論文(一)

      航空客運訂票系統
      1  問題描述 
        航空客運訂票的業務活動包括:查詢航線、客票預訂和辦理退票等。試設計一個航空客運訂票系統,以使上述業務可以借助計算機來完成。
      1.1 每條航線所涉及的信息有:終點站名、航班號、飛機號、飛行周日(星期幾)、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級1,2或3)以及等候替補的客戶名單(包括姓名、所需票量)
      1.2 作為示意系統,全部數據可以只放在內存中
      1.3 系統能實現的操作和功能如下:
      1.3.1 查詢航線:根據旅客提出的終點站名輸出下列信息:航班號、飛機號、星期幾飛行,最近一天航班的日期和余票額
      1.3.2 承辦訂票業務:根據客戶提出的要求(航班號、訂票數額)查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續,輸出座位號;若已滿員或余票額少于訂票額,則需重新詢問客戶要求。若需要,可登記排隊候補
      1.3.3 承辦退票業務:根據客戶提供的情況(日期、航班),為客戶辦理退票手續,然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續,否則依次詢問其他排隊候補的客戶
      2  概要設計
      2.1 存儲結構設計
      typedef struct Al_Custom //已訂票客戶
      {
       char name[15];//姓名
       int count;//訂票量
       int level;//艙位等級
       Al_Custom *next;//下一節點指針
      }Al_Custom,*Al_CustomLink;

      免費vc++航空客運訂票系統+論文(一)

      typedef struct Wait_Custom//等候替補的客戶
      {
       char name[15];//姓名
       int count;//所需票量
       Wait_Custom *next;//下一節點指針
      }Wait_Custom;

      typedef struct Wait_Queue//等待隊列
      {
       Wait_Custom *front;//隊列頭指針
       Wait_Custom *rear;//尾指針
      }Wait_Queue;

      typedef struct Flight//航線
      {
       char terminus[15];//終點站名
       char flight_no[10];//航班號
       char plane_no[10];//飛機號
       int week;//飛行周日
       int count;//乘客定額
       int rest;//余票量
       Al_CustomLink Al_link;//指向成員名單鏈表的頭指針
       Wait_Queue wait_queue;//等待替補隊列
      }Flight;
      2.2 主要算法設計
      2.2.1 主程序模塊:
      void main()
      {
         初始化;
         do{
           接受命令;
           處理命令;
           }while(命令!="退出");
      }
      2.2.2  查詢航線模塊——實現查詢功能
      void findFlight()
      {
          提示輸入要查詢航線的終點站名;
          如果存在該航線,則輸出該航線信息;
          否則提示不存在該航線;
      }
      2.2.3  承辦訂票業務模塊——實現訂票功能
      void dingpiao()
      {
          提示輸入航班號和訂票數;
          若不存在該航班號,則提示不存在該航線;
          否則{
               如果有余票,則辦理業務;
               否則提示沒有足夠的余票,詢問是否候補;
               若是,則排隊候補;
              }
      }
      2.2.4  承辦退票業務模塊——實現退票功能
      void tuipiao()
      {
           提示輸入航班號和飛行周日;
           確認航班號和飛行周日都存在,并且客戶有訂票,
           則  {執行退票;
               為排隊候補的客戶辦理訂票業務;
               }
           否則{
                提示有誤
        }
      }
      2.3  測試用例設計
      2.3.1  航線3條:1001    hp001   shanghai  2   50
                          1002    hp002   beijing   5   50
                          1003    hp003   guangzhou 7   50
      2.3.2  查詢航線:shanghai
       2.3.3  承辦訂票業務:航班號1001  數額30  姓名chengangjie 艙位等級2
       2.3.4  承辦訂票業務:航班號1001  數額23  姓名zhenxi      艙位等級3
      2.3.5  承辦退票業務:姓名chengangjie 航班號1001 飛行周日2
      2.3.6  查詢航線:終點站名:shanghai
      3  調試分析
      3.1 本次的設計比較困難,需要實現較多的功能,所以在調試過程中不太順利,主要是指針的修改。經過反復調試以后才得以解決。
      3.2 本程序航線采用數組的存儲結構,每條航線包含8個域,其中乘員名單域為指向乘員名單鏈表的頭指針,等候替補的客戶名單域為分別指向對頭和對尾的指針。
      3.3 訂票函數是在退票業務模塊中使用
      4  經驗和體會
      通過這次的程序設計,進一步理解了鏈表和隊列結構的實現和應用。尤其需要注意的是:對于指針的修改要仔細,否則會發生意想不到的結果。
      5  源程序清單和運行結果
      5.1 程序清單
      #include<iostream.h>
      #include<iomanip.h>
      #include<string.h>
      #include<stdio.h>
      #include<conio.h>
      #define FLIGHT_NUM 100//航線最大數量

      typedef struct Al_Custom //已訂票客戶
      {
       char name[15];//姓名
       int count;//訂票量
       int level;//艙位等級
       Al_Custom *next;//下一節點指針
      }Al_Custom,*Al_CustomLink;

      typedef struct Wait_Custom//等候替補的客戶
      {
       char name[15];//姓名
       int count;//所需票量
       Wait_Custom *next;//下一節點指針
      }Wait_Custom;

      typedef struct Wait_Queue//等待隊列
      {
       Wait_Custom *front;//隊列頭指針
       Wait_Custom *rear;//尾指針
      }Wait_Queue;

      typedef struct Flight//航線
      {
       char terminus[15];//終點站名
       char flight_no[10];//航班號
       char plane_no[10];//飛機號
       int week;//飛行周日
       int count;//乘客定額
       int rest;//余票量
       Al_CustomLink Al_link;//指向成員名單鏈表的頭指針
       Wait_Queue wait_queue;//等待替補隊列
      }Flight;

      void Custom_init(Al_CustomLink &L)
      {
       L=new Al_Custom;
       L->next=0;
      }

      void Custom_insert(Al_CustomLink &L,Al_Custom& custom)
      {
       Al_Custom *p=L,*newnode=new Al_Custom;
       memcpy((void*)newnode,&custom,sizeof(Al_Custom));
       newnode->next=p->next;
       p->next=newnode;
      }

      void copyCustomLink(Al_CustomLink &dest,Al_CustomLink &source)//復制已訂票客戶鏈表
      {
       Al_CustomLink p=source;
       Al_CustomLink q;
       Al_Custom *pnew;
       Custom_init(dest);
       q=dest;
       while(p->next)
       {
        pnew=new Al_Custom;
        memcpy(pnew,p->next,sizeof(Al_Custom));
        pnew->next=0;
        q->next=pnew;
        q=pnew;
        p=p->next;
       }
       
      }

      void Waiter_init(Wait_Queue &Q)
      {
       Q.front=Q.rear=new Wait_Custom;
       Q.front->next=0;
      }

      void Waiter_En(Wait_Queue &Q,Wait_Custom& custom)
      {
       Wait_Custom *newnode=new Wait_Custom;
       memcpy(newnode,&custom,sizeof(Wait_Custom));
       newnode->next=0;
       Q.rear->next=newnode;
       Q.rear=newnode;
      }
      bool Waiter_De(Wait_Queue &Q,Wait_Custom& custom)
      {
       if(Q.rear==Q.front)
        return false;
       memcpy(&custom,Q.front,sizeof(Wait_Custom));
       Wait_Custom *p=Q.front->next;
       Q.front->next=p->next;
       if(Q.rear!=Q.front)
        Q.rear=Q.front;
       delete p;
       custom.next=0;
       return true;
      }


      void copyWait_Queue(Wait_Queue &dest,Wait_Queue& source)//復制等待隊列
      {
       Wait_Custom *p=source.front;
       Waiter_init(dest);
       while(p->next)
       {
        Waiter_En(dest,*p);
        p=p->next;
       }
      }


      int flight_no;//航線數量
      Flight flight[FLIGHT_NUM];//航線數組

      void initFlight(Flight &f)//初始化一條航線
      {
       char ch=0;
       strncpy((char*)&f,&ch,sizeof(Flight));
       Custom_init(f.Al_link);
       Waiter_init(f.wait_queue);
      }

      void initFlight()//初始化航線數組
      {
       flight_no=0;
       char ch=0;
       strncpy((char*)flight,&ch,FLIGHT_NUM*sizeof(Flight));
       for(int i=0;i<FLIGHT_NUM;i++)
       {
        Custom_init(flight[i].Al_link);
        Waiter_init(flight[i].wait_queue);
       }
      }

      void insertFlight(Flight& f)//按終點站名有序插入航線到航線數組
      {
       int i=-1;
       while(i+1<flight_no && strcmp(f.terminus,flight[i+1].terminus)==1)
       {
        i++;
       }
       for(int j=flight_no-1;j>=i+1;j--)
       {
        memcpy((void*)(&(flight[j+1])),(void*)(&(flight[j])),sizeof(Flight));
       }
       memcpy((void*)(&(flight[i+1])),(void*)(&f),sizeof(Flight));
       Custom_init(flight[i+1].Al_link);
       Waiter_init(flight[i+1].wait_queue);
       copyCustomLink(flight[i+1].Al_link,f.Al_link);
       copyWait_Queue(flight[i+1].wait_queue,f.wait_queue);
       flight_no++;
      }

      void init()
      {
       int m;
       cout<<"請輸入航線條數:";
       cin>>m;
       for(int i=1;i<=m;i++)
       {
        Flight f;
        initFlight(f);
        cout<<"輸入第"<<i<<"條航線:"<<endl;
        cout<<"航班號:";
        cin>>f.flight_no;
        cout<<"飛機號:";
        cin>>f.plane_no;
        cout<<"終點站名:";
        cin>>f.terminus;
        cout<<"飛行周日:";
        cin>>f.week;
        cout<<"成員定額:";
        cin>>f.count;
        f.rest=f.count;
        insertFlight(f);
        printf("\n");
       }
      }
      int findbyname(char terminus[15])//根據終點站名查找
      {
       for(int i=0;i<flight_no;i++)
       {
        if(strcmp(flight[i].terminus,terminus)==0)
        {
         return i;
        }
       }
       return -1;
      }

      int findbyno(char no[10])//根據航班號查找
      {
       for(int i=0;i<flight_no;i++)
       {
        if(strcmp(flight[i].flight_no,no)==0)
        {
         return i;
        }
       }
       return -1;
      }


      void findFlight()//查詢航線子模塊
      {
       char terminus[15];
       cout<<"請輸入要查詢航線的終點站號:";
       cin>>terminus;
       int index=findbyname(terminus);
       if(index==-1)
       {
        printf("該航線不存在!\n");
        return ;
       }
       cout<<setw(12)<<"航班號"<<setw(12)<<"飛機號"<<setw(12)<<"飛行周日"<<setw(12)<<"余票額"<<endl;
       cout<<setw(12)<<flight[index].flight_no
        <<setw(12)<<flight[index].plane_no
        <<setw(12)<<flight[index].week
        <<setw(12)<<flight[index].rest<<endl<<endl;
      }

      void dingpiao(int index)
      {

       Wait_Custom *p=flight[index].wait_queue.front;
       while(p!=flight[index].wait_queue.rear)
       {
        if(p->next->count<=flight[index].count)
        {
         cout<<"為"<<p->next->name<<"辦理訂票手續"<<endl;
         Al_Custom *pnew=new Al_Custom;
         pnew->count=p->next->count;
         flight[index].rest-=p->next->count;
         strcpy(pnew->name,p->next->name);
         do{
          cout<<"請"<<p->next->name<<"輸入所需要的艙位等級(1-3):";
          cin>>pnew->level;
         }while(pnew->level<1 || pnew->level>3);
         pnew->next=flight[index].Al_link->next;
         flight[index].Al_link->next=pnew;
         Wait_Custom *q=p->next;
         p->next=q->next;
         
         if(flight[index].wait_queue.rear==q)
          flight[index].wait_queue.rear=p;
         delete q;
        }
       }
      }

      void dingpiao()//承辦訂票業務子模塊
      {
       char no[10];//航班號
       int count;//訂票量
       cout<<"請輸入航班號和訂票數額:";
       cin>>no>>count;
       int index=findbyno(no);
       if(index==-1)
       {
        cout<<"該航線不存在"<<endl;
        return ;
       }
       if(flight[index].rest>=count)//尚有余票
       {
        Al_Custom *pnew=new Al_Custom;
        cout<<"請輸入您的姓名:";
        cin>>pnew->name;
        cout<<"請輸入您要訂的艙位等級:";
        cin>>pnew->level;
        pnew->count=count;
        pnew->next=0;
        flight[index].rest-=count;
        pnew->next=flight[index].Al_link->next;
        flight[index].Al_link->next=pnew;
       }
       else//沒有余票
       {
        cout<<"該航班的余票額不能滿足您的要求,是否排隊候補(y/n):";
        cout.flush();
        char select;
        do{
         select=getch();
        }while(select!='y' && select!='n');
        if(select=='y')//排隊候補
        {
         Wait_Custom *pnew=new Wait_Custom;
         cout<<endl;
         cout<<"請輸入您的姓名:";
         cin>>pnew->name;
         pnew->count=count;
         pnew->next=0;
         flight[index].wait_queue.rear->next=pnew;
         flight[index].wait_queue.rear=pnew;
         cout<<flight[index].wait_queue.rear->name<<endl;
        }
        else
        {
        }
       }
      }

      void tuipiao()//承辦退票業務子模塊
      {
       cout<<"請輸入您的姓名:";
       char name[15];
       cin>>name;
       cout<<"請輸入你要退票的航班號與飛行周日:";
       int week;
       char no[10];
       cin>>no>>week;
       bool isfind=false;
       for(int index=0;index<flight_no;index++)
       {
        if(flight[index].week==week && strcmp(flight[index].flight_no,no)==0)
        {
         Al_Custom *p=flight[index].Al_link;
         while(p && p->next)
         {
          if(strcmp(p->next->name,name)==0)
          { 
           isfind=true;
           Al_Custom *q=p->next;
           p->next=q->next;
           {
            flight[index].rest+=q->count;
            cout<<flight[index].rest<<endl;
            dingpiao(index);//為第index條航線排隊等候的客戶辦理訂票手續
           }
           delete q;
          }
          p=p->next;
         }
        }
       }
       if(!isfind)
       {
        cout<<"您沒有訂該天該航班的票!"<<endl;
        return;
       }
       cout<<"退票成功!"<<endl;
      }

      void welcome()
      {
       cout<<"選擇操作:"<<endl;
       cout<<"              1.查詢航線"<<endl;
       cout<<"              2.承辦訂票業務"<<endl;
       cout<<"              3.承辦退票業務"<<endl;
       cout<<"              4.退出"<<endl;
      }

      void main()
      {
       initFlight();
       init();
       char ch;
       do{
        welcome();
        do{
         ch=getch();
        }while(ch<'1' || ch>'4');
        switch(ch)
        {
        case '1':
         findFlight();
         break;
        case '2':
         dingpiao();
         break;
        case '3':
         tuipiao();
         break;
        case '4':
         break;
        }
       }while(ch!='4');
      }
      5.2 運行結果:
      5.2.1 輸入航線:
      5.2.2 查詢航線:
      5.2.3 承辦訂票業務:
      5.2.4 承辦退票業務:

      5.2.5查詢航線:

      【免費vc++航空客運訂票系統+論文(一)】相關文章:

      免費vc++網上尋呼QICQ源代碼(附帶論文)(一)11-22

      視頻監控系統―視頻捕獲和傳輸模塊VC++03-08

      基于USB接口的數據采集系統-GSM功率測量VC++03-08

      國內航空客運收入管理的應用模型03-24

      免費畢業論文--茶葉修剪機(一)02-26

      民用航空客運服務產品評價11-14

      免費畢業論文--齒輪鏈輪套件設計(一)03-08

      鐵路客運營銷輔助決策系統的應用03-10

      免費畢業論文--普通帶式輸送機的設計論文(一)03-08

      主站蜘蛛池模板: 阿坝县| 中文字幕av日韩精品一区| 日韩av在线不卡二区高清| 余江县| 亚洲免费无毛av一区二区三区| 久久99精品这里精品动漫6| 栾城县| 亚洲午夜无码久久久久软件| 国产精品亚洲婷婷99久久精品| 亚洲av午夜成人片精品| 杨浦区| 观塘区| 国产av一区二区三区福利| 内射毛片内射国产夫妻| 久久久久久久久久91精品日韩午夜福利 | 97久久成人国产精品免费| 麟游县| 国产成人精品蜜芽视频| 色婷婷狠狠97成为人免费| 国产精品毛片av久久| 99久久亚洲精品加勒比| 宅男久久精品国产亚洲av麻豆| 石城县| 廊坊市| 99久久精品久久久| 普兰店市| 文安县| 柏乡县| 国产高潮自拍视频在线观看| 人妖熟女少妇人妖少妇| 将乐县| 午夜无码国产18禁| 亚洲欧美国产成人综合不卡| 鹿邑县| 日韩精品夜色二区91久久久| 精品无吗国产一区二区三区av| 国产不卡一区二区av| 国产日韩亚洲一区二区| 瓦房店市| 伊人不卡中文字幕在线一区二区| 超清无码AV丝袜片在线观看|