航空客運(yùn)訂票系統(tǒng)_第1頁
航空客運(yùn)訂票系統(tǒng)_第2頁
航空客運(yùn)訂票系統(tǒng)_第3頁
航空客運(yùn)訂票系統(tǒng)_第4頁
航空客運(yùn)訂票系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計(jì) 報(bào) 告課程名稱 數(shù)據(jù)結(jié)構(gòu) 課題名稱 航空客運(yùn)訂票系統(tǒng) 專 業(yè) 通 信 工 程 班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 2013 年 6 月 29 日湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書課程名稱 數(shù)據(jù)結(jié)構(gòu) 課 題 航空客運(yùn)訂票系統(tǒng) 專業(yè)班級(jí) 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)老師 張鏖烽 田娟秀 李杰君 審 批 任務(wù)書下達(dá)日期 2013 年 6 月 23 日任 務(wù) 完成日期 2013 年 6 月 29 日 目 錄1. 需求分析.12. 概要設(shè)計(jì).1 2.1 定義“航線”類型.2 2.2 主函數(shù).2 2.3 調(diào)用關(guān)系.33. 詳細(xì)設(shè)計(jì).3 3.1 航線與客戶的存儲(chǔ)結(jié)構(gòu).3 3.2 各個(gè)系統(tǒng)模塊.3

2、 3.3 算法設(shè)計(jì).4 3.4 主函數(shù)功能.6 3.5 整個(gè)系統(tǒng)的流程圖.7 3.6 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì).74. 調(diào)試分析.75. 用戶使用說明.86. 測試結(jié)果.107. 心得體會(huì).128. 附錄.13 課題名稱 航空客運(yùn)訂票系統(tǒng)1. 需求分析 航空客運(yùn)訂票的業(yè)務(wù)活動(dòng)包括:查詢航線、客票預(yù)訂和辦理退票等。試設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來完成。【基本要求】(1)每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行周日(星期幾)、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級(jí)1,2或3)以及等候替補(bǔ)的客戶名單(包括姓名、所需票量);(2)系統(tǒng)能實(shí)現(xiàn)的操作和功能

3、如下:錄入:可以錄入航班情況,全部數(shù)據(jù)可以只放在內(nèi)存中,最好存儲(chǔ)在文件中;查詢航線:根據(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ǔ)的客戶。初始化航班信息如下: 通過輸入

4、05這六個(gè)數(shù)字選擇相應(yīng)的操作,如:查詢航班,訂票,退票等操作;2. 概要設(shè)計(jì) 兩個(gè)客戶名單可分別由線性表和隊(duì)列實(shí)現(xiàn)。為查找方便,已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無法預(yù)計(jì),隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條航線的情況登錄在一張線性表上,由于航線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按航班有序或按終點(diǎn)站名有序。每條航線是這張表上的一個(gè)記錄,包含上述8個(gè)域、其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,等候替補(bǔ)的客戶名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。注:由于“航線”可只用一條單鏈表記錄,故采用全局變量,減少參數(shù)的傳遞。 2.1定義“航線”類

5、型 ADT Lairline數(shù)據(jù)對(duì)象:D=ai|ai航線鏈表集,i=1,2,3,n,n>=0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>| ai-1,aiD,i=1,2,3,n 基本操作:Lairline search_line()/按航班號(hào)查找航班Lairline search_plane()/按飛機(jī)號(hào)查找航班Lairline search_date()/按飛行日期查找航班Lairline search_addr()/按航班終點(diǎn)查找航班 void boundary()/主菜單界面void insert_line()/插入新航班void print_customer(airline *

6、p)/顯示航班客戶信息void book()/訂票系統(tǒng)void waited(airline *p)/排隊(duì)訂票系統(tǒng)void Refund()/退票系統(tǒng)void search()/航班查詢系統(tǒng)void InitLine()/初始化航線信息void printline()/顯示所有航班信息 ADT Lairline; 2.2 主函數(shù) void main() 初始化; do接受命令; 處理命令(調(diào)用相應(yīng)函數(shù)); while(“命令”!=“退出”); 2.3 調(diào)用關(guān)系 3. 詳細(xì)分析 3.1航線和客戶的存儲(chǔ)結(jié)構(gòu) 客戶存儲(chǔ)結(jié)構(gòu)體 typedef struct customer char name20;

7、/姓名 int num; /訂票數(shù)量int level; /艙位等級(jí)customer *next; /指向后繼乘客 customer,*Lcustomer; 航線存儲(chǔ)結(jié)構(gòu)體 typedef struct airline char ter_address20; /終點(diǎn)站char line_num10; /航班號(hào) char plane_num10; /飛機(jī)型號(hào)int date; /飛行日期int total; /總?cè)藬?shù)int remain; /余票數(shù) customer *booked;/已定客戶信息customer *wait; /替補(bǔ)客戶信息 airline *next; /指向后繼航線 air

8、line,*Lairline; 3.2 各個(gè)系統(tǒng)模塊 (1) 瀏覽航線模塊: 定義void print_customer(airline *p),顯示成員的信息;調(diào)用void printline()函數(shù)輸出全部航線信息。 (2) 瀏覽訂票客戶信息模塊: 定義訂票客戶信息的結(jié)構(gòu)體customer,根據(jù)輸入航班號(hào)調(diào)用search()函數(shù)尋找客戶信息。 (3) 查詢航線模塊: 順著單鏈表查找,如果與航班號(hào)(航線)一致,輸出相關(guān)信息,否則,查詢不成功。 (4) 訂票模塊: 查找乘客要訂的航班號(hào),判斷此航班是否有空位,有則輸入乘客有關(guān)信息,訂票成功, 否則失敗。 (5) 退票模塊: 輸入要退票的乘客姓名

9、,查找乘客資料的鏈表中是否有這位乘客,有則刪去此節(jié)點(diǎn),并在空位上加1,無則退票失敗。如果此時(shí)余票額大于等于候補(bǔ)客戶的訂票數(shù)量,那么候補(bǔ)客戶訂票成功。 3.3 算法設(shè)計(jì) 1.按照航班查找 Lairline search_line() char a10;airline *p;p=L->next; P("Please input the number of line:"); S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->line_num ) break;return p;注:通過建立節(jié)點(diǎn)p實(shí)現(xiàn)鏈表的遍歷

10、,利用for循環(huán)挨個(gè)查找,直到找到為止,再返回找到的這個(gè)節(jié)點(diǎn),實(shí)現(xiàn)傳遞。 2.訂票系統(tǒng) void book() int i; int flag=0;airline *p;customer *cst, *c; P("Please choose the way of viewing:n"); /查詢方式選擇P("Thenumberoftheflight=>1n"); P("The address of the final destination=>2n"); P("Thedateofthe flight=>3n

11、"); for(;!flag;) /flag為0時(shí)一直在循環(huán)S("%d",&i); switch(i) /三種方式查詢航班 case 1: p=search_line();flag=1;break; case 2: p=search_address();flag=1;break; case 3: p=search_date();flag=1;break; default:P("Wrong!Please input again!n");break; 注:輸入1,2,3選擇操作方式,先進(jìn)行查詢,在通過調(diào)用函數(shù)實(shí)現(xiàn)購票。 3.初始化航線 vo

12、id InitLine()/初始化航線信息初始化航線,先建立3條航線方便測試; 4.航班查詢 void search()int i;int flag=0;airline *p; P("Please input the way of viewing the flight:n"); P("The number of the flight->1n"); /航班號(hào)P("The number of the plane->2n"); /飛機(jī)號(hào)碼P("The date of the flight->3n");

13、/航班日期P("Thefinaladdressoftheflight->4n"); /航班終點(diǎn)S("%d",&i); for(;!flag;) switch(i) /按照選擇項(xiàng)進(jìn)行操作 case 1: p=search_line();flag=1;break;case 2: p=search_plane();flag=1;break;case 3: p=search_date();flag=1;break;case 4: p=search_address();flag-=1;break;default:P("Wrong,input

14、 again!n");break;if(p)P("終點(diǎn)站 航班號(hào) 飛機(jī)號(hào) 飛行周日 余票量n");P("%-9s%9s%13s%10d%15dn",p->ter_address,p->line_num,p->plane _num,p->date,p->remain);P("Booking the tickets?(Sure,please input 1;Else input any number! )");S("%d",&i);if(i=1) book(); Else

15、 P("nnnn");boundary(); Else P("The flight is not exist!(_)nnn"); void printline()int flag; airline *p;p=L->next;P("終點(diǎn)站 航班號(hào) 飛機(jī)號(hào) 飛行周日 余票量n");for(;p;p=p->next)P("%s%s%s%d%dn",p->ter_address,p->line_num,p->plane_num,p-> date,p->remain);P("

16、;nnnnn");boundary(); 注:通過輸入1,2,3,4進(jìn)行選擇查詢的方式,分別為飛機(jī)型號(hào),航班 號(hào),目的地位置,飛行日期進(jìn)行查詢。 3.4主函數(shù)功能 void main() int flag=1; boundary(); InitLine(); do switch(getchar()case '1':printline();break; /顯示所有航線case '2':search();break; /case '3':book();break;case '4':Refund();break;case &#

17、39;5':system("cls"); boundary();break; case '0':flag=0;break;while(flag); 包括顯示航線,查詢信息,訂票,退票,清屏這五個(gè)功能。 3.5 整個(gè)系統(tǒng)的流程圖 3.6 存儲(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)星期幾余票量 4. 調(diào)試分析 1、在編程過程中,起先使用的是局部變量,每次調(diào)用函數(shù)都需要進(jìn)行參數(shù)的傳遞,很麻煩,而且還容易出現(xiàn)錯(cuò)誤

18、;后意識(shí)到航線的鏈表只有一條,很多函數(shù)都需要對(duì)其數(shù)據(jù)進(jìn)行修改,故航線信息采用了全局變量,方便數(shù)據(jù)的修改,減少 了參數(shù)的傳遞。 2、因?yàn)榕抨?duì)訂票的客戶信息列表沒有設(shè)置頭結(jié)點(diǎn),在退票后詢問排隊(duì)訂票客戶是否訂票時(shí),出現(xiàn)了操作錯(cuò)誤,在沒有頭結(jié)點(diǎn)的情況下判斷等操作很麻煩,故在 wait(p) 函數(shù)里詢問排隊(duì)客戶是否訂票時(shí),為排隊(duì)訂票的客戶信息列表增加了頭結(jié)點(diǎn),方便操作。 3、在開始的時(shí)候,排隊(duì)訂票客戶信息使用的是隊(duì)列進(jìn)行數(shù)據(jù)存儲(chǔ),但測試的時(shí)候,發(fā)現(xiàn)當(dāng)?shù)谝幻抨?duì)訂票客戶不滿足需求時(shí)詢,往后依次詢問客戶時(shí),隊(duì)列完全沒用,而且還需進(jìn)行尾節(jié)點(diǎn)的各項(xiàng)操作,故棄用隊(duì)列存儲(chǔ)結(jié)構(gòu)。 4、由于本程序涉及的知識(shí)單鏈表的查找

19、,插入和刪除,故時(shí)間復(fù)雜度為 O(n),輔助空間為O(1)。 5、經(jīng)驗(yàn)和體會(huì):我用vc6.0編程的,這么長的代碼,讓我深刻認(rèn)識(shí)到斷點(diǎn)調(diào)試的必要性;同時(shí)讓我了解到動(dòng)手的重要性,開始的時(shí)候,明明有滿腦子的想法和算法,就是很難把想法和算法用代碼實(shí)現(xiàn);通過此次課程設(shè)計(jì),我的動(dòng)手能力和算法設(shè)計(jì)能力有了明顯的提高。由于忘記了一些c語言的規(guī)范使得在調(diào)試過程中一些錯(cuò)誤沒有發(fā)現(xiàn)。例如,調(diào)用函數(shù)時(shí),數(shù)組只需要傳遞數(shù)組名即可;字符0和整形的0是不同的文明不可以直接對(duì)其畫等號(hào)。程序在起初設(shè)計(jì)的時(shí)候,經(jīng)常出現(xiàn)溢出錯(cuò)誤,而且不只一處。為了修正這些溢出錯(cuò)誤,耗費(fèi)了大量的時(shí)間,修正解釋之后再看源程序,才發(fā)現(xiàn)原來只是因?yàn)殚_始的

20、函數(shù)定義的數(shù)據(jù)類型出現(xiàn)了問題,對(duì)函數(shù)的定義不清楚,字符的不正確定義造成了后期大量的糾錯(cuò)工作, 6、時(shí)間復(fù)雜度分析 瀏覽遍歷整張航線線性表的時(shí)間復(fù)雜度:O(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. 用戶使用說明 按數(shù)字(0-5) 1=>即可顯示所有航線信息; 顯示現(xiàn)有的所有航線信息,包括目的地,航班號(hào),飛機(jī)號(hào),飛行日期,余票量。 2=> 查看某個(gè)航線訂票余票情況 根據(jù)飛行日期,目的地,航

21、班號(hào),飛機(jī)號(hào)查詢飛機(jī)的各項(xiàng)信息,如果想要購票 可以實(shí)現(xiàn)購票功能。 3=>辦理訂票業(yè)務(wù) 根據(jù)飛行日期,目的地,航班號(hào),飛機(jī)號(hào)查詢飛機(jī)的各項(xiàng)信息 進(jìn)行選擇購票,再輸入購票張數(shù),艙位等級(jí),購票人姓名,進(jìn)行購票。首先輸入航班號(hào),如果沒有該航班號(hào)。則會(huì)輸出“對(duì)不起,該航線未找到!"系統(tǒng)會(huì)給出你的座位號(hào);如果你訂票數(shù)量大于總數(shù),則會(huì)輸出“對(duì)不起。您輸入的票的數(shù)量已經(jīng)超過成員定額!”;如果你訂票的數(shù)量大于剩余票數(shù),那么系統(tǒng)會(huì)提示你是否需要排隊(duì)。如果你需要,則輸入排隊(duì)的客戶信息 4=>辦理退票業(yè)務(wù) 如果有該航班,則按照輸入順序。輸入訂票數(shù)量,訂票客戶,艙位等級(jí)。先輸入航班號(hào),如果你輸入的

22、航班號(hào)不存在,那么系統(tǒng)會(huì)輸出“對(duì)不起。該航線未找到!”如果你輸入的航班號(hào)存在,那么系統(tǒng)會(huì)讓你輸入你退票客戶的名字。如果有該客戶,那么退票成功。如果沒有該客戶。那么系統(tǒng)會(huì)輸出“對(duì)不起。你沒有定過票”。 0=>退出系統(tǒng) 直接退出購票系統(tǒng)。 5=>清理屏幕 清理屏幕上的信息。6. 測試結(jié)果 主菜單界面 圖6-1 客服系統(tǒng)主界面 顯示所有航線的信息 圖6-2 顯示所有航線的信息進(jìn)入訂票系統(tǒng)后的操作界面 圖6-3 按照飛行日期訂票 進(jìn)入查詢系統(tǒng)后的操作界面 圖6-4 訂票后再查詢此航線 注:由圖6-3和圖6-4可以看出顧客定了三十張票后剩余90張票。進(jìn)入退票系統(tǒng)后的操作界面 圖6-5 當(dāng)輸入

23、錯(cuò)誤的航班時(shí)退票失敗 圖6-6 正確輸入航班號(hào)進(jìn)行退票成功 退票后的航線查詢 圖6-7 退票后再次查詢此航線注:結(jié)合上面的退票信息圖可以觀察出退票成功后票又變回了原來的張數(shù)多位顧客購票后的余票查詢 圖6-8 多人購票后余票查詢7. 心得體會(huì) 短短一周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)結(jié)束了,本次課程設(shè)計(jì)遇到了很多困難,但是在老師的幫助下都一一解決了,首先感謝老師對(duì)我的幫助。開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí)感覺和C語言沒什么不一樣,而且還認(rèn)為數(shù)據(jù)結(jié)構(gòu)做不出什么實(shí)質(zhì)性的東西出來。但是這次課程設(shè)計(jì)改變了我的看法,也讓我深深體會(huì)到自己學(xué)習(xí)的不足。通過這次課程設(shè)計(jì),我感覺數(shù)據(jù)結(jié)構(gòu)的核心應(yīng)該是算法,無論什么程序,只要掌握了核心算法,程

24、序基本都能編寫出來。在敲源代碼時(shí),發(fā)現(xiàn)航班結(jié)構(gòu)體中的已定票乘客信息和等待訂票乘客信息的結(jié)構(gòu)不太好操作,經(jīng)過一番思考最終改為源代碼中所定義的結(jié)構(gòu)體。從中知道了結(jié)構(gòu)體的定義決定了源程序的難易。 在打程序時(shí),沒有把文件操作的代碼打進(jìn)源程序。在調(diào)試沒有文件操作的代碼時(shí),沒有很多錯(cuò)誤,但是犯了一個(gè)大錯(cuò),就是在有一個(gè)字符串的復(fù)制中使用了賦值,調(diào)試過程指出錯(cuò)錯(cuò)誤半天都不知道改,后來看了整個(gè)程序才反應(yīng)過來。在運(yùn)行調(diào)試過程中瀏覽信息沒有輸出想要的輸出結(jié)果,檢查程序原來是格式控制字符串中的一個(gè)字符打成了大寫;查詢信息只能查詢鏈表中的第一條航線,檢查程序原來是多用了break造成過早跳出循環(huán),不能查找后面

25、的航線;乘客訂多張票后瀏覽信息發(fā)現(xiàn)余票只減了一張,檢查程序發(fā)現(xiàn)乘客訂票后只對(duì)余票做了自減,在運(yùn)行調(diào)試過程中就出現(xiàn)了這么些大的錯(cuò)誤,在這過程中還對(duì)輸出窗口界面做了一些調(diào)整。 加入文件操作代碼后進(jìn)行調(diào)試,沒有出現(xiàn)什么錯(cuò)誤。最終運(yùn)行時(shí)老在文件操作時(shí)終止程序,經(jīng)過調(diào)試和自己的摸索原來是文件檢測函數(shù)運(yùn)用錯(cuò)誤,改正后程序正常運(yùn)行。運(yùn)行程序后打開所寫的文件,發(fā)現(xiàn)航班信息的余票量沒有隨乘客的訂票而減少,還是初始值,這時(shí)才發(fā)現(xiàn)每進(jìn)行一次訂票后都要重新對(duì)航班信息的文件重新寫入,改后最終就確定了上交源代碼。 在敲代碼和在程序的調(diào)試、運(yùn)行過程中我們發(fā)現(xiàn)我們半天才能想出幾句語句,整個(gè)代碼敲了二十幾個(gè)

26、小時(shí),調(diào)試調(diào)了二三十個(gè)小時(shí),主要原因使我們練得還不夠,C語言功底還不是很扎實(shí),要增加敲的代碼量。 此次課程設(shè)計(jì),使我們對(duì)鏈表和鏈隊(duì)列的基本操作更加熟練,讓我們深深地體會(huì)到要學(xué)好數(shù)據(jù)結(jié)構(gòu)需要多練,多編程,多思考。8. 附錄#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#define P printf#define S scanf /*客戶信息*/typedef struct customer char name20; /姓名 int num; /

27、訂票數(shù)量int level; /艙位等級(jí)customer *next; /指向后繼乘客customer,*Lcustomer;/*航線信息*/typedef struct airline char ter_address20; /終點(diǎn)站char line_num10; /航班號(hào) char plane_num10; /飛機(jī)型號(hào)int date; /飛行日期int total; /總?cè)藬?shù)int remain; /余票數(shù) customer *booked;/已定客戶信息customer *wait; /替補(bǔ)客戶信息 airline *next; /指向后繼航線airline,*Lairline;ai

28、rline * L; /全局變量 :航班信息/*按照航班號(hào)查找航班*/Lairline search_line()char a10;airline *p;p=L->next; P("Please input the number of line:"); S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->line_num ) break;return p;/*三種方式查找航班*/Lairline search_plane()/1.按照飛機(jī)型號(hào)查找char a10;airline *p;p=L->n

29、ext;P("Please input the number of plane:");S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->plane_num) break;return p;Lairline search_date()/2.按照日期查詢航班 int a;airline *p;p=L->next;P("Please input the date of plane:");S("%d",&a); /注意這里加取址符for(;p;p=p->n

30、ext) if(a=p->date) break; /當(dāng)找到找到與a相同的節(jié)點(diǎn)時(shí)跳出循環(huán)return p;Lairline search_address()/3.按航班終點(diǎn)查找航班char a20;airline *p;p=L->next;P("Please input the final address of the plane:");S("%s",a); for(;p;p=p->next)if(!strcmp(a,p->ter_address) break;return p;/*主界面*/void boundary() P(&

31、quot; *歡迎您進(jìn)入航空訂票客服系統(tǒng)* n "); P("n"); P(" O(_)O 請(qǐng)選擇您要進(jìn)行的業(yè)務(wù):n"); P("tt顯示所有航線 =>請(qǐng)輸入1n"); P("tt查詢航線信息 =>請(qǐng)輸入2n"); P("tt進(jìn)入訂票系統(tǒng) =>請(qǐng)輸入3n"); P("tt進(jìn)入退票系統(tǒng) =>請(qǐng)輸入4n"); P("tt退出客服系統(tǒng) =>請(qǐng)輸入0n"); P("n"); P("tt清除屏幕信

32、息 =>請(qǐng)輸入5n"); P("請(qǐng)按照以上的信息提示進(jìn)行操作: t");/*顯示乘客信息*/void print_customer(airline *p)customer *c; if(p->booked) c=p->booked;P("已經(jīng)購票的乘客的信息nt票數(shù)t姓名tn"); for(;c;c=c->next)P("%5dtt %sn",c->num,c->name);P("nn"); else P("(_)暫時(shí)沒有客戶訂票!nn"); if(

33、p->wait) c=p->wait; P("排隊(duì)購票的乘客的信息nt票數(shù)t姓名tnn"); for(;c;c=c->next) P("%5dtt %sn",c->num,c->name); P("nn");else P("暫時(shí)沒有客戶排隊(duì)訂票nn");/*插入新航班(創(chuàng)建鏈表)*/void insert_line()airline *p,*q;int flag=1;for(;flag;)q=(Lairline)malloc(sizeof(airline);P("Please

34、 input the number of the plane: ");S("%s",q->line_num);for(p=L;p->next;p=p->next) if(strcmp(p->next->line_num,q->line_num)>=0) break; if(p->next&&strcmp(p->next->line_num,q->line_num)=0)P("航班已存在,請(qǐng)重新輸入n");continue; /一旦航班已經(jīng)存在,立刻跳出本次循環(huán) P

35、("Please input the date of the plane:"); /飛行日期 S("%dt",&q->date);P("Please input the number of the plane:"); /飛機(jī)號(hào)S("%s",q->plane_num); P("PLease input the final address of the plane:");/終點(diǎn)站S("%s",q->ter_address); q->total=12

36、0; /總數(shù)為120 q->remain=120; /余票為120 q->booked=NULL;q->wait=NULL; q->next=p->next; /插入新節(jié)點(diǎn)p->next=q;/插入節(jié)點(diǎn)成功后再選擇是否繼續(xù)增加P("Success!Do you want to continue?n");P("Stop=>(0)ttContinue=>(1)n");scanf("%d",&flag);/*訂票系統(tǒng)*/void book()int i; int flag=0;airl

37、ine *p;customer *cst, *c; P("Please choose the way of viewing:n"); /查詢方式選擇P("The number of the flight=>1n"); P("The address of the final destination=>2n"); P("The date of the flight=>3n"); for(;!flag;) /flag為0時(shí)一直在循環(huán)S("%d",&i); switch(i)

38、/三種方式查詢航班 case 1: p=search_line();flag=1;break; case 2: p=search_address();flag=1;break; case 3: p=search_date();flag=1;break; default:P("Wrong!Please input again!n");break; /首先進(jìn)行查票 if(p) P("終點(diǎn)站 航班號(hào) 飛機(jī)號(hào) 飛行周日 余票量 n"); P("%-10s%8s%18s%13d%16dn",p->ter_address,p->lin

39、e_num, p->plane_num,p->date,p->remain);cst=(customer *)malloc(sizeof(customer);P("The number of tickets:t"); / 購票張數(shù)S("%d",&cst->num);P("n"); P("The level of shipping space:t"); /艙位等級(jí)S("%d",&cst->level); P("n");P("

40、;The name of yours:t"); /購買者姓名S("%s",cst->name); P("n"); if(cst->num<=p->remain) /乘客的訂票數(shù)量和剩余的票進(jìn)行比較cst->next=p->booked; /插入cst這個(gè)節(jié)點(diǎn)p->booked=cst;p->remain=p->remain-cst->num; /改變余票數(shù)量P("Success!The number of the seat:%d%dn",p->total-p-

41、>remain-cst->num+1,p->total-p->remain); /顯示此乘客買的票數(shù)對(duì)應(yīng)的座位號(hào)else /余票不夠時(shí)P("The remain is not sufficient! queue up?n YES(1) ttt NO(0)n"); S("%d",&flag);if(flag) /如果排隊(duì)if(!p->wait) /如果沒有人在排隊(duì)cst->next=p->wait; /cst直接作為該班次排隊(duì)的人p->wait=cst;else /有人在排隊(duì)c=p->wait;

42、for(;c->next;c=c->next); /cst排在c后面cst->next=c->next;c->next=cst; else P("The flight is not exist! () nnn"); /*排隊(duì)等待訂票系統(tǒng)*/void waited(airline *p)int flag; customer *q,*q0,*h; if(!p->wait) return; /如果沒有排隊(duì)等待就返回 q=(customer *)malloc(sizeof(customer); q->level=0; /初始化q q->

43、;num =123; strcpy(q->name,"0000"); /名字為0000 q->next=p->wait; h=q; for(;p->remain>0&&q->next;) if(q->next->num<p->remain) /當(dāng)下趟航班余票充足時(shí),詢問顧客是否訂票P("%s,you are queuing up to book %d tickets,the tickets are adequate.",q->next->name,q->next

44、->num); P("Do you want to book the tickets? YES(1) NO(0) ");S("%d",&flag); if(flag) /如果選擇訂票 q0=q->next; q->next=q->next->next; /插入q0節(jié)點(diǎn) q0->next=p->booked; p->booked=q0; p->remain=p->remain-q0->num; /q0定完票后,余票進(jìn)行修改 P("SUCCESS! O(_)Onnn"

45、;); else q=q->next;/沒有選擇訂票 else q=q->next;/余票不足時(shí) p->wait=h->next;/*退票系統(tǒng)*/void Refund() int flag;char a20; airline *p;customer *c,*c1;p=search_line(); /查找到對(duì)應(yīng)的航班c=p->booked; /已經(jīng)訂票的客戶為c if(!p) P("The airline is not exist!nn"); boundary(); /返回主界面 return; P("Please input you

46、r name:");S("%s",a);if(!p->booked->name) /如果未找到這個(gè)人的信息P("Sorry!Your information isn't found!(_)n");boundary(); /返回主界面 return; if(!strcmp(a,p->booked->name) / P("The information of returning tickets:n"); /退票信息 P("Name:%st Final Address:%st Ticket

47、s:%dtn",p->booked->name,p->ter_address,p->booked->num); P("Do you want to return the tickets? YES(1) NO(0)n"); /是否退票 S("%d",&flag); if(flag) /如果退票 p->booked=p->booked->next; /刪除節(jié)點(diǎn)操作p->remain=p->remain+c->num; /余票數(shù)目增加free(c);P("SUCCESS! O(_)O nnnnn"); /退票成功waited(p); /再次詢問是否排隊(duì)訂票boundary(); /返回主菜單 elsefor(;c->next;c=c->next) if(!strcmp(a,c->next->name) /查找這個(gè)訂票人的信息 break;if(!c->next) /沒有找到這個(gè)人的信息P(&

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論