數(shù)據(jù)結構課程設計航空客運訂票系統(tǒng)_第1頁
數(shù)據(jù)結構課程設計航空客運訂票系統(tǒng)_第2頁
數(shù)據(jù)結構課程設計航空客運訂票系統(tǒng)_第3頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數(shù)據(jù)結構課程設計報告設計題目航空客運訂票系統(tǒng)專業(yè)班級學號姓名電話完成日期2017.04.131. 問題描述 22. 系統(tǒng)設計23. 數(shù)據(jù)結構與算法描述44. 測試結果與分析 65. 總結106. 參考文獻 10附錄程序源代碼10課程設計題目1. 問題描述基于人們對航空客運使用需求的日益提高,為方便乘客提前買票及優(yōu)化飛機航空訂票服務,需要開發(fā)一個飛機訂票系統(tǒng),此程序是為實現(xiàn) 航班情況的查詢,訂票,退票以及客戶信息瀏覽與票務信息瀏覽等基本 功能。2. 系統(tǒng)設計2.1 設計目標(1)可以瀏覽航線信息;包括終點站名、航班號、飛機號、飛行日期、 乘員定額和余票量;(2)可以瀏覽已訂票客戶信息;包括客戶姓

2、名、訂票數(shù)額和艙位等級;(3)可以查詢航線;包括終點站名、航班號、飛機號、飛行日期、乘員 定額和余票量;(4)可以辦理訂票業(yè)務;需提供航班號、所需票數(shù)、客戶姓名和艙位等 級,生成客戶座位號;(5)可以辦理退票業(yè)務;提供航班號和客戶姓名,即可退票;(6)可以查看剩余票數(shù);(7)要求:根據(jù)以上功能說明,設計航班信息,訂票信息的存儲結構, 設計程序完成功能。2.2 設計思想(1)運行環(huán)境(軟硬件環(huán)境): DEV-C+;(2)輸入的形式和輸入值的范圍: 由航空公司輸入航線情況并以單鏈表 的形式存儲在內存里面;(3)輸出的形式描述:通過客戶的輸入,輸出相應內容;(4)功能描述:用戶可通過本系統(tǒng)實現(xiàn)對航班

3、的查詢、 訂票和退票功能2.3系統(tǒng)模塊劃分航空客運訂票系給圖總體結構設計框圖4主函數(shù)輸出菜單界面。輸入指令,顯示,敲擊回車開始工作。瀏覽航線信息編寫void list()函數(shù)實現(xiàn)打印全部航線信息的功能,調用voiddisplay。函數(shù)實現(xiàn)打印struct airli ne鏈表中存儲的航線的基本信息的功能。瀏覽已訂票客戶信息編寫void prtlink()函數(shù)實現(xiàn)打印訂票乘員名單域的客戶名單信息的功能,調用find ()函數(shù)查詢并以指針形式返回。查詢航線編寫void search()函數(shù)實現(xiàn)根據(jù)客戶提出的終點站名輸出航線信息的 功能。用戶輸入終點站名,該函數(shù)會在航線信息鏈表中進行查詢,并輸 出該

4、航線信息或提示未找到該航線。辦理訂票業(yè)務編寫void order()函數(shù)實現(xiàn)辦理訂票業(yè)務的功能。根據(jù)客戶提供的航班 號,調用find ()函數(shù)進行查詢,如為空,退出該模塊;輸入客戶訂票 額,若客戶訂票額末超過余票量, 訂票成功,調用 linklist *insertlink() 在訂票乘員名單域中添加客戶信息,并在該航線的余票量中減掉該客戶 的訂票量,然后依次輸出該訂票客戶的座位號;客戶訂票額超過余票量 總額或滿員, 詢問客戶是否需要進行排隊等候; 若等候, 調用 linkqueue appendqueue() 在排隊等候乘員名單域中添加客戶信息;否則退出。辦理退票業(yè)務編寫 void retu

5、rn_tkt() 函數(shù)實現(xiàn)辦理退票業(yè)務的功能。根據(jù)客戶提供 的航班號,調用 find ()函數(shù)進行查詢,根據(jù)客戶提供的姓名到訂票客 戶名單域進行查詢,若未找到,退出本模塊;若信息查詢成功,在訂票 乘員名單域中刪除客戶信息,并在該航線的余票量中增加該客戶的訂票 量。檢查排隊等候乘員名單域,找出滿足當前條件的排隊候補名單域, 插入到訂票客戶名單鏈表中。循環(huán)該步驟直到無滿足當前條件的排隊候 補名單域,退出。查看剩余票數(shù)編寫 void list() 函數(shù)實現(xiàn)打印全部航 線信息 的功能 ,調用 void display() 函數(shù)實現(xiàn)打印每條航線的基本信息的功能。3. 數(shù)據(jù)結構與算法描述(1) 下述單鏈表

6、用來存儲乘員信息, 包括客戶姓名、 訂票量、艙位等級。 typedef struct ord_ros char name10;/* 客戶姓名 */in t ord_amt;/* 訂票量 */int grade;/*艙位等級 */struct ord_ros *next;linklist;(2) 下述單鏈隊列用來存儲等候替補客戶信息, 通過隊列先進先出的特 點,使先排隊的客戶先訂票成功。typedef struct wat_ros /*單鏈隊列存儲等候替補客戶信息 */ char name10;/* 姓名 */int req_amt;/* 訂票量 */struct wat_ros *next;q

7、node,*qptr;typedef struct pqueue qptr front;/* 等候替補客戶名單域的頭指針 */qptr rear;/*等候替補客戶名單域的屬指針*/linkqueue;(3)下述結構體存儲了航班信息,終點站名、航班號、飛機號、飛行日 期、乘員定額和余票量。struct airline char ter_name10;/* 終點站名 */char air_num10;/* 航班號 */char pla ne_num10;/* 飛機號 */char date7;/*飛行日期(星期幾)*/int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量

8、*/linklist *order;/* 乘員名單域,指向乘員名單鏈表的頭指針 */linkqueue wait;/*等候替補的客戶名單域,分別指向排隊等候名單隊頭隊 尾的指針 */ line;( 5)( 4)通過修改全局變量 MAXSIZE 的數(shù)值即可改變航線數(shù)目,在 struct airline airMAXSIZE 中可修改、增加、刪除航線信息。struct airline *head; /*初始化航班信息 */struct airline airMAXSIZE=BJS,1,MU5694,JUN1st,50,50,BJS,2,MU5694,JUN2 nd,50,50,SHA,3,MU53

9、90,JUN1st,50,50,SHA,4,MU5390,JUN2 nd,50,50,CAN,5,CZ3364,JUN1st,50,50,CAN,6,CZ3364,JUN2 nd,50,50;4. 測試結果與分析(可將測試過程抓圖說明)4.1進入航空客運訂票系統(tǒng)4.2瀏覽航線信息(輸入指令“ 1”JUNlst JUNlstJUNlst航班號飛機號飛行日期1 HU5942 MU53903 CZ3364航空客運訂票系統(tǒng)余票量乘員罡頹33C:Use磯悌Deskto p戲空客運訂票系宛exe亞泄票 理理看岀 辦擊一連 4 5 6 0信戶息客務窘 信票業(yè)業(yè)票 線氏票亜荼統(tǒng) 航已航舀禦 一理理看岀 嚼聲歷

10、-I1.M 12 3 4 5 6 04.3瀏覽已訂票客戶信息(輸入指令“ 2”)C:U se Deskto p 空客統(tǒng).exe息信心客務盍 昌票業(yè)業(yè)票 .易票亜審 已航理理看出注也入腹班號:丄&姓蠱訂票數(shù)額艙位等級 余桐11航空客運訂票系統(tǒng)息信戶息客務書 信票業(yè)業(yè)票 線氏票亜荼統(tǒng) 航已航棗型 6理理看岀 謝查辦舉一退12 3 4 5 6 04.4查詢航線(輸入指令“ 3” ,并根據(jù)提示進行相應操作)航空客運訂票系統(tǒng)乘員定額灌鐺點站名蹩班號飛機號飛亍日期HJSt riUEt?4 JUNl&t余票量4C:Use磯悌Deskto p戲空客運訂票系宛exe2 3 4 5 6 0務書 業(yè)業(yè)票 票亜奈統(tǒng)

11、蔦理理看出 瀏查辦辦督_退容票.S信戶息客務窘 信票業(yè)業(yè)票 線氏票亜荼統(tǒng) 航已航舀禦 一理理看岀 嚼聲歷-I1.M12 3 4 5 6 04.5辦理訂票業(yè)務(輸入指令“ 4” ,并根據(jù)提示進行相應操作)C:U se rsfl Deskto p W 空客統(tǒng).exe:1!胃:1的票整寸1 sllgnl 疋 口 Imt姓票呂航空客運訂票系統(tǒng):4tl 擇入入入入的 請請請隹冃青余信戶 息客務書 信票業(yè)業(yè)票 線g_w荼統(tǒng) 航已航棗型 6理理看岀 謝查辦舉一退 12 3 4 5 6 04.6辦理退票業(yè)務(輸入指令“ 5” ,并根據(jù)提示進行相應操作)C:Use磯悌Deskto p戲空客運訂票系宛exe息信戶

12、息客務畬 =黨業(yè)業(yè)票 ,sw_i 己航戀啊亍理理看出(退票客戶)航空客運訂票系統(tǒng)12 3 4 5 6 0汚擇入入成 an 請請青余” IK、1P、一 r信戶 息客務窘 信票業(yè)業(yè)票 線氏票蕖統(tǒng) 航已航舀禦 一理理看岀 嚼聲歷-I1.I 12 3 4 5 6 04.7查看剩余票數(shù)(輸入指令“ 6”C:Use rsX Deskto p頓空客運訂票系宛exe123456R1航空客運訂票系統(tǒng)JUNlstJUNlstJUNlst刪壬號 飛機號 飛行日期MU5390CZ33&4MU5&94乘員定額333 428356口督番柔統(tǒng)- 航!一 IHI理理看岀“ 查辦犁一退一 K * - 二 3 4 5 6 0SH

13、A CANBJS息信戶息客務書 信票業(yè)業(yè)票 線氏票亜荼統(tǒng) 航已航棗型 6理理看岀 渤查辦舉退4.8退出系統(tǒng)(輸入指令“ 0”)5. 總 結通過此次的課程設計, 將課本上所學習的有關內容應用到實踐當中。 在調試程序時,首先對整個程序流程有全面的認識,調試過程中需要細 心、耐心,在修改時要有耐心,編譯出錯后必須逐個錯誤去改正。通過此次課程設計,我感覺到自己在編寫比較大的程序時,還是缺 乏思路,對程序的整體構架不是很清晰明了,這是我需要攻克的一大難 點!編程的過程就是不斷學習和掌握的過程,也是對自己學習掌握程度 的一個檢驗過程。6. 參考文獻 (包括書籍、論文、網(wǎng)絡資料等)1 劉振安等.C+程序設計

14、課程設計北京:機械工業(yè)出版社,2004.12.2 蘇仕華 魏韋巍等 數(shù)據(jù)結構課程設計 . 北京:機械工業(yè)出版社,2010.3.3 嚴蔚敏 吳偉民 數(shù)據(jù)結構(C語言版)北京:清華大學出版社,2016.7.附錄 程序源代碼#include #include #include #include /getch#define MAXSIZE 6 / 定義航線量的最大值 */#define AMOUNT 50/* 定義每條航班的總座位數(shù) */typedef struct wat_ros /* 單鏈隊列存儲等候替補客戶信息 */第10頁char name10;/* 姓名 */int req_amt;/* 訂

15、票量 */struct wat_ros *next;qnode,*qptr;typedef struct pqueueqptr front;/* 等候替補客戶名單域的頭指針 */qptr rear;/* 等候替補客戶名單域的屬指針 */linkqueue;typedef struct ord_roschar name10;/* 客戶姓名 */int ord_amt;/* 訂票量 */int grade;/* 艙位等級 */struct ord_ros *next;linklist;struct airlinechar ter_name10;/* 終點站名 */char air_num10;/*

16、 航班號 */char plane_num10;/* 飛機號 */char date7;/* 飛行日期(星期幾) */int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量 */linklist *order;/* 乘員名單域,指向乘員名單鏈表的頭指針 */linkqueue wait;/* 等候替補的客戶名單域, 分別指向排隊等候名單隊頭隊尾的指 針*/第11頁line;struct airline *head; /* 初始化航班信息 */struct airline airMAXSIZE=BJS,1,MU5694,JUN1st,50,50,BJS,2,MU5694

17、,JUN2nd,50,50,SHA,3,MU5390,JUN1st,50,50,SHA,4,MU5390,JUN2nd,50,50,CAN,5,CZ3364,JUN1st,50,50,CAN,6,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

18、 *a;int i=0;a=head;printf( 終點站名 t 航班號 t 飛機號 t 飛行日期 t 乘員定額 t 余票量 n);while(iMAXSIZE)display(a); /* 調用 dispiay 函數(shù)來輸出 */a+;第12頁i+; printf(nn);void search()/* 根據(jù)客戶提出的終點站名輸出航線信息 */struct airline *a,*find();char name10;int i=0;a=head;printf( 請輸入終點站名 :); scanf(%s,name);while(iter_name) break; a+; i+; if(i=M

19、AXSIZE)printf( 對不起,該航線未找到 !n);elseprintf( 終點站名 t 航班號 t 飛機號 t 飛行日期 t 乘員定額 t 余票量 n); display(a);struct airline *find()/* 根據(jù)系統(tǒng)提出的航班號查詢并以指針形式返回 */ struct airline *a;/* 在航線信息鏈表中進行查詢 */第13頁char number10;int i=0;a=head;printf( 請輸入航班號 :); scanf(%s,number);while(iair_num)return a;a+;i+;printf( 對不起,該航線末找到 !n)

20、;return NULL;void prtlink()/* 打印訂票乘員名單域的客戶名單信息 */linklist *p;struct airline *a;a=find();p=a-order;if(p!=NULL)printf( 客戶姓名 訂票數(shù)額 艙位等級 n);while(p) printf(%stt%dt%dn,p-name,p-ord_amt,p-grade); p=p-next;第14頁elseprintf( 該航線沒有客戶信息 !n);增加訂票乘員名linklist *insertlink(linklist *head,int amount,char name,int grad

21、e) /* 單域的客戶信息 */linklist *p1,*new1;p1=head;new1=(linklist *)malloc(sizeof(linklist);if(!new1) printf(nOut of memory!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;elsehead=new1; new1-next=p1; return head;

22、第15頁 linkqueue appendqueue(linkqueue q,char name,int amount)/* 增加排隊等候的客戶名 單域 */qptr new1; new1=(qptr)malloc(sizeof(qnode);strcpy(new1-name,name); new1-req_amt=amount;new1-next=NULL;if(q.front=NULL)/* 若原排隊等候客戶名單域為空 */q.front=new1;elseq.rear-next=new1;q.rear=new1;return q;void order()/* 辦理訂票業(yè)務 */struc

23、t airline *a;int amount,grade;char name10;a=head;if(!(a=find()return;/* 根據(jù)客戶提供的航班號進行查詢,如為空,退出該模塊 */ printf( 請輸入你訂票所需要的數(shù)量 :);scanf(%d,&amount);if(amounta-tkt_amt)/* 若客戶訂票額超過余票量總額,退出 */ printf(n 對不起,您輸入的票的數(shù)量已經(jīng)超過乘員定額 !);return;第16頁if(amounttkt_sur)/* 若客戶訂票額末超過余票量, 訂票成功并等記信息 */ int i;printf( 請輸入您的姓名(訂票客

24、戶) :);scanf(%s,name);printf( 請輸入 %s 票的艙位等級 :,name);scanf(%d,&grade);a-order=insertlink(a-order,amount,name,grade);/* 在訂票乘員名單域中添 加客戶信息 */a-tkt_sur-=amount;/* 該航線的余票量應減掉該客戶的訂票量 */ for(i=amount;i0;i-)/* 依次輸出該訂票客戶的座位號 */ printf(%s 的座位號是 :%dn,name,AMOUNT-a-tkt_sur-i+1); printf(n 祝您乘坐愉快! n);else /*若滿員或余票額

25、少于訂票額,詢問客戶是否需要進行排隊等候*/ char r;printf(n 已經(jīng)沒有更多的票,您需要排隊等候嗎 ?(Y/N);r=getch();/ 用來讀取 r 字符,不顯示printf(%c,r);if(r=Y|r=y)printf(n 請輸入您的姓名(排隊訂票客戶) :);scanf(%s,name);a-wait=appendqueue(a-wait,name,amount);/* 在排隊等候乘員名單域 中添加客戶信息 */printf(n 注冊成功 !n);else printf(n 歡迎您下次再次訂購! n);第17頁 void return_tkt()/* 退票模塊 */str

26、uct airline *a;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname10;if(!(a=find()return;/* 調用查詢函數(shù),根據(jù)客戶提供的航線進行搜索 */ head=a-order;p1=head;printf( 請輸入你的姓名(退票客戶) :);scanf(%s,cusname);while(p1!=NULL)/* 根據(jù)客戶提供的姓名到訂票客戶名單域進行查詢 */ if(!strcmp(cusname,p1-name)break;p2=p1;p1=p1-next;if(p1=NULL)p

27、rintf( 對不起,你沒有訂過票 !n);return;/* 若未找到,退出本模塊 */else/* 若信息查詢成功,刪除訂票客戶名單域中的信息*/if(p1=head)head=p1-next;第18頁 elsep2-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 指向排隊等候名單隊列的頭結點 */ r=(a-wait).rear;/*r 指向排隊等

28、候名單隊列的尾結點 */ t=f;/*t 為當前滿點條件的排隊候補名單域 */while(t)if(a-tkt_sur=a-wait.front-req_amt)/* 若滿足條件者為頭結點 */int i;a-wait.front=t-next;printf(%s 訂票成功! n,t-name);for(i=0;ireq_amt;i+)/* 輸出座位號 */printf(%s 的座位號是 :%dn,t-name,(a-tkt_sur)-i); a-tkt_sur-=t-req_amt;a-order=insertlink(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)/* 若滿足條件者不為頭結點 */第19頁 int i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論