版權(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日目錄一、 課程設(shè)計(jì)目的.3二、 課程設(shè)計(jì)內(nèi)容.3三、 需求分析.3四、 概要設(shè)計(jì).3五、 詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果.4六、 調(diào)試情況,設(shè)計(jì)技巧及體會(huì).9七、 參考文獻(xiàn).9八、 附錄(源文件).10一、 課程設(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ì)與開(kāi)發(fā)2 通過(guò)課程設(shè)計(jì),自己通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫(xiě)實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件
2、開(kāi)發(fā)中的應(yīng)用 。3 學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增加綜合能力。 航空空訂票系統(tǒng):(1)熟練掌握鏈表存儲(chǔ)結(jié)構(gòu)及其建立過(guò)程和常用操作;(2)熟練掌握隊(duì)列的建立過(guò)程和常用操作;(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)完成。3、 需求分析 1 每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行日(星期幾)、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級(jí)1,2或3)以及等候替補(bǔ)的客戶名單(包括姓名、所需票量); 2 全部數(shù)據(jù)
3、可以只放在內(nèi)存中; 3 系統(tǒng)能實(shí)現(xiàn)的操作和功能如下: a) 查詢航線: 根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票額; b) 承辦訂票業(yè)務(wù): 根據(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é)
4、構(gòu)圖(功能模塊圖)主函數(shù)瀏覽航線信息瀏覽已訂票客戶信息查詢航線辦理訂票業(yè)務(wù)辦理退票業(yè)務(wù)退出系統(tǒng)按剩余票數(shù)排序2功能模塊說(shuō)明(1)顯示已初始化的全部航線信息(2)瀏覽已訂票客戶信息(3)根據(jù)客戶提出的終點(diǎn)站名,調(diào)用find()函數(shù)尋找航線信息,調(diào)用list()函數(shù)輸出航線信息(4)辦理訂票業(yè)務(wù):根據(jù)客戶提供的航班號(hào)進(jìn)行查詢航線信息,若客戶訂票額超過(guò)乘員定票總額,退出,若客戶訂票額末超過(guò)余票量,訂票成功并登記信息,在訂票乘員名單域中添加客戶信息;如果暫時(shí)沒(méi)有票,詢問(wèn)客戶是否要排隊(duì)等侯,如果是,則在等候隊(duì)列增加該客戶的訂票信息。(5)辦理退票業(yè)務(wù):調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索根據(jù)客戶提供
5、的姓名到訂票客戶名單域進(jìn)行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據(jù)隊(duì)列中從出的客戶信息判斷是否滿足要求,如果滿足,則將該客戶的信息插入到乘客信息鏈表中。(6)退出本系統(tǒng)五、詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果(1)顯示已初始化的全部航線信息開(kāi)始初始化imaxsize?調(diào)用find()函數(shù)輸出結(jié)束(2)瀏覽已訂票客戶信息開(kāi)始調(diào)用find()函數(shù)p=null?p不為空該航線沒(méi)有客戶信息輸出客戶信息結(jié)束(3)查詢航線開(kāi)始初始化iter_name)info+,i+i=maxsize調(diào)用函數(shù)輸出未找到結(jié)束(4)辦理訂票業(yè)務(wù)開(kāi)始初始化!(info=find()客戶訂票額不超過(guò)乘員定票總額,登記信息加到
6、客戶名單域結(jié)束在排隊(duì)等候乘員名單域中添加客戶信息(5)辦理退票業(yè)務(wù)開(kāi)始調(diào)用find函對(duì)航線搜索數(shù)p1!=nullp1!=null刪除客戶信息重新將航線名單域指向訂票單鏈表的頭指針,重新將航線名單域指向訂票單鏈表的頭指針,r指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)t不為空將客戶信息插到訂票客戶名單鏈表頭結(jié)點(diǎn)將客戶信息插到訂票客戶名單鏈表結(jié)束(6)排序:sort_tkt()六、調(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)
7、題:(1)因本人能力有限,在編寫(xiě)的時(shí)候只使用了相對(duì)較為簡(jiǎn)單的基礎(chǔ)語(yǔ)言 ,代替了相對(duì)較為復(fù)雜的語(yǔ)言,降低了運(yùn)行效率。(2)程序在起初設(shè)計(jì)的時(shí)候,經(jīng)常出現(xiàn)溢出錯(cuò)誤,而且不只一處。為了修正這些溢出錯(cuò)誤,耗費(fèi)了大量的時(shí)間,修正解釋之后再看源程序,才發(fā)現(xiàn)原來(lái)只是因?yàn)殚_(kāi)始的函數(shù)定義的數(shù)據(jù)類型出現(xiàn)了問(wèn)題,對(duì)函數(shù)的定義不清楚,字符的不正確定義造成了后期大量的糾錯(cuò)工作, (3)由于忘記了一些c語(yǔ)言的規(guī)范使得在調(diào)試過(guò)程中一些錯(cuò)誤沒(méi)有發(fā)現(xiàn)。例如,調(diào)用函數(shù)時(shí),數(shù)組只需要傳遞數(shù)組名即可;字符0和整形的0是不同的文明不可以直接對(duì)其畫(huà)等號(hào)。(4)測(cè)試用例具有一定的廣泛性。運(yùn)行程序時(shí)輸入了多種不同字符信息,經(jīng)過(guò)多次修改結(jié)果達(dá)
8、到了預(yù)期效果。說(shuō)明程序具有一定的可靠性和穩(wěn)定性。3 通過(guò)調(diào)試我自己認(rèn)為,在哈夫曼編碼譯碼系統(tǒng)中用出棧入棧進(jìn)行哈夫曼譯碼編碼譯碼要簡(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í)在寫(xiě)程序時(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è)
9、計(jì)八、附錄:源代碼/*航空票務(wù)管理系統(tǒng)源代碼*/#include #include #include #define maxsize 3 /*定義航線量的最大值*/typedef struct wat_ros char name10;/*姓名*/ int req_amt;/*訂票量*/ struct wat_ros *next;qnode,*qptr;typedef struct pqueue qptr front;/*等候替補(bǔ)客戶名單域的頭指針*/ qptr rear;/*等候替補(bǔ)客戶名單域的屬指針*/linkqueue;typedef struct ord_ros char name10;
10、/*客戶姓名*/ int ord_amt;/*訂票量*/ int grade;/*艙位等級(jí)*/ struct ord_ros *next;linklist;struct airline char 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ǔ)的客戶名單域,分
11、別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/lineinfo;struct airline *start;void display(struct airline *info)/*打印每條航線的基本信息*/printf(%8st%3st%st%4stt%3dt%10dn,info-ter_name,info-air_num,info-plane_num,info-day,info-tkt_amt,info-tkt_sur);void list()/*打印全部航線信息*/ struct airline *info; int i=0; info=start; printf(終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行周日
12、t乘員定額t余票量n); while(imaxsize) display(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); else printf(終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行周日t
13、乘員定額t余票量n); display(info); struct 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+; printf(對(duì)不起,該航線末找到!n); return null;void prtlink()/*打印訂票乘員名單域的客戶名單信息*/ linklist *p; struct airl
14、ine *info; info=find(); p=info-order; if(p!=null) printf(客戶姓名 訂票數(shù)額 艙位等級(jí)n); while(p) printf(%stt%dt%dn,p-name,p-ord_amt,p-grade); p=p-next; else printf(該航線沒(méi)有客戶信息!n);linklist *insertlink(linklist *head,int amount,char name,int grade)/*增加訂票乘員名單域的客戶信息*/ linklist *p1,*new; p1=head; new=(linklist *)malloc
15、(sizeof(linklist); if(!new) printf(nout 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; else head=new; new-next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount)/*增加排隊(duì)等候的客戶名單
16、域*/ qptr new; new=(qptr)malloc(sizeof(qnode); strcpy(new-name,name); new-req_amt=amount; new-next=null; if(q.front=null)/*若原排隊(duì)等候客戶名單域?yàn)榭?/ q.front=new; else q.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() r
17、eturn;/*根據(jù)客戶提供的航班號(hào)進(jìn)行查詢,如為空,退出該模塊*/ printf(請(qǐng)輸入你訂票所需要的數(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); inf
18、o-order=insertlink(info-order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/ 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)沒(méi)有更多的票,您需要排隊(duì)等候嗎?(y/n); r=getch(); printf(%c,r); if(r=y|r=y) printf(n請(qǐng)輸入您的姓名(排隊(duì)
19、訂票客戶):); scanf(%s,name); info-wait=appendqueue(info-wait,name,amount);/*在排隊(duì)等候乘員名單域中添加客戶信息*/ printf(n注冊(cè)成功!n); else printf(n歡迎您下次再次訂購(gòu)!n); void 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)
20、行搜索*/ head=info-order; p1=head; printf(請(qǐng)輸入你的姓名(退票客戶):); 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ì)不起,你沒(méi)有訂過(guò)票!n);return;/*若未找到,退出本模塊*/ else/*若信息查詢成功,刪除訂票客戶名單域中的信息*/ if(p1=head) head=p1-next; else p2-next=p1-nex
21、t; info-tkt_sur+=p1-ord_amt; grade=p1-grade; printf(%s成功退票!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; inf
22、o-wait.front=t-next; printf(%s訂票成功!n,t-name); for(i=0;ireq_amt;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; if(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_am
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)裝飾燈支架市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)真空包裝箱市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)中速智能型球攝像機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 二零二五年度跨界投資股份合作協(xié)議合同
- 二零二五年度退休人員兼職健身教練聘用勞動(dòng)協(xié)議
- 二零二五年度銀行與保險(xiǎn)公司網(wǎng)絡(luò)安全責(zé)任保險(xiǎn)合作協(xié)議
- 二零二五年度門(mén)面轉(zhuǎn)讓及品牌授權(quán)及運(yùn)營(yíng)支持協(xié)議
- 二零二五年度非婚生子女撫養(yǎng)權(quán)爭(zhēng)議調(diào)解與子女權(quán)益協(xié)議
- 二零二五年度音樂(lè)版權(quán)音樂(lè)版權(quán)音樂(lè)節(jié)贊助合作協(xié)議
- 二零二五年度食品代加工行業(yè)人才培養(yǎng)與交流協(xié)議
- 《霍爾效應(yīng)測(cè)量磁場(chǎng)》課件
- 30題紀(jì)檢監(jiān)察位崗位常見(jiàn)面試問(wèn)題含HR問(wèn)題考察點(diǎn)及參考回答
- 高考作文復(fù)習(xí)任務(wù)驅(qū)動(dòng)型作文的審題立意課件73張
- 詢價(jià)函模板(非常詳盡)
- 《AI營(yíng)銷畫(huà)布:數(shù)字化營(yíng)銷的落地與實(shí)戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 一個(gè)28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 乘務(wù)培訓(xùn)4有限時(shí)間水上迫降
- 2023年低年級(jí)寫(xiě)話教學(xué)評(píng)語(yǔ)方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準(zhǔn)備技術(shù)要求
- GB/T 16474-2011變形鋁及鋁合金牌號(hào)表示方法
評(píng)論
0/150
提交評(píng)論