




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