(完整word版)[數(shù)據(jù)結(jié)構(gòu)]-航空訂票系統(tǒng)課程設(shè)計(jì).doc_第1頁(yè)
(完整word版)[數(shù)據(jù)結(jié)構(gòu)]-航空訂票系統(tǒng)課程設(shè)計(jì).doc_第2頁(yè)
(完整word版)[數(shù)據(jù)結(jié)構(gòu)]-航空訂票系統(tǒng)課程設(shè)計(jì).doc_第3頁(yè)
(完整word版)[數(shù)據(jù)結(jié)構(gòu)]-航空訂票系統(tǒng)課程設(shè)計(jì).doc_第4頁(yè)
(完整word版)[數(shù)據(jù)結(jié)構(gòu)]-航空訂票系統(tǒng)課程設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)系、部:學(xué)生姓名:專業(yè):班級(jí):學(xué)號(hào):成單績(jī):2010年6月18日目錄.3.3.3.3.4.9.9.102一、課程設(shè)計(jì)目的1 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是綜合運(yùn)用數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到的幾種典型數(shù)據(jù)結(jié)構(gòu), 以及程序設(shè)計(jì)語(yǔ)言( C 語(yǔ)言),自行實(shí)現(xiàn)一個(gè)較為完整的應(yīng)用系統(tǒng)的設(shè)計(jì)與開發(fā)2通過(guò)課程設(shè)計(jì),自己通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的應(yīng)用。3學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增加綜合能力。航空空訂票系統(tǒng):(1)熟練掌握鏈表存儲(chǔ)結(jié)構(gòu)及其建立過(guò)程和常用操作;(2)熟練掌握隊(duì)列的建立過(guò)

2、程和常用操作;(3)學(xué)會(huì)自己調(diào)試程序的方法并掌握一定的技巧。二、課程設(shè)計(jì)內(nèi)容航空客運(yùn)訂票的業(yè)務(wù)活動(dòng)包括:查詢航線、客票預(yù)訂和辦理退票等。設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來(lái)完成。三、需求分析1 每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行日(星期幾) 、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級(jí) 1,2 或 3)以及等候替補(bǔ)的客戶名單(包括姓名、所需票量) ;2 全部數(shù)據(jù)可以只放在內(nèi)存中;3 系統(tǒng)能實(shí)現(xiàn)的操作和功能如下:a) 查詢航線:根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票額;b) 承辦訂票業(yè)務(wù):

3、根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)額)查詢?cè)摵桨嗥鳖~情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票額少于定票額,則需重新詢問(wèn)客戶要求。若需要,可登記排隊(duì)候補(bǔ);c) 退票業(yè)務(wù):根據(jù)客戶提供的情況(日期、航班) ,為客戶辦理退票手續(xù),然后查詢?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢問(wèn)排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問(wèn)其他排隊(duì)候補(bǔ)的客戶。四、概要設(shè)計(jì)1系統(tǒng)結(jié)構(gòu)圖(功能模塊圖)3主函數(shù)瀏覽航線信瀏覽已訂票查詢航線辦理訂票業(yè)辦理退票業(yè)退出系統(tǒng)按剩余票數(shù)排序息客戶信息務(wù)務(wù)2功能模塊說(shuō)明(1)顯示已初始化的全部航線信息(2)瀏覽已訂票客戶信息(3)根據(jù)客戶提

4、出的終點(diǎn)站名,調(diào)用 find()函數(shù)尋找航線信息,調(diào)用 list()函數(shù)輸出航線信息(4)辦理訂票業(yè)務(wù):根據(jù)客戶提供的航班號(hào)進(jìn)行查詢航線信息,若客戶訂票額超過(guò)乘員定票總額,退出,若客戶訂票額末超過(guò)余票量,訂票成功并登記信息,在訂票乘員名單域中添加客戶信息;如果暫時(shí)沒有票,詢問(wèn)客戶是否要排隊(duì)等侯,如果是,則在等候隊(duì)列增加該客戶的訂票信息。( 5)辦理退票業(yè)務(wù):調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據(jù)隊(duì)列中從出的客戶信息判斷是否滿足要求,如果滿足,則將該客戶的信息插入到乘客信息鏈表中。( 6)退出本

5、系統(tǒng)五、詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果(1)顯示已初始化的全部航線信息4開始初始化iMAXSIZE?結(jié)束( 2)瀏覽已訂票客戶信息開始調(diào)用 find ()函數(shù)P=NULL?該航線沒有P 不為空客戶信息結(jié)束(3)查詢航線調(diào)用 find()函數(shù)輸出輸出客戶信息5未找到( 4)辦理訂票業(yè)務(wù)開始初始化iter_name)info+ , i+i=MAXSIZE調(diào)用函數(shù)輸出結(jié)束6開始初始化!(info=find()客戶訂票額不超過(guò)乘員定票總額,登記信息在排隊(duì)等候乘員名單域中添加客戶信息加到客戶名單域結(jié)束7( 5)辦理退票業(yè)務(wù)開始調(diào)用find函對(duì)航線搜索p1!=NULLp1! =NULL刪除客戶信息重新將航線名單域指向

6、訂票單鏈表的頭指針,重新將航線名單域指向訂票單鏈表的頭指針,r 指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)頭結(jié)點(diǎn)t 不為空將 客 戶 信 息 插 到 訂將客戶信息插到訂票客票客戶名單鏈表戶名單鏈表結(jié)束(6)排序: sort_tkt()8六、調(diào)試情況,設(shè)計(jì)技巧及體會(huì)1 總體過(guò)程編譯和調(diào)試工具:選擇 Visual C+6.0,該工具穩(wěn)定,其中有一個(gè)強(qiáng)大的調(diào)試工具,但我不是熟悉。還需要進(jìn)一步的練習(xí)。2 在一周半的時(shí)間里,不斷地對(duì)程序及各模塊進(jìn)行修改、編譯、調(diào)試、運(yùn)行,其間遇到很多問(wèn)題:( 1)因本人能力有限,在編寫的時(shí)候只使用了相對(duì)較為簡(jiǎn)單的基礎(chǔ)語(yǔ)言,代替了相對(duì)較為復(fù)雜的語(yǔ)言,降低了運(yùn)行效率。(2)程序在起初設(shè)計(jì)

7、的時(shí)候,經(jīng)常出現(xiàn)溢出錯(cuò)誤,而且不只一處。為了修正這些溢出錯(cuò)誤,耗費(fèi)了大量的時(shí)間,修正解釋之后再看源程序,才發(fā)現(xiàn)原來(lái)只是因?yàn)殚_始的函數(shù)定義的數(shù)據(jù)類型出現(xiàn)了問(wèn)題, 對(duì)函數(shù)的定義不清楚, 字符的不正確定義造成了后期大量的糾錯(cuò)工作,(3)由于忘記了一些 c 語(yǔ)言的規(guī)范使得在調(diào)試過(guò)程中一些錯(cuò)誤沒有發(fā)現(xiàn)。例如,調(diào)用函數(shù)時(shí),數(shù)組只需要傳遞數(shù)組名即可;字符 0和整形的 0 是不同的文明不可以直接對(duì)其畫等號(hào)。(4)測(cè)試用例具有一定的廣泛性。運(yùn)行程序時(shí)輸入了多種不同字符信息,經(jīng)過(guò)多次修改結(jié)果達(dá)到了預(yù)期效果。說(shuō)明程序具有一定的可靠性和穩(wěn)定性。3 通過(guò)調(diào)試我自己認(rèn)為,在哈夫曼編碼譯碼系統(tǒng)中用出棧入棧進(jìn)行哈夫曼譯碼編碼

8、譯碼要簡(jiǎn)單于使用數(shù)組, 而使用結(jié)構(gòu)體數(shù)組來(lái)存儲(chǔ)待編譯的字符, 編碼譯碼時(shí)通過(guò)結(jié)構(gòu)體數(shù)組來(lái)實(shí)現(xiàn)要優(yōu)于使用鏈表。4.調(diào)試體會(huì)經(jīng)過(guò)這次實(shí)習(xí),我對(duì)調(diào)試掌握的更加熟練了,改變了過(guò)去只調(diào)試不知道如何對(duì)照程序語(yǔ)言修改程序的壞習(xí)慣, 對(duì)調(diào)試也有了新的認(rèn)識(shí), 意識(shí)到了程序語(yǔ)言的規(guī)范性以及我們?cè)诰幊虝r(shí)要有嚴(yán)謹(jǐn)?shù)膽B(tài)度,同時(shí)在寫程序時(shí)如果加一定量的注釋,既增加了程序的可讀性,也可以使自己在讀程序時(shí)更容易。七、參考文獻(xiàn)嚴(yán)蔚敏、吳偉民數(shù)據(jù)結(jié)構(gòu)嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)題集耿國(guó)華數(shù)據(jù)結(jié)構(gòu) C 語(yǔ)言描述王曙燕C 語(yǔ)言程序設(shè)計(jì)9八、附錄: 源代碼/* 航空票務(wù)管理系統(tǒng)源代碼*/#include #include #include #def

9、ine MAXSIZE 3 /*定義航線量的最大值*/typedef struct wat_ros char name10;/* 姓名 */ int req_amt;/* 訂票量 */struct wat_ros *next;qnode,*qptr;typedef struct pqueueqptr front;/* 等候替補(bǔ)客戶名單域的頭指針*/qptr rear;/* 等候替補(bǔ)客戶名單域的屬指針*/linkqueue;typedef struct ord_ros char name10;/* 客戶姓名 */ int ord_amt;/* 訂票量 */int grade;/* 艙位等級(jí) */

10、 struct ord_ros *next;linklist;struct airlinechar ter_name10;/* 終點(diǎn)站名*/char air_num10;/* 航班號(hào) */char plane_num10;/* 飛機(jī)號(hào) */char day7;/* 飛行周日(星期幾)*/int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量 */linklist *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueue wait;/* 等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/lineinfo;struct airline *st

11、art;void display(struct airline *info)/* 打印每條航線的基本信息*/printf(%8st%3st%st%4stt%3dt%10dn,info-ter_name,info-air_num,info-plane_num,info-day,info-t kt_amt,info-tkt_sur);void list()/* 打印全部航線信息*/ struct airline *info;10int i=0;info=start;printf( 終點(diǎn)站名 t 航班號(hào) t 飛機(jī)號(hào) t 飛行周日 t 乘員定額 t 余票量 n);while(iMAXSIZE)disp

12、lay(info);info+;i+;printf(nn);void search()/* 根據(jù)客戶提出的終點(diǎn)站名輸出航線信息*/ struct airline *info,*find(); char name10;int i=0; info=start;printf( 請(qǐng)輸入終點(diǎn)站名:);scanf(%s,name);while(iter_name) break;info+;i+;if(i=MAXSIZE)printf( 對(duì)不起,該航線未找到!n);elseprintf( 終點(diǎn)站名 t 航班號(hào) t 飛機(jī)號(hào) t 飛行周日 t 乘員定額 t 余票量 n); display(info);struc

13、t airline *find()/* 根據(jù)系統(tǒng)提出的航班號(hào)查詢并以指針形式返回*/ struct airline *info; char number10; int i=0; info=start;printf( 請(qǐng)輸入航班號(hào) :); scanf(%s,number);while(iair_num) return info; info+;i+;11printf( 對(duì)不起,該航線末找到!n);return NULL;void prtlink()/* 打印訂票乘員名單域的客戶名單信息*/ linklist *p;struct airline *info; info=find(); p=info-

14、order; if(p!=NULL)printf( 客戶姓名訂票數(shù)額艙位等級(jí) n);while(p)printf(%stt%dt%dn,p-name,p-ord_amt,p-grade);p=p-next;elseprintf( 該航線沒有客戶信息!n);linklist *insertlink(linklist *head,int amount,char name,int grade)/* 增加訂票乘員名單域的客戶信息*/ linklist *p1,*new;p1=head;new=(linklist *)malloc(sizeof(linklist);if(!new) printf(nOu

15、t of memory!n);return NULL; strcpy(new-name,name); new-ord_amt=amount;new-grade=grade; new-next=NULL;if(head=NULL)/* 若原無(wú)訂票客戶信息 */head=new;new-next=NULL; elsehead=new;new-next=p1;return head;linkqueue appendqueue(linkqueue q,char name,int amount)/* 增加排隊(duì)等候的客戶名單域*/ qptr new; new=(qptr)malloc(sizeof(qno

16、de); strcpy(new-name,name); new-req_amt=amount; new-next=NULL;12if(q.front=NULL)/*若原排隊(duì)等候客戶名單域?yàn)榭?/q.front=new;elseq.rear-next=new;q.rear=new;return q;void order()/* 辦理訂票業(yè)務(wù) */struct airline *info;int amount,grade;char name10;info=start;if(!(info=find() return;/*根據(jù)客戶提供的航班號(hào)進(jìn)行查詢,如為空,退出該模塊*/printf( 請(qǐng)輸入你訂票

17、所需要的數(shù)量:);scanf(%d,&amount);if(amountinfo-tkt_amt)/*若客戶訂票額超過(guò)乘員定票總額,退出*/printf(n 對(duì)不起,您輸入的票的數(shù)量已經(jīng)超過(guò)乘員定額!);return;if(amounttkt_sur)/*若客戶訂票額末超過(guò)余票量,訂票成功并等記信息*/int i;printf( 請(qǐng)輸入您的姓名(訂票客戶):);scanf(%s,name);printf( 請(qǐng)輸入 %s 票的艙位等級(jí) :,name);scanf(%d,&grade);info-order=insertlink(info-order,amount,name,grade);/*在訂

18、票乘員名單域中添加客戶信息*/for(i=0;itkt_amt-info-tkt_sur+i+1);info-tkt_sur-=amount;/* 該航線的余票量應(yīng)減掉該客戶的訂票量 */ printf(n 祝您乘坐愉快! n);else/* 若滿員或余票額少于訂票額,詢問(wèn)客戶是否需要進(jìn)行排隊(duì)等候*/ char r;printf(n已經(jīng)沒有更多的票,您需要排隊(duì)等候嗎?(Y/N);r=getch();printf(%c,r);if(r=Y|r=y) printf(n 請(qǐng)輸入您的姓名(排隊(duì)訂票客戶):);scanf(%s,name);info-wait=appendqueue(info-wait,

19、name,amount);/* 在排隊(duì)等候乘員名單域中添加客戶信息 */ printf(n 注冊(cè)成功 !n);else printf(n 歡迎您下次再次訂購(gòu)!n);13void return_tkt()/* 退票模塊 */ struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname10;if(!(info=find() return;/* 調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索 */ head=info-order;p1=head;printf( 請(qǐng)輸入你的姓名(退票客戶):)

20、;scanf(%s,cusname);while(p1!=NULL) /* 根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢 */ if(!strcmp(cusname,p1-name) break;p2=p1;p1=p1-next;if(p1=NULL) printf(對(duì)不起,你沒有訂過(guò)票!n);return;/*若未找到,退出本模塊*/else/* 若信息查詢成功,刪除訂票客戶名單域中的信息*/if(p1=head) head=p1-next;else p2-next=p1-next;info-tkt_sur+=p1-ord_amt;grade=p1-grade;printf(%s 成功退票!

21、n,p1-name);free(p1);info-order=head;/* 重新將航線名單域指向訂票單鏈表的頭指針*/f=(info-wait).front;/*f 指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn) */ r=(info-wait).rear;/*r 指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn) */t=f;/*t 為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單域*/while(t)if(info-tkt_sur=info-wait.front-req_amt)/*若滿足條件者為頭結(jié)點(diǎn)*/int i;info-wait.front=t-next;printf(%s 訂票成功! n,t-name);for(i=0;ireq_amt

22、;i+)/*輸出座位號(hào) */printf(%s 的座位號(hào)是 :%dn,t-name,(info-tkt_sur)-i);info-tkt_sur-=t-req_amt;info-order=insertlink(info-order,t-req_amt,t-name,grade);/*插入到訂票客戶名單鏈表中*/free(t);break;back=t;t=t-next;14if(info-tkt_sur)=(t-req_amt)&t!=NULL)/*若滿足條件者不為頭結(jié)點(diǎn)*/ int i;back-next=t-next;printf(%s 訂票成功! n,t-name);for(i=0;ireq_amt;i+)/*輸出座位號(hào) */printf(s seat number is:%dn,t-name,(info-tkt_sur)-i); info-tkt_sur-=t-req_amt;info

溫馨提示

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

評(píng)論

0/150

提交評(píng)論