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

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p>  題目 飛機訂票系統(tǒng) </p><p>  院 系 ******* </p><p>  專 業(yè) *************** </p><p>  姓 名 *****

2、* </p><p>  學(xué) 號 ********* </p><p>  指 導(dǎo) 教 師 *** </p><p><b>  2012年7月</b></p><p><b>  1. 需求分析</b></p><

3、p><b>  1.1 問題描述</b></p><p>  基于目前人們外出遠行頻繁,為方便乘客提前買票及優(yōu)化飛機航空訂票服務(wù),需要開發(fā)一個飛機訂票系統(tǒng),此程序就是要實現(xiàn)航班情況的錄入,查詢,訂票,退票以及航班的查詢和修改等基本功能。本課程設(shè)計的題目為:飛機訂票系統(tǒng)。</p><p><b>  1.2 基本要求</b></p>

4、;<p>  1.2.1 輸入的形式和輸入值的范圍</p><p>  錄入航班信息時,需要輸入航班號,起降時間,起飛抵達城市,值為字符串;還需要輸入航班票價,票價折扣,值為浮點型(float);還需要輸入航班是否滿倉,值為整型(int)(“1”表示已滿倉,“0”表示沒有滿倉);如需要繼續(xù)錄入航班信息,要輸入判別信息,值為整型(“1”表示繼續(xù)錄入航班信息,“0”表示停止錄入航班信息)。</p&

5、gt;<p>  客戶訂票時,需要輸入起飛抵達城市,然后選擇航班進行查詢,選擇航班時需要輸入航班號,值為字符串。</p><p>  客戶退票時,需要輸入姓名,證件號進行退票操作,值為字符串。</p><p>  查詢某個航班的情況時,需要輸入航班號,值為字符串;在查詢某個航線的情況時,還可以通過輸入起飛抵達城市來查詢,值為字符串。</p><p> 

6、 查詢某個訂單時,需要輸入訂單號,值為整型(int);或者需要輸入客戶姓名和證件號,值為字符串。</p><p>  修改航班時,需要輸入字符型數(shù)據(jù)選擇進行何種修改操作;增加航班時,需要輸入航班號,起降時間,起飛抵達城市,值為字符串;還需要輸入航班票價,票價折扣,值為浮點型(float);還需要輸入航班是否滿倉,值為整型(int)(“1”表示已滿倉,“0”表示沒有滿倉);如需要繼續(xù)錄入航班信息,要輸入判別信息,值

7、為整型(“1”表示繼續(xù)錄入航班信息,“0”表示停止錄入航班信息);刪除航班時,需要輸入要刪除的航班的航班號;修改航班時間時,需要輸入要修改的航班的航班號,修改后的航班起飛時間和抵達時間。</p><p>  1.2.2 輸出形式</p><p>  在所有操作后的輸出中都顯示操作是否正確以及操作后單鏈表的內(nèi)容。其中刪除操作后顯示刪除的元素的值,查找操作后顯示要查找元素的位置。</p&

8、gt;<p>  錄入航班情況時,輸出顯示添加航班信息是否成功。</p><p>  客戶訂票時,當客戶輸入起飛抵達城市后,輸出可供客戶選擇的航班信息;客戶選擇了航班后,輸入提示信息告知用戶訂票是否成功。</p><p>  客戶退票時,輸出客戶退票成功或者無此客戶,無法退票。</p><p>  查詢航班時,輸出顯示對應(yīng)的航班信息,或者輸出提示信息告

9、知沒有相應(yīng)的航班信息。</p><p>  查詢訂單時,輸出顯示對應(yīng)的訂單信息,或者輸出提示信息告知沒有相應(yīng)的訂單信息。</p><p>  修改航班時,輸出對應(yīng)的提示的信息,提示操作是否成功。</p><p>  1.2.3 功能要求</p><p>  (1)可以錄入航班情況,數(shù)據(jù)存儲在一個數(shù)據(jù)文件中;</p><p&

10、gt; ?。?)可以查詢某個航線的情況:輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉;輸入起飛抵達城市,查詢飛機航班情況;</p><p> ?。?)可以訂票,訂票情況存在一個數(shù)據(jù)文件中(如果該航班已經(jīng)無票,提供相關(guān)可選航班);</p><p> ?。?)可退票并且退票后修改相關(guān)數(shù)據(jù)文件;</p><p> ?。?)客戶資料:姓名,證

11、件號,訂票數(shù)量及航班情況,訂單要有編號;</p><p> ?。?)修改航班信息,當航班信息改變可修改航班數(shù)據(jù)文件;</p><p>  (7)要求:根據(jù)以上功能說明,設(shè)計航班信息,訂票信息的存儲結(jié)構(gòu),設(shè)計程序完成功能。</p><p><b>  2. 概要設(shè)計</b></p><p><b>  2.1 數(shù)

12、據(jù)結(jié)構(gòu)</b></p><p>  (1)航班的信息:航班的情況存儲結(jié)構(gòu)采用單鏈表,每個元素表示一個航班的情況,包括航班號、起飛時間、降落時間、起飛城市、抵達城市、航班票價、票價折扣、確定航班是否滿倉和空座數(shù)九個數(shù)據(jù)項:</p><p><b>  單鏈表如下:</b></p><p>  每個結(jié)點包括數(shù)據(jù)域和指針域:</p&

13、gt;<p><b>  C語言描述如下:</b></p><p>  typedef struct flightnode{</p><p>  char air_num[10];//航班號</p><p>  char start_time[15];//起飛時間</p><p>  char end_ti

14、me[15];//抵達時間</p><p>  char start_place[20];//起飛城市</p><p>  char end_place[20]; //降落城市</p><p>  int left; //空座數(shù)</p><p>  float price; //票價</p>&

15、lt;p>  float price_discount;//票價折扣</p><p>  int isFull; //航班是否滿倉</p><p>  struct flightnode *next;//指向下一個結(jié)點</p><p>  }flightnode;//航班結(jié)點</p><p>  (2)客戶的資料:為了便

16、于插入、刪除和修改,其采用單鏈表存儲結(jié)構(gòu),每個數(shù)據(jù)元素包括姓名、證件號、航班號、訂票數(shù)量和訂單號五個數(shù)據(jù)項:</p><p>  每個結(jié)點包括數(shù)據(jù)域和指針域:</p><p><b>  C語言描述如下:</b></p><p>  typedef struct passengernode{//定義客戶資料結(jié)點</p><p

17、>  char name[20]; //姓名</p><p>  char ID_num[20]; //證件號</p><p>  char flight_num[10];//航班號</p><p>  int order_num; //訂單號</p><p>  int ticket_num; //訂票數(shù)量<

18、/p><p>  struct passengernode *next;//指向下一個結(jié)點</p><p>  }passengernode;</p><p> ?。?)客戶鏈表:每個數(shù)據(jù)元素包括頭指針和尾指針兩個數(shù)據(jù)項:</p><p>  每個結(jié)點包括兩個指針域:</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é)點插入航班鏈表中。</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é)點插入客戶鏈表中。</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é)點刪除,并修改相應(yīng)的航班信息。</p><p>  2.2.4 查詢航班模塊</p><p>  void flight_check(flightnode *h)調(diào)用void

24、 check_all_flight(flightnode *h)函數(shù)進行所有航班信息瀏覽,調(diào)用int place_check(flightnode *h,char *start_place,char *end_place)函數(shù)按起飛抵達城市對航班進行查詢,調(diào)用int flight_num_check(flightnode *h,char *flight_num)按航班號對航班進行查詢。</p><p>  2.2

25、.5 查詢訂單模塊</p><p>  void passenger_check(passengerList *PList)調(diào)用void check_all_passenger(passengerList *PList)函數(shù)進行所有訂單信息瀏覽,調(diào)用int order_num_check(passengerList *PList,int order_num)函數(shù)按訂單號對訂單進行查詢,調(diào)用int ID_name_

26、check(passengerList *PList,char *name,char *ID_num)按客戶姓名和證件號對訂單進行查詢。</p><p>  2.2.6 修改航班模塊</p><p>  增加航班時,void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)調(diào)用void add_flight(flig

27、htnode *&h)函數(shù),將新航班信息結(jié)點插入航班鏈表中。</p><p>  刪除航班時,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>  修改航班時間時,void modify_flight(flightnode *&h,passengerList *&PList)函數(shù)修改指定航班的起飛抵達時間。</p><p>  2.3 各模塊之間的調(diào)用關(guān)系以及算法設(shè)計</p><p>  2.3.1 各模塊之間的調(diào)用關(guān)系</p><p>  2.3.2

29、 算法設(shè)計</p><p>  void init_flight(flightnode *&h):要建立一個以h為頭結(jié)點的空鏈表,錄入航班信息和增加航班后將航班結(jié)點插入該鏈表。</p><p>  void init_passengerList(passengerList *&pList):建立一個帶有頭指針和尾指針的空鏈表,存儲帶有顧客信息的結(jié)點。</p>

30、<p>  void save_flight(flightnode *h):保存航班信息到指定數(shù)據(jù)文件中。</p><p>  void load_flight(flightnode *&h):從存儲航班信息的文件導(dǎo)入航班信息到航班鏈表中。</p><p>  void save_passenger(passengerList *PList):保存客戶信息到指定數(shù)據(jù)文件中

31、。</p><p>  void load_passenger(passengerList *&PList):從存儲客戶信息的文件導(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é)點插入到航線鏈表中。</p><p>  int b

33、ook(flightnode *&l,passengerList *&PList):要完成客戶訂票,將客戶結(jié)點插入客戶鏈表中,并修改相應(yīng)的航班信息。</p><p>  void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int

34、 ticket_num):在顧客訂票后,將該顧客結(jié)點插入到顧客鏈表中,并修改相應(yīng)的航班信息。</p><p>  void find_same_flight(flightnode *l,char *flight_num):在客戶訂票時,當客戶輸入的航班號對應(yīng)的航班已滿倉時,提供其他可選航班并輸出顯示。</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):按照要退票的顧客的姓名和證件號查找該顧客結(jié)點,進行刪除操作。</p><p&g

36、t;  void flight_check(flightnode *h):選擇使用何種方式對航班信息進行查詢。</p><p>  void check_all_flight(flightnode *l):瀏覽所有航班信息。</p><p>  int place_check(flightnode *l,char *start_place,char *end_place):按照起飛抵達城市

37、查詢航班信息。</p><p>  int flight_num_check(flightnode *l,char *flight_num):按照航班號查詢航班信息。</p><p>  void passenger_check(passengerList *PList):選擇使用何種方式對訂單信息進行查詢。</p><p>  void check_all_pas

38、senger(passengerList *PList):瀏覽所有訂單信息。</p><p>  int order_num_check(passengerList *PList,int order_num):按訂單號查詢訂單信息。</p><p>  int ID_name_check(passengerList *PList,char *name,char *ID_num):按客戶姓名

39、和證件號查詢訂單信息。</p><p>  void modify_flight(flightnode *&h,passengerList *&PList):修改航班信息,包括添加航班信息,刪除航班信息,修改航班起飛抵達時間。</p><p>  void delete_flight(flightnode *&h,passengerList *&PList)

40、:按照某個航班號刪除航班結(jié)點。</p><p><b>  3. 詳細設(shè)計</b></p><p>  3.1 錄入航班信息模塊</p><p>  在主函數(shù)中輸入“1”,調(diào)用void add_flight(flightnode *&h)函數(shù),此函數(shù)將航班指針*p指向已存在航班鏈表*h的頭結(jié)點,利用for(;p->next!=NU

41、LL;p=p->next){}使*p指向航線鏈表的最后一個結(jié)點,然后讓用戶輸入航班信息,然后調(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ù)申請一個航班結(jié)點,并用指針*q指向,將航班信息賦到新申請的結(jié)點中,p->next=q;p=p->next;該操作將該結(jié)點插入航班鏈表中。流程圖如下:</p><p>  3.2 顧客訂票模塊</p><p>  在主函數(shù)中輸入“2”,調(diào)用int book(flightnode *&h,passengerList *&PList)

43、函數(shù)完成客戶的訂票。用航班指針*p指向已存在航班鏈表*h的頭結(jié)點的下一個結(jié)點,請客戶輸入起飛抵達城市,分別存于start_place和end_place中。調(diào)用int place_check(flightnode *l,char *start_place,char *end_place)函數(shù),如果函數(shù)返回“1”則請客戶輸入要訂的航班號,如果輸入的航班號不存在,輸出提示信息,</p><p>  如果航班存在則提示

44、客戶輸入訂的票數(shù)、客戶的姓名和證件號,調(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ù)申請一個客戶結(jié)點,并用指針*q指向,將客戶信息和航班號賦到新申請的結(jié)點中,PList->rear->next=q;PList->rear=q;該操作將該結(jié)點插入客戶鏈表中。</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é)點插入客戶鏈表中.</p><p><b>  接上頁:</b></p><p>  3.3 顧客退票模塊</p><

47、;p>  在主函數(shù)中輸入“3”,調(diào)用void cancel(passengerList *&PList,flightnode *&h)函數(shù)完成客戶的退票。提示客戶輸入客戶的姓名和證件號以及要退的航班號,此函數(shù)再調(diào)用int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num,char *flight

48、_num)函數(shù),用客戶結(jié)點指針*pr等于已存在客戶鏈表結(jié)點Plist的頭指針,相當于將*pr指向客戶鏈表的頭結(jié)點,用客戶結(jié)點指針*p指向pr的下一個結(jié)點。使用while循環(huán)尋找匹配姓名、證件號、航班號的客戶結(jié)點,找到后定義航班指針*f=h->next,使用for循環(huán)找到匹配航班號的航班結(jié)點,執(zhí)行f->left=f->left+p->ticket_num,修改退票后相應(yīng)航班結(jié)點的空座數(shù),之后執(zhí)行pr->nex

49、t=p->next;free(p);刪除要退票的客戶訂單信息。如果沒有找到匹配的客戶結(jié)點,輸出提示信息。</p><p>  delete_passenger函數(shù)的流程圖:</p><p>  3.4 查詢航班模塊</p><p>  在主函數(shù)中輸入“4”,調(diào)用void flight_check(flightnode *h)函數(shù)選擇使用哪一種查詢方式進行查詢。

50、提示客戶輸入查詢方式,如客戶輸入“1”,則調(diào)用int flight_num_check(flightnode *l,char *flight_num)函數(shù)按航班號對航班進行查詢,提示客戶輸入航班號,存于flight_num中;如客戶輸入“2”,則調(diào)用int place_check(flightnode *l,char *start_place,char *end_place)函數(shù)按起飛抵達城市對航班進行查詢,提示客戶輸入起飛抵達城市,分

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é)點后,輸出該航班的所有信息。</p><p>  在int place_check(flightnode *l,char *start_place,char *end_place)函數(shù)中,定義航班指針*p=h,使用for循環(huán)尋找匹配start_place和start_place的結(jié)點,找到匹配的航班結(jié)點后,輸出該航班的所有信息。</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ù)選擇使用哪一種查詢方式進

54、行查詢。提示客戶輸入查詢方式,如客戶輸入“1”,則調(diào)用int ID_name_check(passengerList *PList,char *name,char *ID_num)函數(shù)按客戶的姓名和證件號對訂單進行查詢,提示客戶輸入姓名和證件號,分別存于name和ID_num中;如客戶輸入“2”,則調(diào)用int order_num_check(passengerList *PList,int order_num)函數(shù)按訂單號對訂單進行查詢

55、,提示客戶輸入訂單號,存于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é)點,找到匹配的訂單節(jié)點后,輸出該訂單的所有信息。</p><p>  在int order_num_check(passengerList *PList,int order_num)函數(shù)中,定義客戶指針*p=PList->head->next,使用for循環(huán)尋找匹配order_num的結(jié)點,找到匹配的訂單結(jié)點后,輸出該訂單的所有信息。</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ù)對航班信息進行修改。提示客戶輸入修改模式,如客戶輸入“1”,則調(diào)用void add_flight(flightnode *&h)函數(shù)添加航班信息;如客戶輸入“2”,則調(diào)用void delete_flight(flightnode *&h,passengerList *&PL

59、ist)函數(shù)刪除指定的航班信息,提示客戶輸入航班號,存于flight_num中;如客戶輸入“3”,則示客戶輸入航班號,如果該航班號存在,則提示用戶輸入修改后的起飛抵達時間。</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)尋找匹配航班號的航班結(jié)點,找到后執(zhí)行pr->next=p->next;free(p),刪除指定的航班信息;使用while循環(huán)找到匹配航班號的訂單結(jié)點,執(zhí)行qr->next=q->next;free(q),刪除對該航班訂票的訂單信息。如果沒有找到匹配的航班結(jié)點,輸出提示信息。</p><p><b

61、>  4. 測試與分析</b></p><p>  4.1 合法數(shù)據(jù)的測試</p><p> ?。?) 編譯鏈接后顯示菜單</p><p> ?。?) 輸入菜單號“1”,開始航班信息的錄入</p><p> ?。?) 輸入菜單號“2”,進入訂票模塊</p><p> ?。?) 輸入菜單號“3”,進入退

62、票模塊</p><p> ?。?) 輸入菜單號“4”,查詢航班信息</p><p>  a. 輸入菜單號“1”,按航班號查詢航班信息</p><p>  b. 輸入菜單號“2”,按起飛抵達城市查詢航班信息</p><p>  c. 輸入菜單號“3”,瀏覽全部航班信息</p><p> ?。?) 輸入菜單號“5”,查詢訂

63、單信息</p><p>  a. 輸入菜單號“1”,按客戶姓名和證件號查詢訂單信息</p><p>  b. 輸入菜單號“2”,按訂單號查詢訂單信息</p><p>  c. 輸入菜單號“3”,瀏覽全部訂單信息</p><p> ?。?) 輸入菜單號“6”,進入航班修改模塊</p><p>  a. 輸入菜單號“1”,

64、增加航班</p><p>  b. 輸入菜單號“2”,刪除航班</p><p>  c. 輸入菜單號“3”,修改航班時間</p><p> ?。?) 輸入菜單號“0”,退出本系統(tǒng)。</p><p>  4.2 非法數(shù)據(jù)的測試</p><p>  (1) 在主菜單中輸入錯誤號碼后,系統(tǒng)自動跳轉(zhuǎn)到主菜單,繼續(xù)讓用戶輸入。&

65、lt;/p><p>  (2) 選擇訂票服務(wù)后,輸入了沒有開通航班的城市</p><p> ?。?) 選擇訂票服務(wù)后,輸入了系統(tǒng)中沒有的航班號</p><p>  (4) 選擇退票服務(wù)后,輸入了沒有訂票的客戶姓名和證件號</p><p> ?。?) 選擇航班查詢服務(wù)后,輸入了沒有開通航班的城市</p><p> ?。?)

66、選擇航班查詢服務(wù)后,輸入了系統(tǒng)中不存在的航班號</p><p> ?。?) 選擇訂單查詢服務(wù)后,輸入了沒有訂票的客戶姓名和證件號</p><p> ?。?) 選擇訂單查詢服務(wù)后,輸入了系統(tǒng)中不存在的訂單號</p><p> ?。?) 選擇刪除航班服務(wù)后,輸入了系統(tǒng)中不存在的航班號</p><p> ?。?0) 選擇修改航班時間服務(wù)后,輸入了系

67、統(tǒng)中不存在的航班號</p><p><b>  5. 用戶使用說明</b></p><p><b>  5.1 運行環(huán)境</b></p><p>  Windows xp;Microsoft Visual C++ 6.0</p><p><b>  5.2 主要功能</b>&l

68、t;/p><p>  飛機訂票系統(tǒng)系統(tǒng)功能模塊如下:</p><p>  主要功能包括錄入航班信息、客戶訂票、客戶退票、查詢航班信息、查詢訂單信息、修改航班信息六個模塊;其中查詢航班信息模塊包括按航班號查詢、按起飛抵達城市查詢和瀏覽全部航班信息;其中查詢訂單信息模塊包括按訂單號查詢、按客戶姓名和證件號查詢以及瀏覽全部訂單信息;其中修改航班信息模塊包括添加航班信息、刪除航班信息和修改航班起飛抵達

69、時間。</p><p>  5.3 操作注意事項</p><p>  用戶在使用飛機訂票系統(tǒng)之前,應(yīng)注意以下事項:</p><p>  用戶在輸入數(shù)據(jù)時,飛機航班號、起飛抵達城市、起飛抵達時間、客戶姓名、證件號等為字符串形式;空座數(shù)、訂票數(shù)量、航班是否滿倉等為整型(int);票價、票價折扣等為浮點型(float);其他形式的輸入,請按輸入提示進行操作,以免引起不必要

70、的故障。</p><p><b>  5.4 業(yè)務(wù)流程</b></p><p>  輸入相應(yīng)的選擇信息,便可進入相應(yīng)的模塊中。</p><p> ?。?)輸入“1”,進入【錄入航班信息】模塊,輸入航班的相關(guān)信息,完成航班信息的錄入。</p><p> ?。?)輸入“2”,進入【客戶訂票】模塊,輸入客戶的信息、要訂的票數(shù)和

71、要訂的航班號,完成客戶的訂票操作。</p><p>  (3)輸入“3”,進入【客戶退票】模塊,輸入客戶的信息、要退的航班號,完成客戶的退票操作。</p><p> ?。?)輸入“4”,進入【查詢航班信息】模塊,可以瀏覽或查詢航班的相關(guān)信息。</p><p> ?。?)輸入“5”,進入【查詢訂單信息】模塊,可以瀏覽或查詢訂單的相關(guān)信息。</p><

72、;p>  (6)輸入“6”,進入【修改航班信息】模塊,可以添加航班信息、刪除航班信息和修改航班的起飛抵達時間。</p><p><b>  6. 總結(jié)</b></p><p>  經(jīng)過這兩周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我收獲很大,在實現(xiàn)系統(tǒng)功能的過程中,也遇到很多問題,分工協(xié)作,設(shè)計修改,編寫調(diào)試,每一步都滲透著溝通和分析,每一次溝通之后,都會對系統(tǒng)功能有更深層次的理解

73、和闡述,這也促使我們一步步完成了整個系統(tǒng),并使之可以運行。兩周的時間太短暫了,我們無法把全部學(xué)到的知識運用到具體的系統(tǒng)實現(xiàn)中,深深感受到數(shù)據(jù)結(jié)構(gòu)這門課程的重要性,以及它在實際應(yīng)用中的廣泛性。本系統(tǒng)由于種種原因仍然存在需要改進,需要完善的地方,我對于這個系統(tǒng)的認識和對數(shù)據(jù)結(jié)構(gòu)這門課程的理解已經(jīng)更加深入了。在今后的學(xué)習(xí)和工作中,會更加深入地把知識和思想體會更廣泛地應(yīng)用到其他相關(guān)領(lǐng)域。</p><p>  本系統(tǒng)在人性

74、化的方面做得還不夠,對于另類的輸入錯誤,還不能很好地應(yīng)對,這也體現(xiàn)出本系統(tǒng)不夠健壯,會在今后的學(xué)習(xí)中加以改進和完善;在功能模塊方面還可以增加更多相關(guān)模塊,是系統(tǒng)更加完善。</p><p>  在實現(xiàn)系統(tǒng)的過程中,我感受到自己的知識的薄弱零散,經(jīng)過這次做系統(tǒng),我覺得自己的知識得到鞏固和整合,知識體系更加系統(tǒng)化。我也深深體會到實踐檢驗真理,只有實踐中,才能出真知。我懂得了學(xué)習(xí)不只是紙上談兵,更重要的是實踐,就比如平常

75、我們在學(xué)習(xí)中經(jīng)常會遇到一些問題,看似無關(guān)緊要跳過去,不求甚解,在得知答案的時候,總是感覺心領(lǐng)神會,久而久之,對于的知識點就模棱兩可,形成知識漏洞。但這次課程設(shè)計所要編寫的程序很長,涉及的知識點也很多,選擇此題目的時候我心里面還底氣十足,自認為沒什么問題,對于程序的步驟仿佛了然于胸,但在實際操作中才發(fā)現(xiàn)并非如此,在編寫程序的過程中,我不斷地查閱相關(guān)資料進行學(xué)習(xí),積極地思考該怎樣實現(xiàn)系統(tǒng)的每一個功能。</p><p>

76、;  通過這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計,我鞏固和加深對數(shù)據(jù)結(jié)構(gòu)基本知識的理解,鍛煉了綜合運用課本知識的能力,自己也真正地完整而系統(tǒng)地設(shè)計并編寫了一個程序,使得自己的編程能力大為提高。通過對我所選擇飛機訂票系統(tǒng)的設(shè)計和編寫,我初步掌握簡單軟件的分析方法和設(shè)計方法,更深的領(lǐng)悟了“紙上得來終覺淺,覺知此事要躬行”的重要意義,第一次體會到了數(shù)據(jù)結(jié)構(gòu)編程知識在實際生活中的重要性和應(yīng)用的廣泛性。</p><p><b>

77、  參考文獻</b></p><p>  [1]譚浩強 C程序設(shè)計(第四版) 北京:清華大學(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]; //航班號</p><p>  char start_time[10]; //起飛時間</p><p>  char end_time[10]; //抵達時間</p><p>  char start_place[20];//起飛城市</p><p>  char end_place[20];

80、 //抵達城市</p><p>  int left; //空座數(shù)</p><p>  float price; //票價</p><p>  float price_discount;//票價折扣</p><p>  int isFull; //航班是否滿倉</p>&

81、lt;p>  struct flightnode *next;//指向下一個結(jié)點</p><p>  }flightnode;//航班結(jié)點</p><p>  typedef struct passengernode{</p><p>  char name[20]; //姓名</p><p>  char ID_num[20

82、]; //證件號</p><p>  char flight_num[10];//航班號</p><p>  int order_num; //訂單號</p><p>  int ticket_num; //訂票數(shù)量</p><p>  struct passengernode *next;//指向下一個結(jié)點</

83、p><p>  }passengernode;//客戶結(jié)點</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)//目的是要建立一個以h為頭結(jié)點的空鏈表,錄入航班信息和增加航班后將航班結(jié)點插入該鏈表</p><p><b>  {</b></p><p>  h=(flightnode *

85、)malloc(sizeof(flightnode));//申請頭結(jié)點的空間</p><p>  if(h==NULL) exit(0);</p><p>  h->next=NULL;//將頭結(jié)點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é)點</p><p>  pList->rear=pList->head;</p><p>  pList->rear->order_num=0;//訂單號從0開始計數(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","航班號","起飛城市","抵達城市",&quo

104、t;起飛時間","抵達時間","價格","折扣","是否滿倉","空座數(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é)點插入到航線鏈表中</p><p><b>  {</b></p><p>  flightnode *q;//定義q為新增加的航班結(jié)點的指

111、針的形參</p><p>  flightnode *p=h;</p><p>  q=(flightnode *)malloc(sizeof(flightnode));//為q結(jié)點申請空間</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é)點中</p>

114、<p>  q->next=p->next;//將q結(jié)點的指針域置為空</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é)點插入客戶鏈表中,并修改相應(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é)點,存放新的客戶訂單信息</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;//生成訂單號</p>

120、<p>  PList->rear=q;</p><p><b>  }</b></p><p>  void delete_flight(flightnode *&h,passengerList *&PList)</p><p>  //目的要按照某個航班號刪除航班結(jié)點</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論