數(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ù)書 2011—2012學(xué)年第1學(xué)期 電子與信息工程 系 軟件工程 專業(yè) 班級 課程設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目: 飛機訂票系統(tǒng)

2、 完成期限:自 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)節(jié),用嚴(yán)謹(jǐn)、科學(xué)和踏實的工作態(tài)度對待課程設(shè)計的每一項任務(wù); (2)按照課程設(shè)計的題目要求,獨立地完成各項任務(wù),嚴(yán)禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計入本課程設(shè)計成績。凡發(fā)現(xiàn)實驗報告或源程序雷同,涉及的全部人員皆以零分計入本課程設(shè)計成績; (3)學(xué)生

3、在接受設(shè)計任務(wù)后,首先要按設(shè)計任務(wù)書的要求編寫設(shè)計進程表; (4)認(rèn)真編寫課程設(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è)定)   可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;  (4)退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;   客戶資料有姓名,證件號,訂票數(shù)量及航班情況,訂單要有編號。  (5)修改航班信息:

4、   當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件 2) 基本要求   根據(jù)以上功能說明,設(shè)計航班信息,訂票信息的存儲結(jié)構(gòu),設(shè)計程序完成功能 目錄 一、需求分析 4 二、問題求解 4 三、總體設(shè)計 4 1.程序設(shè)計組成框圖: 5 2.程序設(shè)計流程圖 6 四、詳細設(shè)計 7 1.根據(jù)飛機訂票系統(tǒng)的可設(shè)要求,要實現(xiàn)以下功能: 5 2.具體的方法及函數(shù)調(diào)用的思想: 6 定義要存儲的變量: 6 3.方法的實現(xiàn): 6 五、調(diào)試與測試 9 1.錄入信息時 9 2.訂票時: 9 3.退票時: 10 六、關(guān)鍵源程序清單和執(zhí)行結(jié)果 10 1.源程序: 10 2.執(zhí)行結(jié)果:

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

6、airline{ }; air_num(班次號),short begin_hour(起飛時間小時),short begin_minute(起飛時間分鐘),char begin_name[10](起始站點),char end_name[10](終點站名),float fly_time(飛行時間),int total(乘員總定額),int total_already(已訂票人數(shù)),bool exist(航班狀態(tài)),int fare;(飛機票價) 定義了struct airline b[N]{ };(N規(guī)定不能大于50)來實現(xiàn)存儲: 1 12 0 天津 廣州 2 145 1

7、30 true 1000 2 6 30 北京 成都 140 140 true 2000 3 22 0 廣州 南京 120 120 true 2500 4 15 0 天津 長沙 2 120 120 true 3000 首先就要查詢是否有該路線的票,如果有的話則進行購買,即要通過把信息錄入input()方法來實現(xiàn)。則要錄入航班號(air_num),起飛時間(begin_hour,begin_minute),飛行時間(fly_time),起始站(begin_name),終點站(end_name)等。 在查找find()方法中

8、,首先定義一個計數(shù)器k=-1,然后讀入文件信息,輸入要查詢的終點站名稱end,用strcmp()是用來比較end_name和end字符串的大小,它的返回值是int類型。如果有此終點站,則調(diào)用output(i)方法,打印出符合條件的航班信息,然后把i的值付給計數(shù)器k。如果k==-1,則顯示不存在此航班。 在瀏覽check()方法中,顯示已有的航班班次,調(diào)用output()方法來顯示信息,緊著著要調(diào)用time()來判斷航班是否發(fā)出并輸出。 可能還有一種情況需要考慮,當(dāng)飛機起飛了,則既不能訂票也不能退票了,這是通過時間的比較來實現(xiàn)的,再次運用了電腦上的事件系統(tǒng)#include

9、>(系統(tǒng)窗口時間),建立方法string time(short begin_hour,short begin_minute)來調(diào)用系統(tǒng)時間函數(shù)和輸入的時間作比較,判斷此時的時間和電腦現(xiàn)在系統(tǒng)的大小來比較,如果輸入的時間的小時數(shù)大于電腦系統(tǒng)里面的小時數(shù)或者輸入的小時數(shù)和電腦系統(tǒng)的小時數(shù)相等&&輸入的分鐘數(shù)大于電腦系統(tǒng)的分鐘數(shù),其代碼實現(xiàn)如下: (if((begin_hour

10、首先應(yīng)輸入飛機班次編號(cin>>num1),因為事先在結(jié)構(gòu)體里存儲了四個航班信息,所以如果輸入的num1在b[i].air_num(即編號1~4),則會cout<<“航班已存在”。否則判斷該班次是否還有票,if(b[i].total==b[i].total_already)則說明票以售完,反之計算出剩余票數(shù)的張數(shù):b[i].total-b[i].total_already ,再輸入購票的張數(shù)cin>>num2,然后拿num2的大小和總票數(shù)減去已經(jīng)售出的票數(shù)的大小作比較,if(b[i].total-b[i].total_already>num2),接著詢問乘客是否去熱定要購票if(ch=='y

11、'||ch=='Y'),進而進行下一步,然后在判斷飛機是否已經(jīng)起飛,如果沒起飛則訂票成功,返回"訂票成功,祝您旅途愉快!",然后調(diào)用save()來把訂票后的信息存起來。反之無法辦理。然后,一旦乘客往里或者把票給丟了,售票員也能通過乘客的信息查詢到該乘客是否確實買過票,這就通過find()來查找,如果要瀏覽班次則需要check()來實現(xiàn)。此程序的output()方法是用來在控制臺顯示給售票員看的,所以要清楚明了,便于操作。 三、總體設(shè)計 : 飛機訂票系統(tǒng) 錄入信息 退票 查詢信息 訂票

12、 點擊查詢機票 進入訂票機票 機票信息頁面 進入退票頁面 按條件查詢 開始 飛機起飛? 購票失敗 允許購買 Y Nn 飛機起飛? 退票失敗 允許退票 Y N 返回 四、詳細設(shè)計 1.根據(jù)飛機訂票系統(tǒng)的可設(shè)要求,要實現(xiàn)以下功能: (1)錄入:   錄入航班情況  (2)查詢:    可以查詢某個航線的情況    可以輸入抵達城市,查詢飛機航班情況;  (3)訂票: 1)先

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

14、 //起飛時間小時 short begin_minute; //起飛時間分鐘 char begin_name[10]; //起始站點 char end_name[10]; //終點站名 float fly_time; //飛行時間 int total; //乘員總定額 int total_already; //已訂票人數(shù)

15、 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,true,2000}, {3,22,0,"廣州","南京",2.5,140,120,true,2

16、500}, {4,15,0,"天津","長沙",2,140,120,true,3000} 1 12 0 天津 廣州 2 145 130 true 1000 2 6 30 北京 成都 140 140 true 2000 3 22 0 廣州 南京 120 120 true 2500 4 15 0 天津 長沙 2 120 120 true 3000 3.方法的實現(xiàn): 1)save( ); //保存航班信息 因為可設(shè)要求把數(shù)據(jù)存儲在文件中,所以必須編寫此保存方法,因此用到fstream頭文件名(f

17、stream是iostream類的派生)用來支持對磁盤文件的輸入輸出,信息保存在airpline.txt文件中。 2)read( ); //讀取航班信息 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,飛機票價

18、fare,航班狀態(tài) exist。 變量int i=4,因為事先已經(jīng)錄入4個編號為1~4的航班號,因此當(dāng)輸入1~4的航班號時會提醒此航班號已存在,因而在控制臺輸入的航班號必須大于4而小于50。 變量int j=0;則j+1表示錄入第(j+1)個航班班次的信息 4)find( ); //查詢,按終點站來查詢 根據(jù)已有的飛機信息來依據(jù)終點信息來查詢航班。首先要調(diào)用讀取機票信息函數(shù),讀取要查詢的機票信息,既read()方法。并且在方法中有一個計數(shù)器 k,當(dāng)k=-1時輸出無此航班的飛機,反之根據(jù)終點站名字來查詢航班信息。 5)string time(short begin_hour,

19、char begin_minute); //調(diào)用系統(tǒng)時間 當(dāng)輸入起飛時間與該電腦里的時間作比較,當(dāng)電腦現(xiàn)在的時間比輸入起飛時間大的話,則說明飛機已經(jīng)起飛。通過線面的語句來實現(xiàn): (begin_hoursys.wHour)||(b[i]

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

21、begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果沒起飛,確定退票數(shù)完成退票操作。如果與之相反,則證明飛機已經(jīng)起飛了,無法進行退票業(yè)務(wù)了。 五、調(diào)試與測試 六、關(guān)鍵源程序清單和執(zhí)行結(jié)果 1. 源程序: #include #include //strcmp()是用來比較大小的,它是C++中頭文件(字符串函數(shù)) #include //系統(tǒng)窗口時間 using

22、 namespace std; const int N= 50; struct airline { int air_num; //班次號 short begin_hour; //起飛時間小時 short begin_minute; //起飛時間分鐘 char begin_name[10]; //起始站點 char end_name[10]; //終點站名 float fly_time; //飛行時間

23、 int total; //乘員總定額 int total_already; //已訂票人數(shù) bool exist; //航班狀態(tài) int fare; //飛機票價 }; struct airline b[N]={ //航班號,起飛時間(小時),起飛時間(分鐘),起始站點,終點站名,飛行時間,成員定額,已訂票人數(shù),航班狀態(tài) {1,12,0,"天津","廣州",2,145,130,true,1000}, {2,6,30,"北京","成都",0.5,

24、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);

25、 //調(diào)用系統(tǒng)時間 void order(); //辦理訂票函數(shù) void refund(); //辦理退票函數(shù) void input() //錄入班次信息函數(shù) { if(n<=0) { cout<<"請輸入錄入班次的數(shù)量:"<>n; } for(int i=4,j=0;i

26、out<<"------------------------------\n"; cout<<"請輸入班次的編號(1-50):"; cin>>b[i].air_num; if(b[i].air_num>50||b[i].air_num<1) {cout<<"輸入編號錯誤!"<

27、 } if(j>=i) { cout<<"請輸入班次的起飛時間:"<>b[i].begin_hour;cout<<"分鐘為:"; cin>>b[i].begin_minute; cout<<"請輸入班次的起始地點:"; cin>>b[i].begin_name; cout<<"請輸入班次的終到地點:"; cin>>b[i].end_name; if(strcmp(b[i].end_name,b[i].begin_name)==0) {co

28、ut<<"輸入錯誤!起始地點和終到地點不應(yīng)該相同!"<>b[i].fly_time; cout<<"請輸入固定的載客量:"; cin>>b[i].total; cout<<"請輸入已訂票人數(shù):"; cin>>b[i].total_already; cout<<"請輸入飛機票價:"; cin>>b[i].fare; b[i].exist=true; co

29、ut<<"-----已成功錄入!-----\n"; } } } string time(short begin_hour,short begin_minute) //調(diào)用系統(tǒng)時間函數(shù) { SYSTEMTIME sys; //系統(tǒng)時間 sys GetLocalTime(&sys); //獲得本地電腦時間 string str; if((begin_hour

30、"未發(fā)出!"; return str; } void output(int i) { cout<<"----------------------\n"; cout<<"班次號"<<" "<<"起飛時間"<<" "<<"起始站"<<" "<<"終點站"<<" "<< "飛行時間"<<" "<<"固定載客量"<<" "<<"已訂票人數(shù)"<<" "<<"飛機票價"<<" "<<"飛機狀態(tài)"<

31、 " <

32、:\n"; cin>>end; for(int i=0;i(字符串函數(shù)) //中定義的一個用于對兩組字符串進行比較的函數(shù),它的返回值是int類型。 { output(i); k=i; } if(k==-1) cout<<"不存在至此的航班"<

33、 void check() //瀏覽班次函數(shù) { cout<<"已有的航班班次為:"<

34、1; char ch; cout<<"請輸入要購買機票的班次編號:"<>num1; for(int i=0;i

35、endl; cout<<"請輸入要購買的機票數(shù):"; cin>>num2; if(b[i].total-b[i].total_already>ch; if(ch=='y'||ch=='Y') { SYSTEMTIME sys; GetLocalTime(

36、&sys); if((b[i].begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)) { b[i].total_already+=num2; cout<<"訂票成功,祝您旅途愉快!"<

37、 } if(k==-1) cout<<"不存在編號為"<>num1; for(int i=0;i

38、STEMTIME sys; GetLocalTime(&sys); if((b[i].begin_hour>num2; if(b[i].total_already

39、total_already<<"張票!"<>ch; if(ch=='y'||ch=='Y') { b[i].total_already-=num2; cout<<"退票成功,歡迎您下次光臨!"<

40、ut<<"不存在編號為"<

41、<<"3、機票信息瀏覽"<>e; 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<<"輸入錯誤!"<

展開閱讀全文
溫馨提示:
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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(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),我們立即給予刪除!