




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 3.航空訂票系統:1.需求分析:(1)、可以實現航班信息的管理,包括查看航班信息,修改航班信息,刪除航班信息;(2)、可以查詢查詢航班信息,實現按起點站查詢,按終點站查詢,按日期查詢功能;(3)、實現訂票業務,若有余票,則訂購余票,若余票不夠,問是否加入排隊等待候列;(4)、實現退票業務,退票后,要查詢在排隊等待的人,看退票和原來余票量是否滿足客戶的要求。2.設計2.1:設計思想 (1)、數據結構設計a、由于每趟航班的信息量比較大,則需要定義一個結構體表示航班的基本信息,航班的基本信息采用鏈表存儲,以便于查詢和修改航班信息;b、至于座位等級,用一個二維數組保存座位號,第一維表示座位等級,第二
2、維表示座位號;每當座位被定時,把這個等級的座位號標記為1,表示座位狀態為已定。當有客戶退票時,座位號的標記又變為0,表示狀態為未定;c、用一個鏈表來存儲已經訂票的客戶的信息,必要的時候可以查看已定客戶的信息;d、再用一個隊列來保存等待的客戶的信息,當有人退票時,需要查看在等待的用戶是否能夠訂票。(2)、算法設計 這個程序中沒有用到特別的什么算法,主要是對鏈表和隊列操作。2.2、設計表示 (1)、函數調用關系 main()>Menuselect( )(輸出菜單的函數) 選擇1:>manage( )(管理航班信息) 選擇1:>store( )(存儲航班信息) 選擇2:>De
3、lete( ) (刪除航班信息) 選擇3:>revise( ) (修改航班信息) 選擇4:>check() (查看當前航班信息)>display()(輸出航班信息) 選擇2:>find( )(查找航班信息) 選擇1:>FindInPlaneNumber()(按航班號查詢) 選擇2:>FindInStartPoint()(按起點查詢) 選擇3:>FindInEndPoint()(按終點站查詢) 選擇4:>FindInDate()(按日期查詢) 選擇3:>Ordertickets()(訂票函數) >WaitForMore()(排隊等候)
4、選擇4:>Returntickets()(退票函數) 選擇1:>WaitedReturn()(加入過等待用戶的退票) 選擇2:>UnwaitedReturn()(沒有加入過頂戴用戶的訂票) (2)、函數接口規格說明 void ListInitiate()/初始化各個指針void display(airline *find)/輸出航班信息函數void store()/存取航班信息void Delete()/刪除航班信息void rivise()/修改航班信息void check()/查詢航班信息void Manage()/管理航班系統的函數struct airline *Fin
5、dInPlaneNumber()/按航班號查詢void FindInStartPoint()/按起點站查詢void FindInEndPoint()/按終點站查詢void FindInDate()/按日期查詢void find()/查詢函數void WaitForMore(char number,int amount,int grade,char name,airline *p)/等待更多票的用戶void Ordertickets()/訂票函數void WaitedReturn(char name)/等待過的用戶退票void UnwaitedReturn(char name)/沒有等待過的用戶
6、退票void Returntickets()/退票函數int Menuselect()/顯示菜單界面的函數void main()/主函數3調試分析 1、關于參數傳遞的問題:由于之前學習的c語言中關于參數傳遞的部分沒有學扎實,在傳遞數組的時候,出現了錯誤,后來在同學的幫助下,學會了正確的傳遞參數的方法。 2、關于座位號有沒有被定得問題:開始的時候,直接用加減法來計算座位訂購情況,發現在當前邊的作為被退的時候,不能正確的輸出座位號,后來苦思冥想,想出了用標記的方法來區分座位是否被訂購。 3.關于判斷等候的人是否可以訂票的問題:開始的時候,沒有加循環,導致如果第一個等候的人不能訂票,后邊的人都不能訂
7、票,后來在老師的提示下,加入了一個循環,解決了這個問題。 4、改進思想:可以再增加部分退票的功能,其實也不難,就是讓顧客輸入要退票的座位號,然后,把這些作為好的標志修改一下。 5、經驗體會:通過這個程序的實習,完全掌握了對鏈表和隊列的的應運,同時又加深了程序模塊化的思想。 6、時間復雜度和空間復雜度:本程序的時間復雜度和空間復雜度都為O(n)。4、用戶手冊 1、程序運行后,首先顯示的是主菜單界面; 2、用戶可進行選擇操作; 3、存取航班是需要按提示的順序輸入航班的信息;刪除航班時要輸入航班號;修改航班時也是要重新輸入航班信息; 4、查詢航班時:按每種方式查詢,都需要按照提示輸入對應的信息; 5
8、、訂票時需要按照提示輸入航班號,訂票量,艙位等級和姓名 6、退票時也需要輸入姓名和有沒有加入過排隊等候的隊列。5、測試數據及測試結果6、源程序清單#include <iostream>#include <string.h>#include <conio.h>using namespace std;#define MAXSIZE 20typedef struct waitchar PlaneNumber10;/航班號char name10;/姓名int NeedNumber;/總訂票量 int WaitNumber;/等待訂票量 int grade;/艙位等級
9、char OrderedNumber350;/保存已經訂票的座位號int OrderNumber;/已經訂票量 struct wait *next;qnode,*qptr;struct wait *begin;typedef struct pqueue qptr front;/等候替補客戶名單域的頭指針 qptr rear;/等候替補客戶名單域的屬指針linkqueue;typedef struct orderchar PlaneNumber10;/已定票的航班號char name10;/客戶姓名 int Ordernumber;/訂票量 int grade;/艙位等級 int sitsnum
10、ber350;/保存已定座位號 order *next;linklist; struct order *start;typedef struct airlinechar PlaneNumber10;char PlaneType10;char StartPoint10;char EndPoint10;char Date10;char StartTime10;char EndTime10;int FlyTime;int GradePrice3;int SitsNumber3;/int LeftNumber3; int target3100;/標記已經訂過的座位號為1struct airline *
11、next;linklist *order; /指向乘員名單鏈表的頭指針linkqueue wait; /指向等候域的頭指針SLNode;struct airline *head;void ListInitiate()head=(SLNode *)malloc(sizeof(SLNode);start=(linklist *)malloc(sizeof(linklist);begin=(qnode *)malloc(sizeof(qnode);head->next=NULL;start->next=NULL;begin->next=NULL;void display(airli
12、ne *find)/輸出航班信息函數int i;cout<<"航 航 起 降 日 起 降 飛 三個等 三個等 "<<endl; cout<<"班 班 飛 落 飛 落 行 級艙位 級的乘 "<<endl; cout<<" 機 機 機 時 時 時 的價格 員定額 "<<endl; cout<<"號 型 場 場 期 間 間 長 分別為 分別為 "<<endl;cout<<find->PlaneNumber&l
13、t;<" "<<find->PlaneType<<" "<<find->StartPoint<<" "<<find->EndPoint<<" "<<find->Date<<" "<<find->StartTime<<" "<<find->EndTime<<" "<&l
14、t;find->FlyTime<<" "<<find->GradePrice0<<","<<find->GradePrice1<<","<<find->GradePrice2<<" "<<find->SitsNumber0<<","<<find->SitsNumber1<<","<<find->
15、;SitsNumber2<<" "<<endl;cout<<"頭等艙的座位號是:1-"<<find->SitsNumber0<<endl;cout<<"頭等艙剩余票座位號是:"<<endl;for(i=0;i<find->SitsNumber0;i+)if(find->target0i=0)cout<<i+1<<" "cout<<endl;cout<<"
16、;公務艙的座位號是:"<<find->SitsNumber0<<"-"<<find->SitsNumber0+find->SitsNumber1<<endl;cout<<"公務艙剩余票座位號是:"<<endl;for(i=find->SitsNumber0;i<(find->SitsNumber0+find->SitsNumber1);i+)if(find->target1i=0)cout<<i+1<<
17、" "cout<<endl;cout<<"經濟艙的座位號是:"<<find->SitsNumber0+find->SitsNumber1<<"-"<<find->SitsNumber0+find->SitsNumber1+find->SitsNumber2<<endl;cout<<"經濟艙剩余票座位號是:"<<endl;for(i=find->SitsNumber0+find->
18、SitsNumber1;i<find->SitsNumber0+find->SitsNumber1+find->SitsNumber2;i+)if(find->target2i=0)cout<<i+1<<" "cout<<endl<<endl;void manageselect() cout<<"*"<<endl;cout<<"1.存取航班"<<endl<<"2.刪除航班"<
19、;<endl<<"3.修改航班信息"<<endl<<"4.查看航班信息"<<endl<<"5.返回主菜單"<<endl;cout<<"*"<<endl; cout<<"請按以上方式選擇:"<<endl;void store()/存取航班信息int i;struct airline *p,*q;p=(SLNode *)malloc(sizeof(SLNode);cout&l
20、t;<"請輸入要存取的航班信息:"<<endl;cout<<"航班號為:"<<endl;cin>>p->PlaneNumber;cout<<"航班類型為:"<<endl;cin>>p->PlaneType;cout<<"起飛機場為:"<<endl;cin>>p->StartPoint;cout<<"降落機場為:"<<endl;ci
21、n>>p->EndPoint; cout<<"日期為:"<<endl;cin>>p->Date;cout<<"起飛時間為:"<<endl;cin>>p->StartTime;cout<<"降落時間為:"<<endl;cin>>p->EndTime; cout<<"飛行時長為:"<<endl;cin>>p->FlyTime ;cout
22、<<"頭等艙的價格是:"<<endl;cin>>p->GradePrice0;cout<<"公務艙的價格是:"<<endl;cin>>p->GradePrice1;cout<<"經濟艙的價格是:"<<endl;cin>>p->GradePrice2;cout<<"頭等艙的座位數是:"<<endl;cin>>p->SitsNumber0;cout<
23、;<"公務艙的座位數是:"<<endl;cin>>p->SitsNumber1;cout<<"經濟艙的座位數是:"<<endl;cin>>p->SitsNumber2;for(i=0;i<p->SitsNumber0;i+)p->target0i=0;for(i=p->SitsNumber0;i<p->SitsNumber0+p->SitsNumber1;i+)p->target1i=0;for(i=p->SitsNumbe
24、r0+p->SitsNumber1;i<p->SitsNumber0+p->SitsNumber1+p->SitsNumber2;i+)p->target2i=0; p->next=head->next;head->next=p;q=head->next;cout<<"現有的航班是:"<<endl;while(q)display(q);q=q->next;void Delete() struct airline *p,*s;char number10; p=head->next;
25、s=head;cout<<"請輸入要刪除的的航班號:"<<endl;cin>>number;while(p)if(!strcmp(number,p->PlaneNumber)&&s->next=p)s->next=p->next;s=s->next;p=p->next;void rivise()char number10;struct airline *p;p=head->next;cout<<"請選擇要修改的航班號"<<endl;cin
26、>>number;while(p)if(!strcmp(number,p->PlaneNumber)cout<<"請輸入要修改的航班信息:"<<endl; cout<<"航班號為:"<<endl; cin>>p->PlaneNumber; cout<<"航班類型為:"<<endl; cin>>p->PlaneType;cout<<"起飛機場為:"<<endl; cin
27、>>p->StartPoint; cout<<"降落機場為:"<<endl; cin>>p->EndPoint; cout<<"日期為:"<<endl; cin>>p->Date; cout<<"起飛時間為:"<<endl; cin>>p->StartTime; cout<<"降落時間為:"<<endl; cin>>p->EndTi
28、me; cout<<"飛行時長為:"<<endl; cin>>p->FlyTime ; cout<<"頭等艙的價格是:"<<endl; cin>>p->GradePrice0; cout<<"公務艙的價格是:"<<endl; cin>>p->GradePrice1; cout<<"經濟艙的價格是:"<<endl; cin>>p->GradePrice
29、2; cout<<"頭等艙的座位數是:"<<endl; cin>>p->SitsNumber0; cout<<"公務艙的座位數是:"<<endl; cin>>p->SitsNumber1; cout<<"經濟艙的座位數是:"<<endl; cin>>p->SitsNumber2;p=p->next;void check()struct airline *q;q=head->next;cout<
30、<"現在的航班信息為:"<<endl;while(q!=NULL)display(q);q=q->next;void Manage()/管理航班系統的函數 int i=0,flag=0; manageselect();while(!flag)cin>>i; if(i!=1&&i!=2&&i!=3&&i!=4&&i!=5)cout<<"選擇錯誤,請重新輸入"<<endl; cin>>i;elseswitch(i)case
31、1:store();manageselect();break; case 2:Delete(); manageselect();break; case 3:rivise(); manageselect();break;case 4:check();manageselect();break; case 5:flag=1;struct airline *FindInPlaneNumber()/按航班號查詢airline *find,*p;char number10;find=head->next;p=head;cout<<"請輸入飛機號:"<<en
32、dl;cin>>number;while(find)if(!strcmp(number,find->PlaneNumber) display(find); return find;void FindInStartPoint()/按起始地點查詢airline *find,*p;char point10;find=head->next;p=head;cout<<"請輸入起點站名字:"<<endl;cin>>point;while(find)if(!strcmp(point,find->StartPoint) di
33、splay(find); if(find->next=NULL&&(strcmp(point,p->StartPoint)cout<<"對不起,沒有找到你所需要的航班"<<endl;find=find->next;p=p->next;void FindInEndPoint()/按終點站查詢airline *find,*p;char point10;find=head->next;p=head;cout<<"請輸入終點站名:"<<endl;cin>>p
34、oint;while(find)if(!strcmp(point,find->EndPoint) display(find); if(find->next=NULL&&(strcmp(point,p->StartPoint) cout<<"對不起,沒有找到你所需要的航班"<<endl;find=find->next;p=p->next;void FindInDate()/按日期查詢airline *find,*p;char Date10;find=head->next;p=head;cout<
35、<"請輸入航班日期:"<<endl;cin>>Date;while(find)if(!strcmp(Date,find->Date) display(find); if(find->next=NULL&&(strcmp(Date,find->Date) cout<<"對不起,沒有找到你所需要的航班"<<endl;find=find->next;p=p->next;void find()/查詢函數int i; cout<<"*"
36、;<<endl;cout<<"1.按航班號查詢"<<endl<<"2.按起點站查詢"<<endl<<"3.按終點站查詢"<<endl<<"4.按日期查詢"<<endl; cout<<"*"<<endl;cout<<"請按以上方式選擇:"<<endl;cin>>i;if(i!=1&&i!=2&am
37、p;&i!=3&&i!=4)cout<<"選擇錯誤,請重新輸入"<<endl;cin>>i;elseswitch(i)case(1):FindInPlaneNumber();break;case(2):FindInStartPoint();break;case(3):FindInEndPoint();break;case(4):FindInDate();break;void WaitForMore(char number,int amount,int grade,char name,airline *p)/等待定更
38、多的票int k,m=0,i,j=0;wait *q;q=(qnode *)malloc(sizeof(qnode);for(i=0;i<p->SitsNumber0+p->SitsNumber1+p->SitsNumber2;i+)if(p->targetgrade-1i=0)j+;if(j=0)cout<<"已經沒有剩余的票,加入排隊等候業務成功!"<<endl;q->grade=grade; strcpy(q->PlaneNumber,number); strcpy(q->name,name);
39、q->NeedNumber=amount;q->OrderNumber=0; q->WaitNumber=amount;for(k=0;k<p->SitsNumbergrade-1;k+)q->OrderedNumbergrade-1k=0;/q->OrderedNumbergrade-1;/ cout<<q->Waitnumber<<endl; q->next=begin->next; begin->next=q;elsecout<<"已經訂票的座位號為:"<<
40、;endl;for(k=0;k<p->SitsNumbergrade-1;k+)if(p->targetgrade-1k=0)cout<<k+1<<" " p->targetgrade-1k=1; q->OrderedNumbergrade-1m=k+1; m+;q->grade=grade; strcpy(q->PlaneNumber,number); strcpy(q->name,name); q->WaitNumber=amount-m; q->OrderNumber=m; q->
41、;NeedNumber=amount; q->next=begin->next; begin->next=q;/*cout<<endl; q->grade=grade;strcpy(q->PlaneNumber,number);strcpy(q->name,name);q->WaitNumber=amount-m;q->OrderNumber=m;q->NeedNumber=amount;/cout<<q->Waitnumber<<endl;q->next=begin->next;beg
42、in->next=q;*/void Ordertickets()/訂票函數airline *p;order *q;int amount,grade,i,j=0,k,m=0;char number10;char name10;p=head;q=(linklist *)malloc(sizeof(linklist);cout<<"所有的航班信息為:"<<endl;check();cout<<"請輸入訂票的航班號:"<<endl;cin>>number;cout<<"請輸入
43、訂票的數量"<<endl;cin>>amount;cout<<"請輸入艙位等級(頭等艙為1、公務艙為2、經濟艙為3)"<<endl;cin>>grade;cout<<"請輸入你的姓名"<<endl;cin>>name;while(strcmp(number,p->PlaneNumber)p=p->next;for(i=0;i<p->SitsNumber0+p->SitsNumber1+p->SitsNumber2;
44、i+)if(p->targetgrade-1i=0)j+; /計算出還剩多少票/cout<<j;if(amount<=j)cout<<"訂票成功,您的座位號是:"<<endl;for(k=0;k<p->SitsNumber0+p->SitsNumber1+p->SitsNumber2;k+)if(p->targetgrade-1k=0&&m<amount)cout<<k+1<<" "p->targetgrade-1k=1;q-
45、>sitsnumbergrade-1m=k+1;m+;cout<<endl; strcpy(q->name,name);strcpy(q->PlaneNumber,number);q->Ordernumber=amount;q->grade=grade;q->next=start->next;start->next=q;elsecout<<"你訂購的票數已經超過了這個等級的乘員定額!"<<endl;cout<<"您有以下選擇:"<<endl;cou
46、t<<"1.放棄訂票,返回系統首頁"<<endl<<"2.訂購剩余的票,不夠的排隊等候"<<endl;cout<<"請選擇:"<<endl; cin>>j;if(j!=1&&j!=2)cout<<"選擇錯誤,請重新選擇!"<<endl;cin>>j;elseswitch(j)case 1:break;case 2:WaitForMore(number,amount,grade,na
47、me,p);break;return;void WaitedReturn(char name)/等待的人退票int i,k=0,m=0;wait *s,*q,*a;airline *t;order *p,*r;r=(linklist *)malloc(sizeof(linklist);a=begin;q=begin->next;t=head->next; p=start->next;s=begin->next;while(s)if(!(strcmp(name,s->name)while(strcmp(t->PlaneNumber,s->PlaneNum
48、ber)t=t->next;for(i=0;i<s->OrderNumber;i+)t->targets->grade-1s->OrderedNumbers->grade-1i=0;cout<<"您退票已經成功!"<<endl;while(q)for(i=0;i<t->SitsNumberp->grade-1;i+)if(t->targetp->grade-1i=0)k+;if(q->WaitNumber<k)cout<<q->name<<
49、;"等候的用戶可以訂票了!"<<endl;cout<<q->name<<"用戶訂票的座位號為:"<<endl;for(i=0;i<t->SitsNumberp->grade-1;i+)if(t->targetp->grade-1i=0&&m<q->WaitNumber)cout<<i+1<<" "t->targetp->grade-1i=1;r->sitsnumberp->gr
50、ade-1m=k+1;m+; strcpy(r->name,q->name); strcpy(r->PlaneNumber,q->PlaneNumber); r->Ordernumber=q->WaitNumber; r->grade=q->grade; r->next=start->next; start->next=r;a->next=q->next;a=a->next;q=q->next;s=s->next;void UnwaitedReturn(char name)/沒有等待過的退票int
51、i,k=0,m=0;order *p,*s;s=(linklist *)malloc(sizeof(linklist);wait *q,*a;a=begin;q=begin->next;airline *t; p=start->next;t=head->next;while(p)if(!strcmp(name,p->name)while(strcmp(t->PlaneNumber,p->PlaneNumber)t=t->next;for(i=0;i<p->Ordernumber;i+)t->targetp->grade-1p-&
52、gt;sitsnumberp->grade-1i-1=0;cout<<"您退票成功!"<<endl;while(q)for(i=0;i<t->SitsNumberp->grade-1;i+)if(t->targetp->grade-1i=0)k+;if(q->WaitNumber<k)m=0;cout<<q->name<<"等候的用戶可以訂票了!"<<endl;cout<<q->name<<"用戶訂票的
53、座位號為:"<<endl;for(i=0;i<t->SitsNumberp->grade-1;i+)if(t->targetp->grade-1i=0&&m<q->WaitNumber)cout<<i+1<<" "t->targetp->grade-1i=1;s->sitsnumberp->grade-1m=k+1;m+; strcpy(s->name,q->name); strcpy(s->PlaneNumber,q->P
54、laneNumber); s->Ordernumber=q->WaitNumber; s->grade=q->grade; s->next=start->next; start->next=s;cout<<endl;a->next=q->next;a=a->next;q=q->next;p=p->next;return;void Returntickets()/退票函數int i;order *q;wait *p;q=start->next;p=begin->next;char name10;cou
55、t<<"請輸入你的姓名:"<<endl;cin>>name;while(q)if(q->next=NULL&&(strcmp(name,q->name)cout<<"對不起,你沒有定過票!"<<endl;return;cout<<"加入過排隊區的用戶退票請按1,沒有加入過的請按2"<<endl;cout<<"請選擇:"<<endl;cin>>i;switch(i)cas
56、e 1:WaitedReturn(name);return;case 2:UnwaitedReturn(name);return;int Menuselect()/菜單界面 int c; char s20; cout<<"*"<<endl;cout<<" 航空客運訂票系統 "<<endl; cout<<" 1.管理系統 "<<endl; cout<<" 2.查找航班信息 "<<endl; cout<<&quo
57、t; 3.辦理訂票業務 "<<endl; cout<<" 4.辦理退票業務 "<<endl;cout<<" 0.退出系統 "<<endl; cout<<"*"<<endl; doprintf("請選擇:"); scanf("%s",s); c=atoi(s); while(c<0|c>7); return c;void main()/start=air;ListInitiate();while(1)switch(Menuselect()case 1:Manage()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 核心素養視域下的數學大單元教學策略探究
- 高中地理問題式教學探究
- 5 守株待兔 教學設計-2024-2025學年語文三年級下冊統編版
- 2025年中國快易包護翼衛生巾設備數據監測研究報告
- 電氣工程師資格證書相關法規試題及答案
- 2025年中國彈性絨帶市場調查研究報告
- 企業級網絡安全防護的未來方向-基于區塊鏈技術的解決方案
- 2024年機械工程師考試物理基礎試題及答案
- 智能交通設備的前沿科技試題及答案
- 焊接不良現象的原因分析試題及答案
- 制造業本季度總結與下季度規劃
- 大健康加盟項目計劃書
- 幼兒園課程圖景課程實施方案編制指南
- 氣管狹窄患者的護理查房課件
- 大型客車驅動橋設計
- 鋼筋掛籃計算書
- 牛津譯林7A-Unit3、4單元復習
- 專題四“挺膺擔當”主題團課
- 扎鋼機控制系統的MCGS界面控制設計
- 國家義務教育質量監測初中美術試題
- 超聲波探傷作業指導書
評論
0/150
提交評論