版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
可編輯版14/14上海電力學(xué)院數(shù)據(jù)結(jié)構(gòu)C++課程設(shè)計題目:航空客運訂票系統(tǒng)學(xué)生姓名:范曉寧學(xué)號:20103285院系:計算機與信息工程學(xué)院專業(yè)年級:信息安全2010級2012年6月29日一、設(shè)計題目航空客運訂票的業(yè)務(wù)活動包括;查詢航線、客票預(yù)訂和辦理退票等。試設(shè)計一個航空客運訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計算機來完成。[基本要求]〔1每條航線所涉及的信息有:終點站名、航班名、飛機號、飛行周日〔星期幾、乘員定額、余票量、已訂票的客戶名單〔包括姓名、訂票量、艙位等級1,2或3以及等候替補的客戶名單〔包括姓名、所需票量;〔2作為示意系統(tǒng),全部數(shù)據(jù)可以只放在內(nèi)存中;〔3系統(tǒng)能實現(xiàn)的操作和功能如下:①查詢航線:根據(jù)旅客提出的終點站名輸出下列信息:航班號、飛機號、星期幾飛行,最近一天航班的日期和余票額;②承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求〔航班號、訂票數(shù)額查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號;若已滿員或余票額少于訂票額,則需重新詢問客戶要求。若需要,可登記排隊候補;③承辦退票業(yè)務(wù):根據(jù)客戶提供的情況〔日期、航班,為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,若所退票額能滿足客戶的要求,則為客戶辦理訂票手續(xù),否則依次詢問其他排隊候補的客戶。二、需求分析1運行環(huán)境〔軟、硬件環(huán)境Winxp32位visualC++6.02輸入的形式和輸入值的范圍由航空公司輸入航線情況并以單鏈表的形式存儲在內(nèi)存里面3輸出的形式描述通過客戶的輸入輸出相應(yīng)的內(nèi)容4功能描述用戶通過本系統(tǒng)實現(xiàn)該航空公司的查詢、訂票〔包括候補、和退票功能5測試數(shù)據(jù)終點站航班飛機號飛行日期成員定額余票量zhengzhouIphone4s1Sunday33beijingNokia2Tuesday22tianjinASUS3Friday44三、概要設(shè)計1抽象數(shù)據(jù)類型定義描述〔對各類的成員及成員函數(shù)進(jìn)行抽象描述,參見書或ppt及實驗一條航線包括了終點站、航班名、飛機號、飛行周日、成員定額、余票量、訂票人員、候補人員等信息,我們可以將航線看成一類,定義為一個類,而訂票人員通用的屬性是:姓名、訂票張數(shù)和艙位等級,候補人員通用屬性是姓名和訂票張數(shù),可以將訂票人員和候補人員定義為結(jié)構(gòu)體,航線定義為一個類,類包括了兩個結(jié)構(gòu)體。具體定義如下:classtransportNode//航線類節(jié)點{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班號 intday;//飛行日期 intlimitednum;//乘員限額 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intrate;//艙位等級 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intm;//記錄排隊等候的顧客的數(shù)量 }s[40]; transportNode*next;}功能模塊設(shè)計〔如主程序模塊設(shè)計主程序中錄入航線的信息,然后進(jìn)入主菜單,再實現(xiàn)其他的功能,類transport中包括了除去主菜單以外的所有的功能函數(shù)classtransport{public: transport<>;//無參構(gòu)造函數(shù)構(gòu)造頭節(jié)點 voidrecort<>;//記錄航班信息 voidchest<>;//實現(xiàn)根據(jù)輸入的目的地查詢的功能 voidbook<>;//實現(xiàn)旅客的訂票功能 voidbounce<>;//實現(xiàn)退票功能private: transportNode*head;};intmenu<>;//進(jìn)入主菜單3模塊層次調(diào)用關(guān)系圖函數(shù)入口,錄入航班信息函數(shù)入口,錄入航班信息進(jìn)入主菜單選擇1234進(jìn)入主菜單選擇12341234沒有查到訂票退票查詢訂票退票查詢查到輸出輸出輸出回主菜單退出退出回主菜單退出四、詳細(xì)設(shè)計實現(xiàn)概要設(shè)計中定義的所有的類的定義及類中成員函數(shù),并對主要的模塊寫出偽碼算法。類和它的私有成員以及成員函數(shù)classtransportNode//航線類節(jié)點{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班號 intday;//飛行日期 intlimitednum;//乘員限額 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intrate;//艙位等級 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intm;//記錄排隊等候的顧客的數(shù)量 }s[40]; transportNode*next;};舉出訂票的成員函數(shù)實現(xiàn):voidtransport::book<>//訂票系統(tǒng){ transporty; transportNodep; staticinti=0;//靜態(tài)變量存儲上次訂票信息 staticintj=0;//靜態(tài)變量存儲上次排隊信息 staticintk=1;p.s[j].m=0; intm=0;//計數(shù)器,據(jù)此判斷是否有符合目的地的票 charc; transportNode*pre; pre=head->next; charf[10]; cout<<" ********歡迎進(jìn)入訂票系統(tǒng)*******"<<endl; cout<<"請輸入您的姓名:"; cin>>p.b[i].name; cout<<"請輸入您的票數(shù):"; cin>>p.b[i].ticketnum; cout<<"請輸入您的艙位等級:"; cin>>p.b[i].rate; cout<<"請輸入您要訂的航班號:"; cin>>f; while<pre> { if<strcmp<f,pre->flightname>==0&&pre->remainber>=p.b[i].ticketnum> { cout<<"恭喜!訂票成功!"<<endl<<"座位號是:"; for<intz=0;z<p.b[i].ticketnum;z++> cout<<k++<<" "; cout<<endl; pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } if<pre->remainber<p.b[i].ticketnum> { cout<<"對不起!余票不足!"<<endl<<"您要加入排序嗎?<Y/N>:"; cin>>c; if<c=='Y'> { cout<<"請輸入您的名字:"; cin>>p.s[j].name; cout<<"請輸入您需要的票數(shù):"; cin>>p.s[j].ticketnum; cout<<"排隊成功!如果有人退票,我們會盡快通知您!"<<endl; j++; p.s[j].m++; } cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } else pre=pre->next; } if<pre==NULL> { cout<<"抱歉!沒有對應(yīng)的航班號o<︶︿︶>o"; cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; }}五、調(diào)試分析包括調(diào)試過程中遇到的問題及解決的方法、算法的時間空間復(fù)雜性分析、經(jīng)驗體會。調(diào)試過程中出現(xiàn)了很多錯誤,剛開始的時候,我將訂票人員看作一個類、將候補人員看作一個類,將航線看作一個大類。而我將兩個小類放進(jìn)了大類中,想讓小類當(dāng)作大類的成員。classtransportNode//航線類節(jié)點這是一個類{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班號 intday;//飛行日期 intlimitednum;//乘員限額 intremainber;//余票classbooknode這里還有一個 { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intrate;//艙位等級 };classsparenode這里也有一個 { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intm;//記錄排隊等候的顧客的數(shù)量 }; transportNode*next;};但是總是不能成功,非常郁悶。于是我問了問老師,老師告訴我類是不能嵌套的!當(dāng)時我就暈了,原來不能嵌套啊,于是我將里面的小類改成了結(jié)構(gòu)體,這樣,很多問題就迎刃而解了classtransportNode//航線類節(jié)點{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班號 intday;//飛行日期 intlimitednum;//乘員限額 intremainber;//余票structbooknode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intrate;//艙位等級 }b[40];structsparenode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intm;//記錄排隊等候的顧客的數(shù)量 }s[40]; transportNode*next;};2、在編程的時候很容易忽略一些邊界條件,導(dǎo)致漏洞很多,比如設(shè)計主菜單的時候有1、2、3、4等選項,但是如果用戶選擇了其他的就會出現(xiàn)陷入死循環(huán),我將主菜單的代碼改成了:intmenu<>{ intc;cout<<" ****************歡迎進(jìn)入主菜單***********"<<endl<<endl;cout<<" * 通過目的地查詢請按1*"<<endl;cout<<" * 訂票請按2*"<<endl;cout<<" * 退票請按3*"<<endl;cout<<"*退出請按其他鍵*"<<endl;cout<<""<<endl;cout<<"請輸入您的選擇:";cin>>c;returnc;}這樣就不會再陷入死循環(huán)了!時間復(fù)雜度的話,由于程序源代碼中沒有多重循環(huán),所以時間復(fù)雜度都很小??傊?調(diào)試過程中還是遇到了不少問題,不過都在同學(xué)和自己的努力中解決了。六用戶使用說明詳細(xì)列出每一步的操作說明。錄入航班信息〔應(yīng)該是航空公司錄入的,添加到數(shù)據(jù)庫中2、實現(xiàn)查詢功能:是客戶的查詢3、訂票〔余票充足4、訂票〔余票不足5、余票不足排隊6、退票退出系統(tǒng)測試結(jié)果八、附錄:程序設(shè)計源代碼#include<iostream.h>#include<string.h>#include<STDLIB.H>classtransport;intmenu<>;classtransportNode//航線類節(jié)點{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班號 intday;//飛行日期 intlimitednum;//乘員限額 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intrate;//艙位等級 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票數(shù) intm;//記錄排隊等候的顧客的數(shù)量 }s[40]; transportNode*next;};classtransport{public: transport<>;//無參構(gòu)造函數(shù)構(gòu)造頭節(jié)點 voidrecort<>;//記錄航班信息 voidchest<>;//實現(xiàn)根據(jù)輸入的目的地查詢的功能 voidbook<>;//實現(xiàn)旅客的訂票功能 voidbounce<>;//實現(xiàn)退票功能private: transportNode*head;};transport::transport<>{ head=newtransportNode; head->next=NULL;}voidtransport::chest<>//實現(xiàn)查詢功能{ chara[10];//輸入的地址 intm=0;//計數(shù)器,判斷是否有符合條件的航班 charq; cout<<"請輸入要查詢的目的地:"; cin>>a; transportNode*pre; pre=head->next; while<pre> { if<strcmp<a,pre->finish>==0> { m++; cout<<"恭喜!查到了,航班信息如下:"<<endl; cout<<" 航班名:"<<pre->flightname<<endl; cout<<" 航班號:"<<pre->flightnum<<endl; cout<<" 飛行時間:"<<pre->day<<endl; cout<<" 余票:"<<pre->limitednum<<endl; } pre=pre->next; } if<!m> { cout<<"抱歉!沒有對應(yīng)的航班!"<<endl; cout<<"返回主菜單請按0,按其他鍵退出:"<<endl; cin>>q; if<q=='0'> return; elseexit<0>; } else { cout<<"回主菜單請按0,按任意鍵退出!"; cin>>q; if<q=='0'> return; }}voidtransport::book<>//訂票系統(tǒng){ transporty; transportNodep; staticinti=0;//靜態(tài)變量存儲上次訂票信息 staticintj=0;//靜態(tài)變量存儲上次排隊信息 staticintk=1;p.s[j].m=0; intm=0;//計數(shù)器,據(jù)此判斷是否有符合目的地的票 charc; transportNode*pre; pre=head->next; charf[10]; cout<<" ********歡迎進(jìn)入訂票系統(tǒng)*******"<<endl; cout<<"請輸入您的姓名:"; cin>>p.b[i].name; cout<<"請輸入您的票數(shù):"; cin>>p.b[i].ticketnum; cout<<"請輸入您的艙位等級:"; cin>>p.b[i].rate; cout<<"請輸入您要訂的航班號:"; cin>>f; while<pre> { if<strcmp<f,pre->flightname>==0&&pre->remainber>=p.b[i].ticketnum> { cout<<"恭喜!訂票成功!"<<endl<<"座位號是:"; for<intz=0;z<p.b[i].ticketnum;z++> cout<<k++<<" "; cout<<endl; pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } if<pre->remainber<p.b[i].ticketnum> { cout<<"對不起!余票不足!"<<endl<<"您要加入排序嗎?<Y/N>:"; cin>>c; if<c=='Y'> { cout<<"請輸入您的名字:"; cin>>p.s[j].name; cout<<"請輸入您需要的票數(shù):"; cin>>p.s[j].ticketnum; cout<<"排隊成功!如果有人退票,我們會盡快通知您!"<<endl; j++; p.s[j].m++; } cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } else pre=pre->next; } if<pre==NULL> { cout<<"抱歉!沒有對應(yīng)的航班號o<︶︿︶>o"; cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return; elseexit<0>; }}voidtransport::bounce<>//退票實現(xiàn)函數(shù){ transporta; transportNodeb; charc; inti=0; intx; cout<<"歡迎進(jìn)入退票系統(tǒng)!"; cout<<"請輸入您要退票的目的地:"; cin>>b.finish; cout<<"請輸入您的飛行日期:"; cin>>b.day; cout<<"請輸入您的退票張數(shù):"; cin>>x; while<x>=b.s[i].ticketnum&&i<b.s[i].m> { cout<<"所退票數(shù)滿足候補客戶需求"; x-=b.s[i].ticketnum; i++; } if<i==b.s[i].m> b.remainber-=x; cout<<"退票成功,希望我們的服務(wù)能讓您滿意,期待下次為您服務(wù)!"<<endl; cout<<"回主菜單請按0,按任意鍵退出!"; cin>>c; if<c=='0'> return;}voidtransport::recort<>{ transportNode*t;tran
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年蛋糕叉項目投資價值分析報告
- 2024至2030年燈具總裝流水線項目投資價值分析報告
- 2024至2030年中國高強滌綸絲線行業(yè)投資前景及策略咨詢研究報告
- 2024年土壤水勢傳感器項目可行性研究報告
- 2024至2030年中國砂漿混凝土防水劑數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國燃油飲水機數(shù)據(jù)監(jiān)測研究報告
- 2025屆高考英語3500詞匯基礎(chǔ)+提升練01含解析
- 2024年版農(nóng)產(chǎn)品大米購銷協(xié)議版
- 2024年度云計算資源租賃協(xié)議版
- 2024-2030年財務(wù)管理系統(tǒng)行業(yè)競爭格局分析及投資前景與戰(zhàn)略規(guī)劃研究報告
- 二輪復(fù)習(xí)微專題湖泊專題
- 2024年德陽發(fā)展控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 餐前檢查表(標(biāo)準(zhǔn)模版)
- 2022-2023學(xué)年廣東深圳福田區(qū)七年級上冊期中地理試卷及答案
- 重大風(fēng)險管控方案及措施客運站
- 陜西方言的文化價值與保護策略
- 關(guān)于小學(xué)數(shù)學(xué)課堂中數(shù)形結(jié)合教學(xué)的調(diào)查研究的開題報告
- 傳統(tǒng)文化的傳承和創(chuàng)新
- 2024春國開會計實務(wù)專題形考任務(wù)題庫及答案匯總
- 2023年12月教師數(shù)字素養(yǎng)測評試題及參考答案
- 《肺曲霉菌》課件
評論
0/150
提交評論