航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告1_第1頁(yè)
航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告1_第2頁(yè)
航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告1_第3頁(yè)
航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告1_第4頁(yè)
航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告1_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

信息科學(xué)和工程學(xué)院課程設(shè)計(jì)報(bào)告課題: 航空客運(yùn)訂票系統(tǒng) 目錄TOC\o"1-5"\h\z\o"CurrentDocument"1?課程設(shè)計(jì)內(nèi)容 31.1、 課程設(shè)計(jì)目的 31.2、 課程設(shè)計(jì)題目 31.3、 課程設(shè)計(jì)內(nèi)容 3\o"CurrentDocument"1.4、 實(shí)現(xiàn)提示 32?需求分析 43?概要設(shè)計(jì) 43.1、 系統(tǒng)結(jié)構(gòu)圖 53.2、 算法設(shè)計(jì) 53.3、 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 54?詳細(xì)設(shè)計(jì) 64.1、 數(shù)據(jù)類型定義 74.2、 函數(shù)定義 84.3、函數(shù)流程圖 84.4、程序的設(shè)計(jì)思想 125?調(diào)試分析 125.1、程序測(cè)試 12、時(shí)間復(fù)雜度分析………………13、算法的改進(jìn)設(shè)想………………13問(wèn)題分析及課程設(shè)計(jì)的心得體會(huì)………14使用手冊(cè) …… 158?源程序 ……??????159參考資料……………………22一、 課程設(shè)計(jì)內(nèi)容1?1課程設(shè)計(jì)目的1.?dāng)?shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是綜合運(yùn)用數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到的幾種典型數(shù)據(jù)結(jié)構(gòu),以及程序設(shè)計(jì)語(yǔ)言(C語(yǔ)言),自行實(shí)現(xiàn)一個(gè)較為完整的使用系統(tǒng)。2.通過(guò)課程設(shè)計(jì),自己通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握使用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的使用。3.學(xué)會(huì)將知識(shí)使用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增加綜合能力。(1)熟練掌握鏈表存儲(chǔ)結(jié)構(gòu)及其建立過(guò)程和常用操作;(2)熟練掌握隊(duì)列的建立過(guò)程和常用操作;(3)學(xué)會(huì)自己調(diào)試程序的方法并掌握一定的技巧。1?2課程設(shè)計(jì)題目1、 每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛機(jī)周日(星期幾)、乘員定額、余票量、訂定票的客戶名單(包括姓名、訂票量、艙位等級(jí)1,2或3)以及等候替補(bǔ)的客戶名單(包括姓名和所需數(shù)量)。2、 系統(tǒng)能實(shí)現(xiàn)的操作和功能如下:1) 查詢航線:根據(jù)客戶提出的終點(diǎn)站名輸出如下信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行和余票額;2) 承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)額)查詢?cè)摵桨嗥鳖~情況,若有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票量少余訂票額,則需重新詢問(wèn)客戶要求。若需要,可登記排隊(duì)候補(bǔ);3) 承辦退票業(yè)務(wù):根據(jù)客戶提出的情況(日期、航班號(hào)),為客戶辦理退票手續(xù),然后查詢?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢問(wèn)排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問(wèn)其它排隊(duì)候補(bǔ)的客戶。1.3課程設(shè)計(jì)內(nèi)容航空客運(yùn)訂票的業(yè)務(wù)活動(dòng)包括:查詢航線、客票預(yù)訂和辦理退票等。設(shè)計(jì)個(gè)航空客運(yùn)訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來(lái)完成。1.4實(shí)現(xiàn)提示兩個(gè)客戶名單分別由線性表和隊(duì)列實(shí)現(xiàn)。為查找方便,已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為了插入和刪除方便,以鏈表作為存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無(wú)法預(yù)計(jì),隊(duì)列也用鏈表作為存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條航線的情況登錄在一張線性表上,由于航線不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按航班有序或終點(diǎn)站名有序。每條航線是這張表上的一個(gè)記錄,包含上述8個(gè)域,其中乘員名單域?yàn)橹赶虺蓡T名單鏈表的頭指針,等候替補(bǔ)的客戶名單域?yàn)榉謩e指向?qū)︻^和隊(duì)尾的指針二、 需求分析本訂票系統(tǒng)能夠?qū)崿F(xiàn)全部航線信息的瀏覽功能、訂票客戶信息的查詢功能、單條航線查詢功能、訂票功能和退票功能。具體分析如下:a) 全部航線信息的瀏覽功能瀏覽全部系統(tǒng)預(yù)設(shè)的航線信息,每條航線包含的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行周日(星期幾飛行)、乘員定額和余票量。b) 訂票客戶信息的查詢功能根據(jù)輸入的航班號(hào)查詢?cè)摵骄€所有訂票客戶的信息,包括客戶姓名、訂票數(shù)額和艙位等級(jí)。c) 單條航線查詢功能根據(jù)客戶輸入的終點(diǎn)站名查看該航線上所涉及的信息。d)訂票功能根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)量)查詢?cè)摵桨嗥鳖~情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票額少于定票額,則詢問(wèn)客戶是否愿意排隊(duì)等候,若愿意,系統(tǒng)則自動(dòng)登記排隊(duì)候補(bǔ)。e)退票功能根據(jù)客戶提供的情況(航班、姓名),詢問(wèn)退票張數(shù),然后為客戶辦理退票手續(xù)。接著系統(tǒng)自動(dòng)查詢?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢問(wèn)排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問(wèn)其他排隊(duì)候補(bǔ)的客戶。

三、 概要設(shè)計(jì)系統(tǒng)結(jié)構(gòu)圖(功能模塊圖)算法設(shè)計(jì)(每個(gè)模塊的算法設(shè)計(jì)說(shuō)明):(1)瀏覽航線模塊:定義voiddisplay(structairline*info),用info指向結(jié)構(gòu)體structairline中的每一個(gè)成員;調(diào)用list()函數(shù)輸出全部航線信息。瀏覽訂票客戶信息模塊:定義訂票客戶信息的結(jié)構(gòu)體ord_ros,根據(jù)輸入航班號(hào)調(diào)用find()函數(shù)尋找客戶信息。(3)查詢航線模塊:順著單鏈表查找,如果和航班號(hào)(航線)一致,輸出相關(guān)信息,否則,查詢不成功。(4)訂票模塊:查找乘客要訂的航班號(hào),判斷此航班是否有空位,有則輸入乘客有關(guān)信息,訂票成功,否則失敗。(5)退票模塊:輸入要退票的乘客姓名,查找乘客資料的鏈表中是否有這位乘客,有則刪去此節(jié)點(diǎn),并在空位上加1,無(wú)則退票失敗。如果此時(shí)余票額大于等于候補(bǔ)客戶的訂票數(shù)量,那么候補(bǔ)客戶訂票成功。3.3存儲(chǔ)結(jié)構(gòu)設(shè)計(jì):航班的信息:為了便于查找,航班情況的存儲(chǔ)結(jié)構(gòu)采用單鏈表,每個(gè)元素表示一個(gè)航班的情況,包括終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、星期幾、乘員定額和余票量,共六個(gè)數(shù)據(jù)項(xiàng):終點(diǎn)站名航班號(hào)飛機(jī)號(hào)星期幾乘員定額余票量單鏈表如下:C語(yǔ)言描述如下:structairline{charter_name[10];/*終點(diǎn)站名*/charair_num[10];/*航班號(hào)*/charplane_num[10];/*飛機(jī)號(hào)*/charday[7];/*飛行周日(星期幾)*/inttkt_amt;/*乘員定額*/inttkt_sur;/*余票量*/linklist*order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueuewait;/*等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/}lineinfo;structairline*start;(2)訂票乘客的資料:為了便于插入和刪除,同樣采用單鏈表存儲(chǔ)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素包括姓名、訂票量和艙位等級(jí)三個(gè)數(shù)據(jù)項(xiàng):乘客姓名訂票量余票量C語(yǔ)言描述如下:typedefstructord_ros{charname[10];/*客戶姓名*/intord_amt;/*訂票量*/intgrade;/*艙位等級(jí)*/structord_ros*next;}linklist;四、詳細(xì)設(shè)計(jì)4.1數(shù)據(jù)類型定義(1) 已訂票客戶的結(jié)點(diǎn):typedefstructord_ros{charname[10];/*客戶姓名*/intord_amt;/*訂票量*/intgrade;/*艙位等級(jí)*/structord_ros*next;}linklist;(2) 候補(bǔ)客戶的結(jié)點(diǎn):typedefstructwat_ros{charname[10];/*姓名*/intreq_amt;/*訂票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueue/*定義單鏈隊(duì)列*/{qptrfront;/*等候替補(bǔ)客戶名單域的頭指針*/qptrrear;/*等候替補(bǔ)客戶名單域的尾指針*/}linkqueue;(3) 航班結(jié)點(diǎn):structairline{charter_name[10];/*終點(diǎn)站名*/charair_num[10];/*航班號(hào)*/charplane_num[10];/*飛機(jī)號(hào)*/charday[7];/*飛行周日(星期幾)*/inttkt_amt;/*乘員定額*/inttkt_sur;/*余票量*/linklist*order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueuewait;/*等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/}lineinfo;structairline*start;函數(shù)定義(1)航線輸出函數(shù)函數(shù)名:voidlist()操作結(jié)果:輸出全部航線信息(2)航線查詢函數(shù)函數(shù)名:voidsearch()操作結(jié)果:進(jìn)行航班查詢候補(bǔ)結(jié)點(diǎn)隊(duì)列函數(shù)函數(shù)名:linkqueueappendqueue(linkqueueq,charname[],intamount)操作結(jié)果:增加候補(bǔ)客戶名單域入隊(duì)出隊(duì)判空客戶訂票函數(shù)函數(shù)名:voidorder()操作結(jié)果:進(jìn)行客戶訂票操作客戶退票函數(shù)函數(shù)名:voidreturn_tkt()操作如果:進(jìn)行客戶退票操作訂票客戶查詢函數(shù)函數(shù)名:voidprtlink()操作結(jié)果:進(jìn)行訂票客戶信息查詢操作主菜單控制函數(shù)函數(shù)名:intmenu_select()操作結(jié)果:a)瀏覽航線信息瀏覽已訂票客戶信息查詢航線辦理訂票業(yè)務(wù)辦理退票業(yè)務(wù)退出系統(tǒng)4.3函數(shù)流程圖(1)瀏覽已訂票客戶信息

3)辦理訂票業(yè)務(wù)5)辦理退票業(yè)務(wù)4.4程序的設(shè)計(jì)思想訂票客戶由線性表實(shí)現(xiàn),鏈表作為其存儲(chǔ)結(jié)構(gòu);為了插入和刪除方便,候補(bǔ)客戶由隊(duì)列實(shí)現(xiàn),隊(duì)列也用鏈表做為存儲(chǔ)結(jié)構(gòu)。增刪操作只需修改指針,這樣系統(tǒng)運(yùn)行效率有了很大提高。五?調(diào)試分析5.1程序測(cè)試(1)主菜單 歡迎使用航空客運(yùn)訂票系統(tǒng) 信票業(yè)業(yè)線晉票票統(tǒng)舫已㈱'乩系貫翥理理出瀏瀏查辦番息信票業(yè)業(yè)線晉票票統(tǒng)舫已㈱'乩系貫翥理理出瀏瀏查辦番息II..息客務(wù)務(wù)請(qǐng)選擇幷按回車鍵結(jié)束:踐點(diǎn)站名beijingshanghailondon航班號(hào)1飛磯號(hào)B8571S1O02踐點(diǎn)站名beijingshanghailondon航班號(hào)1飛磯號(hào)B8571S1O02L1O03請(qǐng)違擇并按回車鍵結(jié)豆汩飛行周日 乘員定額SUN 3MONFBI余票量3I戶:2票級(jí)

量羋

數(shù)—位=1的盤=1?!

5-1-SII.班ts票弓號(hào)航入座座的請(qǐng)選擇井按回車鍵結(jié)束冷,牛訂票成功?祝您旅誅愉快!瀏覽已訂票客戶信息

士―… 請(qǐng)選擇并按回車鍵結(jié)束止遠(yuǎn)艷入砸班號(hào)注畧&姓茗訂票數(shù)額艙位等級(jí)牛 2 1查詢航班請(qǐng)選擇并按回車鍵結(jié)束汴霸鐺■點(diǎn)站名喘矚飛機(jī)號(hào)飛亍周日beijing 1 請(qǐng)選擇并按回車鍵結(jié)束汴霸鐺■點(diǎn)站名喘矚飛機(jī)號(hào)飛亍周日beijing 1 B8571SUN乘員定額3余票量1辦理退票業(yè)務(wù)請(qǐng)選攔井按回三鍵結(jié)束瀉:牛戶請(qǐng)選攔井按回三鍵結(jié)束瀉:牛戶客2

票:

退量

12數(shù)

:1名??票

號(hào)姓需

棗香

人IA訂人

饉番輸321!t-t-AE-!功號(hào)號(hào)號(hào)退亜B蚩陛功的的7)再次瀏覽航線信息終點(diǎn)站名beijingshanghailorndon航班號(hào)12終點(diǎn)站名beijingshanghailorndon航班號(hào)12請(qǐng)二飛機(jī)號(hào)B8571S1302L丄S03擇并按回玄鍵結(jié)束疽飛行周日 乘貝定額SUN 3MON 2FBI 1余票量Q115.2時(shí)間復(fù)雜度分析瀏覽遍歷整張航線線性表的時(shí)間復(fù)雜度:0(1);線性表的插入和刪除操作的時(shí)間復(fù)雜度:O(n);查詢?yōu)榫€性表的查找,時(shí)間復(fù)雜度:O(n);訂票為線性表的查找,時(shí)間復(fù)雜度:O(n);退票是查找兩張線性表,時(shí)間復(fù)雜度為:O(n*e),其中n為航班總數(shù),e為對(duì)應(yīng)航班已訂票人數(shù)。5.3算法的改進(jìn)設(shè)想在算法效率上,由于此課程設(shè)計(jì)所用的是線性表的建立、查找、插入、刪除、和隊(duì)列的建立、插入、刪除,所涉及的是查找和排序問(wèn)題,所以在建立插入時(shí)按照客戶姓名進(jìn)行有序,查找時(shí)采用分塊查找,因此對(duì)訂票客戶信息的存儲(chǔ)應(yīng)采用指針數(shù)組存儲(chǔ)。在函數(shù)重組,把處理不同問(wèn)題相同算法思想(如線性表的插入、刪除、查找等等)寫在一個(gè)函數(shù)中,其它函數(shù)要用到這種操作時(shí)只需調(diào)用這些函數(shù),這樣會(huì)減少整個(gè)程序的代碼量,方便理解、閱讀和使用。六.問(wèn)題分析及課程設(shè)計(jì)的心得體會(huì)總體體會(huì):看著簡(jiǎn)單,做著難,我自己眼高收低,心太急,不過(guò)敢想敢寫感嘗試,努力付出還真有蠻多收獲。(1)學(xué)和做:做了這次課程設(shè)計(jì),我覺得課程設(shè)計(jì)這種形式真的是我們需要的,可以讓我們學(xué)到很多,包括書上的、書外的。理論永遠(yuǎn)不等于實(shí)際。我在調(diào)試時(shí)出現(xiàn)了很多的問(wèn)題,下面列舉幾個(gè):程序中定義了一個(gè)字符串"new",但在C-Free中“new"不是以未定義的形式存在,所以把“new”改寫成“NEW”就可以了;C-Free中“getchar”表示讀取下一個(gè)字符的含義,而“getch”不表示,出現(xiàn)“getch”時(shí)系統(tǒng)會(huì)報(bào)錯(cuò);在編寫退票模塊的代碼時(shí),設(shè)計(jì)先輸入退票數(shù)然后進(jìn)行退票,調(diào)試時(shí)發(fā)現(xiàn)艙位等級(jí)的輸出出現(xiàn)了混亂,后來(lái)經(jīng)仔細(xì)分析才知道,原來(lái)“grade=pl->grade;”放在了if()大循環(huán)的后面,而在f循環(huán)里pl已經(jīng)釋放,所以把“grade=p1->grade;”放在第一個(gè)“free(p1);”之前就可以了。真正會(huì)了這些算法,理論和實(shí)際永遠(yuǎn)差那么一點(diǎn),不去做是體會(huì)不出來(lái)的。坐在電腦前才真正知道自己會(huì)不會(huì),眼高手低是要不得的。(2)C和算法描述:在學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候總是分不清算法和C語(yǔ)言的區(qū)別,總覺得算法就是程序了,通過(guò)這兩周的課程設(shè)計(jì)總算是把它們之間的關(guān)系搞透徹了。其實(shí)算法是解決問(wèn)題的步驟;程序是算法的代碼實(shí)現(xiàn);算法要依靠程序來(lái)完成功能;程序需要算法作為靈魂。兩者是相互聯(lián)系密不可分的。(3)小收獲:摸索著做完課程設(shè)計(jì),增強(qiáng)了自己的自學(xué)能力,這應(yīng)該是最有用的吧,語(yǔ)言會(huì)過(guò)時(shí),學(xué)習(xí)的能力卻不會(huì)過(guò)時(shí)。構(gòu)造結(jié)構(gòu)體;定義清晰明確的各種變量;主函數(shù)、子函數(shù)的聲明及定義。另外:對(duì)函數(shù)調(diào)用,參數(shù)傳遞很有體會(huì)。(4)遇到的問(wèn)題和感受:這次課程設(shè)計(jì)面臨的大問(wèn)題就是——選擇的余地太大,頭腦不好受。連續(xù)幾天的思考,我都不能決定攻克哪個(gè),好幾個(gè)都是考慮了一部分又放棄了,以至前功盡棄。這使我認(rèn)識(shí)到認(rèn)定干一件事就必須將它干到底,以使自己的思想連續(xù)。我也開始考慮當(dāng)事情有重疊時(shí),如何去應(yīng)對(duì),雖然最后的抉擇不一定是對(duì)的。我也在這段時(shí)間內(nèi)好好地看了一遍書,對(duì)書中的算法思想有一個(gè)更深的了解,雖然在使用中顯得不是很自如,可我通過(guò)這次課設(shè)體驗(yàn)到可視化編程的樂(lè)趣。這也給我以后編程莫大的激勵(lì),因?yàn)槲艺J(rèn)為所謂算法通過(guò)老師的傳授每個(gè)人都會(huì)一點(diǎn)點(diǎn),而課外的東西則是通過(guò)自己的學(xué)習(xí)獲得的。寫程序是一種樂(lè)趣,特別是當(dāng)我看到程序運(yùn)行成功時(shí),我會(huì)感到無(wú)比的喜悅。而數(shù)據(jù)結(jié)構(gòu)是任何程序的基礎(chǔ),沒有數(shù)據(jù)結(jié)構(gòu)的支持,就沒有程序的存在,至少說(shuō)不會(huì)存在有價(jià)值的程序。有了數(shù)據(jù)結(jié)構(gòu)的知識(shí),再加上程序設(shè)計(jì)技術(shù),這對(duì)以后的深入學(xué)習(xí)應(yīng)該會(huì)有很大的幫助七?用戶使用手冊(cè)說(shuō)明書本程序可以運(yùn)行在c-free最新5.0版本完美運(yùn)行1瀏覽航線信息按數(shù)字1即可查詢2瀏覽已訂票客戶的信息要輸入你訂票客戶的航班號(hào)根據(jù)提出的航班號(hào)課查詢是否有訂票客戶的信息。如果沒有則會(huì)輸出“該航線沒有客戶信息”如果有訂票客戶。則會(huì)顯示改客戶訂票信息3查詢航線首先輸入終點(diǎn)站名,如果沒有該終點(diǎn)站,則會(huì)輸出“對(duì)不起。該航線未找到!”如果有改終點(diǎn)站,則會(huì)輸出該航線的信息4辦理訂票業(yè)務(wù)首先輸入航班號(hào),如果沒有該航班號(hào)。則會(huì)輸出“對(duì)不起,該航線未找到!"如果有該航班,則按照輸入順序。輸入訂票數(shù)量,訂票客戶,艙位等級(jí)。系統(tǒng)會(huì)給出你的座位號(hào)如果你訂票數(shù)量大于總數(shù),則會(huì)輸出“對(duì)不起。您輸入的票的數(shù)量已經(jīng)超過(guò)成員定額!”如果你訂票的數(shù)量大于剩余票數(shù),那么系統(tǒng)會(huì)提示你是否需要排隊(duì)。如果你需要,則輸入排隊(duì)的客戶信息5辦理退票業(yè)務(wù)先輸入航班號(hào),如果你輸入的航班號(hào)不存在,那么系統(tǒng)會(huì)輸出“對(duì)不起。該航線未找到!”如果你輸入的航班號(hào)存在,那么系統(tǒng)會(huì)讓你輸入你退票客戶的名字。如果有該客戶,那么退票成功。如果沒有該客戶。那么系統(tǒng)會(huì)輸出“對(duì)不起。你沒有定過(guò)票”6查詢剩余票數(shù)并排序系統(tǒng)會(huì)按航線剩余票數(shù)的多少進(jìn)行排序0退出系統(tǒng)系統(tǒng)退出八.源程序#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAXSIZE3/*定義航線量的最大值*/typedefstructwat_ros{charname[10];/*姓名*/intreq_amt;/*訂票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueue/*定義單鏈隊(duì)列*/{qptrfront;/*等候替補(bǔ)客戶名單域的頭指針*/qptrrear;/*等候替補(bǔ)客戶名單域的尾指針*/}linkqueue;typedefstructord_ros{charname[10];/*客戶姓名*/intord_amt;/*訂票量*/intgrade;/*艙位等級(jí)*/structord_ros*next;}linklist;structairline{charter_name[10];/*終點(diǎn)站名*/charair_num[10];/*航班號(hào)*/charplane_num[10];/*飛機(jī)號(hào)*/charday[7];/*飛行周日(星期幾)*/inttkt_amt;/*乘員定額*/inttkt_sur;/*余票量*/linklist*order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueuewait;/*等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/}lineinfo;structairline*start;voiddisplay(structairline*info)/*打印每條航線的基本信息*/{printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n",info->ter_name,info->air_num,info->plane_num,info->day,info->tkt_amt,info->tkt_sur);}voidlist()/*打印全部航線信息*/{structairline*info;inti=0;info=start;printf("終點(diǎn)站名\t航班號(hào)\t飛機(jī)號(hào)\t飛行周日\(chéng)t乘員定額\t余票量\n");while(i<MAXSIZE){display(info);info++;i++;}printf("\n\n");voidsearch()/*根據(jù)客戶提出的終點(diǎn)站名輸出航線信息*/{structairline*info,*find();charname[10];inti=0;info=start;printf(“請(qǐng)輸入終點(diǎn)站名:");scanf("%s",name);while(i<MAXSIZE){if(!strcmp(name,info->ter_name))break;info++;i++;}if(i>=MAXSIZE)printf("對(duì)不起,該航線未找到!\n");else{printf("終點(diǎn)站名\t航班號(hào)\t飛機(jī)號(hào)\t飛行周日\(chéng)t乘員定額\t余票量\n");display(info);}}structairline*find()/*根據(jù)系統(tǒng)提出的航班號(hào)查詢并以指針形式返回*/{structairline*info;charnumber[10];inti=0;info=start;printf("請(qǐng)輸入航班號(hào):");scanf("%s",number);while(i<MAXSIZE){if(!strcmp(number,info->air_num))returninfo;info++;i++;}printf("對(duì)不起,該航線末找到!\n");returnNULL;}voidprtlink()/*打印訂票乘員名單域的客戶名單信息*/{linklist*p;structairline*info;info=find();p=info->order;if(p!=NULL){printf(“客戶姓名訂票數(shù)額艙位等級(jí)\n");while(p){printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);p=p->next;}}elseprintf("該航線沒有客戶信息!!\n");}linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加訂票乘員名單域的客戶信息*/{linklist*p1,*NEW;p1=head;NEW=(linklist*)malloc(sizeof(linklist));if(!NEW){printf("\nOutofmemory!!\n");returnNULL;}strcpy(NEW->name,name);NEW->ord_amt=amount;NEW->grade=grade;NEW->next=NULL;if(head==NULL)/*若原無(wú)訂票客戶信息*/{head=NEW;NEW->next=NULL;}elsehead=NEW;NEW->next=p1;returnhead;}linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排隊(duì)等候的客戶名單域*/{qptrNEW;NEW=(qptr)malloc(sizeof(qnode));strcpy(NEW->name,name);NEW->req_amt=amount;NEW->next=NULL;if(q.front==NULL)/*若原排隊(duì)等候客戶名單域?yàn)榭?/q.front=NEW;elseq.rear->next=NEW;q.rear=NEW;returnq;voidorder()/*辦理訂票業(yè)務(wù)*/{structairline*info;intamount,grade;charname[10];info=start;if(!(info=find()))return;/*根據(jù)客戶提供的航班號(hào)進(jìn)行查詢,如為空,退出該模塊*/printf("請(qǐng)輸入您訂票的數(shù)量:");scanf("%d",&amount);if(amount>info->tkt_amt)/*若客戶訂票額超過(guò)乘員定票總額,退出*/{ printf("\n對(duì)不起,您輸入訂票的數(shù)量已經(jīng)超過(guò)乘員定額!");return;}if(amountv=info->tkt_sur)/*若客戶訂票額末超過(guò)余票量,訂票成功并等記信息*/{inti;printf("請(qǐng)輸入您的姓名(訂票客戶):");scanf("%s",name);printf("請(qǐng)輸入%s票的艙位等級(jí):",name);scanf("%d",&grade);info->order=insertlink(info->order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/for(i=0;ivamount;i++)/*依次輸出該訂票客戶的座位號(hào)*/printf("%s的座位號(hào)是:%d\n",name,info->tkt_amt-info->tkt_sur+i+l);info->tkt_sur-=amount;/*該航線的余票量應(yīng)減掉該客戶的訂票量*/printf("\n訂票成功,祝您旅途愉快!\n");}else /*若滿員或余票額少于訂票額,詢問(wèn)客戶是否需要進(jìn)行排隊(duì)等候*/{charr;printf("\n已經(jīng)沒有更多的票,您需要排隊(duì)等候嗎?(需要請(qǐng)按'Y',若不需要請(qǐng)按'N')");fflush(stdin);scanf("%c",&r);if(r=='Y'||r=='y'){printf("\n請(qǐng)輸入您的姓名(排隊(duì)訂票客戶):");scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/*在排隊(duì)等候乘員名單域中添加客戶信息*/printf("\n注冊(cè)成功!\n");}elseprintf("\n歡迎您下次再次訂購(gòu)!\n");}}voidreturn_tkt()/*退票模塊*/{structairline*info;qnode*t,*back,*f,*r;intgrade,num;linklist*p1,*p2,*head;charcusname[10];if(!(info=find()))return;/*調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索*/head=info->order;p1=head;printf("請(qǐng)輸入你的姓名(退票客戶):");scanf("%s",cusname);while(p1!=NULL){/*根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢*/if(!strcmp(cusname,p1->name))break;p2=p1;p1=p1->next;}if(pl==NULL){printf("對(duì)不起,你沒有訂過(guò)票!\n");return;}/*若未找到,退出本模塊*/else{/*若信息查詢成功,刪除訂票客戶名單域中的信息*/printf("您的訂票量為:%d\n",p1->ord_amt);printf("請(qǐng)輸入您的退票數(shù)量:");scanf("%d",&num);if(p1==head){grade=p1->grade;if(p1->ord_amt==num){head=p1->next;free(p1);}else{if(p1->ord_amt>num)head->ord_amt-=num;}}else{if(p1->ord_amt==num){p2->next=p1->next;free(p1);}else{if(p1->ord_amt>num)p1->ord_amt-=num;}}info->tkt_sur+=num;printf("\n成功退票!\n");}info->order=head;/*重新將航線名單域指向訂票單鏈表的頭指針*/f=(info->wait).front;/*f指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn)*/r=(info->wait).rear;/*r指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)*/t=f;/*t為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單域*/while(t){if(info->tkt_sur>=info->wait.front->req_amt){/*若滿足條件者為頭結(jié)點(diǎn)*/inti;info->wait.front=t->next;printf("%s訂票成功!\n",t->name);for(i=0;ivt->req_amt;i++)/*輸出座位號(hào)*/printf("%s的座位號(hào)是:%d\n",t->name,(info->tkt_sur)-i);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入至U訂票客戶名單鏈表中*/free(t);b

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論