數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng).doc
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng).doc(29頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
摘 要隨著時(shí)代的進(jìn)步社會(huì)分工的不斷細(xì)化,各個(gè)行業(yè)聯(lián)系的不斷密切,人們出行越來越多,出行的方式也是百花齊放,作為空中重要的交通工具,飛機(jī)航空系統(tǒng)也在不斷地得到優(yōu)化,其中重要的一項(xiàng)就是航空飛機(jī)訂票系統(tǒng),因此好的訂票系統(tǒng)關(guān)系著人們的日常出行方便與否,設(shè)計(jì)并編制出符合人們需要的航空訂票系統(tǒng)是一項(xiàng)繁重而艱巨的任務(wù)。本文 Microsoft Visual C 6.0 作為程序代碼的實(shí)現(xiàn)軟件,進(jìn)行飛機(jī)訂票系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)。首先,根據(jù)課程設(shè)計(jì)內(nèi)容進(jìn)行需求分析,確定主要的功能模塊,。然后進(jìn)行數(shù)據(jù)結(jié)構(gòu)、各功能模塊算法以及它們之間的調(diào)用關(guān)系的概要設(shè)計(jì),做出各信息模塊的數(shù)據(jù)結(jié)構(gòu)表,并給出所用的結(jié)構(gòu)體和結(jié)點(diǎn)類型。在此基礎(chǔ)上,進(jìn)行各功能模塊的詳細(xì)算法設(shè)計(jì),做出各算法的流程圖。最后,對(duì)系統(tǒng)進(jìn)行測(cè)試,分為合法數(shù)據(jù)測(cè)試和非法數(shù)據(jù)測(cè)試,并對(duì)測(cè)試結(jié)果截圖保存。本系統(tǒng)包含錄入航班信息、訂票、退票、查詢航班信息、查詢訂票信息、修改航班信息和退出系統(tǒng) 7 個(gè)基本功能,經(jīng)測(cè)試后健壯性良好。關(guān)鍵詞飛機(jī)訂票系統(tǒng);數(shù)據(jù)結(jié)構(gòu);C 語言;單鏈表i目錄1問題背景 .12問題分析 .13需求分析 .23.1用戶需求分析 .23.2功能需求分析 .23.3系統(tǒng)需求分析 .34邏輯設(shè)計(jì) .34.1數(shù)據(jù)結(jié)構(gòu) .34.2各功能模塊間函數(shù)調(diào)用關(guān)系 .54.3函數(shù)說明 .55詳細(xì)設(shè)計(jì) .75.1錄入航班信息 .75.2顧客訂票模塊 .85.3顧客退票模塊 .85.4查詢航班模塊 .95.5查詢訂單模塊 .95.6修改航班模塊 .96程序調(diào)試與測(cè)試 .116.1合法數(shù)據(jù)測(cè)試結(jié)果 .116.2非法數(shù)據(jù)測(cè)試結(jié)果 .137結(jié)果分析 .157.1輸入 .157.2輸出 .15總結(jié) .16參考文獻(xiàn) .16ii1問題背景訂票系統(tǒng)是一種新興的現(xiàn)代商務(wù)方式,近幾年來得到了迅速發(fā)展,顯現(xiàn)了巨大的現(xiàn)代商業(yè)價(jià)值。有理由相信,訂票系統(tǒng)將逐漸方便盛會(huì)生活,也將成為數(shù)字化社會(huì)的一種重要體現(xiàn)。它改變了傳統(tǒng)的買賣雙方面堆滿的交流方式,也打破了舊有工作經(jīng)營模式,它通過網(wǎng)絡(luò)使航空公司面對(duì)整個(gè)世界,為用戶提供每周 7 天,每天 24 小時(shí)的全天候服務(wù)。網(wǎng)上訂票的規(guī)模正在逐年迅速增長,它帶來的商機(jī)是巨大而深遠(yuǎn)的。訂票系統(tǒng)研究的主攻方向是通過公共計(jì)算機(jī)通信網(wǎng)絡(luò)進(jìn)行網(wǎng)上訂票活動(dòng),突破傳統(tǒng)商務(wù)在時(shí)間、地域上的限制,成為方便、快捷、安全可靠的新興電子化商務(wù)活動(dòng)模式。是網(wǎng)上訂票活動(dòng)更安全、可靠、快速、明確和方便。對(duì)航空公司來說,航空訂票管理系統(tǒng)既能擴(kuò)大服務(wù)范圍,擴(kuò)大公司影響,減少營業(yè)費(fèi)用,又對(duì)穩(wěn)固航空公司的客源有著重要的輔助作用;站在旅客的角度,航空公司提供的這種服務(wù)提供了更多的方便,節(jié)省了很多時(shí)間。建設(shè)航空訂票管理系統(tǒng)是體現(xiàn)和提高航空公司領(lǐng)導(dǎo)業(yè)績的一條捷徑。2問題分析通過此系統(tǒng)可以實(shí)現(xiàn)如下功能:錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)查詢:可以查詢某個(gè)航線的情況(如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉);可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件13需求分析3.1 用戶需求分析用戶使用此程序所要完成的工作主要為:錄入和查詢所有航線信息、查看已訂票客戶信息、查詢航線、辦理訂票業(yè)務(wù)、辦理退票業(yè)務(wù)。通過此系統(tǒng)可以方便的進(jìn)行上述工作。每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量。已訂票的客戶名單信息包括姓名、訂票量、艙位等級(jí)(1,2 或 3)。等候替補(bǔ)的客戶名單信息包括姓名、所需票量。查詢航線功能可以根據(jù)旅客提出的終點(diǎn)站名輸出航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量。訂票業(yè)務(wù)功能根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)額)查詢?cè)摵桨嗥鳖~情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊(duì)候補(bǔ)購票。退票業(yè)務(wù)功能根據(jù)客戶提供的情況(航班號(hào)、姓名)為客戶辦理退票手續(xù),然后查詢?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊(duì)候補(bǔ)的客戶。3.2功能需求分析1.功能模塊說明:(1) 將航班的基本信息錄入到系統(tǒng)中。(2) 根據(jù)航班號(hào)或者根據(jù)起飛地點(diǎn)、降落地點(diǎn)查詢所需航班信息。(3) 輸入姓名和所要訂航班的航班號(hào)訂票。(4) 輸入姓名和所訂航班的航班號(hào)辦理退票。(5) 輸入航班號(hào),修改該航班的起飛和降落時(shí)間以修改航班的起降時(shí)間。(6) 退出的同時(shí)將信息寫入文件。2. 訂票系統(tǒng)功能圖2訂票系統(tǒng)錄辦辦查查航退入理理詢?cè)儼喑龊接喭撕接喰畔蛋嗥逼卑鄦蜗⒔y(tǒng)信業(yè)業(yè)信信修息務(wù)務(wù)息息改圖 3.1 訂票系統(tǒng)結(jié)構(gòu)圖3.3 系統(tǒng)需求分析開發(fā)環(huán)境:PC 機(jī),Windows 7 系統(tǒng)運(yùn)行軟件:Microsoft Visual C 6.04邏輯設(shè)計(jì)4.1 數(shù)據(jù)結(jié)構(gòu)1 航班的信息:航班的情況存儲(chǔ)結(jié)構(gòu)采用單鏈表,每個(gè)元素表示一個(gè)航班的情況,包括航班號(hào)、起飛時(shí)間、降落時(shí)間、起飛城市、抵達(dá)城市、航班票價(jià)、票價(jià)折扣、確定航班是否滿倉和空座數(shù)九個(gè)數(shù)據(jù)項(xiàng):表 3.1 航班信息的數(shù)據(jù)結(jié)構(gòu)表數(shù)據(jù)項(xiàng)數(shù)據(jù)類型航班號(hào)字符串(char)起飛時(shí)間字符串 (char)降落時(shí)間字符串 (char)起飛城市字符串 (char)抵達(dá)城市字符串 (char)航班是否滿倉整型 (int)空座數(shù)整型 (int)票價(jià)浮點(diǎn)數(shù) (float)票價(jià)折扣浮點(diǎn)數(shù) (float)typedef struct passengernode /定義客戶資料結(jié)點(diǎn) char name20; /姓名 char ID_num20; /證件號(hào) char flight_num10; /航班號(hào) int order_num; /訂單號(hào) int ticket_num; /訂票數(shù)量 struct passengernode *next; /指向下一個(gè)結(jié)點(diǎn) passengernode; 3 客戶鏈表:每個(gè)數(shù)據(jù)元素包括頭指針和尾指針兩個(gè)數(shù)據(jù)項(xiàng): 每個(gè)結(jié)點(diǎn)包括兩個(gè)指針域: C 語言描述如下: typedef struct passengerList passengernode *head; passengernode *rear; passengerList;4.2各功能模板函數(shù)之間的調(diào)用關(guān)系。4.3 函數(shù)說明 void init_flight(flightnode *&h):要建立一個(gè)以 h 為頭結(jié)點(diǎn)的空鏈表,錄入航班信息和增加航班后將航班結(jié)點(diǎn)插入該鏈表。 void init_passengerList(passengerList *&pList):建立一個(gè)帶有頭指針和尾指針的空鏈表,存儲(chǔ)帶有顧客信息的結(jié)點(diǎn)。 頭指針域 尾指針域 void save_flight(flightnode *h):保存航班信息到指定數(shù)據(jù)文件中。 void load_flight(flightnode *&h):從存儲(chǔ)航班信息的文件導(dǎo)入航班信息到航班鏈表中。 void save_passenger(passengerList *PList):保存客戶信息到指定數(shù)據(jù)文件中。 void load_passenger(passengerList *&PList):從存儲(chǔ)客戶信息的文件導(dǎo)入客戶信息到客戶鏈表中。 void add_flight(flightnode *&h):錄入航班信息后調(diào)用 insert_flight 函數(shù)增加班。 void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull):在錄入航班情況或增加新的航班后,將新的航班結(jié)點(diǎn)插入到航線鏈表中。 int book(flightnode *&l,passengerList *&PList):要完成客戶訂票,將客戶結(jié)點(diǎn)插入客戶鏈表中,并修改相應(yīng)的航班信息。 void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num):在顧客訂票后,將該顧客結(jié)點(diǎn)插入到顧客鏈表中,并修改相應(yīng)的航班信息。 void find_same_flight(flightnode *l,char *flight_num):在客戶訂票時(shí),當(dāng)客戶輸入的航班號(hào)對(duì)應(yīng)的航班已滿倉時(shí),提供其他可選航班并輸出顯示。 void cancel(passengerList *&PList,flightnode *&h):完成客戶退票,將客戶的訂單從客戶鏈表中刪除,并修改相應(yīng)的航班信息。 int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num):按照要退票的顧客的姓名和證件號(hào)查找該顧客結(jié)點(diǎn),進(jìn)行刪除操作。 void flight_check(flightnode *h):選擇使用何種方式對(duì)航班信息進(jìn)行查詢。 void check_all_flight(flightnode *l):瀏覽所有航班信息。 int place_check(flightnode *l,char *start_place,char *end_place):按照起飛抵達(dá)城市查詢航班信息。 int flight_num_check(flightnode *l,char *flight_num):按照航班號(hào)查詢航班信息。 void passenger_check(passengerList *PList):選擇使用何種方式對(duì)訂單信息進(jìn)行查詢。 void check_all_passenger(passengerList *PList):瀏覽所有訂單信息。 int order_num_check(passengerList *PList,int order_num):按訂單號(hào)查詢訂單信息。 int ID_name_check(passengerList *PList,char *name,char *ID_num):按客戶姓名和證件號(hào)查詢訂單信息。 void modify_flight(flightnode *&h,passengerList *&PList):修改航班信息,包括添加航班信息,刪除航班信息,修改航班起飛抵達(dá)時(shí)間。 void delete_flight(flightnode *&h,passengerList *&PList):按照某個(gè)航班號(hào)刪除航班結(jié)點(diǎn)。 5 詳細(xì)設(shè)計(jì)5.1 錄入航班信息 在主函數(shù)中輸入“1”,調(diào)用 void add_flight(flightnode *&h)函數(shù),此函數(shù)將航班指針*p指向已存在航班鏈表*h 的頭結(jié)點(diǎn),利用 for(;p-next!=NULL;p=p-next)使*p 指向航線鏈表的最后一個(gè)結(jié)點(diǎn),然后讓用戶輸入航班信息,然后調(diào)用 void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull)函數(shù),用 malloc 函數(shù)申請(qǐng)一個(gè)航班結(jié)點(diǎn),并用指針*q 指向,將航班信息賦到新申請(qǐng)的結(jié)點(diǎn)中,p-next=q;p=p-next;該操作將該結(jié)點(diǎn)插入航班鏈表中。流程圖如下 5.2 顧客訂票模塊在主函數(shù)中輸入“2”,調(diào)用 int book(flightnode *&h,passengerList *&PList)函數(shù)完成客戶的訂票。用航班指針*p 指向已存在航班鏈表*h 的頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),請(qǐng)客戶輸入起飛抵達(dá)城市,分別存于 start_place 和 end_place 中。調(diào)用 int place_check(flightnode *l,char *start_place,char *end_place)函數(shù),如果函數(shù)返回“1”則請(qǐng)客戶輸入要訂的航班號(hào),如果輸入的航班號(hào)不存在,輸出提示信息, 如果航班存在則提示客戶輸入訂的票數(shù)、客戶的姓名和證件號(hào),調(diào)用 void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函數(shù),定義航班指針*p=h-next,使用 for 循環(huán)匹配 flight_num和 p-flight_num,找到后,執(zhí)行 p-left=p-left-ticket_num,修改相應(yīng)航班的空座數(shù)。用malloc 函數(shù)申請(qǐng)一個(gè)客戶結(jié)點(diǎn),并用指針*q 指向,將客戶信息和航班號(hào)賦到新申請(qǐng)的結(jié)點(diǎn)中,PList-rear-next=q;PList-rear=q;該操作將該結(jié)點(diǎn)插入客戶鏈表中。 如果該航班已滿倉或該航班的空座數(shù)不夠,輸出可供選擇的航班,讓客戶選擇,之后調(diào)用 void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函數(shù)將客戶結(jié)點(diǎn)插入客戶鏈表中. 5.3 顧客退票模塊 在主函數(shù)中輸入“3”,調(diào)用 void cancel(passengerList *&PList,flightnode *&h)函數(shù)完成客戶的退票。提示客戶輸入客戶的姓名和證件號(hào)以及要退的航班號(hào),此函數(shù)再調(diào)用 int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num,char *flight_num)函數(shù),用客戶結(jié)點(diǎn)指針*pr 等于已存在客戶鏈表結(jié)點(diǎn) Plist 的頭指針,相當(dāng)于將*pr 指向客戶鏈表的頭結(jié)點(diǎn),用客戶結(jié)點(diǎn)指針*p 指向 pr 的下一個(gè)結(jié)點(diǎn)。使用 while 循環(huán)尋找匹配姓名、證件號(hào)、航班號(hào)的客戶結(jié)點(diǎn),找到后定義航班指針*f=h-next,使用 for 循環(huán)找到匹配航班號(hào)的航班結(jié)點(diǎn),執(zhí)行 f-left=f-left+p-ticket_num,修改退票后相應(yīng)航班結(jié)點(diǎn)的空座數(shù),之后執(zhí)行 pr-next=p-next;free(p);刪除要退票的客戶訂單信息。如果沒有找到匹配的客戶結(jié)點(diǎn),輸出提示信息.5.4 查詢航班模塊 在主函數(shù)中輸入“4”,調(diào)用 void flight_check(flightnode *h)函數(shù)選擇使用哪一種查詢方式進(jìn)行查詢。提示客戶輸入查詢方式,如客戶輸入“1”,則調(diào)用 int flight_num_check(flightnode *l,char *flight_num)函數(shù)按航班號(hào)對(duì)航班進(jìn)行查詢,提示客戶輸入航班號(hào),存于 flight_num 中;如客戶輸入“2”,則調(diào)用 int place_check(flightnode *l,char *start_place,char *end_place)函數(shù)按起飛抵達(dá)城市對(duì)航班進(jìn)行查詢,提示客戶輸入起飛抵達(dá)城市,分別存于 start_place 和 end_place 中;如客戶輸入“3”,則調(diào)用 void check_all_flight(flightnode *l)函數(shù)瀏覽全部航班信息。 在 int flight_num_check(flightnode *l,char *flight_num)函數(shù)中,定義航班指針*p=h,使用 for 循環(huán)匹配 flight_num 和 p-flight_num,找到匹配的航班節(jié)點(diǎn)后,輸出該航班的所有信息。 在 int place_check(flightnode *l,char *start_place,char *end_place)函數(shù)中,定義航班指針*p=h,使用 for 循環(huán)尋找匹配 start_place 和 start_place 的結(jié)點(diǎn),找到匹配的航班結(jié)點(diǎn)后,輸出該航班的所有信息。 在 void check_all_flight(flightnode *l)函數(shù)中,定義航班指針*p=h,使用 for 循環(huán)輸出所有航班信息。 5.5 查詢訂單模塊在主函數(shù)中輸入“5”,調(diào)用 void passenger_check(passengerList *PList)函數(shù)選擇使用哪一種查詢方式進(jìn)行查詢。提示客戶輸入查詢方式,如客戶輸入“1”,則調(diào)用 int ID_name_check(passengerList *PList,char *name,char *ID_num)函數(shù)按客戶的姓名和證件號(hào)對(duì)訂單進(jìn)行查詢,提示客戶輸入姓名和證件號(hào),分別存于 name 和 ID_num 中;如客戶輸入“2”,則調(diào)用 int order_num_check(passengerList *PList,int order_num)函數(shù)按訂單號(hào)對(duì)訂單進(jìn)行查詢,提示客戶輸入訂單號(hào),存于 order_num 中;如客戶輸入“3”,則調(diào)用 void check_all_passenger(passengerList *PList)函數(shù)瀏覽全部訂單信 在 int ID_name_check(passengerList *PList,char *name,char *ID_num)函數(shù)中,定義客戶指針*p= PList-head-next,使用 for 循環(huán)尋找匹配 name 和 ID_num 的結(jié)點(diǎn),找到匹配的訂單節(jié)點(diǎn)后,輸出該訂單的所有信息。 在 int order_num_check(passengerList *PList,int order_num)函數(shù)中,定義客戶指針*p=PList-head-next,使用 for 循環(huán)尋找匹配 order_num 的結(jié)點(diǎn),找到匹配的訂單結(jié)點(diǎn)后,輸出該訂單的所有信息。 在 void check_all_passenger(passengerList *PList)函數(shù)中,定義客戶指針*p=PList-head-next,使用 for 循環(huán)輸出所有訂單信息。 5.6 修改航班模塊在主函數(shù)中輸入“6”,調(diào)用 void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)對(duì)航班信息進(jìn)行修改。提示客戶輸入修改模式,如客戶輸入“1”,則調(diào)用 void add_flight(flightnode *&h)函數(shù)添加航班信息;如客戶輸入“2”,則調(diào)用 void delete_flight(flightnode *&h,passengerList *&PList)函數(shù)刪除指定的航班信息,提示客戶輸入航班號(hào),存于 flight_num 中;如客戶輸入“3”,則示客戶輸入航班號(hào),如果該航班號(hào)存在,則提示用戶輸入修改后的起飛抵達(dá)時(shí)間。 在 void delete_flight(flightnode *&h,passengerList *&PList)函數(shù)中,定義航班指針*pr=h,定義航班指針 p=pr-next,定義客戶指針*qr=PList-head,定義客戶指針*q=qr-next。使用 while 循環(huán)尋找匹配航班號(hào)的航班結(jié)點(diǎn),找到后執(zhí)行 pr-next=p-next;free(p),刪除指定的航班信息;使用 while 循環(huán)找到匹配航班號(hào)的訂單結(jié)點(diǎn),執(zhí)行 qr-next=q-next;free(q),刪除對(duì)該航班訂票的訂單信息。如果沒有找到匹配的航班結(jié)點(diǎn),輸出提示信息。6.1 合法數(shù)據(jù)測(cè)試結(jié)果 (1)編譯鏈接后顯示菜單 (2)輸入菜單號(hào)“1”,開始信息的錄入(3) 輸入菜單號(hào)“2”,進(jìn)入訂票模塊 (4) 輸入菜單號(hào)“3”,進(jìn)入退票模塊 (5) 輸入菜單號(hào)“4”,查詢航班信息 輸入菜單號(hào)“1”,a. 按航班號(hào)查詢航班信息 b. 輸入菜單號(hào)“2”,按起飛抵達(dá)城市查詢航班信息 c. 輸入菜單號(hào)“3”,瀏覽全部航班信息 (6) 輸入菜單號(hào)“5”,查詢訂單信息 a. 輸入菜單號(hào)“1”,按客戶姓名和證件號(hào)查詢訂單信息 b. 輸入菜單號(hào)“2”,按訂單號(hào)查詢訂單信息 c. 輸入菜單號(hào)“3”,瀏覽全部訂單信息 (7)輸入菜單號(hào)“6”,進(jìn)入修改模塊 a. 輸入菜單號(hào)“1”,增加航班 b. 輸入菜單號(hào)“2”,刪除航班 c. 輸入菜單號(hào)“3”,修改航班時(shí)間 6.2 非法數(shù)據(jù)測(cè)試結(jié)果 (1) 選擇訂票服務(wù)后,輸入了沒有開通航班的城市 (2) 選擇訂票服務(wù)后,輸入了系統(tǒng)中沒有的航班號(hào) (4) 選擇退票服務(wù)后,輸入了沒有訂票的客戶姓名和證件號(hào) (5) 選擇刪除航班服務(wù)后,輸入了系統(tǒng)中不存在的航班號(hào) (5) 選擇航班查詢服務(wù)后,輸入了沒有開通航班的城市 (6) 選擇航班查詢服務(wù)后,輸入了系統(tǒng)中不存在的航班號(hào) (7) 選擇訂單查詢服務(wù)后,輸入了沒有訂票的客戶姓名和證件號(hào) (8) 選擇訂單查詢服務(wù)后,輸入了系統(tǒng)中不存在的訂單號(hào) (9) 選擇修改航班時(shí)間服務(wù)后,輸入了系統(tǒng)中不存在的航班號(hào)#include #include #include #include typedef struct flightnode char flight_num10; char start_time10; char end_time10; char start_place20; char end_place20; int left; float price; float price_discount; int isFull; struct flightnode *next; flightnode; typedef struct passengernode char name20; char ID_num20; char flight_num10; int order_num; int ticket_num; struct passengernode *next; passengernode; typedef struct passengerList passengernode *head; passengernode *rear; passengerList; void init_flight(flightnode *&h) h=(flightnode *)malloc(sizeof(flightnode); if(h=NULL) exit(0); h-next=NULL; void init_passengerList(passengerList *&pList) pList=(passengerList *)malloc(sizeof(passengerList); pList-head=(passengernode *)malloc(sizeof(passengernode); pList-rear=pList-head; pList-rear-order_num=0; pList-head-next=NULL; void save_passenger(passengerList *PList) FILE* fp = fopen(passenger.dat,wb); if(fp=NULL) return; passengernode *temp=PList-head-next; while(temp!=NULL) fwrite(temp,sizeof(passengernode),1,fp); temp = temp-next; ; fclose(fp); void load_passenger(passengerList *PList) FILE* fp = fopen(passenger.dat,rb); if(fp=NULL) return; passengernode *q; int n; while(!feof(fp) q=(passengernode *)malloc(sizeof(passengernode); n =fread(q,sizeof(passengernode),1,fp); if(n!=1) break; PList-rear-next=q; PList-rear=q; PList-rear-next=NULL; fclose(fp); void save_flight(flightnode *h) FILE* fp = fopen(flightList.dat,wb); if(fp=NULL) return; flightnode *temp=h-next; while(temp!=NULL) fwrite(temp,sizeof(flightnode),1,fp); temp = temp-next; ; fclose(fp); void load_flight(flightnode *&h) flightnode *pt=h; FILE* fp = fopen(flightList.dat,rb); if(fp=NULL) return; flightnode *q; int n; while(!feof(fp) q=(flightnode *)malloc(sizeof(flightnode); n=fread(q,sizeof(flightnode),1,fp); if(n!=1) break; pt-next=q; pt=q; pt-next=NULL; fclose(fp); int find_same_flight(flightnode *h,char *flight_num) flightnode *t=h-next,*p=h-next; int mark=0; printf(%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8sn,航班號(hào),起飛城市,抵達(dá)城市,起飛時(shí)間,抵達(dá)時(shí)間,價(jià)格,折扣,是否滿倉,空座數(shù)); while(t!=NULL & strcmp(t-flight_num,flight_num)!=0) t=t-next; while(p!=NULL) if(strcmp(t-start_place,p-start_place)=0)&(strcmp(t-end_place,p-end_place)= 0)&(strcmp(t-flight_num,p-flight_num)!=0) printf(%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8dn,p-flight_num, p-start_place,p-end_place,p-start_time,p-end_time,p-price,p-price_discount,p-isFull,p-left); mark=1; p=p-next; if(mark=0) printf(tt 抱歉,沒有可選的航班!n); return 0; return 1; void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull) flightnode *q; flightnode *p=h; q=(flightnode *)malloc(sizeof(flightnode); strcpy(q-flight_num,flight_num); strcpy(q-start_place,start_place); strcpy(q-end_place,end_place); strcpy(q-start_time,start_time); strcpy(q-end_time,end_time); q-left=left; q-price=price; q-price_discount=price_discount; q-isFull=isFull; q-next=p-next; p-next=q; p=p-next; void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num) flightnode *p=h-next; for(;p!=NULL;p=p-next) if(strcmp(p-flight_num,flight_num)=0) p-left=p-left-ticket_num; if(p-left=0) p-isFull=1; passengernode *q=(passengernode *)malloc(sizeof(passengernode);/新建結(jié)點(diǎn),存放新的客戶訂單信息 strcpy(q-name,name); strcpy(q-ID_num,ID_num); strcpy(q-flight_num,flight_num); q-ticket_num=ticket_num; q-next=NULL; PList-rear-next=q; q-order_num=PList-rear-order_num+1; PList-rear=q; void delete_flight(flightnode *&h,passengerList *&PList) flightnode *p,*pr; passengernode *q,*qr; char flight_num10; int mark=1; qr=PList-head; q=qr-next; pr=h; p=pr-next; printf(tt 請(qǐng)輸入你要?jiǎng)h除的航班號(hào):); scanf(%s,flight_num); while(p!=NULL) if(strcmp(flight_num,p-flight_num)=0) pr-next=p-next; free(p); printf(tt 刪除%s 航班成功!n,flight_num); mark=0; p=NULL; if(pr-next!=NULL) pr=pr-next; p=pr-next; if(mark=1) printf(tt 無此航班,無法刪除!n); else while(q!=NULL) if(strcmp(flight_num,q-flight_num)=0) qr-next=q-next; free(q); q=NULL; if(qr-next!=NULL) qr=qr-next; q=qr-next; int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num) passengernode *p,*pr=PList-head; p=pr-next; while(p!=NULL) if(strcmp(name,p-name)=0&strcmp(ID_num,p-ID_num)=0) for(flightnode *f=h-next;f!=NULL;f=f-next) if(strcmp(p-flight_num,f-flight_num)=0) f-left=f-left+p-ticket_num; f-isFull=0; break; pr-next=p-next; free(p); printf(tt 顧客%s,%s 退票成功!n,name,ID_num); return 1; pr=pr-next; p=pr-next; printf(tt 無此顧客,無法退票!n); return 0; void add_flight(flightnode *&h) flightnode *p=h; char flight_num10,start_time10,end_time10,start_place20,end_place20; int left,isFull,mark=1; float price,price_discount; for(;p-next!=NULL;p=p-next) while(mark=1) printf(tt 請(qǐng)輸入你要增加的航班號(hào):); scanf(%s,flight_num); printf(tt 請(qǐng)輸入出發(fā)地:); scanf(%s,start_place); printf(tt 請(qǐng)輸入目的地:); scanf(%s,end_place); printf(tt 請(qǐng)輸入起飛時(shí)間:); scanf(%s,start_time); printf(tt 請(qǐng)輸入抵達(dá)時(shí)間:); scanf(%s,end_time); printf(tt 請(qǐng)輸入票價(jià):); scanf(%f,&price); printf(tt 請(qǐng)輸入折扣:); scanf(%f,&price_discount); printf(tt 請(qǐng)輸入剩余座位數(shù):); scanf(%d,&left); printf(tt 請(qǐng)輸入是否滿倉(0 表示沒有滿倉 1 以滿倉):); scanf(%d,&isFull); insert_flight(p,flight_num,start_place,end_place,start_time,end_time,left,price, price_discount,isFull); printf(tt 增加航班%s 成功!n,flight_num); printf(tt 是否繼續(xù)錄入航班信息(1 表示繼續(xù)錄入;0 表示停止錄入).n); printf(tt 請(qǐng)輸入:); scanf(%d,&mark); int flight_num_check(flightnode *h,char *flight_num) flightnode *p=h; printf(%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8sn,航班號(hào),起飛城市,抵達(dá)城市,起飛時(shí)間,抵達(dá)時(shí)間,價(jià)格,折扣,是否滿倉,空座數(shù)); for(;p!=NULL;p=p-next) if(strcmp(p-flight_num,flight_num)=0) printf(%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8dn,p-flight_num, p-start_place,p-end_place,p-start_time,p-end_time,p-price,p-price_discount,p-isFull,p-left); return 1; printf(tt 抱歉,沒有航班號(hào)為%s 的航班信息!n,flight_num); return 0; int place_check(flightnode *h,char *start_place,char *end_place) flightnode *p=h; int mark=0; printf(%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8sn,航班號(hào),起飛城市,抵達(dá)城市,起飛時(shí)間,抵達(dá)時(shí)間,價(jià)格,折扣,是否滿倉- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
32 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì) 飛機(jī) 訂票 系統(tǒng)
鏈接地址:http://m.appdesigncorp.com/p-1603491.html