




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目 航空客運(yùn)訂票系統(tǒng) 專業(yè)班級 學(xué) 號 姓 名 電 話 完成日期 2017.04.13 目 錄1. 問題描述22. 系統(tǒng)設(shè)計(jì)23. 數(shù)據(jù)結(jié)構(gòu)與算法描述44. 測試結(jié)果與分析65. 總 結(jié)106. 參考文獻(xiàn)10附錄 程序源代碼10課程設(shè)計(jì)題目1. 問題描述基于人們對航空客運(yùn)使用需求的日益提高,為方便乘客提前買票及優(yōu)化飛機(jī)航空訂票服務(wù),需要開發(fā)一個(gè)飛機(jī)訂票系統(tǒng),此程序是為實(shí)現(xiàn)航班情況的查詢,訂票,退票以及客戶信息瀏覽與票務(wù)信息瀏覽等基本功能。2. 系統(tǒng)設(shè)計(jì)2.1 設(shè)計(jì)目標(biāo)(1)可以瀏覽航線信息;包括終點(diǎn)站名、航班號、飛機(jī)號、飛行日期、乘員定額和余票量; (2)可
2、以瀏覽已訂票客戶信息;包括客戶姓名、訂票數(shù)額和艙位等級;(3)可以查詢航線;包括終點(diǎn)站名、航班號、飛機(jī)號、飛行日期、乘員定額和余票量; (4)可以辦理訂票業(yè)務(wù);需提供航班號、所需票數(shù)、客戶姓名和艙位等級,生成客戶座位號; (5)可以辦理退票業(yè)務(wù);提供航班號和客戶姓名,即可退票; (6)可以查看剩余票數(shù);(7)要求:根據(jù)以上功能說明,設(shè)計(jì)航班信息,訂票信息的存儲結(jié)構(gòu),設(shè)計(jì)程序完成功能。2.2 設(shè)計(jì)思想(1) 運(yùn)行環(huán)境(軟硬件環(huán)境):DEV-C+;(2) 輸入的形式和輸入值的范圍:由航空公司輸入航線情況并以單鏈表的形式存儲在內(nèi)存里面; (3) 輸出的形式描述:通過客戶
3、的輸入,輸出相應(yīng)內(nèi)容;(4) 功能描述:用戶可通過本系統(tǒng)實(shí)現(xiàn)對航班的查詢、訂票和退票功能。2.3 系統(tǒng)模塊劃分2.3.1主函數(shù)輸出菜單界面。輸入指令,顯示,敲擊回車開始工作。2.3.2瀏覽航線信息編寫void list()函數(shù)實(shí)現(xiàn)打印全部航線信息的功能,調(diào)用void display()函數(shù)實(shí)現(xiàn)打印struct airline鏈表中存儲的航線的基本信息的功能。2.3.2瀏覽已訂票客戶信息編寫void prtlink()函數(shù)實(shí)現(xiàn)打印訂票乘員名單域的客戶名單信息的功能,調(diào)用find()函數(shù)查詢并以指針形式返回。2.3.3查詢航線編寫void search()函數(shù)實(shí)現(xiàn)根據(jù)客戶提出的終點(diǎn)站名輸出航線信息
4、的功能。用戶輸入終點(diǎn)站名,該函數(shù)會在航線信息鏈表中進(jìn)行查詢,并輸出該航線信息或提示未找到該航線。2.3.4辦理訂票業(yè)務(wù)編寫void order()函數(shù)實(shí)現(xiàn)辦理訂票業(yè)務(wù)的功能。根據(jù)客戶提供的航班號,調(diào)用find()函數(shù)進(jìn)行查詢,如為空,退出該模塊;輸入客戶訂票額,若客戶訂票額末超過余票量,訂票成功,調(diào)用linklist *insertlink()在訂票乘員名單域中添加客戶信息,并在該航線的余票量中減掉該客戶的訂票量,然后依次輸出該訂票客戶的座位號;客戶訂票額超過余票量總額或滿員,詢問客戶是否需要進(jìn)行排隊(duì)等候;若等候,調(diào)用linkqueue appendqueue()在排隊(duì)等候乘員名單域中添加客戶
5、信息;否則退出。2.3.5辦理退票業(yè)務(wù)編寫void return_tkt()函數(shù)實(shí)現(xiàn)辦理退票業(yè)務(wù)的功能。根據(jù)客戶提供的航班號,調(diào)用find()函數(shù)進(jìn)行查詢,根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢,若未找到,退出本模塊;若信息查詢成功,在訂票乘員名單域中刪除客戶信息,并在該航線的余票量中增加該客戶的訂票量。檢查排隊(duì)等候乘員名單域,找出滿足當(dāng)前條件的排隊(duì)候補(bǔ)名單域,插入到訂票客戶名單鏈表中。循環(huán)該步驟直到無滿足當(dāng)前條件的排隊(duì)候補(bǔ)名單域,退出。2.3.6查看剩余票數(shù)編寫void list()函數(shù)實(shí)現(xiàn)打印全部航線信息的功能,調(diào)用void display()函數(shù)實(shí)現(xiàn)打印每條航線的基本信息的功能。 3
6、. 數(shù)據(jù)結(jié)構(gòu)與算法描述(1)下述單鏈表用來存儲乘員信息,包括客戶姓名、訂票量、艙位等級。typedef struct ord_ros char name10;/*客戶姓名*/int ord_amt;/*訂票量*/int grade;/*艙位等級*/struct ord_ros *next;linklist;(2)下述單鏈隊(duì)列用來存儲等候替補(bǔ)客戶信息,通過隊(duì)列先進(jìn)先出的特點(diǎn),使先排隊(duì)的客戶先訂票成功。typedef struct wat_ros /*單鏈隊(duì)列存儲等候替補(bǔ)客戶信息*/ char name10;/*姓名*/int req_amt;/*訂票量*/struct wat_ros *next
7、;qnode,*qptr;typedef struct pqueue qptr front;/*等候替補(bǔ)客戶名單域的頭指針*/qptr rear;/*等候替補(bǔ)客戶名單域的屬指針*/linkqueue;(3)下述結(jié)構(gòu)體存儲了航班信息,終點(diǎn)站名、航班號、飛機(jī)號、飛行日期、乘員定額和余票量。struct airline char ter_name10;/*終點(diǎn)站名 */char air_num10;/*航班號*/char plane_num10;/*飛機(jī)號*/char date7;/*飛行日期(星期幾)*/int tkt_amt;/*乘員定額*/int tkt_sur;/*余票量*/linklist
8、 *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueue wait;/*等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/ line;(5) (4)通過修改全局變量MAXSIZE的數(shù)值即可改變航線數(shù)目,在struct airline airMAXSIZE中可修改、增加、刪除航線信息。struct airline *head; /*初始化航班信息*/struct airline airMAXSIZE= "BJS","1","MU5694","JUN1st",50,50, "B
9、JS","2","MU5694","JUN2nd",50,50, "SHA","3","MU5390","JUN1st",50,50, "SHA","4","MU5390","JUN2nd",50,50, "CAN","5","CZ3364","JUN1st",50,50,"CA
10、N","6","CZ3364","JUN2nd",50,50;4. 測試結(jié)果與分析(可將測試過程抓圖說明)4.1進(jìn)入航空客運(yùn)訂票系統(tǒng)4.2瀏覽航線信息(輸入指令“1”)4.3瀏覽已訂票客戶信息(輸入指令“2”)4.4查詢航線(輸入指令“3” ,并根據(jù)提示進(jìn)行相應(yīng)操作)4.5辦理訂票業(yè)務(wù)(輸入指令“4” ,并根據(jù)提示進(jìn)行相應(yīng)操作)4.6辦理退票業(yè)務(wù)(輸入指令“5” ,并根據(jù)提示進(jìn)行相應(yīng)操作)4.7查看剩余票數(shù)(輸入指令“6”)4.8退出系統(tǒng)(輸入指令“0”)5. 總 結(jié)通過此次的課程設(shè)計(jì),將課本上所學(xué)習(xí)的有關(guān)內(nèi)容應(yīng)用到實(shí)踐當(dāng)中
11、。在調(diào)試程序時(shí),首先對整個(gè)程序流程有全面的認(rèn)識,調(diào)試過程中需要細(xì)心、耐心,在修改時(shí)要有耐心,編譯出錯后必須逐個(gè)錯誤去改正。通過此次課程設(shè)計(jì),我感覺到自己在編寫比較大的程序時(shí),還是缺乏思路,對程序的整體構(gòu)架不是很清晰明了,這是我需要攻克的一大難點(diǎn)!編程的過程就是不斷學(xué)習(xí)和掌握的過程,也是對自己學(xué)習(xí)掌握程度的一個(gè)檢驗(yàn)過程。6. 參考文獻(xiàn) (包括書籍、論文、網(wǎng)絡(luò)資料等)1 劉振安等.C+程序設(shè)計(jì)課程設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2004.12. 2 蘇仕華 魏韋巍等 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2010.3.3 嚴(yán)蔚敏 吳偉民 數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社,2016.7.附錄
12、 程序源代碼#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>/getch #define MAXSIZE 6 /定義航線量的最大值*/#define AMOUNT 50/*定義每條航班的總座位數(shù)*/typedef struct wat_ros /*單鏈隊(duì)列存儲等候替補(bǔ)客戶信息*/ char name10;/*姓名*/ int req_amt;/*訂票量*/ struct wat_ros *next;qnode,*qptr;typedef struc
13、t pqueue qptr front;/*等候替補(bǔ)客戶名單域的頭指針*/ qptr rear;/*等候替補(bǔ)客戶名單域的屬指針*/linkqueue;typedef struct ord_ros char name10;/*客戶姓名*/ int ord_amt;/*訂票量*/ int grade;/*艙位等級*/ struct ord_ros *next;linklist;struct airline char ter_name10;/*終點(diǎn)站名 */ char air_num10;/*航班號*/ char plane_num10;/*飛機(jī)號*/ char date7;/*飛行日期(星期幾)*
14、/ int tkt_amt;/*乘員定額*/ int tkt_sur;/*余票量*/ linklist *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/ linkqueue wait;/*等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/line;struct airline *head; /*初始化航班信息*/struct airline airMAXSIZE= "BJS","1","MU5694","JUN1st",50,50, "BJS","2",&
15、quot;MU5694","JUN2nd",50,50, "SHA","3","MU5390","JUN1st",50,50, "SHA","4","MU5390","JUN2nd",50,50, "CAN","5","CZ3364","JUN1st",50,50,"CAN","6",&q
16、uot;CZ3364","JUN2nd",50,50;void display(struct airline *a)/*打印每條航線的基本信息*/ printf("%8st%3st%st%4stt%3dt%10dn",a->ter_name,a->air_num,a->plane_num,a->date,a->tkt_amt,a->tkt_sur);void list()/*打印全部航線信息*/ struct airline *a; int i=0; a=head; printf("終點(diǎn)站名t航班號
17、t飛機(jī)號t飛行日期t乘員定額t余票量n");while(i<MAXSIZE) display(a); /*調(diào)用dispiay函數(shù)來輸出*/ a+; i+; printf("nn");void search()/*根據(jù)客戶提出的終點(diǎn)站名輸出航線信息*/ struct airline *a,*find(); char name10; int i=0; a=head; printf("請輸入終點(diǎn)站名:"); scanf("%s",name); while(i<MAXSIZE) if(!strcmp(name,a->
18、;ter_name) break; a+; i+; if(i>=MAXSIZE) printf("對不起,該航線未找到!n"); else printf("終點(diǎn)站名t航班號t飛機(jī)號t飛行日期t乘員定額t余票量n"); display(a); struct airline *find()/*根據(jù)系統(tǒng)提出的航班號查詢并以指針形式返回*/ struct airline *a;/*在航線信息鏈表中進(jìn)行查詢*/ char number10; int i=0; a=head; printf("請輸入航班號:"); scanf("%
19、s",number); while(i<MAXSIZE) if(!strcmp(number,a->air_num) return a; a+; i+; printf("對不起,該航線末找到!n"); return NULL;void prtlink()/*打印訂票乘員名單域的客戶名單信息*/ linklist *p; struct airline *a; a=find(); p=a->order; if(p!=NULL) printf("客戶姓名 訂票數(shù)額 艙位等級n"); while(p) printf("%st
20、t%dt%dn",p->name,p->ord_amt,p->grade); p=p->next; else printf("該航線沒有客戶信息!n");linklist *insertlink(linklist *head,int amount,char name,int grade) /*增加訂票乘員名單域的客戶信息*/ linklist *p1,*new1; p1=head; new1=(linklist *)malloc(sizeof(linklist); if(!new1) printf("nOut of memory!
21、n");return NULL; strcpy(new1->name,name); new1->ord_amt=amount; new1->grade=grade; new1->next=NULL; if(head=NULL)/*若原無訂票客戶信息*/ head=new1; new1->next=NULL; else head=new1; new1->next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount)/*增加排隊(duì)等候的客戶名單域*/ qptr ne
22、w1; new1=(qptr)malloc(sizeof(qnode); strcpy(new1->name,name); new1->req_amt=amount; new1->next=NULL; if(q.front=NULL)/*若原排隊(duì)等候客戶名單域?yàn)榭?/ q.front=new1; else q.rear->next=new1; q.rear=new1; return q;void order()/*辦理訂票業(yè)務(wù)*/ struct airline *a; int amount,grade; char name10; a=head; if(!(a=find(
23、) return;/*根據(jù)客戶提供的航班號進(jìn)行查詢,如為空,退出該模塊*/ printf("請輸入你訂票所需要的數(shù)量:"); scanf("%d",&amount); if(amount>a->tkt_amt)/*若客戶訂票額超過余票量總額,退出*/ printf("n對不起,您輸入的票的數(shù)量已經(jīng)超過乘員定額!"); return; if(amount<=a->tkt_sur)/*若客戶訂票額末超過余票量,訂票成功并等記信息*/ int i; printf("請輸入您的姓名(訂票客戶):&qu
24、ot;); scanf("%s",name); printf("請輸入%s票的艙位等級:",name); scanf("%d",&grade); a->order=insertlink(a->order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/ a->tkt_sur-=amount;/*該航線的余票量應(yīng)減掉該客戶的訂票量*/ for(i=amount;i>0;i-)/*依次輸出該訂票客戶的座位號*/ printf("%s的座位號是:%dn",nam
25、e,AMOUNT-a->tkt_sur-i+1); printf("n祝您乘坐愉快!n"); else /*若滿員或余票額少于訂票額,詢問客戶是否需要進(jìn)行排隊(duì)等候*/ char r; printf("n已經(jīng)沒有更多的票,您需要排隊(duì)等候嗎?(Y/N)"); r=getch();/用來讀取r字符,不顯示 printf("%c",r); if(r='Y'|r='y') printf("n請輸入您的姓名(排隊(duì)訂票客戶):"); scanf("%s",name); a
26、->wait=appendqueue(a->wait,name,amount);/*在排隊(duì)等候乘員名單域中添加客戶信息*/ printf("n注冊成功!n"); else printf("n歡迎您下次再次訂購!n"); void return_tkt()/*退票模塊*/ struct airline *a; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(a=find() return;/*調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索*/
27、head=a->order; p1=head; printf("請輸入你的姓名(退票客戶):"); scanf("%s",cusname); while(p1!=NULL)/*根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢*/ if(!strcmp(cusname,p1->name) break; p2=p1;p1=p1->next; if(p1=NULL) printf("對不起,你沒有訂過票!n");return;/*若未找到,退出本模塊*/ else/*若信息查詢成功,刪除訂票客戶名單域中的信息*/ if(p1=h
28、ead) head=p1->next; else p2->next=p1->next; a->tkt_sur+=p1->ord_amt; grade=p1->grade; printf("%s成功退票!n",p1->name); free(p1); a->order=head;/*重新將航線名單域指向訂票單鏈表的頭指針 */ f=(a->wait).front;/*f指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn)*/ r=(a->wait).rear;/*r指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)*/ t=f;/*t為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單
29、域*/ while(t) if(a->tkt_sur>=a->wait.front->req_amt)/*若滿足條件者為頭結(jié)點(diǎn)*/ int i; a->wait.front=t->next; printf("%s訂票成功!n",t->name); for(i=0;i<t->req_amt;i+)/*輸出座位號*/ printf("%s的座位號是:%dn",t->name,(a->tkt_sur)-i); a->tkt_sur-=t->req_amt; a->order=i
30、nsertlink(a->order,t->req_amt,t->name,grade);/*插入到訂票客戶名單鏈表中*/ free(t); break; back=t;t=t->next; if(a->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若滿足條件者不為頭結(jié)點(diǎn)*/ int i; back->next=t->next; printf("%s訂票成功!n",t->name); for(i=0;i<t->req_amt;i+)/*輸出座位號*/ printf("<%s>'s seat number is:%dn",t->name,(a->tkt_sur)-i); a->tkt_sur-=t->req_amt; a->order=insertlink(a->order,t->req_amt,t->name,grad
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東肇慶市中考數(shù)學(xué)試卷
- 國慶高二數(shù)學(xué)試卷
- 廣東學(xué)導(dǎo)練數(shù)學(xué)試卷
- 黃岡蘇教版數(shù)學(xué)試卷
- 2025年合同終止勞動合同補(bǔ)償標(biāo)準(zhǔn)
- 濟(jì)南初三期末數(shù)學(xué)試卷
- 土壤污染修復(fù)技術(shù)在城市土壤污染治理中的應(yīng)用效果研究報(bào)告
- 2025物流配送勞動合同范本
- 快消品行業(yè)2025年包裝可持續(xù)發(fā)展戰(zhàn)略研究報(bào)告
- 河南期末調(diào)研數(shù)學(xué)試卷
- 2015年版干部履歷表
- 變速箱廠總平面布置設(shè)計(jì)設(shè)施規(guī)劃與物流分析課程設(shè)計(jì)
- NB/T 10756-2021煤礦在用無軌膠輪車安全檢測檢驗(yàn)規(guī)范
- GB/T 31586.2-2015防護(hù)涂料體系對鋼結(jié)構(gòu)的防腐蝕保護(hù)涂層附著力/內(nèi)聚力(破壞強(qiáng)度)的評定和驗(yàn)收準(zhǔn)則第2部分:劃格試驗(yàn)和劃叉試驗(yàn)
- 2023年上海高考生物真題試卷(答案解析版)
- 臨床各科急救流程規(guī)范規(guī)范圖
- 交安工程勞務(wù)分包參考價(jià)格(范本)
- 2022年專業(yè)技術(shù)人員繼續(xù)教育公需課題庫(含答案)
- GB∕T 13554-2020 高效空氣過濾器
- (新版)孤殘兒童試題庫(含答案)
- 普通生物學(xué)說課(張艷麗)
評論
0/150
提交評論