1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 免費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

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>