航空客運訂票示意系統

來源:互聯網
上載者:User

沒見過這麼搓的題目。。。

如果出什麼題目,最好在細節上不要給人以誤導或者矛盾。這樣還不如不交待細節。

/*<br />航空客運訂票系統<br />1 問題描述<br />航空客運訂票的商務活動包括:查詢航線、客票預訂和辦理退票等。<br />試設計一個航空客運訂票系統以使上述業務可以藉助電腦來完成。<br />1.1 每條航線所涉及的資訊有:終點站名、航班號、飛機號、飛行周日(星期幾)、<br />乘員定額、餘票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級1,2或3)以及等候替補的客戶名單(包括姓名、所需票量)<br />1.2 作為示意系統,全部資料可以只放在記憶體中<br />1.3 系統能實現的操作和功能如下:<br />1.3.1 查詢航線:根據旅客提出的終點站名輸出下列資訊:航班號、飛機號、星期幾飛行,最近一天航班的日期和餘票額<br />1.3.2 承辦訂票業務:根據客戶提出的要求(航班號、訂票數額)查詢該航班票額情況,若尚有餘票,<br />則為客戶辦理訂票手續,輸出座位號;若已滿員或餘票額少於訂票額,則需重新詢問客戶要求。若需要,可登記排隊候補<br />1.3.3 承辦退票業務:根據客戶提供的情況(日期、航班),為客戶辦理退票手續,然後查詢該航班是否有人排隊候補,<br />首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續,否則依次詢問其他排隊候補的客戶<br />*/<br />#include <stdio.h><br />#include <string.h><br />#include <iostream><br />#include <queue><br />using namespace std;<br />typedef enum Status {ERROR , OK};<br />const int MaxC = 20;//名字長度<br />const int MaxN = 30;//航班最大數<br />class Passenger{//客戶訂票、登記資訊<br />public:<br />friend class PassengerQueue;<br />friend class TicketSystem;<br />Passenger(): next(NULL){}<br />Passenger(char *s , int _t , int _b):ticketBuy(_t) , bunkClass(_b) , next(NULL){strcpy(name , s);}<br />void Display(){cout << "姓名:" << name << "票數:" << ticketBuy << "艙位:" << bunkClass;}<br />private:<br />char name[MaxC];<br />int ticketBuy;<br />int bunkClass;<br />Passenger *next;<br />};<br />class PassengerQueue{//客戶隊列<br />public:<br />PassengerQueue():head() , rear(&head){}<br />void push(Passenger p);<br />void pop();<br />bool empty();<br />Passenger top();<br />Passenger* find(int bookNum);<br />Passenger* find(char *name);<br />private:<br />Passenger head , *rear;<br />};<br />class FlightNode{//航班資訊<br />public:<br />FlightNode(){}<br />FlightNode(char *,int,int,int,int,int);<br />void Display();<br />void Book(int);<br />void Wait(int);<br />char name[MaxC];<br />int flightNum;<br />int planeNum;<br />int day;<br />int upLimit;<br />int ticketLeft;<br />PassengerQueue already , wait;<br />};<br />class TicketSystem{//訂票系統主要功能<br />public:<br />TicketSystem(){flightN = 0;}<br />Status QueryFlight();<br />Status BookTicket();<br />Status BounceTicket();<br />void AddFlight(FlightNode);<br />private:<br />FlightNode flight[MaxN];<br />int flightN;<br />};<br />//////////////////////////////////////////////////////////////////////////////////<br />//客戶隊列主要功能<br />bool PassengerQueue::empty()<br />{<br />return head.next == NULL;<br />}<br />void PassengerQueue::push(Passenger p)<br />{<br />rear = rear->next = new Passenger(p);<br />}<br />void PassengerQueue::pop()<br />{<br />Passenger *p = head.next;<br />head.next = p->next;<br />delete p;<br />}<br />Passenger PassengerQueue::top()<br />{<br />return *head.next;<br />}<br />Passenger* PassengerQueue::find(int bookNum)<br />{<br />Passenger *p = &head , *q;<br />while (p->next){<br />if (p->next->ticketBuy <= bookNum)break;<br />p = p->next;<br />}<br />q = p->next;<br />if (q == NULL)return NULL;<br />p->next = q->next;<br />return q;<br />}<br />Passenger* PassengerQueue::find(char *name)<br />{<br />Passenger *p = &head , *q;<br />while (p->next){<br />if (!strcmp(p->next->name , name))break;<br />p = p->next;<br />}<br />q = p->next;<br />if (q == NULL)return NULL;<br />p->next = q->next;<br />return q;<br />}<br />//客戶隊列主要功能<br />//////////////////////////////////////////////////////////////////////////////////<br />//////////////////////////////////////////////////////////////////////////////////<br />//航班主要功能<br />FlightNode::FlightNode(char *_n, int _f, int _p, int _d, int _u, int _t)<br />{<br />strcpy(name , _n);<br />flightNum = _f;<br />planeNum = _p;<br />day = _d;<br />upLimit = _u;<br />ticketLeft = _t;<br />}<br />void FlightNode::Display()<br />{<br />cout << "航班號:" << flightNum << "/t飛機號:" << planeNum;<br />cout <<"/t星期幾飛行:" << day << "/t總票數上限" << upLimit << "/t餘票額:" << ticketLeft << endl;<br />}<br />void FlightNode::Book(int bookNum)<br />{<br />char name[MaxC];<br />int bunkClass;<br />cout << "請輸入您的姓名和需要的倉位號(1/2/3): ";<br />cin >> name >> bunkClass;<br />already.push(Passenger(name , bookNum , bunkClass));<br />cout << "訂票成功!您的座位號: " << upLimit - ticketLeft + 1<< " 到 " << (upLimit - ticketLeft) + bookNum << " 。/n";<br />ticketLeft -= bookNum;<br />}<br />void FlightNode::Wait(int bookNum)<br />{<br />char name[MaxC];<br />int bunkClass;<br />cout << "請輸入您的姓名和需要的倉位號(1/2/3):";<br />cin >> name >> bunkClass;<br />wait.push(Passenger(name , bookNum , bunkClass));<br />cout << "您的資訊已經登記!" << endl;<br />}<br />//航班主要功能<br />//////////////////////////////////////////////////////////////////////////////////<br />//////////////////////////////////////////////////////////////////////////////////<br />//訂票系統主要功能<br />void TicketSystem::AddFlight(FlightNode f)<br />{<br />flight[flightN ++] = f;<br />}<br />Status TicketSystem::QueryFlight()<br />{<br />char _name[MaxC];<br />cout << "請輸入您要去的目的地:";<br />cin >> _name;<br />int i;<br />int status = ERROR;<br />for (i = 0;i < flightN;i ++){<br />if (!strcmp(flight[i].name , _name)){<br />flight[i].Display();<br />status = OK;<br />}<br />}<br />return (Status)status;<br />}<br />Status TicketSystem::BookTicket()<br />{<br />int flightNum, bookNum;<br />cout << "請輸入您要預定的航班號和票數:";<br />cin >> flightNum >> bookNum;<br />int i;<br />char ch;<br />for (i = 0;i < flightN;i ++){<br />if (flightNum == flight[i].flightNum)break;<br />}<br />if (i == flightN){<br />cout << "對不起,沒有這個航班。" << endl;<br />return ERROR;<br />}//沒有這個航班<br />if (flight[i].ticketLeft >= bookNum){<br />flight[i].Book(bookNum);<br />}else{<br />cout << "沒有這麼多座位,是否需要登記?(Y / N)" << endl;<br />cin >> ch;<br />if (ch == 'Y'){<br />flight[i].Wait(bookNum);<br />}<br />}<br />return OK;<br />}<br />Status TicketSystem::BounceTicket()<br />{<br />int day , flightNum;<br />cout << "請輸入您要退訂的時間(星期幾)和航班號:";<br />cin >> day >> flightNum;<br />int i;<br />char name[MaxN];<br />Passenger *p;<br />for (i = 0;i < flightN;i ++){<br />if (flight[i].day == day && flightNum == flight[i].flightNum)break;<br />}<br />if (i == flightN){<br />cout << "找不到該航班." << endl;<br />return ERROR;<br />}<br />cout << "請輸入您的姓名:";<br />cin >> name;<br />p = flight[i].already.find(name);<br />if (p == NULL){<br />cout << "您的名字輸入有誤!" << endl;<br />}else{<br />(*p).Display();<br />flight[i].ticketLeft += (*p).ticketBuy;<br />delete p;<br />cout << "已經為你取消訂票。" << endl;<br />if (!flight[i].wait.empty()){<br />p = flight[i].wait.find(flight[i].upLimit - flight[i].ticketLeft);<br />if (!p) return OK;<br />flight[i].already.push(*p);<br />delete p;<br />}<br />}<br />return OK;<br />}<br />//訂票系統主要功能<br />//////////////////////////////////////////////////////////////////////////////////<br />void __test()<br />{<br />TicketSystem t;//fpdut<br />int n;<br />//終點航班號飛機號周數最多可容納<br />t.AddFlight(FlightNode("美國",1,10, 1, 55,55));<br />t.AddFlight(FlightNode("印度",2,9, 3, 22,22));<br />t.AddFlight(FlightNode("日本",3,8, 2, 33,33));<br />t.AddFlight(FlightNode("印度",4,7, 3, 42,42));<br />t.AddFlight(FlightNode("越南",5,6, 4, 43,43));<br />t.AddFlight(FlightNode("朝鮮",6,5, 5, 21,21));<br />t.AddFlight(FlightNode("菲律賓",7,4, 0, 4,4));<br />t.AddFlight(FlightNode("法國",8,3, 5, 5,5));<br />t.AddFlight(FlightNode("俄羅斯",9,2, 5, 1,1));<br />t.AddFlight(FlightNode("美國",10,1, 3, 2,2));</p><p>while (true){<br />cout<<"/n/t 歡迎使用航空客運訂票系統/n";<br />cout<<"/t ++++++++++++++++++++++++++++++++++++++++++++++/n";<br />cout<<"/t + 1. 查詢功能 +/n";<br />cout<<"/t + 2. 訂票功能 +/n";<br />cout<<"/t + 3. 退票功能 +/n";<br />cout<<"/t + 4. 退出 +/n";<br />cout<<"/t ++++++++++++++++++++++++++++++++++++++++++++++/n";<br />cout<<"/n/t請選擇:";<br />cin>>n;<br />switch(n)<br />{<br />case 1: t.QueryFlight(); break; //查詢功能<br />case 2: t.BookTicket(); break; //訂票功能<br />case 3: t.BounceTicket();break; //退票功能<br />case 4: return;<br />default:cout<<"輸入錯誤!/n";//退出<br />}<br />system("pause");<br />system("cls");<br />}<br />}<br />int main()<br />{<br />__test();<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.