數據結構 程序設計 飛機訂票系統(tǒng)
《數據結構 程序設計 飛機訂票系統(tǒng)》由會員分享,可在線閱讀,更多相關《數據結構 程序設計 飛機訂票系統(tǒng)(20頁珍藏版)》請在裝配圖網上搜索。
1、學 號 數據結構課程設計 設計說明書 飛機訂票系統(tǒng) 起止日期: 2011年 12月 12 日 至 2011 年 12月16日 學生姓名 班級 成績 指導教師(簽字) 電子與信息工程系 2011年 12月16日 天津城市建設學院 課程設計任務書 2011—2012學年第1學期 電子與信息工程 系 軟件工程 專業(yè) 班級 課程設計名稱: 數據結構課程設計 設計題目: 飛機訂票系統(tǒng)
2、 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周 設計依據、要求及主要內容(可另加附頁): 一、設計目的 熟悉各種數據結構和運算,會使用數據結構的基本操作解決一些實際問題。 二、設計要求 (1)重視課程設計環(huán)節(jié),用嚴謹、科學和踏實的工作態(tài)度對待課程設計的每一項任務; (2)按照課程設計的題目要求,獨立地完成各項任務,嚴禁抄襲;凡發(fā)現抄襲,抄襲者與被抄襲者皆以零分計入本課程設計成績。凡發(fā)現實驗報告或源程序雷同,涉及的全部人員皆以零分計入本課程設計成績; (3)學生
3、在接受設計任務后,首先要按設計任務書的要求編寫設計進程表; (4)認真編寫課程設計報告。 三、設計內容 訂票系統(tǒng) 1)問題描述 (1)錄入: 可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) (2)查詢: 可以查詢某個航線的情況 可以輸入起飛抵達城市,查詢飛機航班情況; (3)訂票:(訂票情況可以存在一個數據文件中,結構自己設定) 可以訂票,如果該航班已經無票,可以提供相關可選擇航班; (4)退票: 可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 (5)修改航班信息:
4、 當航班信息改變可以修改航班數據文件 2) 基本要求 根據以上功能說明,設計航班信息,訂票信息的存儲結構,設計程序完成功能 目錄 一、需求分析 4 二、問題求解 4 三、總體設計 4 1.程序設計組成框圖: 5 2.程序設計流程圖 6 四、詳細設計 7 1.根據飛機訂票系統(tǒng)的可設要求,要實現以下功能: 5 2.具體的方法及函數調用的思想: 6 定義要存儲的變量: 6 3.方法的實現: 6 五、調試與測試 9 1.錄入信息時 9 2.訂票時: 9 3.退票時: 10 六、關鍵源程序清單和執(zhí)行結果 10 1.源程序: 10 2.執(zhí)行結果:
5、 17 七、參考文獻 21 一、 需求分析 本課程設計的名稱是飛機訂票系統(tǒng),本系統(tǒng)主要是描述了顧客在訂飛機票時的一些具體情況,包括錄入航班、乘客情況,查詢是否還有該顧客要乘坐的飛機以及剩余的票,之后是確定乘客訂票管理,然后當乘客有突發(fā)情況發(fā)生時會伴隨著退票的發(fā)生。這就是產生訂票系統(tǒng)產生的原因。 二、 問題求解 當我們遇到飛機訂票這件事情的時候,我們通常發(fā)生的地點是飛機場,首先,我們應該到售票大廳去購買飛機票,因此,我根據我學過的C++中學過的結構體struct,它相當于其他高級語言中的高級記錄。 因此定義了一個airline結構體來存儲變量: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(已訂票人數),bool exist(航班狀態(tài)),int fare;(飛機票價) 定義了struct airline b[N]{ };(N規(guī)定不能大于50)來實現存儲: 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()方法來實現。則要錄入航班號(air_num),起飛時間(begin_hour,begin_minute),飛行時間(fly_time),起始站(begin_name),終點站(end_name)等。 在查找find()方法中
8、,首先定義一個計數器k=-1,然后讀入文件信息,輸入要查詢的終點站名稱end,用strcmp()是用來比較end_name和end字符串的大小,它的返回值是int類型。如果有此終點站,則調用output(i)方法,打印出符合條件的航班信息,然后把i的值付給計數器k。如果k==-1,則顯示不存在此航班。
在瀏覽check()方法中,顯示已有的航班班次,調用output()方法來顯示信息,緊著著要調用time()來判斷航班是否發(fā)出并輸出。
可能還有一種情況需要考慮,當飛機起飛了,則既不能訂票也不能退票了,這是通過時間的比較來實現的,再次運用了電腦上的事件系統(tǒng)#include 9、>(系統(tǒng)窗口時間),建立方法string time(short begin_hour,short begin_minute)來調用系統(tǒng)時間函數和輸入的時間作比較,判斷此時的時間和電腦現在系統(tǒng)的大小來比較,如果輸入的時間的小時數大于電腦系統(tǒng)里面的小時數或者輸入的小時數和電腦系統(tǒng)的小時數相等&&輸入的分鐘數大于電腦系統(tǒng)的分鐘數,其代碼實現如下:
(if((begin_hour 10、首先應輸入飛機班次編號(cin>>num1),因為事先在結構體里存儲了四個航班信息,所以如果輸入的num1在b[i].air_num(即編號1~4),則會cout<<“航班已存在”。否則判斷該班次是否還有票,if(b[i].total==b[i].total_already)則說明票以售完,反之計算出剩余票數的張數:b[i].total-b[i].total_already ,再輸入購票的張數cin>>num2,然后拿num2的大小和總票數減去已經售出的票數的大小作比較,if(b[i].total-b[i].total_already>num2),接著詢問乘客是否去熱定要購票if(ch=='y 11、'||ch=='Y'),進而進行下一步,然后在判斷飛機是否已經起飛,如果沒起飛則訂票成功,返回"訂票成功,祝您旅途愉快!",然后調用save()來把訂票后的信息存起來。反之無法辦理。然后,一旦乘客往里或者把票給丟了,售票員也能通過乘客的信息查詢到該乘客是否確實買過票,這就通過find()來查找,如果要瀏覽班次則需要check()來實現。此程序的output()方法是用來在控制臺顯示給售票員看的,所以要清楚明了,便于操作。
三、總體設計
:
飛機訂票系統(tǒng)
錄入信息
退票
查詢信息
訂票
12、
點擊查詢機票
進入訂票機票
機票信息頁面
進入退票頁面
按條件查詢
開始
飛機起飛?
購票失敗
允許購買
Y
Nn
飛機起飛?
退票失敗
允許退票
Y
N
返回
四、詳細設計
1.根據飛機訂票系統(tǒng)的可設要求,要實現以下功能:
(1)錄入:
錄入航班情況
(2)查詢:
可以查詢某個航線的情況
可以輸入抵達城市,查詢飛機航班情況;
(3)訂票:
1)先 13、判斷飛機是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機票。
2)當有余票時顯示剩余票數,則可以訂票成功,如果沒有余票,則訂票失敗。
(4)退票:
1)先判斷飛機是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機票。
2)當有余票時顯示剩余票數,則可以退票成功,如果沒有余票,則退票失敗。
2.具體的方法及函數調用的思想:
(1)struct://它相當于一種記錄
定義要存儲的變量:
可以通過以下的聲明來建立如圖的數據類型
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; //已訂票人數
15、 bool exist; //航班狀態(tài)
int fare; //飛機票價
定義一個結構體來存儲四個航班信息:
{ }里的變量依次表示為:航班號,起飛時間(小時),起飛時間(分鐘),起始站點,終點站名,飛行時間,成員定額,已訂票人數,航班狀態(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.方法的實現:
1)save( ); //保存航班信息
因為可設要求把數據存儲在文件中,所以必須編寫此保存方法,因此用到fstream頭文件名(f 17、stream是iostream類的派生)用來支持對磁盤文件的輸入輸出,信息保存在airpline.txt文件中。
2)read( ); //讀取航班信息
read方法是用來讀取airpline.txt文件中航班數據的,ios:in 以輸入方式打開文件
3)input( ); //錄入
input()方法的功能就是錄入航班號 i,起飛時間(小時)begin_hour,起飛時間(分鐘)begin_minute,起始地點名稱 begin_name,種植地點名稱 end_name,飛行時間 fly_time,總載客量 total,已訂票人數 total_already,飛機票價 18、fare,航班狀態(tài) exist。
變量int i=4,因為事先已經錄入4個編號為1~4的航班號,因此當輸入1~4的航班號時會提醒此航班號已存在,因而在控制臺輸入的航班號必須大于4而小于50。
變量int j=0;則j+1表示錄入第(j+1)個航班班次的信息
4)find( ); //查詢,按終點站來查詢
根據已有的飛機信息來依據終點信息來查詢航班。首先要調用讀取機票信息函數,讀取要查詢的機票信息,既read()方法。并且在方法中有一個計數器 k,當k=-1時輸出無此航班的飛機,反之根據終點站名字來查詢航班信息。
5)string time(short begin_hour, 19、char begin_minute); //調用系統(tǒng)時間
當輸入起飛時間與該電腦里的時間作比較,當電腦現在的時間比輸入起飛時間大的話,則說明飛機已經起飛。通過線面的語句來實現:
(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,進而訂在剩余票數的范圍內購票,如果與之相反,則證明飛機已經起飛也就是說已經訂不到票了。
7)refund( ); //辦理退票函數
思路類似于訂票,首先要數如要退票的航班號,并且在這之后讀入系統(tǒng)中的航班信息,當輸入航班編號后如無此航班號,則失敗,反之先判斷次航班是否已經起飛if((b[i]. 21、begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果沒起飛,確定退票數完成退票操作。如果與之相反,則證明飛機已經起飛了,無法進行退票業(yè)務了。
五、調試與測試
六、關鍵源程序清單和執(zhí)行結果
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; //已訂票人數
bool exist; //航班狀態(tài)
int fare; //飛機票價
};
struct airline b[N]={
//航班號,起飛時間(小時),起飛時間(分鐘),起始站點,終點站名,飛行時間,成員定額,已訂票人數,航班狀態(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; //航班數量
//函數聲明
void input(); //錄入
void find(); //查詢,按終點站來查詢
string time(short begin_hour,char begin_minute); 25、 //調用系統(tǒng)時間
void order(); //辦理訂票函數
void refund(); //辦理退票函數
void input() //錄入班次信息函數
{
if(n<=0)
{
cout<<"請輸入錄入班次的數量:"< 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<<"輸入錯誤!起始地點和終到地點不應該相同!"< 29、ut<<"-----已成功錄入!-----\n";
}
}
}
string time(short begin_hour,short begin_minute) //調用系統(tǒng)時間函數
{
SYSTEMTIME sys; //系統(tǒng)時間 sys
GetLocalTime(&sys); //獲得本地電腦時間
string str;
if((begin_hour 30、"未發(fā)出!";
return str;
}
void output(int i)
{
cout<<"----------------------\n";
cout<<"班次號"<<" "<<"起飛時間"<<" "<<"起始站"<<" "<<"終點站"<<" "<<
"飛行時間"<<" "<<"固定載客量"<<" "<<"已訂票人數"<<" "<<"飛機票價"<<" "<<"飛機狀態(tài)"< 31、 "
<
32、:\n";
cin>>end;
for(int i=0;i 33、
void check() //瀏覽班次函數
{
cout<<"已有的航班班次為:"< 34、1;
char ch;
cout<<"請輸入要購買機票的班次編號:"< 35、endl;
cout<<"請輸入要購買的機票數:";
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: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復工安全生產培訓人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復工復產十注意節(jié)后復工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復工安全生產培訓勿忘安全本心人人講安全個個會應急
- 預防性維修管理
- 常見閥門類型及特點
- 設備預防性維修
- 2.乳化液泵工理論考試試題含答案