

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 題目 飛機(jī)訂票系統(tǒng) </p><p> 院 系 ******* </p><p> 專 業(yè) *************** </p><p> 姓 名 *****
2、* </p><p> 學(xué) 號(hào) ********* </p><p> 指 導(dǎo) 教 師 *** </p><p><b> 2012年7月</b></p><p><b> 1. 需求分析</b></p><
3、p><b> 1.1 問題描述</b></p><p> 基于目前人們外出遠(yuǎn)行頻繁,為方便乘客提前買票及優(yōu)化飛機(jī)航空訂票服務(wù),需要開發(fā)一個(gè)飛機(jī)訂票系統(tǒng),此程序就是要實(shí)現(xiàn)航班情況的錄入,查詢,訂票,退票以及航班的查詢和修改等基本功能。本課程設(shè)計(jì)的題目為:飛機(jī)訂票系統(tǒng)。</p><p><b> 1.2 基本要求</b></p>
4、;<p> 1.2.1 輸入的形式和輸入值的范圍</p><p> 錄入航班信息時(shí),需要輸入航班號(hào),起降時(shí)間,起飛抵達(dá)城市,值為字符串;還需要輸入航班票價(jià),票價(jià)折扣,值為浮點(diǎn)型(float);還需要輸入航班是否滿倉,值為整型(int)(“1”表示已滿倉,“0”表示沒有滿倉);如需要繼續(xù)錄入航班信息,要輸入判別信息,值為整型(“1”表示繼續(xù)錄入航班信息,“0”表示停止錄入航班信息)。</p&
5、gt;<p> 客戶訂票時(shí),需要輸入起飛抵達(dá)城市,然后選擇航班進(jìn)行查詢,選擇航班時(shí)需要輸入航班號(hào),值為字符串。</p><p> 客戶退票時(shí),需要輸入姓名,證件號(hào)進(jìn)行退票操作,值為字符串。</p><p> 查詢某個(gè)航班的情況時(shí),需要輸入航班號(hào),值為字符串;在查詢某個(gè)航線的情況時(shí),還可以通過輸入起飛抵達(dá)城市來查詢,值為字符串。</p><p>
6、 查詢某個(gè)訂單時(shí),需要輸入訂單號(hào),值為整型(int);或者需要輸入客戶姓名和證件號(hào),值為字符串。</p><p> 修改航班時(shí),需要輸入字符型數(shù)據(jù)選擇進(jìn)行何種修改操作;增加航班時(shí),需要輸入航班號(hào),起降時(shí)間,起飛抵達(dá)城市,值為字符串;還需要輸入航班票價(jià),票價(jià)折扣,值為浮點(diǎn)型(float);還需要輸入航班是否滿倉,值為整型(int)(“1”表示已滿倉,“0”表示沒有滿倉);如需要繼續(xù)錄入航班信息,要輸入判別信息,值
7、為整型(“1”表示繼續(xù)錄入航班信息,“0”表示停止錄入航班信息);刪除航班時(shí),需要輸入要?jiǎng)h除的航班的航班號(hào);修改航班時(shí)間時(shí),需要輸入要修改的航班的航班號(hào),修改后的航班起飛時(shí)間和抵達(dá)時(shí)間。</p><p> 1.2.2 輸出形式</p><p> 在所有操作后的輸出中都顯示操作是否正確以及操作后單鏈表的內(nèi)容。其中刪除操作后顯示刪除的元素的值,查找操作后顯示要查找元素的位置。</p&
8、gt;<p> 錄入航班情況時(shí),輸出顯示添加航班信息是否成功。</p><p> 客戶訂票時(shí),當(dāng)客戶輸入起飛抵達(dá)城市后,輸出可供客戶選擇的航班信息;客戶選擇了航班后,輸入提示信息告知用戶訂票是否成功。</p><p> 客戶退票時(shí),輸出客戶退票成功或者無此客戶,無法退票。</p><p> 查詢航班時(shí),輸出顯示對(duì)應(yīng)的航班信息,或者輸出提示信息告
9、知沒有相應(yīng)的航班信息。</p><p> 查詢訂單時(shí),輸出顯示對(duì)應(yīng)的訂單信息,或者輸出提示信息告知沒有相應(yīng)的訂單信息。</p><p> 修改航班時(shí),輸出對(duì)應(yīng)的提示的信息,提示操作是否成功。</p><p> 1.2.3 功能要求</p><p> (1)可以錄入航班情況,數(shù)據(jù)存儲(chǔ)在一個(gè)數(shù)據(jù)文件中;</p><p&
10、gt; (2)可以查詢某個(gè)航線的情況:輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉;輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;</p><p> ?。?)可以訂票,訂票情況存在一個(gè)數(shù)據(jù)文件中(如果該航班已經(jīng)無票,提供相關(guān)可選航班);</p><p> ?。?)可退票并且退票后修改相關(guān)數(shù)據(jù)文件;</p><p> ?。?)客戶資料:姓名,證
11、件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào);</p><p> (6)修改航班信息,當(dāng)航班信息改變可修改航班數(shù)據(jù)文件;</p><p> ?。?)要求:根據(jù)以上功能說明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。</p><p><b> 2. 概要設(shè)計(jì)</b></p><p><b> 2.1 數(shù)
12、據(jù)結(jié)構(gòu)</b></p><p> (1)航班的信息:航班的情況存儲(chǔ)結(jié)構(gòu)采用單鏈表,每個(gè)元素表示一個(gè)航班的情況,包括航班號(hào)、起飛時(shí)間、降落時(shí)間、起飛城市、抵達(dá)城市、航班票價(jià)、票價(jià)折扣、確定航班是否滿倉和空座數(shù)九個(gè)數(shù)據(jù)項(xiàng):</p><p><b> 單鏈表如下:</b></p><p> 每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域:</p&
13、gt;<p><b> C語言描述如下:</b></p><p> typedef struct flightnode{</p><p> char air_num[10];//航班號(hào)</p><p> char start_time[15];//起飛時(shí)間</p><p> char end_ti
14、me[15];//抵達(dá)時(shí)間</p><p> char start_place[20];//起飛城市</p><p> char end_place[20]; //降落城市</p><p> int left; //空座數(shù)</p><p> float price; //票價(jià)</p>&
15、lt;p> float price_discount;//票價(jià)折扣</p><p> int isFull; //航班是否滿倉</p><p> struct flightnode *next;//指向下一個(gè)結(jié)點(diǎn)</p><p> }flightnode;//航班結(jié)點(diǎn)</p><p> ?。?)客戶的資料:為了便
16、于插入、刪除和修改,其采用單鏈表存儲(chǔ)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素包括姓名、證件號(hào)、航班號(hào)、訂票數(shù)量和訂單號(hào)五個(gè)數(shù)據(jù)項(xiàng):</p><p> 每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域:</p><p><b> C語言描述如下:</b></p><p> typedef struct passengernode{//定義客戶資料結(jié)點(diǎn)</p><p
17、> char name[20]; //姓名</p><p> char ID_num[20]; //證件號(hào)</p><p> char flight_num[10];//航班號(hào)</p><p> int order_num; //訂單號(hào)</p><p> int ticket_num; //訂票數(shù)量<
18、/p><p> struct passengernode *next;//指向下一個(gè)結(jié)點(diǎn)</p><p> }passengernode;</p><p> ?。?)客戶鏈表:每個(gè)數(shù)據(jù)元素包括頭指針和尾指針兩個(gè)數(shù)據(jù)項(xiàng):</p><p> 每個(gè)結(jié)點(diǎn)包括兩個(gè)指針域:</p><p><b> C語言描述如下:
19、</b></p><p> typedef struct passengerList{</p><p> passengernode *head;</p><p> passengernode *rear;</p><p> }passengerList;</p><p><b> 2.
20、2 程序模塊</b></p><p> 2.2.1 錄入航班信息模塊</p><p> void add_flight(flightnode *&h)調(diào)用void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,c
21、har* end_time,int left,float price,float price_discount,int isFull)函數(shù),將新航班結(jié)點(diǎn)插入航班鏈表中。</p><p> 2.2.2 客戶訂票模塊</p><p> int book(flightnode *&h,passengerList *&PList)函數(shù)調(diào)用int insert_passenger
22、(passengernode *&h,char *name,char *ID_num,char *flight_num,int ticket_num,int order_num)函數(shù),將新客戶結(jié)點(diǎn)插入客戶鏈表中。</p><p> 2.2.3 客戶退票模塊</p><p> void cancel(passengerList *&PList,flightnode *&a
23、mp;h)函數(shù)調(diào)用int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num)函數(shù),將相應(yīng)的顧客結(jié)點(diǎn)刪除,并修改相應(yīng)的航班信息。</p><p> 2.2.4 查詢航班模塊</p><p> void flight_check(flightnode *h)調(diào)用void
24、 check_all_flight(flightnode *h)函數(shù)進(jìn)行所有航班信息瀏覽,調(diào)用int place_check(flightnode *h,char *start_place,char *end_place)函數(shù)按起飛抵達(dá)城市對(duì)航班進(jìn)行查詢,調(diào)用int flight_num_check(flightnode *h,char *flight_num)按航班號(hào)對(duì)航班進(jìn)行查詢。</p><p> 2.2
25、.5 查詢訂單模塊</p><p> void passenger_check(passengerList *PList)調(diào)用void check_all_passenger(passengerList *PList)函數(shù)進(jìn)行所有訂單信息瀏覽,調(diào)用int order_num_check(passengerList *PList,int order_num)函數(shù)按訂單號(hào)對(duì)訂單進(jìn)行查詢,調(diào)用int ID_name_
26、check(passengerList *PList,char *name,char *ID_num)按客戶姓名和證件號(hào)對(duì)訂單進(jìn)行查詢。</p><p> 2.2.6 修改航班模塊</p><p> 增加航班時(shí),void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)調(diào)用void add_flight(flig
27、htnode *&h)函數(shù),將新航班信息結(jié)點(diǎn)插入航班鏈表中。</p><p> 刪除航班時(shí),void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)調(diào)用void delete_flight(flightnode *&h,passengerList *&PList)函數(shù)將相應(yīng)的航班信息刪除,并刪除相應(yīng)的訂單信息。&
28、lt;/p><p> 修改航班時(shí)間時(shí),void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)修改指定航班的起飛抵達(dá)時(shí)間。</p><p> 2.3 各模塊之間的調(diào)用關(guān)系以及算法設(shè)計(jì)</p><p> 2.3.1 各模塊之間的調(diào)用關(guān)系</p><p> 2.3.2
29、 算法設(shè)計(jì)</p><p> void init_flight(flightnode *&h):要建立一個(gè)以h為頭結(jié)點(diǎn)的空鏈表,錄入航班信息和增加航班后將航班結(jié)點(diǎn)插入該鏈表。</p><p> void init_passengerList(passengerList *&pList):建立一個(gè)帶有頭指針和尾指針的空鏈表,存儲(chǔ)帶有顧客信息的結(jié)點(diǎn)。</p>
30、<p> void save_flight(flightnode *h):保存航班信息到指定數(shù)據(jù)文件中。</p><p> void load_flight(flightnode *&h):從存儲(chǔ)航班信息的文件導(dǎo)入航班信息到航班鏈表中。</p><p> void save_passenger(passengerList *PList):保存客戶信息到指定數(shù)據(jù)文件中
31、。</p><p> void load_passenger(passengerList *&PList):從存儲(chǔ)客戶信息的文件導(dǎo)入客戶信息到客戶鏈表中。</p><p> void add_flight(flightnode *&h):錄入航班信息后調(diào)用insert_flight函數(shù)增加航班。</p><p> void insert_fli
32、ght(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)插入到航線鏈表中。</p><p> int b
33、ook(flightnode *&l,passengerList *&PList):要完成客戶訂票,將客戶結(jié)點(diǎn)插入客戶鏈表中,并修改相應(yīng)的航班信息。</p><p> void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int
34、 ticket_num):在顧客訂票后,將該顧客結(jié)點(diǎn)插入到顧客鏈表中,并修改相應(yīng)的航班信息。</p><p> void find_same_flight(flightnode *l,char *flight_num):在客戶訂票時(shí),當(dāng)客戶輸入的航班號(hào)對(duì)應(yīng)的航班已滿倉時(shí),提供其他可選航班并輸出顯示。</p><p> void cancel(passengerList *&PL
35、ist,flightnode *&h):完成客戶退票,將客戶的訂單從客戶鏈表中刪除,并修改相應(yīng)的航班信息。</p><p> int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num):按照要退票的顧客的姓名和證件號(hào)查找該顧客結(jié)點(diǎn),進(jìn)行刪除操作。</p><p&g
36、t; void flight_check(flightnode *h):選擇使用何種方式對(duì)航班信息進(jìn)行查詢。</p><p> void check_all_flight(flightnode *l):瀏覽所有航班信息。</p><p> int place_check(flightnode *l,char *start_place,char *end_place):按照起飛抵達(dá)城市
37、查詢航班信息。</p><p> int flight_num_check(flightnode *l,char *flight_num):按照航班號(hào)查詢航班信息。</p><p> void passenger_check(passengerList *PList):選擇使用何種方式對(duì)訂單信息進(jìn)行查詢。</p><p> void check_all_pas
38、senger(passengerList *PList):瀏覽所有訂單信息。</p><p> int order_num_check(passengerList *PList,int order_num):按訂單號(hào)查詢訂單信息。</p><p> int ID_name_check(passengerList *PList,char *name,char *ID_num):按客戶姓名
39、和證件號(hào)查詢訂單信息。</p><p> void modify_flight(flightnode *&h,passengerList *&PList):修改航班信息,包括添加航班信息,刪除航班信息,修改航班起飛抵達(dá)時(shí)間。</p><p> void delete_flight(flightnode *&h,passengerList *&PList)
40、:按照某個(gè)航班號(hào)刪除航班結(jié)點(diǎn)。</p><p><b> 3. 詳細(xì)設(shè)計(jì)</b></p><p> 3.1 錄入航班信息模塊</p><p> 在主函數(shù)中輸入“1”,調(diào)用void add_flight(flightnode *&h)函數(shù),此函數(shù)將航班指針*p指向已存在航班鏈表*h的頭結(jié)點(diǎn),利用for(;p->next!=NU
41、LL;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 is
42、Full)函數(shù),用malloc函數(shù)申請(qǐng)一個(gè)航班結(jié)點(diǎn),并用指針*q指向,將航班信息賦到新申請(qǐng)的結(jié)點(diǎn)中,p->next=q;p=p->next;該操作將該結(jié)點(diǎn)插入航班鏈表中。流程圖如下:</p><p> 3.2 顧客訂票模塊</p><p> 在主函數(shù)中輸入“2”,調(diào)用int book(flightnode *&h,passengerList *&PList)
43、函數(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)不存在,輸出提示信息,</p><p> 如果航班存在則提示
44、客戶輸入訂的票數(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->
45、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)插入客戶鏈表中。</p><p> 如果該航班已滿倉或該航班的空座數(shù)不夠,輸出可供選擇的航班,讓客戶選擇,之后調(diào)用void insert_pass
46、engerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函數(shù)將客戶結(jié)點(diǎn)插入客戶鏈表中.</p><p><b> 接上頁:</b></p><p> 3.3 顧客退票模塊</p><
47、;p> 在主函數(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
48、_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->nex
49、t=p->next;free(p);刪除要退票的客戶訂單信息。如果沒有找到匹配的客戶結(jié)點(diǎn),輸出提示信息。</p><p> delete_passenger函數(shù)的流程圖:</p><p> 3.4 查詢航班模塊</p><p> 在主函數(shù)中輸入“4”,調(diào)用void flight_check(flightnode *h)函數(shù)選擇使用哪一種查詢方式進(jìn)行查詢。
50、提示客戶輸入查詢方式,如客戶輸入“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á)城市,分
51、別存于start_place和end_place中;如客戶輸入“3”,則調(diào)用void check_all_flight(flightnode *l)函數(shù)瀏覽全部航班信息。</p><p> 在int flight_num_check(flightnode *l,char *flight_num)函數(shù)中,定義航班指針*p=h,使用for循環(huán)匹配flight_num和p->flight_num,找到匹配的航班
52、節(jié)點(diǎn)后,輸出該航班的所有信息。</p><p> 在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)后,輸出該航班的所有信息。</p><p> 在void check_all_fli
53、ght(flightnode *l)函數(shù)中,定義航班指針*p=h,使用for循環(huán)輸出所有航班信息。</p><p> flight_num_check函數(shù)的流程圖:</p><p> 3.5 查詢訂單模塊</p><p> 在主函數(shù)中輸入“5”,調(diào)用void passenger_check(passengerList *PList)函數(shù)選擇使用哪一種查詢方式進(jìn)
54、行查詢。提示客戶輸入查詢方式,如客戶輸入“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)行查詢
55、,提示客戶輸入訂單號(hào),存于order_num中;如客戶輸入“3”,則調(diào)用void check_all_passenger(passengerList *PList)函數(shù)瀏覽全部訂單信息。</p><p> 在int ID_name_check(passengerList *PList,char *name,char *ID_num)函數(shù)中,定義客戶指針*p= PList->head->next,使用
56、for循環(huán)尋找匹配name和ID_num的結(jié)點(diǎn),找到匹配的訂單節(jié)點(diǎn)后,輸出該訂單的所有信息。</p><p> 在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)后,輸出該訂單的所有信息。</p>
57、<p> 在void check_all_passenger(passengerList *PList)函數(shù)中,定義客戶指針*p=PList->head->next,使用for循環(huán)輸出所有訂單信息。</p><p> order_num_check函數(shù)的流程圖:</p><p> 3.6 修改航班模塊</p><p> 在主函數(shù)中輸入“
58、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 *&PL
59、ist)函數(shù)刪除指定的航班信息,提示客戶輸入航班號(hào),存于flight_num中;如客戶輸入“3”,則示客戶輸入航班號(hào),如果該航班號(hào)存在,則提示用戶輸入修改后的起飛抵達(dá)時(shí)間。</p><p> 在void delete_flight(flightnode *&h,passengerList *&PList)函數(shù)中,定義航班指針*pr=h,定義航班指針p=pr->next,定義客戶指針*qr=
60、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),輸出提示信息。</p><p><b
61、> 4. 測(cè)試與分析</b></p><p> 4.1 合法數(shù)據(jù)的測(cè)試</p><p> (1) 編譯鏈接后顯示菜單</p><p> ?。?) 輸入菜單號(hào)“1”,開始航班信息的錄入</p><p> ?。?) 輸入菜單號(hào)“2”,進(jìn)入訂票模塊</p><p> (4) 輸入菜單號(hào)“3”,進(jìn)入退
62、票模塊</p><p> ?。?) 輸入菜單號(hào)“4”,查詢航班信息</p><p> a. 輸入菜單號(hào)“1”,按航班號(hào)查詢航班信息</p><p> b. 輸入菜單號(hào)“2”,按起飛抵達(dá)城市查詢航班信息</p><p> c. 輸入菜單號(hào)“3”,瀏覽全部航班信息</p><p> ?。?) 輸入菜單號(hào)“5”,查詢訂
63、單信息</p><p> a. 輸入菜單號(hào)“1”,按客戶姓名和證件號(hào)查詢訂單信息</p><p> b. 輸入菜單號(hào)“2”,按訂單號(hào)查詢訂單信息</p><p> c. 輸入菜單號(hào)“3”,瀏覽全部訂單信息</p><p> ?。?) 輸入菜單號(hào)“6”,進(jìn)入航班修改模塊</p><p> a. 輸入菜單號(hào)“1”,
64、增加航班</p><p> b. 輸入菜單號(hào)“2”,刪除航班</p><p> c. 輸入菜單號(hào)“3”,修改航班時(shí)間</p><p> (8) 輸入菜單號(hào)“0”,退出本系統(tǒng)。</p><p> 4.2 非法數(shù)據(jù)的測(cè)試</p><p> ?。?) 在主菜單中輸入錯(cuò)誤號(hào)碼后,系統(tǒng)自動(dòng)跳轉(zhuǎn)到主菜單,繼續(xù)讓用戶輸入。&
65、lt;/p><p> ?。?) 選擇訂票服務(wù)后,輸入了沒有開通航班的城市</p><p> ?。?) 選擇訂票服務(wù)后,輸入了系統(tǒng)中沒有的航班號(hào)</p><p> ?。?) 選擇退票服務(wù)后,輸入了沒有訂票的客戶姓名和證件號(hào)</p><p> (5) 選擇航班查詢服務(wù)后,輸入了沒有開通航班的城市</p><p> ?。?)
66、選擇航班查詢服務(wù)后,輸入了系統(tǒng)中不存在的航班號(hào)</p><p> (7) 選擇訂單查詢服務(wù)后,輸入了沒有訂票的客戶姓名和證件號(hào)</p><p> ?。?) 選擇訂單查詢服務(wù)后,輸入了系統(tǒng)中不存在的訂單號(hào)</p><p> ?。?) 選擇刪除航班服務(wù)后,輸入了系統(tǒng)中不存在的航班號(hào)</p><p> (10) 選擇修改航班時(shí)間服務(wù)后,輸入了系
67、統(tǒng)中不存在的航班號(hào)</p><p><b> 5. 用戶使用說明</b></p><p><b> 5.1 運(yùn)行環(huán)境</b></p><p> Windows xp;Microsoft Visual C++ 6.0</p><p><b> 5.2 主要功能</b>&l
68、t;/p><p> 飛機(jī)訂票系統(tǒng)系統(tǒng)功能模塊如下:</p><p> 主要功能包括錄入航班信息、客戶訂票、客戶退票、查詢航班信息、查詢訂單信息、修改航班信息六個(gè)模塊;其中查詢航班信息模塊包括按航班號(hào)查詢、按起飛抵達(dá)城市查詢和瀏覽全部航班信息;其中查詢訂單信息模塊包括按訂單號(hào)查詢、按客戶姓名和證件號(hào)查詢以及瀏覽全部訂單信息;其中修改航班信息模塊包括添加航班信息、刪除航班信息和修改航班起飛抵達(dá)
69、時(shí)間。</p><p> 5.3 操作注意事項(xiàng)</p><p> 用戶在使用飛機(jī)訂票系統(tǒng)之前,應(yīng)注意以下事項(xiàng):</p><p> 用戶在輸入數(shù)據(jù)時(shí),飛機(jī)航班號(hào)、起飛抵達(dá)城市、起飛抵達(dá)時(shí)間、客戶姓名、證件號(hào)等為字符串形式;空座數(shù)、訂票數(shù)量、航班是否滿倉等為整型(int);票價(jià)、票價(jià)折扣等為浮點(diǎn)型(float);其他形式的輸入,請(qǐng)按輸入提示進(jìn)行操作,以免引起不必要
70、的故障。</p><p><b> 5.4 業(yè)務(wù)流程</b></p><p> 輸入相應(yīng)的選擇信息,便可進(jìn)入相應(yīng)的模塊中。</p><p> (1)輸入“1”,進(jìn)入【錄入航班信息】模塊,輸入航班的相關(guān)信息,完成航班信息的錄入。</p><p> ?。?)輸入“2”,進(jìn)入【客戶訂票】模塊,輸入客戶的信息、要訂的票數(shù)和
71、要訂的航班號(hào),完成客戶的訂票操作。</p><p> ?。?)輸入“3”,進(jìn)入【客戶退票】模塊,輸入客戶的信息、要退的航班號(hào),完成客戶的退票操作。</p><p> ?。?)輸入“4”,進(jìn)入【查詢航班信息】模塊,可以瀏覽或查詢航班的相關(guān)信息。</p><p> ?。?)輸入“5”,進(jìn)入【查詢訂單信息】模塊,可以瀏覽或查詢訂單的相關(guān)信息。</p><
72、;p> ?。?)輸入“6”,進(jìn)入【修改航班信息】模塊,可以添加航班信息、刪除航班信息和修改航班的起飛抵達(dá)時(shí)間。</p><p><b> 6. 總結(jié)</b></p><p> 經(jīng)過這兩周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我收獲很大,在實(shí)現(xiàn)系統(tǒng)功能的過程中,也遇到很多問題,分工協(xié)作,設(shè)計(jì)修改,編寫調(diào)試,每一步都滲透著溝通和分析,每一次溝通之后,都會(huì)對(duì)系統(tǒng)功能有更深層次的理解
73、和闡述,這也促使我們一步步完成了整個(gè)系統(tǒng),并使之可以運(yùn)行。兩周的時(shí)間太短暫了,我們無法把全部學(xué)到的知識(shí)運(yùn)用到具體的系統(tǒng)實(shí)現(xiàn)中,深深感受到數(shù)據(jù)結(jié)構(gòu)這門課程的重要性,以及它在實(shí)際應(yīng)用中的廣泛性。本系統(tǒng)由于種種原因仍然存在需要改進(jìn),需要完善的地方,我對(duì)于這個(gè)系統(tǒng)的認(rèn)識(shí)和對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程的理解已經(jīng)更加深入了。在今后的學(xué)習(xí)和工作中,會(huì)更加深入地把知識(shí)和思想體會(huì)更廣泛地應(yīng)用到其他相關(guān)領(lǐng)域。</p><p> 本系統(tǒng)在人性
74、化的方面做得還不夠,對(duì)于另類的輸入錯(cuò)誤,還不能很好地應(yīng)對(duì),這也體現(xiàn)出本系統(tǒng)不夠健壯,會(huì)在今后的學(xué)習(xí)中加以改進(jìn)和完善;在功能模塊方面還可以增加更多相關(guān)模塊,是系統(tǒng)更加完善。</p><p> 在實(shí)現(xiàn)系統(tǒng)的過程中,我感受到自己的知識(shí)的薄弱零散,經(jīng)過這次做系統(tǒng),我覺得自己的知識(shí)得到鞏固和整合,知識(shí)體系更加系統(tǒng)化。我也深深體會(huì)到實(shí)踐檢驗(yàn)真理,只有實(shí)踐中,才能出真知。我懂得了學(xué)習(xí)不只是紙上談兵,更重要的是實(shí)踐,就比如平常
75、我們?cè)趯W(xué)習(xí)中經(jīng)常會(huì)遇到一些問題,看似無關(guān)緊要跳過去,不求甚解,在得知答案的時(shí)候,總是感覺心領(lǐng)神會(huì),久而久之,對(duì)于的知識(shí)點(diǎn)就模棱兩可,形成知識(shí)漏洞。但這次課程設(shè)計(jì)所要編寫的程序很長,涉及的知識(shí)點(diǎn)也很多,選擇此題目的時(shí)候我心里面還底氣十足,自認(rèn)為沒什么問題,對(duì)于程序的步驟仿佛了然于胸,但在實(shí)際操作中才發(fā)現(xiàn)并非如此,在編寫程序的過程中,我不斷地查閱相關(guān)資料進(jìn)行學(xué)習(xí),積極地思考該怎樣實(shí)現(xiàn)系統(tǒng)的每一個(gè)功能。</p><p>
76、; 通過這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),我鞏固和加深對(duì)數(shù)據(jù)結(jié)構(gòu)基本知識(shí)的理解,鍛煉了綜合運(yùn)用課本知識(shí)的能力,自己也真正地完整而系統(tǒng)地設(shè)計(jì)并編寫了一個(gè)程序,使得自己的編程能力大為提高。通過對(duì)我所選擇飛機(jī)訂票系統(tǒng)的設(shè)計(jì)和編寫,我初步掌握簡單軟件的分析方法和設(shè)計(jì)方法,更深的領(lǐng)悟了“紙上得來終覺淺,覺知此事要躬行”的重要意義,第一次體會(huì)到了數(shù)據(jù)結(jié)構(gòu)編程知識(shí)在實(shí)際生活中的重要性和應(yīng)用的廣泛性。</p><p><b>
77、 參考文獻(xiàn)</b></p><p> [1]譚浩強(qiáng) C程序設(shè)計(jì)(第四版) 北京:清華大學(xué)出版社,2006</p><p> [2]李春葆 數(shù)據(jù)結(jié)構(gòu)教程 (第二版) 北京:清華大學(xué)出版社,2007</p><p><b> 附錄:程序源代碼</b></p><p> #include <stdi
78、o.h></p><p> #include <stdlib.h></p><p> #include <string.h></p><p> #include <conio.h></p><p> typedef struct flightnode{</p><p>
79、 char flight_num[10]; //航班號(hào)</p><p> char start_time[10]; //起飛時(shí)間</p><p> char end_time[10]; //抵達(dá)時(shí)間</p><p> char start_place[20];//起飛城市</p><p> char end_place[20];
80、 //抵達(dá)城市</p><p> int left; //空座數(shù)</p><p> float price; //票價(jià)</p><p> float price_discount;//票價(jià)折扣</p><p> int isFull; //航班是否滿倉</p>&
81、lt;p> struct flightnode *next;//指向下一個(gè)結(jié)點(diǎn)</p><p> }flightnode;//航班結(jié)點(diǎn)</p><p> typedef struct passengernode{</p><p> char name[20]; //姓名</p><p> char ID_num[20
82、]; //證件號(hào)</p><p> char flight_num[10];//航班號(hào)</p><p> int order_num; //訂單號(hào)</p><p> int ticket_num; //訂票數(shù)量</p><p> struct passengernode *next;//指向下一個(gè)結(jié)點(diǎn)</
83、p><p> }passengernode;//客戶結(jié)點(diǎn)</p><p> typedef struct passengerList</p><p><b> {</b></p><p> passengernode *head;</p><p> passengernode *rear;&
84、lt;/p><p> }passengerList;</p><p> void init_flight(flightnode *&h)//目的是要建立一個(gè)以h為頭結(jié)點(diǎn)的空鏈表,錄入航班信息和增加航班后將航班結(jié)點(diǎn)插入該鏈表</p><p><b> {</b></p><p> h=(flightnode *
85、)malloc(sizeof(flightnode));//申請(qǐng)頭結(jié)點(diǎn)的空間</p><p> if(h==NULL) exit(0);</p><p> h->next=NULL;//將頭結(jié)點(diǎn)h的指針域置為空</p><p><b> }</b></p><p> void init_passengerL
86、ist(passengerList *&pList)</p><p><b> {</b></p><p> pList=(passengerList *)malloc(sizeof(passengerList));</p><p> pList->head=(passengernode *)malloc(sizeof(pa
87、ssengernode));//創(chuàng)建頭結(jié)點(diǎn)</p><p> pList->rear=pList->head;</p><p> pList->rear->order_num=0;//訂單號(hào)從0開始計(jì)數(shù)</p><p> pList->head->next=NULL;</p><p><b>
88、; }</b></p><p> void save_passenger(passengerList *PList)</p><p><b> {</b></p><p> FILE* fp = fopen("passenger.dat","wb");</p><p
89、> if(fp==NULL)</p><p><b> return;</b></p><p> passengernode *temp=PList->head->next;</p><p> while(temp!=NULL)</p><p><b> {</b><
90、;/p><p> fwrite(temp,sizeof(passengernode),1,fp);</p><p> temp = temp->next;</p><p><b> };</b></p><p> fclose(fp);</p><p><b> }</
91、b></p><p> void load_passenger(passengerList *PList)</p><p><b> {</b></p><p> FILE* fp = fopen("passenger.dat","rb");</p><p> if(
92、fp==NULL)</p><p><b> return;</b></p><p> passengernode *q;</p><p><b> int n;</b></p><p> while(!feof(fp))</p><p><b> {&l
93、t;/b></p><p> q=(passengernode *)malloc(sizeof(passengernode));</p><p> n =fread(q,sizeof(passengernode),1,fp);</p><p><b> if(n!=1)</b></p><p><b&g
94、t; break;</b></p><p> PList->rear->next=q;</p><p> PList->rear=q;</p><p><b> }</b></p><p> PList->rear->next=NULL;</p><
95、p> fclose(fp);</p><p><b> }</b></p><p> void save_flight(flightnode *h)</p><p><b> {</b></p><p> FILE* fp = fopen("flightList.dat&q
96、uot;,"wb");</p><p> if(fp==NULL)</p><p><b> return;</b></p><p> flightnode *temp=h->next;</p><p> while(temp!=NULL)</p><p><
97、;b> {</b></p><p> fwrite(temp,sizeof(flightnode),1,fp);</p><p> temp = temp->next;</p><p><b> };</b></p><p> fclose(fp);</p><p&g
98、t;<b> }</b></p><p> void load_flight(flightnode *&h)</p><p><b> {</b></p><p> flightnode *pt=h;</p><p> FILE* fp = fopen("flightLi
99、st.dat","rb");</p><p> if(fp==NULL)</p><p><b> return;</b></p><p> flightnode *q;</p><p><b> int n;</b></p><p>
100、 while(!feof(fp))</p><p><b> {</b></p><p> q=(flightnode *)malloc(sizeof(flightnode));</p><p> n=fread(q,sizeof(flightnode),1,fp);</p><p><b> if(n
101、!=1)</b></p><p><b> break;</b></p><p> pt->next=q;</p><p><b> pt=q;</b></p><p><b> }</b></p><p> pt->n
102、ext=NULL;</p><p> fclose(fp);</p><p><b> }</b></p><p> int find_same_flight(flightnode *h,char *flight_num)</p><p><b> {</b></p><
103、p> flightnode *t=h->next,*p=h->next;</p><p> int mark=0;</p><p> printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n","航班號(hào)","起飛城市","抵達(dá)城市",&quo
104、t;起飛時(shí)間","抵達(dá)時(shí)間","價(jià)格","折扣","是否滿倉","空座數(shù)");</p><p> while(t!=NULL && strcmp(t->flight_num,flight_num)!=0) t=t->next;</p><p> wh
105、ile(p!=NULL){</p><p> 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))</p><p>
106、<b> {</b></p><p> printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->flight_num, p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_
107、discount,p->isFull,p->left);</p><p><b> mark=1;</b></p><p><b> }</b></p><p> p=p->next;</p><p><b> }</b></p><
108、;p> if(mark==0)</p><p><b> {</b></p><p> printf("\t\t抱歉,沒有可選的航班!\n");</p><p><b> return 0;</b></p><p><b> }</b><
109、;/p><p><b> return 1;</b></p><p><b> }</b></p><p> void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,
110、char* end_time,int left,float price,float price_discount,int isFull)</p><p> //在錄入航班情況或增加新的航班后,將新的航班結(jié)點(diǎn)插入到航線鏈表中</p><p><b> {</b></p><p> flightnode *q;//定義q為新增加的航班結(jié)點(diǎn)的指
111、針的形參</p><p> flightnode *p=h;</p><p> q=(flightnode *)malloc(sizeof(flightnode));//為q結(jié)點(diǎn)申請(qǐng)空間</p><p> strcpy(q->flight_num,flight_num);</p><p> strcpy(q->start_
112、place,start_place);</p><p> strcpy(q->end_place,end_place);</p><p> strcpy(q->start_time,start_time);</p><p> strcpy(q->end_time,end_time);</p><p> q->l
113、eft=left;</p><p> q->price=price;</p><p> q->price_discount=price_discount;</p><p> q->isFull=isFull;</p><p> //以上是用strcpy函數(shù)將新增加航班的各種信息復(fù)制到q結(jié)點(diǎn)中</p>
114、<p> q->next=p->next;//將q結(jié)點(diǎn)的指針域置為空</p><p> p->next=q;</p><p> p=p->next;//將指針后移</p><p><b> }</b></p><p> void insert_passengerList(fli
115、ghtnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)</p><p> //客戶訂票后,將客戶結(jié)點(diǎn)插入客戶鏈表中,并修改相應(yīng)的航班信息。</p><p><b> {</b></p><p> f
116、lightnode *p=h->next;</p><p> for(;p!=NULL;p=p->next)</p><p> if(strcmp(p->flight_num,flight_num)==0)</p><p><b> {</b></p><p> p->left=p->
117、;left-ticket_num;</p><p> if(p->left==0)</p><p> p->isFull=1;</p><p><b> }</b></p><p> passengernode *q=(passengernode *)malloc(sizeof(passengerno
118、de));//新建結(jié)點(diǎn),存放新的客戶訂單信息</p><p> strcpy(q->name,name);</p><p> strcpy(q->ID_num,ID_num);</p><p> strcpy(q->flight_num,flight_num);</p><p> q->ticket_num=t
119、icket_num;</p><p> q->next=NULL;</p><p> //將新訂單連接到鏈表中</p><p> PList->rear->next=q;</p><p> q->order_num=PList->rear->order_num+1;//生成訂單號(hào)</p>
120、<p> PList->rear=q;</p><p><b> }</b></p><p> void delete_flight(flightnode *&h,passengerList *&PList)</p><p> //目的要按照某個(gè)航班號(hào)刪除航班結(jié)點(diǎn)</p><p&g
121、t;<b> {</b></p><p> flightnode *p,*pr;</p><p> passengernode *q,*qr;</p><p> char flight_num[10];</p><p> int mark=1;</p><p> qr=PList-&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語言版飛機(jī) 訂票 系統(tǒng)資料
- 數(shù)據(jù)結(jié)構(gòu)航空訂票系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---飛機(jī)售票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--航空客運(yùn)訂票系統(tǒng)
- 航空客運(yùn)訂票系統(tǒng)課程設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu))
- 飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)
- 飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)
- 飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---航空客運(yùn)訂票系統(tǒng)
- 課程設(shè)計(jì)—飛機(jī)訂票系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計(jì)飛機(jī)訂票系統(tǒng)
- 航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)源代碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)航空航班課程設(shè)計(jì)--航空客運(yùn)訂票系統(tǒng)
評(píng)論
0/150
提交評(píng)論