<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看