數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---飛機(jī)訂票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

最新文檔

評(píng)論

0/150

提交評(píng)論