數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計(jì) 飛機(jī)訂票系統(tǒng)
《數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計(jì) 飛機(jī)訂票系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu) 程序設(shè)計(jì) 飛機(jī)訂票系統(tǒng)(20頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、學(xué) 號(hào) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 設(shè)計(jì)說(shuō)明書 飛機(jī)訂票系統(tǒng) 起止日期: 2011年 12月 12 日 至 2011 年 12月16日 學(xué)生姓名 班級(jí) 成績(jī) 指導(dǎo)教師(簽字) 電子與信息工程系 2011年 12月16日 天津城市建設(shè)學(xué)院 課程設(shè)計(jì)任務(wù)書 2011—2012學(xué)年第1學(xué)期 電子與信息工程 系 軟件工程 專業(yè) 班級(jí) 課程設(shè)計(jì)名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 設(shè)計(jì)題目: 飛機(jī)訂票系統(tǒng)
2、 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周 設(shè)計(jì)依據(jù)、要求及主要內(nèi)容(可另加附頁(yè)): 一、設(shè)計(jì)目的 熟悉各種數(shù)據(jù)結(jié)構(gòu)和運(yùn)算,會(huì)使用數(shù)據(jù)結(jié)構(gòu)的基本操作解決一些實(shí)際問(wèn)題。 二、設(shè)計(jì)要求 (1)重視課程設(shè)計(jì)環(huán)節(jié),用嚴(yán)謹(jǐn)、科學(xué)和踏實(shí)的工作態(tài)度對(duì)待課程設(shè)計(jì)的每一項(xiàng)任務(wù); (2)按照課程設(shè)計(jì)的題目要求,獨(dú)立地完成各項(xiàng)任務(wù),嚴(yán)禁抄襲;凡發(fā)現(xiàn)抄襲,抄襲者與被抄襲者皆以零分計(jì)入本課程設(shè)計(jì)成績(jī)。凡發(fā)現(xiàn)實(shí)驗(yàn)報(bào)告或源程序雷同,涉及的全部人員皆以零分計(jì)入本課程設(shè)計(jì)成績(jī); (3)學(xué)生
3、在接受設(shè)計(jì)任務(wù)后,首先要按設(shè)計(jì)任務(wù)書的要求編寫設(shè)計(jì)進(jìn)程表; (4)認(rèn)真編寫課程設(shè)計(jì)報(bào)告。 三、設(shè)計(jì)內(nèi)容 訂票系統(tǒng) 1)問(wèn)題描述 (1)錄入: 可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定) (2)查詢: 可以查詢某個(gè)航線的情況 可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況; (3)訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定) 可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班; (4)退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件; 客戶資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。 (5)修改航班信息:
4、 當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件 2) 基本要求 根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能 目錄 一、需求分析 4 二、問(wèn)題求解 4 三、總體設(shè)計(jì) 4 1.程序設(shè)計(jì)組成框圖: 5 2.程序設(shè)計(jì)流程圖 6 四、詳細(xì)設(shè)計(jì) 7 1.根據(jù)飛機(jī)訂票系統(tǒng)的可設(shè)要求,要實(shí)現(xiàn)以下功能: 5 2.具體的方法及函數(shù)調(diào)用的思想: 6 定義要存儲(chǔ)的變量: 6 3.方法的實(shí)現(xiàn): 6 五、調(diào)試與測(cè)試 9 1.錄入信息時(shí) 9 2.訂票時(shí): 9 3.退票時(shí): 10 六、關(guān)鍵源程序清單和執(zhí)行結(jié)果 10 1.源程序: 10 2.執(zhí)行結(jié)果:
5、 17 七、參考文獻(xiàn) 21 一、 需求分析 本課程設(shè)計(jì)的名稱是飛機(jī)訂票系統(tǒng),本系統(tǒng)主要是描述了顧客在訂飛機(jī)票時(shí)的一些具體情況,包括錄入航班、乘客情況,查詢是否還有該顧客要乘坐的飛機(jī)以及剩余的票,之后是確定乘客訂票管理,然后當(dāng)乘客有突發(fā)情況發(fā)生時(shí)會(huì)伴隨著退票的發(fā)生。這就是產(chǎn)生訂票系統(tǒng)產(chǎn)生的原因。 二、 問(wèn)題求解 當(dāng)我們遇到飛機(jī)訂票這件事情的時(shí)候,我們通常發(fā)生的地點(diǎn)是飛機(jī)場(chǎng),首先,我們應(yīng)該到售票大廳去購(gòu)買飛機(jī)票,因此,我根據(jù)我學(xué)過(guò)的C++中學(xué)過(guò)的結(jié)構(gòu)體struct,它相當(dāng)于其他高級(jí)語(yǔ)言中的高級(jí)記錄。 因此定義了一個(gè)airline結(jié)構(gòu)體來(lái)存儲(chǔ)變量:struct
6、airline{ }; air_num(班次號(hào)),short begin_hour(起飛時(shí)間小時(shí)),short begin_minute(起飛時(shí)間分鐘),char begin_name[10](起始站點(diǎn)),char end_name[10](終點(diǎn)站名),float fly_time(飛行時(shí)間),int total(乘員總定額),int total_already(已訂票人數(shù)),bool exist(航班狀態(tài)),int fare;(飛機(jī)票價(jià)) 定義了struct airline b[N]{ };(N規(guī)定不能大于50)來(lái)實(shí)現(xiàn)存儲(chǔ): 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 天津 長(zhǎng)沙 2 120 120 true 3000 首先就要查詢是否有該路線的票,如果有的話則進(jìn)行購(gòu)買,即要通過(guò)把信息錄入input()方法來(lái)實(shí)現(xiàn)。則要錄入航班號(hào)(air_num),起飛時(shí)間(begin_hour,begin_minute),飛行時(shí)間(fly_time),起始站(begin_name),終點(diǎn)站(end_name)等。 在查找find()方法中
8、,首先定義一個(gè)計(jì)數(shù)器k=-1,然后讀入文件信息,輸入要查詢的終點(diǎn)站名稱end,用strcmp()是用來(lái)比較end_name和end字符串的大小,它的返回值是int類型。如果有此終點(diǎn)站,則調(diào)用output(i)方法,打印出符合條件的航班信息,然后把i的值付給計(jì)數(shù)器k。如果k==-1,則顯示不存在此航班。
在瀏覽check()方法中,顯示已有的航班班次,調(diào)用output()方法來(lái)顯示信息,緊著著要調(diào)用time()來(lái)判斷航班是否發(fā)出并輸出。
可能還有一種情況需要考慮,當(dāng)飛機(jī)起飛了,則既不能訂票也不能退票了,這是通過(guò)時(shí)間的比較來(lái)實(shí)現(xiàn)的,再次運(yùn)用了電腦上的事件系統(tǒng)#include 9、>(系統(tǒng)窗口時(shí)間),建立方法string time(short begin_hour,short begin_minute)來(lái)調(diào)用系統(tǒng)時(shí)間函數(shù)和輸入的時(shí)間作比較,判斷此時(shí)的時(shí)間和電腦現(xiàn)在系統(tǒng)的大小來(lái)比較,如果輸入的時(shí)間的小時(shí)數(shù)大于電腦系統(tǒng)里面的小時(shí)數(shù)或者輸入的小時(shí)數(shù)和電腦系統(tǒng)的小時(shí)數(shù)相等&&輸入的分鐘數(shù)大于電腦系統(tǒng)的分鐘數(shù),其代碼實(shí)現(xiàn)如下:
(if((begin_hour 10、首先應(yīng)輸入飛機(jī)班次編號(hào)(cin>>num1),因?yàn)槭孪仍诮Y(jié)構(gòu)體里存儲(chǔ)了四個(gè)航班信息,所以如果輸入的num1在b[i].air_num(即編號(hào)1~4),則會(huì)cout<<“航班已存在”。否則判斷該班次是否還有票,if(b[i].total==b[i].total_already)則說(shuō)明票以售完,反之計(jì)算出剩余票數(shù)的張數(shù):b[i].total-b[i].total_already ,再輸入購(gòu)票的張數(shù)cin>>num2,然后拿num2的大小和總票數(shù)減去已經(jīng)售出的票數(shù)的大小作比較,if(b[i].total-b[i].total_already>num2),接著詢問(wèn)乘客是否去熱定要購(gòu)票if(ch=='y 11、'||ch=='Y'),進(jìn)而進(jìn)行下一步,然后在判斷飛機(jī)是否已經(jīng)起飛,如果沒(méi)起飛則訂票成功,返回"訂票成功,祝您旅途愉快!",然后調(diào)用save()來(lái)把訂票后的信息存起來(lái)。反之無(wú)法辦理。然后,一旦乘客往里或者把票給丟了,售票員也能通過(guò)乘客的信息查詢到該乘客是否確實(shí)買過(guò)票,這就通過(guò)find()來(lái)查找,如果要瀏覽班次則需要check()來(lái)實(shí)現(xiàn)。此程序的output()方法是用來(lái)在控制臺(tái)顯示給售票員看的,所以要清楚明了,便于操作。
三、總體設(shè)計(jì)
:
飛機(jī)訂票系統(tǒng)
錄入信息
退票
查詢信息
訂票
12、
點(diǎn)擊查詢機(jī)票
進(jìn)入訂票機(jī)票
機(jī)票信息頁(yè)面
進(jìn)入退票頁(yè)面
按條件查詢
開(kāi)始
飛機(jī)起飛?
購(gòu)票失敗
允許購(gòu)買
Y
Nn
飛機(jī)起飛?
退票失敗
允許退票
Y
N
返回
四、詳細(xì)設(shè)計(jì)
1.根據(jù)飛機(jī)訂票系統(tǒng)的可設(shè)要求,要實(shí)現(xiàn)以下功能:
(1)錄入:
錄入航班情況
(2)查詢:
可以查詢某個(gè)航線的情況
可以輸入抵達(dá)城市,查詢飛機(jī)航班情況;
(3)訂票:
1)先 13、判斷飛機(jī)是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機(jī)票。
2)當(dāng)有余票時(shí)顯示剩余票數(shù),則可以訂票成功,如果沒(méi)有余票,則訂票失敗。
(4)退票:
1)先判斷飛機(jī)是否起飛,如果發(fā)出航班則訂票失敗,否則可以訂機(jī)票。
2)當(dāng)有余票時(shí)顯示剩余票數(shù),則可以退票成功,如果沒(méi)有余票,則退票失敗。
2.具體的方法及函數(shù)調(diào)用的思想:
(1)struct://它相當(dāng)于一種記錄
定義要存儲(chǔ)的變量:
可以通過(guò)以下的聲明來(lái)建立如圖的數(shù)據(jù)類型
int air_num; //班次號(hào)
short begin_hour; 14、 //起飛時(shí)間小時(shí)
short begin_minute; //起飛時(shí)間分鐘
char begin_name[10]; //起始站點(diǎn)
char end_name[10]; //終點(diǎn)站名
float fly_time; //飛行時(shí)間
int total; //乘員總定額
int total_already; //已訂票人數(shù)
15、 bool exist; //航班狀態(tài)
int fare; //飛機(jī)票價(jià)
定義一個(gè)結(jié)構(gòu)體來(lái)存儲(chǔ)四個(gè)航班信息:
{ }里的變量依次表示為:航班號(hào),起飛時(shí)間(小時(shí)),起飛時(shí)間(分鐘),起始站點(diǎn),終點(diǎn)站名,飛行時(shí)間,成員定額,已訂票人數(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,"天津","長(zhǎng)沙",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
天津
長(zhǎng)沙
2
120
120
true
3000
3.方法的實(shí)現(xiàn):
1)save( ); //保存航班信息
因?yàn)榭稍O(shè)要求把數(shù)據(jù)存儲(chǔ)在文件中,所以必須編寫此保存方法,因此用到fstream頭文件名(f 17、stream是iostream類的派生)用來(lái)支持對(duì)磁盤文件的輸入輸出,信息保存在airpline.txt文件中。
2)read( ); //讀取航班信息
read方法是用來(lái)讀取airpline.txt文件中航班數(shù)據(jù)的,ios:in 以輸入方式打開(kāi)文件
3)input( ); //錄入
input()方法的功能就是錄入航班號(hào) i,起飛時(shí)間(小時(shí))begin_hour,起飛時(shí)間(分鐘)begin_minute,起始地點(diǎn)名稱 begin_name,種植地點(diǎn)名稱 end_name,飛行時(shí)間 fly_time,總載客量 total,已訂票人數(shù) total_already,飛機(jī)票價(jià) 18、fare,航班狀態(tài) exist。
變量int i=4,因?yàn)槭孪纫呀?jīng)錄入4個(gè)編號(hào)為1~4的航班號(hào),因此當(dāng)輸入1~4的航班號(hào)時(shí)會(huì)提醒此航班號(hào)已存在,因而在控制臺(tái)輸入的航班號(hào)必須大于4而小于50。
變量int j=0;則j+1表示錄入第(j+1)個(gè)航班班次的信息
4)find( ); //查詢,按終點(diǎn)站來(lái)查詢
根據(jù)已有的飛機(jī)信息來(lái)依據(jù)終點(diǎn)信息來(lái)查詢航班。首先要調(diào)用讀取機(jī)票信息函數(shù),讀取要查詢的機(jī)票信息,既read()方法。并且在方法中有一個(gè)計(jì)數(shù)器 k,當(dāng)k=-1時(shí)輸出無(wú)此航班的飛機(jī),反之根據(jù)終點(diǎn)站名字來(lái)查詢航班信息。
5)string time(short begin_hour, 19、char begin_minute); //調(diào)用系統(tǒng)時(shí)間
當(dāng)輸入起飛時(shí)間與該電腦里的時(shí)間作比較,當(dāng)電腦現(xiàn)在的時(shí)間比輸入起飛時(shí)間大的話,則說(shuō)明飛機(jī)已經(jīng)起飛。通過(guò)線面的語(yǔ)句來(lái)實(shí)現(xiàn):
(begin_hour 20、.begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果沒(méi)起飛,在判斷是否還有余票if(b[i].total==b[i].total_already),如果有,計(jì)算剩余的多少?gòu)埰眀[i].total-b[i].total_already,進(jìn)而訂在剩余票數(shù)的范圍內(nèi)購(gòu)票,如果與之相反,則證明飛機(jī)已經(jīng)起飛也就是說(shuō)已經(jīng)訂不到票了。
7)refund( ); //辦理退票函數(shù)
思路類似于訂票,首先要數(shù)如要退票的航班號(hào),并且在這之后讀入系統(tǒng)中的航班信息,當(dāng)輸入航班編號(hào)后如無(wú)此航班號(hào),則失敗,反之先判斷次航班是否已經(jīng)起飛if((b[i]. 21、begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果沒(méi)起飛,確定退票數(shù)完成退票操作。如果與之相反,則證明飛機(jī)已經(jīng)起飛了,無(wú)法進(jìn)行退票業(yè)務(wù)了。
五、調(diào)試與測(cè)試
六、關(guān)鍵源程序清單和執(zhí)行結(jié)果
1. 源程序:
#include 22、 namespace std;
const int N= 50;
struct airline
{ int air_num; //班次號(hào)
short begin_hour; //起飛時(shí)間小時(shí)
short begin_minute; //起飛時(shí)間分鐘
char begin_name[10]; //起始站點(diǎn)
char end_name[10]; //終點(diǎn)站名
float fly_time; //飛行時(shí)間
23、 int total; //乘員總定額
int total_already; //已訂票人數(shù)
bool exist; //航班狀態(tài)
int fare; //飛機(jī)票價(jià)
};
struct airline b[N]={
//航班號(hào),起飛時(shí)間(小時(shí)),起飛時(shí)間(分鐘),起始站點(diǎn),終點(diǎn)站名,飛行時(shí)間,成員定額,已訂票人數(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,"天津","長(zhǎng)沙",2,140,120,true,3000}
} ;
//聲明全局變量
int n=0; //航班數(shù)量
//函數(shù)聲明
void input(); //錄入
void find(); //查詢,按終點(diǎn)站來(lái)查詢
string time(short begin_hour,char begin_minute); 25、 //調(diào)用系統(tǒng)時(shí)間
void order(); //辦理訂票函數(shù)
void refund(); //辦理退票函數(shù)
void input() //錄入班次信息函數(shù)
{
if(n<=0)
{
cout<<"請(qǐng)輸入錄入班次的數(shù)量:"< 26、out<<"------------------------------\n";
cout<<"請(qǐng)輸入班次的編號(hào)(1-50):";
cin>>b[i].air_num;
if(b[i].air_num>50||b[i].air_num<1)
{cout<<"輸入編號(hào)錯(cuò)誤!"< 27、 }
if(j>=i)
{
cout<<"請(qǐng)輸入班次的起飛時(shí)間:"< 28、ut<<"輸入錯(cuò)誤!起始地點(diǎn)和終到地點(diǎn)不應(yīng)該相同!"< 29、ut<<"-----已成功錄入!-----\n";
}
}
}
string time(short begin_hour,short begin_minute) //調(diào)用系統(tǒng)時(shí)間函數(shù)
{
SYSTEMTIME sys; //系統(tǒng)時(shí)間 sys
GetLocalTime(&sys); //獲得本地電腦時(shí)間
string str;
if((begin_hour 30、"未發(fā)出!";
return str;
}
void output(int i)
{
cout<<"----------------------\n";
cout<<"班次號(hào)"<<" "<<"起飛時(shí)間"<<" "<<"起始站"<<" "<<"終點(diǎn)站"<<" "<<
"飛行時(shí)間"<<" "<<"固定載客量"<<" "<<"已訂票人數(shù)"<<" "<<"飛機(jī)票價(jià)"<<" "<<"飛機(jī)狀態(tài)"< 31、 "
<
32、:\n";
cin>>end;
for(int i=0;i 33、
void check() //瀏覽班次函數(shù)
{
cout<<"已有的航班班次為:"< 34、1;
char ch;
cout<<"請(qǐng)輸入要購(gòu)買機(jī)票的班次編號(hào):"< 35、endl;
cout<<"請(qǐng)輸入要購(gòu)買的機(jī)票數(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<<"不存在編號(hào)為"< 38、STEMTIME sys;
GetLocalTime(&sys);
if((b[i].begin_hour 39、total_already<<"張票!"< 40、ut<<"不存在編號(hào)為"< 41、<<"3、機(jī)票信息瀏覽"<
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案