數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 航空客運(yùn)訂票系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 航空客運(yùn)訂票系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 航空客運(yùn)訂票系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 航空客運(yùn)訂票系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 航空客運(yùn)訂票系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論