數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)

上傳人:a**** 文檔編號:140701860 上傳時間:2022-08-23 格式:DOC 頁數(shù):20 大?。?37.50KB
收藏 版權(quán)申訴 舉報 下載
數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)_第1頁
第1頁 / 共20頁
數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)_第2頁
第2頁 / 共20頁
數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)_第3頁
第3頁 / 共20頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、學(xué) 號 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計說明書飛機訂票系統(tǒng)起止日期: 2011年 12月 12 日 至 2011 年 12月16日學(xué)生姓名 班級 成績指導(dǎo)教師(簽字) 電子與信息工程系2011年 12月16日天津城市建設(shè)學(xué)院課程設(shè)計任務(wù)書20112012學(xué)年第1學(xué)期 電子與信息工程 系 軟件工程 專業(yè) 班級課程設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目: 飛機訂票系統(tǒng) 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁):一、設(shè)計目的熟悉各種數(shù)據(jù)結(jié)構(gòu)和運算,會使用數(shù)據(jù)結(jié)構(gòu)的基本操作解決一些實際問題。二、設(shè)計要求 (1)重視課程設(shè)計環(huán)

2、節(jié),用嚴謹、科學(xué)和踏實的工作態(tài)度對待課程設(shè)計的每一項任務(wù);(2)按照課程設(shè)計的題目要求,獨立地完成各項任務(wù),嚴禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計入本課程設(shè)計成績。凡發(fā)現(xiàn)實驗報告或源程序雷同,涉及的全部人員皆以零分計入本課程設(shè)計成績;(3)學(xué)生在接受設(shè)計任務(wù)后,首先要按設(shè)計任務(wù)書的要求編寫設(shè)計進程表;(4)認真編寫課程設(shè)計報告。三、設(shè)計內(nèi)容訂票系統(tǒng)1)問題描述 (1)錄入:可以錄入航班情況(數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)(2)查詢: 可以查詢某個航線的情況可以輸入起飛抵達城市,查詢飛機航班情況;(3)訂票:(訂票情況可以存在一個數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂

3、票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;(4)退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,證件號,訂票數(shù)量及航班情況,訂單要有編號。(5)修改航班信息:當航班信息改變可以修改航班數(shù)據(jù)文件2) 基本要求根據(jù)以上功能說明,設(shè)計航班信息,訂票信息的存儲結(jié)構(gòu),設(shè)計程序完成功能目錄一、需求分析4二、問題求解4三、總體設(shè)計41.程序設(shè)計組成框圖:52.程序設(shè)計流程圖6四、詳細設(shè)計71.根據(jù)飛機訂票系統(tǒng)的可設(shè)要求,要實現(xiàn)以下功能:52.具體的方法及函數(shù)調(diào)用的思想:6定義要存儲的變量:63.方法的實現(xiàn):6五、調(diào)試與測試91.錄入信息時92.訂票時:93.退票時:10六、關(guān)鍵源程序清單和執(zhí)行

4、結(jié)果101.源程序:102.執(zhí)行結(jié)果:17七、參考文獻21一、 需求分析本課程設(shè)計的名稱是飛機訂票系統(tǒng),本系統(tǒng)主要是描述了顧客在訂飛機票時的一些具體情況,包括錄入航班、乘客情況,查詢是否還有該顧客要乘坐的飛機以及剩余的票,之后是確定乘客訂票管理,然后當乘客有突發(fā)情況發(fā)生時會伴隨著退票的發(fā)生。這就是產(chǎn)生訂票系統(tǒng)產(chǎn)生的原因。二、 問題求解 當我們遇到飛機訂票這件事情的時候,我們通常發(fā)生的地點是飛機場,首先,我們應(yīng)該到售票大廳去購買飛機票,因此,我根據(jù)我學(xué)過的C+中學(xué)過的結(jié)構(gòu)體struct,它相當于其他高級語言中的高級記錄。因此定義了一個airline結(jié)構(gòu)體來存儲變量:struct airline

5、;air_num(班次號),short begin_hour(起飛時間小時),short begin_minute(起飛時間分鐘),char begin_name10(起始站點),char end_name10(終點站名),float fly_time(飛行時間),int total(乘員總定額),int total_already(已訂票人數(shù)),bool exist(航班狀態(tài)),int fare;(飛機票價)定義了struct airline bN ;(N規(guī)定不能大于50)來實現(xiàn)存儲:1120天津廣州2145130true10002630北京成都140140true20003220廣州南京1

6、20120true25004150天津長沙2120120true3000首先就要查詢是否有該路線的票,如果有的話則進行購買,即要通過把信息錄入input()方法來實現(xiàn)。則要錄入航班號(air_num),起飛時間(begin_hour,begin_minute),飛行時間(fly_time),起始站(begin_name),終點站(end_name)等。在查找find()方法中,首先定義一個計數(shù)器k=-1,然后讀入文件信息,輸入要查詢的終點站名稱end,用strcmp()是用來比較end_name和end字符串的大小,它的返回值是int類型。如果有此終點站,則調(diào)用output(i)方法,打印出符

7、合條件的航班信息,然后把i的值付給計數(shù)器k。如果k=-1,則顯示不存在此航班。在瀏覽check()方法中,顯示已有的航班班次,調(diào)用output()方法來顯示信息,緊著著要調(diào)用time()來判斷航班是否發(fā)出并輸出??赡苓€有一種情況需要考慮,當飛機起飛了,則既不能訂票也不能退票了,這是通過時間的比較來實現(xiàn)的,再次運用了電腦上的事件系統(tǒng)#include(系統(tǒng)窗口時間),建立方法string time(short begin_hour,short begin_minute)來調(diào)用系統(tǒng)時間函數(shù)和輸入的時間作比較,判斷此時的時間和電腦現(xiàn)在系統(tǒng)的大小來比較,如果輸入的時間的小時數(shù)大于電腦系統(tǒng)里面的小時數(shù)或者

8、輸入的小時數(shù)和電腦系統(tǒng)的小時數(shù)相等&輸入的分鐘數(shù)大于電腦系統(tǒng)的分鐘數(shù),其代碼實現(xiàn)如下:(if(begin_hoursys.wHour)|(begin_hour=sys.wHour&begin_minutenum1),因為事先在結(jié)構(gòu)體里存儲了四個航班信息,所以如果輸入的num1在bi.air_num(即編號14),則會coutnum2,然后拿num2的大小和總票數(shù)減去已經(jīng)售出的票數(shù)的大小作比較,if(bi.total-bi.total_alreadynum2),接著詢問乘客是否去熱定要購票if(ch=y|ch=Y),進而進行下一步,然后在判斷飛機是否已經(jīng)起飛,如果沒起飛則訂票成功,返回訂票成功,

9、祝您旅途愉快!,然后調(diào)用save()來把訂票后的信息存起來。反之無法辦理。然后,一旦乘客往里或者把票給丟了,售票員也能通過乘客的信息查詢到該乘客是否確實買過票,這就通過find()來查找,如果要瀏覽班次則需要check()來實現(xiàn)。此程序的output()方法是用來在控制臺顯示給售票員看的,所以要清楚明了,便于操作。三、總體設(shè)計:飛機訂票系統(tǒng)錄入信息退票查詢信息訂票點擊查詢機票進入訂票機票機票信息頁面進入退票頁面按條件查詢開始飛機起飛?購票失敗允許購買YNn飛機起飛?退票失敗允許退票YN返回四、詳細設(shè)計1.根據(jù)飛機訂票系統(tǒng)的可設(shè)要求,要實現(xiàn)以下功能:(1)錄入:錄入航班情況(2)查詢: 可以查詢

10、某個航線的情況 可以輸入抵達城市,查詢飛機航班情況;(3)訂票: 1)先判斷飛機是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機票。2)當有余票時顯示剩余票數(shù),則可以訂票成功,如果沒有余票,則訂票失敗。(4)退票:1)先判斷飛機是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機票。 2)當有余票時顯示剩余票數(shù),則可以退票成功,如果沒有余票,則退票失敗。2.具體的方法及函數(shù)調(diào)用的思想:(1)struct:/它相當于一種記錄定義要存儲的變量:可以通過以下的聲明來建立如圖的數(shù)據(jù)類型int air_num; /班次號 short begin_hour; /起飛時間小時 short begin_minute;

11、 /起飛時間分鐘 char begin_name10; /起始站點 char end_name10; /終點站名 float fly_time; /飛行時間 int total; /乘員總定額 int total_already; /已訂票人數(shù) bool exist; /航班狀態(tài) int fare; /飛機票價 定義一個結(jié)構(gòu)體來存儲四個航班信息: 里的變量依次表示為:航班號,起飛時間(小時),起飛時間(分鐘),起始站點,終點站名,飛行時間,成員定額,已訂票人數(shù),航班狀態(tài);1,12,0,天津,廣州,2,145,130,true,1000, 2,6,30,北京,成都,0.5,140,140,tru

12、e,2000, 3,22,0,廣州,南京,2.5,140,120,true,2500, 4,15,0,天津,長沙,2,140,120,true,3000 1120天津廣州2145130true10002630北京成都140140true20003220廣州南京120120true25004150天津長沙2120120true30003.方法的實現(xiàn):1)save( ); /保存航班信息因為可設(shè)要求把數(shù)據(jù)存儲在文件中,所以必須編寫此保存方法,因此用到fstream頭文件名(fstream是iostream類的派生)用來支持對磁盤文件的輸入輸出,信息保存在airpline.txt文件中。2)read

13、( ); /讀取航班信息read方法是用來讀取airpline.txt文件中航班數(shù)據(jù)的,ios:in 以輸入方式打開文件3)input( ); /錄入input()方法的功能就是錄入航班號 i,起飛時間(小時)begin_hour,起飛時間(分鐘)begin_minute,起始地點名稱 begin_name,種植地點名稱 end_name,飛行時間 fly_time,總載客量 total,已訂票人數(shù) total_already,飛機票價 fare,航班狀態(tài) exist。變量int i=4,因為事先已經(jīng)錄入4個編號為14的航班號,因此當輸入14的航班號時會提醒此航班號已存在,因而在控制臺輸入的航

14、班號必須大于4而小于50。變量int j=0;則j+1表示錄入第(j+1)個航班班次的信息4)find( ); /查詢,按終點站來查詢根據(jù)已有的飛機信息來依據(jù)終點信息來查詢航班。首先要調(diào)用讀取機票信息函數(shù),讀取要查詢的機票信息,既read()方法。并且在方法中有一個計數(shù)器 k,當k=-1時輸出無此航班的飛機,反之根據(jù)終點站名字來查詢航班信息。5)string time(short begin_hour,char begin_minute); /調(diào)用系統(tǒng)時間當輸入起飛時間與該電腦里的時間作比較,當電腦現(xiàn)在的時間比輸入起飛時間大的話,則說明飛機已經(jīng)起飛。通過線面的語句來實現(xiàn):(begin_hour

15、sys.wHour)|(begin_hour=sys.wHour&begin_minutesys.wHour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute),如果沒起飛,在判斷是否還有余票if(bi.total=bi.total_already),如果有,計算剩余的多少張票bi.total-bi.total_already,進而訂在剩余票數(shù)的范圍內(nèi)購票,如果與之相反,則證明飛機已經(jīng)起飛也就是說已經(jīng)訂不到票了。7)refund( ); /辦理退票函數(shù)思路類似于訂票,首先要數(shù)如要退票的航班號,并且在這之后讀入系統(tǒng)中的航班信息,當輸入航班編

16、號后如無此航班號,則失敗,反之先判斷次航班是否已經(jīng)起飛if(bi.begin_hoursys.wHour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute),如果沒起飛,確定退票數(shù)完成退票操作。如果與之相反,則證明飛機已經(jīng)起飛了,無法進行退票業(yè)務(wù)了。五、調(diào)試與測試六、關(guān)鍵源程序清單和執(zhí)行結(jié)果1. 源程序:#include#include /strcmp()是用來比較大小的,它是C+中頭文件(字符串函數(shù))#include /系統(tǒng)窗口時間using namespace std; const int N= 50;struct airlinein

17、t air_num; /班次號short begin_hour; /起飛時間小時short begin_minute; /起飛時間分鐘char begin_name10; /起始站點 char end_name10; /終點站名 float fly_time; /飛行時間 int total; /乘員總定額int total_already; /已訂票人數(shù)bool exist; /航班狀態(tài)int fare; /飛機票價;struct airline bN=/航班號,起飛時間(小時),起飛時間(分鐘),起始站點,終點站名,飛行時間,成員定額,已訂票人數(shù),航班狀態(tài)1,12,0,天津,廣州,2,14

18、5,130,true,1000, 2,6,30,北京,成都,0.5,140,140,true,2000, 3,22,0,廣州,南京,2.5,140,120,true,2500,4,15,0,天津,長沙,2,140,120,true,3000 ;/聲明全局變量int n=0; /航班數(shù)量 /函數(shù)聲明void input(); /錄入void find(); /查詢,按終點站來查詢string time(short begin_hour,char begin_minute); /調(diào)用系統(tǒng)時間void order(); /辦理訂票函數(shù)void refund(); /辦理退票函數(shù)void input(

19、) /錄入班次信息函數(shù)if(n=0)cout請輸入錄入班次的數(shù)量:n; for(int i=4,j=0;in+4,jn;i+,j+)cout正在錄入第j+1個班次的信息!n;cout-n;coutbi.air_num;if(bi.air_num50|bi.air_num1)cout輸入編號錯誤!endl;break;for(int j=0;ji;j+)if(bi.air_num!=bj.air_num) continue; else cout錄入失敗,此編號的班次已經(jīng)存在!=i) cout請輸入班次的起飛時間:endlbi.begin_hour;coutbi.begin_minute;cout

20、bi.begin_name;coutbi.end_name; if(strcmp(bi.end_name,bi.begin_name)=0)cout輸入錯誤!起始地點和終到地點不應(yīng)該相同!endl;break;coutbi.fly_time;coutbi.total;coutbi.total_already; coutbi.fare; bi.exist=true; cout-已成功錄入!-n;string time(short begin_hour,short begin_minute) /調(diào)用系統(tǒng)時間函數(shù)SYSTEMTIME sys; /系統(tǒng)時間 sysGetLocalTime(&sys);

21、 /獲得本地電腦時間string str;if(begin_hoursys.wHour)|(begin_hour=sys.wHour&begin_minutesys.wMinute)str=已發(fā)出!;else str=未發(fā)出!;return str;void output(int i)cout-n;cout班次號 起飛時間 起始站 終點站 飛行時間 固定載客量 已訂票人數(shù) 飛機票價 飛機狀態(tài)endl;cout bi.air_num bi.begin_hour:bi.begin_minute bi.begin_name bi.end_name bi.fly_time bi.total bi.to

22、tal_already bi.fare bi.exist;void find() /查詢班次信息函數(shù)int k=-1;/計數(shù)器 char end10;coutend;for(int i=0;in+4;i+)if(strcmp(bi.end_name,end)=0) /strcmp()是用來比較大小的,它是C+中頭文件(字符串函數(shù)) /中定義的一個用于對兩組字符串進行比較的函數(shù),它的返回值是int類型。output(i);k=i;if(k=-1)cout不存在至此的航班endl; void check() /瀏覽班次函數(shù)cout已有的航班班次為:n+4endl;for(int i=0;in+4;

23、i+) output(i);couttime(bi.begin_hour,bi.begin_minute)endl; /顯示是否發(fā)出航班 void order() /訂票函數(shù)int num1,num2,k=-1;char ch;cout請輸入要購買機票的班次編號:num1;for(int i=0;in+4;i+)if(bi.air_num=num1) k=i;cout存在此班次!;if(bi.total=bi.total_already)cout對不起,此班次的機票已售完!;else cout仍有機票bi.total-bi.total_already張!endl;coutnum2;if(bi.

24、total-bi.total_alreadynum2)cout對不起,您所要購買的機票數(shù)已超過剩余票數(shù),無法辦理!endl;break;else cout確定要購買?(y/n)ch;if(ch=y|ch=Y)SYSTEMTIME sys;GetLocalTime(&sys);if(bi.begin_hoursys.wHour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute)bi.total_already+=num2;cout訂票成功,祝您旅途愉快!endl;else cout此航班已經(jīng)發(fā)出,無法辦理訂票!endl;else retur

25、n; if(k=-1)cout不存在編號為num1的班次!endl;void refund() /退票函數(shù)int num1,num2,k=-1;char ch;cout請輸入要退機票的班次編號:num1;for(int i=0;in+4;i+)if(bi.air_num=num1) k=i;cout存在此班次!;SYSTEMTIME sys;GetLocalTime(&sys);if(bi.begin_hoursys.wHour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute)cout對不起,此航班已經(jīng)起飛,無法辦理退票!endl;el

26、se coutnum2;if(bi.total_alreadynum2)cout只售出bi.total_already張票!endl; break;else cout確定要退票?(y/n)ch;if(ch=y|ch=Y)bi.total_already-=num2;cout退票成功,歡迎您下次光臨!endl;else return; if(k=-1)cout不存在編號為num1的班次!endl;void main() /主函數(shù)char e=1;while(e!=0)cout-n;cout*飛機訂票系統(tǒng)*endl;cout1、機票信息錄入endl;cout2、機票信息查詢endl;cout3、機票信息瀏覽endl;cout4、訂票處理endl;cout5、退票處理endl;cout0、退出endl;cout-endl;coute;switch(e)case 1:input();break;case 2:find();break;case 3:check();break;case 4:order();break; case 5:refund();break;case 0:break;default:cout輸入錯誤!endl;2.執(zhí)行結(jié)果: 七、參考文獻1王紅梅數(shù)據(jù)結(jié)構(gòu)清華大學(xué)出版社2王紅梅數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)輔導(dǎo)與實驗指導(dǎo)清華大學(xué)出版社3嚴蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué)出版社

展開閱讀全文
溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!