數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計 飛機訂票系統(tǒng)
《數(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_hour 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 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ù)量:"< 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<<"請輸入班次的起飛時間:"< 28、ut<<"輸入錯誤!起始地點和終到地點不應(yīng)該相同!"< 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 33、
void check() //瀏覽班次函數(shù)
{
cout<<"已有的航班班次為:"< 34、1;
char ch;
cout<<"請輸入要購買機票的班次編號:"< 35、endl;
cout<<"請輸入要購買的機票數(shù):";
cin>>num2;
if(b[i].total-b[i].total_already 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<<"不存在編號為"< 38、STEMTIME sys;
GetLocalTime(&sys);
if((b[i].begin_hour 39、total_already<<"張票!"< 40、ut<<"不存在編號為"< 41、<<"3、機票信息瀏覽"<
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責(zé)述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個個會應(yīng)急
- 預(yù)防性維修管理
- 常見閥門類型及特點
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案