国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現航空訂票程序

2020-01-26 13:47:11
字體:
來源:轉載
供稿:網友

這是幫我同學寫的一個C++作業,說實話好久沒寫過C++都有些生疏了。但他們好像還沒學面向對象編程,所以只能是簡單的結構體和輸入輸出的邏輯。
題目要求:

編寫一個航空訂票程序:

假設一等艙5個座位,編號為1~5,經濟艙20個座位,編號為1~20

具體要求如下:

當程序開始時,提示輸入乘客姓名,一個名字只能訂一個座位,如果該名字已經訂過座位了,則提示該乘客座位已定及座位號,否則提示輸入艙位類型;

當輸入艙位類型后,如果該艙位已全部訂出,則提示此艙全部訂完,重新選擇艙位類型;否則顯示可以選擇的座位號,注意已經被訂出的座位號不能出現,提示輸入座位號;

艙位類型:只能輸入”F”或”E”,一等艙為F,經濟艙為E,如果輸入其它字符則提示輸入無效。

座位號:只能輸入前面列出可以選擇的座位號,若輸入其它則提示輸入無效。

程序可以為多個乘客訂票,直到輸入名字為”.”;

最后程序按照艙位類型與座位號排序打印出所有訂票信息(座位號及對應乘客姓名)

最終實現效果:

1、變量

不過既然提到了結構體用來存儲票的信息(其實這就是面向對象思想的早期)。聯系實際,一個結構體代表一個事物,結構體中的字段代表這個事物的屬性;這樣的話,我們可以提取出兩個結構體:座位Seat和票Ticket,由于題目給定總共25個座位,意味著25張票,則將它們聲明成全局變量。

  //座位,那么座位有3個基本屬性:座位類型(F/E),座位編號,座位預定狀態(是否已經被預定)  struct Seat{    char type;    int number;    bool isReservation;  }seats[25];  //票,票有兩個屬性,即票需要表明:誰預定了哪個座位,第一個Seat就是我們前面定義的那個結構體。  struct Ticket{    Seat seat;    string passenger_name;  }tickets[25];

2、函數

我們需要將一些輸出輸入的操作提取成函數,簡化我們的代碼,這里之所以將輸入提取成input()函數,是因為我們需要不斷輸入,即使出錯,所以為了便于遞歸調用就封裝成函數;

bool check(string name);//檢測是否已購票void input();//用于執行輸入void printSeat(char seatType);//顯示剩余座位void reservation(string name,int seatNumber,char seatType);//購票void printTickets(string name);//顯示已購票信息void printError();//顯示輸入不合法

3、主體邏輯

main函數非常簡單,首先需要將座位和票信息初始化,即將它們編號,預定狀態全為“未預定”,然后執行輸入,一個while循環,如果不符合條件就直接跳出while,執行printTickets()打印出所有的訂票信息;

 int main()  {  //初始化艙位和票  for(int i=0;i<25;i++){    if(i<5){      seats[i].type='F';      seats[i].number=i+1;    }else{      seats[i].type='E';      seats[i].number=i+1-5;    }    seats[i].isReservation=false;    tickets[i].seat=seats[i];    tickets[i].passenger_name=" ";  }  cout<<"================================================="<<endl;  cout<<"        歡迎使用CT票務系統          "<<endl;  cout<<"================================================="<<endl;  cout<<"乘客姓名:";  while(cin>>name){      if(name==".")break;      if(surplusF+surplusE==0){        cout<<"/n很遺憾所有票已購完!/n";        break;      }      if(check(name)){        cout<<"/n您已購票,購票信息:/n"<<endl;        printTickets(name);      }else{        cout<<"/n艙位類型 F:一等艙 E:經濟艙/n";        input();      }      cout<<"/n乘客姓名:";  }  printTickets("");  return 0;  }

4、具體函數實現

具體的函數實現邏輯我就不講了,就看代碼吧~

5、完整代碼:

main.cpp

#include<iostream>using namespace std;//定義全局變量,艙位,票,各類型艙位剩余數,便于其它函數全局訪問int surplusF=5;int surplusE=20;int flag=0;char seat_type;int seatNumber;string name;//座位struct Seat{  char type;  int number;  bool isReservation;}seats[25];//票struct Ticket{  Seat seat;  string passenger_name;}tickets[25];bool check(string name);//檢測是否已購票void input();//用于執行輸入void printSeat(char seatType);//顯示剩余座位void reservation(string name,int seatNumber,char seatType);//購票void printTickets(string name);//顯示已購票信息void printError();//顯示輸入不合法int main(){  //初始化艙位和票  for(int i=0;i<25;i++){    if(i<5){      seats[i].type='F';      seats[i].number=i+1;    }else{      seats[i].type='E';      seats[i].number=i+1-5;    }    seats[i].isReservation=false;    tickets[i].seat=seats[i];    tickets[i].passenger_name=" ";  }  cout<<"================================================="<<endl;  cout<<"        歡迎使用CT票務系統          "<<endl;  cout<<"================================================="<<endl;  cout<<"乘客姓名:";  while(cin>>name){      if(name==".")break;      if(surplusF+surplusE==0){        cout<<"/n很遺憾所有票已購完!/n";        break;      }      if(check(name)){        cout<<"/n您已購票,購票信息:/n"<<endl;        printTickets(name);      }else{        cout<<"/n艙位類型 F:一等艙 E:經濟艙/n";        input();      }      cout<<"/n乘客姓名:";  }  printTickets("");  return 0;}bool check(string name){  for(int i=0;i<25;i++){    if(name==tickets[i].passenger_name)      return true;  }  return false;}//負責輸入,之所以單獨寫成函數,是因為非法輸入的時候需要遞歸調用void input(){  flag=0;  cout<<"/n艙位類型(F/E):";  cin>>seat_type;  cin.get();  switch(seat_type){    case 'F':      if(surplusF>0)        cout<<"/n可選座位號:";      printSeat('F');      if(flag!=0)break;      cin>>seatNumber;      cin.get();      reservation(name,seatNumber,'F');      break;    case 'E':      if(surplusE>0)        cout<<"/n可選座位號:";      printSeat('E');      if(flag!=0)break;      cin>>seatNumber;      cin.get();      reservation(name,seatNumber,'E');      break;    default:      printError();      input();      break;    }}//輸出可選的座位號void printSeat(char seatType){  int full=0;  for(int i=0;i<25;i++){    if(seats[i].isReservation==false){      if(seatType=='F'){        if(surplusF==0){          cout<<"/n此艙位全部訂完,請重新選擇艙位類型:/n";          full++;          break;        }        cout<<seats[i].number<<" ";        if(i==4) break;      }      if(seatType=='E'){        if(surplusE==0){          cout<<"/n此艙位全部訂完,請重新選擇艙位類型:/n";          full++;          break;        }        if(i>4){          cout<<seats[i].number<<" ";        }      }    }  }  if(full==0){    cout<<"/n";    cout<<"/n座位號:";  }else{    input();    flag++;  }}//輸入無效void printError(){  cout<<"/n輸入無效!"<<endl;}//購票,即改變seats tickets 屬性值void reservation(string name,int seatNumber,char seatType){  if(seatNumber<1&&seatNumber>20){    printError();  }  else{    switch(seatType){      case 'F':        if(seatNumber>0&&seatNumber<6){          if(seats[seatNumber-1].isReservation==false){            seats[seatNumber-1].isReservation=true;            tickets[seatNumber-1].seat=seats[seatNumber-1];            tickets[seatNumber-1].passenger_name=name;            surplusF--;            cout<<"/n 恭喜 "+name+" 訂票成功!"<<endl;            break;          }else{            printError();            //input();          }        }else          printError();        break;      case 'E':        if(seatNumber>0&&seatNumber<=20){          if(seats[seatNumber+4].isReservation==false){            seats[seatNumber+4].isReservation=true;            tickets[seatNumber+4].seat=seats[seatNumber+4];            tickets[seatNumber+4].passenger_name=name;            surplusE--;            cout<<"/n 恭喜 "+name+" 訂票成功!"<<endl;            break;          }else{            printError();          }        }else          printError();        break;    }  }}void printTickets(string name){  cout<<"================================================="<<endl;  cout<<"        訂 票 信 息          "<<endl;  cout<<"================================================="<<endl;  cout<<" 艙位類型    座位號    乘客姓名     "<<endl;  cout<<"/n";  for(int i=0;i<25;i++){    if(name==tickets[i].passenger_name){        switch(tickets[i].seat.type){        case 'F':          cout<<" 頭等艙      ";          break;        case 'E':          cout<<" 經濟艙      ";          break;        }      cout<<tickets[i].seat.number<<"       "<<tickets[i].passenger_name<<endl;      cout<<"/n";      break;    }    else if(name==""){      if(tickets[i].seat.isReservation==true){      switch(tickets[i].seat.type){        case 'F':          cout<<" 頭等艙      ";          break;        case 'E':          cout<<" 經濟艙      ";          break;      }      cout<<tickets[i].seat.number<<"       "<<tickets[i].passenger_name<<endl;      cout<<"/n";      }    }  }  cout<<"================================================="<<endl;}

Tips:

如果某些偷懶的家伙正好是做這個課程大作業搜到這兒了,希望你能在看懂的基礎上自己多改改,畢竟這是我替同學寫的,要是你們都一樣,豈不要尷尬了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郸城县| 东城区| 梁山县| 三台县| 莒南县| 同德县| 衡阳市| 安平县| 凉城县| 忻州市| 伊金霍洛旗| 剑阁县| 黄梅县| 伊金霍洛旗| 丽江市| 临清市| 青冈县| 花莲市| 北流市| 通海县| 建平县| 姚安县| 郎溪县| 安阳县| 安岳县| 吴桥县| 大洼县| 营口市| 元氏县| 镇江市| 盐山县| 合阳县| 县级市| 翁牛特旗| 修武县| 泾阳县| 陵川县| 甘南县| 象山县| 柳林县| 乐平市|