久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

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

時間:2024-09-22 00:35:12 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

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

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

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

typedef struct Wait_Custom//等候替補的客戶
{
 char name[15];//姓名
 int count;//所需票量
 Wait_Custom *next;//下一節(jié)點指針
}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 主要算法設(shè)計
2.2.1 主程序模塊:
void main()
{
   初始化;
   do{
     接受命令;
     處理命令;
     }while(命令!="退出");
}
2.2.2  查詢航線模塊——實現(xiàn)查詢功能
void findFlight()
{
    提示輸入要查詢航線的終點站名;
    如果存在該航線,則輸出該航線信息;
    否則提示不存在該航線;
}
2.2.3  承辦訂票業(yè)務(wù)模塊——實現(xiàn)訂票功能
void dingpiao()
{
    提示輸入航班號和訂票數(shù);
    若不存在該航班號,則提示不存在該航線;
    否則{
         如果有余票,則辦理業(yè)務(wù);
         否則提示沒有足夠的余票,詢問是否候補;
         若是,則排隊候補;
        }
}
2.2.4  承辦退票業(yè)務(wù)模塊——實現(xiàn)退票功能
void tuipiao()
{
     提示輸入航班號和飛行周日;
     確認(rèn)航班號和飛行周日都存在,并且客戶有訂票,
     則  {執(zhí)行退票;
         為排隊候補的客戶辦理訂票業(yè)務(wù);
         }
     否則{
          提示有誤
  }
}
2.3  測試用例設(shè)計
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  承辦訂票業(yè)務(wù):航班號1001  數(shù)額30  姓名chengangjie 艙位等級2
 2.3.4  承辦訂票業(yè)務(wù):航班號1001  數(shù)額23  姓名zhenxi      艙位等級3
2.3.5  承辦退票業(yè)務(wù):姓名chengangjie 航班號1001 飛行周日2
2.3.6  查詢航線:終點站名:shanghai
3  調(diào)試分析
3.1 本次的設(shè)計比較困難,需要實現(xiàn)較多的功能,所以在調(diào)試過程中不太順利,主要是指針的修改。經(jīng)過反復(fù)調(diào)試以后才得以解決。
3.2 本程序航線采用數(shù)組的存儲結(jié)構(gòu),每條航線包含8個域,其中乘員名單域為指向乘員名單鏈表的頭指針,等候替補的客戶名單域為分別指向?qū)︻^和對尾的指針。
3.3 訂票函數(shù)是在退票業(yè)務(wù)模塊中使用
4  經(jīng)驗和體會
通過這次的程序設(shè)計,進(jìn)一步理解了鏈表和隊列結(jié)構(gòu)的實現(xiàn)和應(yīng)用。尤其需要注意的是:對于指針的修改要仔細(xì),否則會發(fā)生意想不到的結(jié)果。
5  源程序清單和運行結(jié)果
5.1 程序清單
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#define FLIGHT_NUM 100//航線最大數(shù)量

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

typedef struct Wait_Custom//等候替補的客戶
{
 char name[15];//姓名
 int count;//所需票量
 Wait_Custom *next;//下一節(jié)點指針
}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)//復(fù)制已訂票客戶鏈表
{
 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)//復(fù)制等待隊列
{
 Wait_Custom *p=source.front;
 Waiter_init(dest);
 while(p->next)
 {
  Waiter_En(dest,*p);
  p=p->next;
 }
}


int flight_no;//航線數(shù)量
Flight flight[FLIGHT_NUM];//航線數(shù)組

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()//初始化航線數(shù)組
{
 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)//按終點站名有序插入航線到航線數(shù)組
{
 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<<"請輸入航線條數(shù):";
 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])//根據(jù)終點站名查找
{
 for(int i=0;i<flight_no;i++)
 {
  if(strcmp(flight[i].terminus,terminus)==0)
  {
   return i;
  }
 }
 return -1;
}

int findbyno(char no[10])//根據(jù)航班號查找
{
 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<<"辦理訂票手續(xù)"<<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()//承辦訂票業(yè)務(wù)子模塊
{
 char no[10];//航班號
 int count;//訂票量
 cout<<"請輸入航班號和訂票數(shù)額:";
 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()//承辦退票業(yè)務(wù)子模塊
{
 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條航線排隊等候的客戶辦理訂票手續(xù)
     }
     delete q;
    }
    p=p->next;
   }
  }
 }
 if(!isfind)
 {
  cout<<"您沒有訂該天該航班的票!"<<endl;
  return;
 }
 cout<<"退票成功!"<<endl;
}

void welcome()
{
 cout<<"選擇操作:"<<endl;
 cout<<"              1.查詢航線"<<endl;
 cout<<"              2.承辦訂票業(yè)務(wù)"<<endl;
 cout<<"              3.承辦退票業(yè)務(wù)"<<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 運行結(jié)果:
5.2.1 輸入航線:
5.2.2 查詢航線:
5.2.3 承辦訂票業(yè)務(wù):
5.2.4 承辦退票業(yè)務(wù):

5.2.5查詢航線:

【免費vc++航空客運訂票系統(tǒng)+論文(一)】相關(guān)文章:

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

視頻監(jiān)控系統(tǒng)―視頻捕獲和傳輸模塊VC++03-08

基于USB接口的數(shù)據(jù)采集系統(tǒng)-GSM功率測量VC++03-08

國內(nèi)航空客運收入管理的應(yīng)用模型03-24

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

民用航空客運服務(wù)產(chǎn)品評價11-14

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

鐵路客運營銷輔助決策系統(tǒng)的應(yīng)用03-10

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