資料結構課程設計航空訂票系統

2023-02-11 00:24:03 字數 3439 閱讀 8725

總體設計

通過此系統可以實現如下功能:

1).錄入:可以錄入航班情況(資料儲存在乙個資料檔案中)

2).查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);

可以輸入起飛抵達城市,查詢飛機航班情況;

3).訂票:(訂票情況存在乙個資料檔案中)

可以訂票,如果該航班已經無票,可以提供相關可選擇航班;

4).退票: 可退票,退票後修改相關資料檔案;

客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。

5).修改航班資訊:

當航班資訊改變可以修改航班資料檔案

概要設計

每個模組的演算法設計說明如下:

(1)錄入模組:

查詢單鏈表的鏈尾,在鏈頭插入乙個「航班資訊」的新結點。

(2)瀏覽模組:

順著單鏈表輸出航班資訊。

(3)修改模組:

輸入密碼,確認是否有許可權對航班資訊進行修改,有則進行修改,否則不能修改。

提供兩種修改方式:新增航班和對已有的航班資訊進行改動(修改和刪除),1新增航線,0對已有的航班資訊進行改動(修改和刪除)。

對已有的航班資訊進行改動(修改和刪除):順著單鏈表查詢,若找到則進行相關操作。

(4)查詢模組:

提供兩種查方式:按航號和起飛抵達城市查詢,0代表按航號查詢,1代表按起飛抵達城市查詢。

順著單鏈表查詢,如果與航班號(起飛抵達城市)一致,輸出相關資訊並詢問乘客是否要訂票,若訂進入訂票模組;否則,查詢不成功。

(5)訂票模組:

查詢乘客要訂的航班號,判斷此航班是否有空位,有則輸入乘客有關資訊,訂票成功;否則查詢這個月此乘客起飛城市和降落城市的有空位航班,供乘客選擇,若有則訂票,若無則訂票不成功並把此乘客的資訊錄入此航班等候訂票佇列中,退出訂票。

(6)退票模組:

輸入要退票的乘客姓名以及所退票的編號,查詢乘客資料的鍊錶中是否有這位乘客,有則刪去此結點,並判斷是否有等候訂票的乘客(有則通知等候訂票乘客訂票,無則餘票加乘客所退票數);無則退票失敗。

(7)檔案模組:

順著單鏈表把鍊錶的資訊寫入檔案。

由於此系統流程圖太多,流程圖所對應的源**較長,所佔篇幅也較大,並且流程圖所對應的源程式在訂票系統源程式中都有,這裡就不再贅述。需要說明的是插入、查詢、修改和刪除這些線性表的基本操作的流程圖在訂票系統源程式中沒有單獨函式,是因為此系統主要是運用線性表的基本操作解決實際問題,具體問題所對應的基本操作**有所不同,但思維是相同的,所以這幾個操作的源**已經對應寫入了其他具體操作的函式中,這裡也不再給出。

根據訂票系統功能的需要定義了如下的結構體:

typedef struct wat_ros /*等候訂票乘客的資訊*/

qnode,*qptr;

typedef struct pqueue

linkqueue;

typedef struct ord_ros

lnode ,*linklist;

typedef struct airline

lineinfo,*lineair;

測試資料及截圖

錄入為線性表的初始化,所以時間複雜度:o(1);

瀏覽遍歷整張線性表所以時間複雜度:o(1);

修改航班資訊為線性表的查詢、線性表的插入和線性表的刪除操作,其平均移動元素個數分別為(n+1)/2、n/2、(n-1)/2,所以時間複雜度:o(n);

查詢為線性表的查詢,所以時間複雜度:o(n);

訂票為線性表的查詢所以時間複雜度:o(n);

退票是查詢兩張線性表,所以時間複雜度:o(n*e);

其中的n為航班總數,e為對應航班已定票人數。

(1) 在事先就把航班資訊寫入檔案,從檔案中獲取資訊,但取數時怎樣控制檔案指標,也就是怎樣取數的問題。

(2) 輸入密碼時像平時在上網登入某一賬號時輸入密碼一樣顯示

(3) 管理員能夠在系統上瀏覽乘客資訊。

解決第乙個問題需要在讀取檔案資訊時與靈活運用檔案的指標的定位,在寫入檔案資訊需嚴格按照一定的格式,不然檔案指標不好定位;解決第二個問題用不回顯接收函式getch(),然後呼叫printf()函式列印出乙個*號;第三個問題只需在瀏覽操作時,設立乙個管理員入口,輸入管理員密碼就對每條航線的乘客資訊進行遍歷,並把每條航班和對應的乘客資訊輸出。

(1)在演算法效率,由於此課程設計所用到的是線性表的建立、查詢、插入、刪除和佇列的建立、插入、刪除,所涉及的是查詢和排序問題,所以可以在建立插入時按照起飛和抵達城市進行排序,若起飛和抵達城市相同則再按日期進行排序,查詢時採用分塊查詢,當然要實現這些操作,對航班資訊的儲存應採指標陣列儲存。

(2)在函式重組,把處理不同問題相同演算法思想(如線性表的插入、刪除、查詢等等)寫在乙個函式中,其他函式要用到這種操作時只需呼叫這些函式,減少整個程式的**量,方便理解、閱讀和使用。

此次課程設計我們組選了訂票系統這個選題。為了實現某個功能,必須使用相應的結構體,我們首先在網上搜尋了幾套別人所做訂票系統的課程設計,看了一下他們所定義的結構體和我們課程設計選題所要實現的功能,覺得他們的結構體相對於我們的選題來說還是有一定的缺陷。我們的選題主要運用線性結構來儲存資料,進行線性表、佇列的一些基本操作。

根據選題要實現的功能和鏈式儲存結構的優點,我們最終決定佇列和線性表都採用鏈式儲存結構儲存,並定義相應的結構體。

在敲源**時,發現航班結構體中的已定票乘客資訊和等待訂票乘客資訊的結構不太好操作,經過一番思考最終改為源**中所定義的結構體。從中知道了結構體的定義決定了源程式的難易。

在打程式時,沒有把檔案操作的**打進源程式。在除錯沒有檔案操作的**時,沒有很多錯誤,但是犯了乙個大錯,就是在有乙個字串的複製中使用了賦值,除錯過程指出錯錯誤半天都不知道改,後來看了整個程式才反應過來。在執行除錯過程中瀏覽資訊沒有輸出想要的輸出結果,檢查程式原來是格式控制字串中的乙個字元打成了大寫;查詢資訊只能查詢鍊錶中的第一條航線,檢查程式原來是多用了break造成過早跳出迴圈,不能查詢後面的航線;乘客訂多張票後瀏覽資訊發現餘票只減了一張,檢查程式發現乘客訂票後只對餘票做了自減,在執行除錯過程中就出現了這麼些大的錯誤,在這過程中還對輸出視窗介面做了一些調整。

加入檔案操作**後進行除錯,沒有出現什麼錯誤。最終執行時老在檔案操作時終止程式,經過除錯和自己的摸索原來是檔案檢測函式運用錯誤,改正後程式正常執行。執行程式後開啟所寫的檔案,發現航班資訊的餘票量沒有隨乘客的訂票而減少,還是初始值,這時才發現每進行一次訂票後都要重新對航班資訊的檔案重新寫入,改後最終就確定了上交源**。

在敲**和在程式的除錯、執行過程中我們發現我們半天才能想出幾句語句,整個**敲了二十幾個小時,除錯調了二三十個小時,主要原因使我們練得還不夠,c語言功底還不是很紮實,要增加敲的**量。

資料結構是為了解決實際問題,提出了一些結構,這些東西是我們以後解決一些問題時所要用到的,所以一定要熟練掌握,要多敲**。

此次課程設計,使我們對鍊錶和鏈佇列的基本操作更加熟練,讓我們深深地體會到要學好資料結構需要多練。

此課程設計程式無需安裝,只需開啟在vc++6.0上編譯、 連線、執行即可。程式的源**在本模組中。

#include <>

資料結構 航空訂票系統課程設計

資料結構課程設計 系 部 學生姓名 專業班級 學號成單績 2010年6月18日 目錄一 課程設計目的3 二 課程設計內容3 三 需求分析3 四 概要設計3 五 詳細設計及執行結果4 六 除錯情況,設計技巧及體會9 七 參考文獻9 八 附錄 原始檔10 一 課程設計目的 1 資料結構課程設計是綜合運用...

資料結構課程設計航空訂票系統

石家莊經濟學院 本科生課程設計報告書 學號 410109070219 學院資訊工程學院 專業計算機 指導教師 完成日期 2012 xx xx 試設計乙個航空客運訂票系統,方便乘客通過購票系統購買自己的所需要的飛機票,而航空客運訂票的業務活動包括 1 查詢航線 2 客票預訂 3 辦理退票。系統能實現的...

資料結構 航空訂票系統課程設計

學院軟體工程課程設計 學生姓名 專業班級 學號2015年6月18日 目錄一 課程設計目的3 二 課程設計內容3 三 需求分析3 四 概要設計3 五 詳細設計及執行結果4 六 除錯情況,設計技巧及體會9 七 參考文獻9 八 附錄 原始檔10 1 資料結構課程設計是綜合運用資料結構課程中學到的幾種典型資...