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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告設(shè)計題目航空客運(yùn)訂票系統(tǒng)專業(yè)班級學(xué)號姓名電話完成日期2017.04.131. 問題描述 22. 系統(tǒng)設(shè)計23. 數(shù)據(jù)結(jié)構(gòu)與算法描述44. 測試結(jié)果與分析 65. 總結(jié)106. 參考文獻(xiàn) 10附錄程序源代碼10課程設(shè)計題目1. 問題描述基于人們對航空客運(yùn)使用需求的日益提高,為方便乘客提前買票及優(yōu)化飛機(jī)航空訂票服務(wù),需要開發(fā)一個飛機(jī)訂票系統(tǒng),此程序是為實現(xiàn) 航班情況的查詢,訂票,退票以及客戶信息瀏覽與票務(wù)信息瀏覽等基本 功能。2. 系統(tǒng)設(shè)計2.1 設(shè)計目標(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è)計航班信息,訂票信息的存儲結(jié)構(gòu), 設(shè)計程序完成功能。2.2 設(shè)計思想(1)運(yùn)行環(huán)境(軟硬件環(huán)境): DEV-C+;(2)輸入的形式和輸入值的范圍: 由航空公司輸入航線情況并以單鏈表 的形式存儲在內(nèi)存里面;(3)輸出的形式描述:通過客戶的輸入,輸出相應(yīng)內(nèi)容;(4)功能描述:用戶可通過本系統(tǒng)實現(xiàn)對航班

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

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

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

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

7、node,*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 pla ne_num10;/* 飛機(jī)號 */char date7;/*飛行日期(星期幾)*/int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量

8、*/linklist *order;/* 乘員名單域,指向乘員名單鏈表的頭指針 */linkqueue wait;/*等候替補(bǔ)的客戶名單域,分別指向排隊等候名單隊頭隊 尾的指針 */ 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. 測試結(jié)果與分析(可將測試過程抓圖說明)4.1進(jìn)入航空客運(yùn)訂票系統(tǒng)4.2瀏覽航線信息(輸入指令“ 1”JUNlst JUNlstJUNlst航班號飛機(jī)號飛行日期1 HU5942 MU53903 CZ3364航空客運(yùn)訂票系統(tǒng)余票量乘員罡頹33C:Use磯悌Deskto p戲空客運(yùn)訂票系宛exe亞泄票 理理看岀 辦擊一連 4 5 6 0信戶息客務(wù)窘 信票業(yè)業(yè)票 線氏票亜荼統(tǒng) 航已航舀禦 一理理看岀 嚼聲歷

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

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

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

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

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

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

16、 航班號 */char plane_num10;/* 飛機(jī)號 */char date7;/* 飛行日期(星期幾) */int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量 */linklist *order;/* 乘員名單域,指向乘員名單鏈表的頭指針 */linkqueue wait;/* 等候替補(bǔ)的客戶名單域, 分別指向排隊等候名單隊頭隊尾的指 針*/第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( 終點(diǎn)站名 t 航班號 t 飛機(jī)號 t 飛行日期 t 乘員定額 t 余票量 n);while(iMAXSIZE)display(a); /* 調(diào)用 dispiay 函數(shù)來輸出 */a+;第12頁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(iter_name) break; a+; i+; if(i=M

19、AXSIZE)printf( 對不起,該航線未找到 !n);elseprintf( 終點(diǎn)站名 t 航班號 t 飛機(jī)號 t 飛行日期 t 乘員定額 t 余票量 n); display(a);struct airline *find()/* 根據(jù)系統(tǒng)提出的航班號查詢并以指針形式返回 */ struct airline *a;/* 在航線信息鏈表中進(jìn)行查詢 */第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è)務(wù) */struc

23、t airline *a;int amount,grade;char name10;a=head;if(!(a=find()return;/* 根據(jù)客戶提供的航班號進(jìn)行查詢,如為空,退出該模塊 */ 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;/* 該航線的余票量應(yīng)減掉該客戶的訂票量 */ for(i=amount;i0;i-)/* 依次輸出該訂票客戶的座位號 */ printf(%s 的座位號是 :%dn,name,AMOUNT-a-tkt_sur-i+1); printf(n 祝您乘坐愉快! n);else /*若滿員或余票額

25、少于訂票額,詢問客戶是否需要進(jìn)行排隊等候*/ 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;/* 調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索 */ 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)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 指向排隊等候名單隊列的頭結(jié)點(diǎn) */ r=(a-wait).rear;/*r 指向排隊等

28、候名單隊列的尾結(jié)點(diǎn) */ t=f;/*t 為當(dāng)前滿點(diǎn)條件的排隊候補(bǔ)名單域 */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;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)/* 若滿足條件者不為頭結(jié)點(diǎn) */第19頁 int i

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論