版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 設(shè)計(jì)題目: 航空客運(yùn)訂票系統(tǒng)</p><p> 院 系 計(jì)算機(jī)學(xué)院 </p><p> 年 級(jí) xxxxx </p><p&
2、gt; 學(xué) 生 xxx </p><p> 學(xué) 號(hào) xxxxxxxxxxx</p><p> 指導(dǎo)教師 xxxxxxxxxxx </p><p> 起止時(shí)間 9-6/9-13 </p><p> 2013年9月10日星期二</p><p><b>
3、 目 錄</b></p><p> 一、 課程設(shè)計(jì)目的 3</p><p> 二、 需求分析 3</p><p><b> 三、 概要設(shè)計(jì)</b></p&
4、gt;<p> 1.設(shè)計(jì)步驟 4</p><p> 2.系統(tǒng)整體結(jié)構(gòu)圖 5</p><p> 3.功能模塊及調(diào)用關(guān)系說(shuō)明
5、 5</p><p> 四、 詳細(xì)設(shè)計(jì)和源代碼</p><p> 1.實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) 6</p><p> 2.查詢(xún)航線信息功能的算法設(shè)計(jì) 7</p><p> 3.訂票功能的算法設(shè)計(jì)
6、 9</p><p> 4.退票功能的算法設(shè)計(jì) 12</p><p> 5.錄入功能的算法設(shè)計(jì) 14</p><p> 6.總
7、航線預(yù)覽功能的程序源代碼 15</p><p><b> 五、調(diào)試分析</b></p><p> 1.各功能的具體實(shí)例分析 16</p><p> 2.實(shí)驗(yàn)過(guò)程中出現(xiàn)的問(wèn)題及解決方法
8、 20</p><p> 六、課程設(shè)計(jì)總結(jié) 20</p><p> 七、參考資料 21</p><p><b> 一、 課程設(shè)計(jì)目的</b>&
9、lt;/p><p> (1) 熟練使用 C 語(yǔ)言編寫(xiě)程序,解決實(shí)際問(wèn)題;</p><p> (2) 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;</p><p> (3) 初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;</p><p> (4) 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解
10、決問(wèn)題的能力;</p><p><b> 航空訂票系統(tǒng):</b></p><p> ?。?)熟練掌握鏈表存儲(chǔ)結(jié)構(gòu)及其建立過(guò)程和常用操作;</p><p> ?。?)熟練掌握隊(duì)列的建立過(guò)程和常用操作;</p><p> 學(xué)會(huì)自己調(diào)試程序的方法并掌握一定的技巧。</p><p><b>
11、 二、 需求分析</b></p><p> 問(wèn)題描述:航空客運(yùn)訂票的業(yè)務(wù)活動(dòng)包括:查詢(xún)航線、客票預(yù)訂和辦理退票等。試設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來(lái)完成。</p><p> 設(shè)計(jì)任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:</p><p> 錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)</p&g
12、t;<p> 查詢(xún):可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng));可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況;根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票額;</p><p> 訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)根據(jù)客戶(hù)提出的要求(日期、航班號(hào)、訂票數(shù)額)查詢(xún)?cè)摵桨嗥鳖~情況,
13、若尚有余額,則為客戶(hù)辦理訂票手續(xù),輸出座位號(hào);若已滿(mǎn)員或余票額少于訂票額,則需要重新詢(xún)問(wèn)客戶(hù)要求。若需要,可預(yù)約登記排隊(duì)等候。如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;</p><p> 退票:根據(jù)客戶(hù)提供的情況(日期、航班、退票數(shù)額),為客戶(hù)辦理退票手續(xù),然后查詢(xún)?cè)摵桨嗍欠裼腥祟A(yù)約登記,首先詢(xún)問(wèn)排在第一的客戶(hù),若所退票額能滿(mǎn)足他的要求,則為他辦理訂票手續(xù),否則依次詢(xún)問(wèn)其他排隊(duì)預(yù)約的客戶(hù)……退票成功后修改相關(guān)
14、數(shù)據(jù)文件。</p><p> 客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。</p><p> 修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件</p><p> 要求:根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。</p><p> 測(cè)試數(shù)據(jù):由學(xué)生任意指定,但報(bào)告上要求寫(xiě)出多批數(shù)據(jù)測(cè)試結(jié)果。&l
15、t;/p><p> 實(shí)現(xiàn)提示:每條航線應(yīng)包含的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行日期(星期幾)、乘員定額、余票額、已訂票的客戶(hù)名單(包括姓名、訂票額、座位號(hào))和預(yù)約登記的客戶(hù)名單(包括日期、姓名、所需票額)。這最后兩項(xiàng)顯然是一個(gè)線性表和一個(gè)隊(duì)列。為查找方便、已訂票客戶(hù)的線性表應(yīng)按客戶(hù)姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無(wú)法預(yù)料,隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條航線的情況
16、登錄在一張線性表上,由于航線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按航班有序或按終點(diǎn)站名有序。每條航線是這張表上的一個(gè)記錄,包含上述八個(gè)域,其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,預(yù)約登記客戶(hù)名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。</p><p> 選做內(nèi)容:當(dāng)客戶(hù)訂票要求不能滿(mǎn)足時(shí),系統(tǒng)可向客戶(hù)提供到達(dá)同一目的地的其它航線情況。</p><p><b> 三、概要設(shè)計(jì)</b&
17、gt;</p><p><b> 1.設(shè)計(jì)步驟</b></p><p> 1)分析問(wèn)題,給出數(shù)學(xué)模型,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。</p><p><b> 提示:</b></p><p> (1)己訂票的客戶(hù)名單可以用線性表來(lái)實(shí)現(xiàn)。為查找方便,線性表應(yīng)按照客戶(hù)姓名有序,</p>&l
18、t;p> 并且為了插入和刪除的方便,應(yīng)以鏈表作為存儲(chǔ)結(jié)構(gòu)。</p><p> (2)等候替補(bǔ)的客戶(hù)名單可以用隊(duì)列來(lái)實(shí)現(xiàn)。由于預(yù)約人數(shù)無(wú)法預(yù)計(jì),所以隊(duì)列也應(yīng)以鏈表作為存儲(chǔ)結(jié)構(gòu)。</p><p> (3)需將輸入的航班情況登錄到一張線性表上(用順序存儲(chǔ)結(jié)構(gòu)或鏈表存儲(chǔ)結(jié)構(gòu))。為了查詢(xún)的方便,可以將航班情況按照航班有序或按照終點(diǎn)站名有序建立線性表。每條航線是這張線性表的一個(gè)記錄,包含上
19、述8個(gè)域,其中已訂票的客戶(hù)名單域是指向己訂票的客戶(hù)名單鏈表的頭指針,等候替補(bǔ)的客戶(hù)名單域是指向隊(duì)頭和隊(duì)尾的指針。</p><p><b> 2)算法設(shè)計(jì)</b></p><p> 在已經(jīng)選擇好數(shù)據(jù)結(jié)構(gòu)的前提下,為解決問(wèn)題設(shè)計(jì)算法。</p><p><b> (1)確定所需模塊</b></p><p
20、> 對(duì)于稍復(fù)雜的程序設(shè)計(jì),要充分利用模塊化程序設(shè)計(jì)方法,自頂向下,逐步細(xì)化,在整體思路確定的情況下,考慮所需模塊數(shù),各模塊完成功能以及模塊之間的數(shù)據(jù)聯(lián)系和調(diào)用關(guān)系。</p><p> ?。?)各子模塊功能描述</p><p> 給出主要模塊的算法描述,用流程圖或偽代碼表示。</p><p> (3)模塊之間的調(diào)用關(guān)系</p><p&g
21、t;<b> 3)源程序清單</b></p><p> 為了提高工作效率,充分利用上機(jī)調(diào)試程序的時(shí)間,要求學(xué)生在上機(jī)之前給出源程序清單。</p><p> 4)用測(cè)試數(shù)據(jù)去驗(yàn)證算法及程序的正確性</p><p><b> 5)算法分析</b></p><p> 經(jīng)過(guò)上機(jī)調(diào)試,源程序運(yùn)行正確
22、,并且實(shí)現(xiàn)算法要求的功能,解決課程設(shè)計(jì)題目中給出的問(wèn)題后,分析算法的時(shí)間復(fù)雜度和空間復(fù)雜度。</p><p> 2.系統(tǒng)整體結(jié)構(gòu)圖(功能模塊圖)</p><p> 圖 1. 系統(tǒng)整體結(jié)構(gòu)圖</p><p> 3.功能模塊及調(diào)用關(guān)系說(shuō)明</p><p> ?。?)總航線信息預(yù)覽:通過(guò)調(diào)用display()預(yù)覽已經(jīng)建立的全部航線的相關(guān)信息(
23、航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù) 、排隊(duì)等候人數(shù)),預(yù)覽完返回主菜單。</p><p> ?。?)查詢(xún)單條航線信息:根據(jù)乘客提出的終點(diǎn)站名或航班號(hào)調(diào)用Search()函數(shù)來(lái)查詢(xún)并輸出此條航線的相關(guān)信息(航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù) 、已訂票乘客名單、排隊(duì)等候乘客名單)。 并且查詢(xún)完后詢(xún)問(wèn)乘客是否訂票,是就調(diào)用訂票Book()函數(shù)來(lái)為乘客進(jìn)行訂票,否就返回主菜單。
24、</p><p> (3)辦理訂票業(yè)務(wù):客戶(hù)先輸入的終點(diǎn)站名、訂票數(shù)、姓名信息再來(lái)調(diào)用訂票Book()函數(shù),Book()函數(shù)根據(jù)客戶(hù)提供的終點(diǎn)站名查詢(xún)到該航線信息,若客戶(hù)訂票額末超過(guò)余票量,訂票成功并登記信息,在訂票乘員名單鏈表中添加乘客的信息; 如果暫時(shí)余票數(shù)不足是,詢(xún)問(wèn)客戶(hù)是否要排隊(duì)等侯,如果是,則在排隊(duì)等候的隊(duì)列中增加該乘客的訂票信息。</p><p> (4)辦理退票業(yè)務(wù):調(diào)用
25、tuipiao()查詢(xún)函數(shù),根據(jù)客戶(hù)提供的航線進(jìn)行搜索根據(jù)客戶(hù)提供的姓名到訂票客戶(hù)名單域進(jìn)行查詢(xún)。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據(jù)隊(duì)列中從出的客戶(hù)信息判斷是否滿(mǎn)足要求,如果滿(mǎn)足,則將該客戶(hù)的信息插入到乘客信息鏈表中。</p><p> ?。?)錄入航班信息:調(diào)用CreatPlane()函數(shù),根據(jù)輸入的航班的相關(guān)的信息(航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù)),將此航班加入
26、到原來(lái)的航班組中。</p><p><b> ?。?)退出系統(tǒng)</b></p><p> 四、詳細(xì)設(shè)計(jì)和源代碼</p><p> 1.實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)</p><p> ?。?)已訂票乘客信息(單鏈表)</p><p> typedef struct Cust//已訂票乘
27、客信息</p><p><b> {</b></p><p> char Name[15];//乘客姓名</p><p> char number[10];//乘客所乘飛機(jī)航班號(hào)</p><p> char end[15];//乘客終點(diǎn)站</p><p> ?。?)排隊(duì)等候的乘客
28、信息</p><p> typedef struct waitNode//排隊(duì)等候客戶(hù)信息</p><p><b> {</b></p><p> char name[15];//乘客姓名</p><p> int ticket;//乘客的訂票數(shù)</p><p> struc
29、t waitNode *next;</p><p> }waitNode,*waitlink;</p><p> typedef struct</p><p><b> {</b></p><p> waitlink front;</p><p> waitlink rear;</
30、p><p> }waitQueue;</p><p><b> ?。?)航班信息</b></p><p> typedef struct Plane//航班信息</p><p><b> {</b></p><p> char number[10];//航班號(hào)&l
31、t;/p><p> int planenum;//飛機(jī)號(hào)</p><p> char end[15];//終點(diǎn)站</p><p> char date[10];//飛行日期</p><p> int dinge;//成員定額</p><p> int tick;//剩余票數(shù) </
32、p><p> int k;//排隊(duì)等候的人數(shù)</p><p> Customer *first;//鏈接已訂票客戶(hù)</p><p> waitQueue Q;//鏈接候補(bǔ)客戶(hù)</p><p> }PlaneLink;</p><p> 2.查詢(xún)單條航線信息功能的算法設(shè)計(jì)(Search( )函數(shù)功能
33、實(shí)現(xiàn)的源代碼)</p><p> int Search(PlaneLink *p,int N)</p><p><b> {</b></p><p> int i=0,Q; </p><p> cout<<"=========================================
34、==\n";</p><p> cout<<" 1.按終點(diǎn)站名查詢(xún)\n";</p><p> cout<<" 2.按航班號(hào)查詢(xún) \n";</p><p> cout<<"________________________
35、___________________\n";</p><p> cout<<">>>>>>\n";</p><p> cout<<" 請(qǐng)選擇查詢(xún)方式 (1/2):"; cin>>Q;</p><p><b> if(Q==1
36、)</b></p><p><b> {</b></p><p> char end[10];</p><p> cout<<" 請(qǐng)您輸入要查詢(xún)的航班的終點(diǎn)站名: "; //按站點(diǎn)名查詢(xún)航班信息</p><p><b> cin>>end;&l
37、t;/b></p><p> while(i<N)</p><p><b> {</b></p><p> if(strcmp(p[i].end,end)==0) //先查看是否存在到該站點(diǎn)的航班</p><p><b> {</b></p><p>
38、 cout<<"\n*****************您所查詢(xún)的航班信息如下******************\n";</p><p> cout<<"_________________________________________________________\n";</p><p> cout<<&
39、quot; 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 余票數(shù)\n";</p><p> cout<<" "<<p[i].number<<setw(7)<<p[i].planenum<<setw(12)<<p[i].end<<setw(10)<<p[i].date<<
40、;setw(10)<<p[i].tick<<endl;</p><p> cout<<"\n=========================================================\n";</p><p><b> break;</b></p><p><
41、;b> }</b></p><p><b> i++;</b></p><p><b> }</b></p><p><b> }</b></p><p> else if(Q==2)</p><p><b> {
42、</b></p><p> char num[10];</p><p> cout<<" 請(qǐng)您輸入要查詢(xún)的航班的航班號(hào): "; //按站點(diǎn)名查詢(xún)航班信息</p><p><b> cin>>num;</b></p><p> while(i<N)
43、</p><p><b> {</b></p><p> if(strcmp(p[i].number,num)==0) //查看是否存在該航班號(hào)的航班</p><p><b> {</b></p><p> cout<<"\n*****************您所
44、查詢(xún)的航班信息如下:****************\n";</p><p> cout<<"_________________________________________________________\n";</p><p> cout<<" 航班號(hào) 終點(diǎn) 飛行日期 余票數(shù)\n&quo
45、t;;</p><p> cout<<" "<<p[i].number<<setw(12)<<p[i].end<<setw(12)<<p[i].date<<setw(12)<<p[i].tick<<endl;</p><p> cout<<&quo
46、t;\n=========================================================\n";</p><p><b> break;</b></p><p><b> }</b></p><p><b> i++;</b></p>&
47、lt;p><b> }</b></p><p><b> }</b></p><p> display_s(p, i, N); //調(diào)用display_s()函數(shù)輸出該航班的已訂票乘客和排隊(duì)等候乘客的名單信息</p><p> if(i<N) //如果存在該航班,詢(xún)問(wèn)客戶(hù)是否要預(yù)定 該航班
48、的 機(jī)票</p><p><b> {</b></p><p><b> int j;</b></p><p> cout<<" 是否需要預(yù)定 該航班的票(1/0):"; cin>>j;</p><p> if(j==1) </p>
49、;<p><b> {</b></p><p> char name[10]; int ticket;</p><p> cout<<" 請(qǐng)輸入訂票數(shù)目、姓名:";</p><p> cin>>ticket>>name;</p><p>
50、Book(p,p[i].end,ticket, name, N);</p><p><b> }</b></p><p><b> }</b></p><p> else { cout<<" 很抱歉,沒(méi)有您查詢(xún)的航班信息!\n"; }</p><p><
51、b> return 0;</b></p><p><b> }</b></p><p> 3.訂票功能的算法設(shè)計(jì)(Book( )函數(shù)功能實(shí)現(xiàn)源代碼)</p><p> int Book(PlaneLink *p,char end[],int ticket,char name[],int N) </p>
52、<p><b> {</b></p><p><b> int i; </b></p><p> for(i=0;i<N;i++)</p><p> {if(strcmp(p[i].end,end)==0) //先找出是否存在要訂票的航班</p><p><b
53、> {</b></p><p> if(p[i].tick>=ticket) //查看 余票數(shù)是否 >= 訂票客戶(hù) 訂票數(shù)</p><p><b> {</b></p><p> p[i].tick-=ticket;</p><p> Customer *t=(Custom
54、er *)malloc(sizeof(Customer));</p><p> t->ticket=ticket;</p><p> strcpy(t->Name,name);</p><p> strcpy(t->number,p[i].number); </p><p> strcpy(t->end,p[
55、i].end);</p><p> t->next=p[i].first; p[i].first=t; // 此使用的是頭插法將訂票乘客的信息放入到 鏈表中 /</p><p> cout<<" 您訂票成功!\n";</p><p> cout<<" 您的航班信息如下:\n";<
56、;/p><p> cout<<"__________________________________________________\n";</p><p> cout<<" 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 定額\n";</p><p> cout<<&qu
57、ot;__________________________________________________\n";</p><p> cout<<" "<<setw(9)<<p[i].number<<setw(6)<<p[i].planenum<<setw(12)<<p[i].end<<
58、setw(12)<<p[i].date<<setw(10)<<p[i].dinge<<endl;</p><p> cout<<"==================================================\n\n";</p><p><b> break;</b&g
59、t;</p><p><b> }</b></p><p> else if(p[i].dinge<ticket) //訂票數(shù)超出航班的定額時(shí),不能訂票,也不能無(wú)法排隊(duì)等候了</p><p> { cout<<" 您預(yù)訂的票數(shù)超過(guò)了航班定額,無(wú)法為您訂票!\n"; break; }</p
60、><p> else // 余票數(shù)不足時(shí),詢(xún)問(wèn)乘客是否排隊(duì)等候</p><p><b> {</b></p><p><b> char z;</b></p><p> cout<<" 該航班剩余票數(shù)為:"<<p[i].tic
61、k<<endl;</p><p> cout<<" 很抱歉,剩余的票數(shù)不夠!\n";</p><p> cout<<" 您是否需要排隊(duì)等候 (Y(y)/N(n)): "; cin>>z;</p><p> if(z=='Y'||z=='y'
62、;) {Queue(p,end,ticket , name, N,i); } //調(diào)用入隊(duì)列函數(shù),將乘客信息插入排隊(duì)等候的人后面</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p&
63、gt;<b> }</b></p><p> if(i>=N) {cout<<" 很抱歉,沒(méi)有您所需要的航班!\n"; }</p><p><b> return 0;</b></p><p><b> }</b></p><p&g
64、t; int display_s(PlaneLink *p,int i,int N) //輸出已定票及排隊(duì)乘客的名單信息</p><p><b> {</b></p><p> if(p[i].first!=NULL) //p[i].first!=NULL說(shuō)明已訂票鏈表不為空, 輸出 已訂票乘客的名單信息</p><p>
65、<b> {</b></p><p> cout<<"****該航班的已訂票乘客名單如下:****\n"; </p><p> cout<<"____________________________________\n";</p><p> cout<<&quo
66、t; 姓名 訂票量\n";</p><p> Customer *t=p[i].first;</p><p><b> while(t) </b></p><p><b> {</b></p><p> cout<<setw(10)
67、<<t->Name<<" "<<setw(7)<<t->ticket<<endl;</p><p> t=t->next;</p><p><b> }</b></p><p><b> }</b>
68、</p><p> if(i<N&&p[i].Q.front!=NULL) //p[i].Q.front!=NULL,輸出正在排隊(duì)等候乘客的名單信息</p><p><b> {</b></p><p> cout<<"****該航班等候訂票的乘客名單如下: ****\n";&l
69、t;/p><p> cout<<" 姓名 訂票量\n";</p><p> waitlink S=p[i].Q.front;</p><p> while(S!=NULL)</p><p><b> {</b></p><p>
70、cout<<setw(10)<<S->name<<" "<<setw(7)<<S->ticket<<endl;</p><p> S=S->next;</p><p><b> }</b></p><p> cou
71、t<<"=====================================\n";</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p>
72、 附:入隊(duì)函數(shù)Queue( )的源代碼</p><p> int Queue(PlaneLink *p,char end[],int ticket,char name[],int N ,int i) //入隊(duì)函數(shù),將等候排隊(duì)的乘客放入原來(lái)的隊(duì)列中</p><p><b> {</b></p><p> system("cls&
73、quot;);</p><p> system("color 2e");</p><p> waitlink q=(waitlink)malloc(sizeof(waitNode)); //將要的入隊(duì)的結(jié)點(diǎn),存儲(chǔ)將要入隊(duì)乘客的信息</p><p> strcpy(q->name,name);</p><p>
74、; q->ticket=ticket;</p><p> q->next=NULL; </p><p> if(p[i].Q.front==NULL)</p><p><b> { </b></p><p> p[i].Q.front=p[i].Q.rear=q; p[i].k++; //
75、p[i].k用來(lái)記錄排隊(duì)人數(shù)</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p[i].Q.rear->next=q;</p><p> p[i].
76、Q.rear=q; p[i].k++; </p><p><b> }</b></p><p> cout<<"已為您登記,請(qǐng)耐心等候!\n";</p><p> return 0;</p><p><b> }</b></p>
77、<p> 4.退票功能的算法設(shè)計(jì)(tuipiao( )函數(shù)實(shí)現(xiàn)的源代碼)</p><p> int tuipiao(PlaneLink *p,int N)</p><p><b> {</b></p><p><b> int i;</b></p><p> Customer *
78、R,*S;</p><p> char number[10],Name[15];</p><p> cout<<">>>>>>\n";</p><p> cout<<" 請(qǐng)輸入您的航班號(hào)與姓名:";</p><p> cin>&g
79、t;number>>Name;</p><p> for(i=0;i<N;i++)</p><p><b> {</b></p><p> if(strcmp(p[i].number,number)==0&&p[i].first!=NULL)</p><p><b>
80、{</b></p><p> if(strcmp(p[i].first->Name,Name)==0)</p><p><b> {</b></p><p> p[i].tick=p[i].tick+p[i].first->ticket;</p><p> p[i].first=p[i].
81、first->next;</p><p> cout<<" 您已成功退票!\n\n";</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&
82、lt;p> R=p[i].first; S=p[i].first->next;</p><p> while(S!=NULL)</p><p><b> {</b></p><p> if(strcmp(S->Name,Name)==0)</p><p><b> {</b
83、></p><p> p[i].tick=p[i].tick+S->ticket;</p><p> R->next=S->next;</p><p> cout<<" 您已經(jīng)成功退票!\n\n"; break;</p><p><b> }</b><
84、/p><p> R=R->next; S=S->next;</p><p><b> }</b></p><p> if(S==NULL) cout<<" 很抱歉,在該航班上沒(méi)有找到您的姓名,請(qǐng)核實(shí)信息!\n\n";</p><p><b> }</b&
85、gt;</p><p> if(p[i].Q.front!=NULL)</p><p><b> {</b></p><p> waitlink Q=p[i].Q.front , q; </p><p> while(Q!=NULL)</p><p><b> {</
86、b></p><p> if(p[i].tick>=Q->ticket)</p><p><b> {</b></p><p> if(Q==p[i].Q.front)</p><p><b> {</b></p><p> cout<<
87、;" 正在為等候的乘客 "<<Q->name<<"辦理訂票!\n";</p><p> Book(p,p[i].end,Q->ticket,Q->name,N);</p><p> if(p[i].Q.front==p[i].Q.rear)</p><p><b> {
88、</b></p><p> p[i].Q.front=p[i].Q.rear=NULL;</p><p> Q=Q->next;</p><p><b> }</b></p><p><b> else</b></p><p> { p[i]
89、.Q.front=p[i].Q.front->next;</p><p> Q=Q->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p>
90、<b> {</b></p><p> cout<<" 正在為等候的乘客 "<<Q->name<<"辦理訂票!\n";</p><p> Book(p,p[i].end,Q->ticket,Q->name,N);</p><p> q->
91、next=Q->next; Q=Q->next;</p><p><b> }</b></p><p><b> }</b></p><p> else {q=Q; Q=Q->next; }</p><p><b> }</b></p&
92、gt;<p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p> if(strcmp(p[i].number,number)==0&&p[i].first==NULL)</p>
93、<p><b> {</b></p><p> cout<<" 很抱歉,該航班目前沒(méi)有已訂票的乘客,無(wú)法為你退票,請(qǐng)核實(shí)信息!\n\n"; break;</p><p><b> }</b></p><p><b> }</b></p>
94、<p> if(i>=N) cout<<" 很抱歉,沒(méi)有該航班信息,無(wú)法為你退票,請(qǐng)核實(shí)信息!\n\n";</p><p><b> return 0;</b></p><p><b> }</b></p><p> 5.錄入功能的算法設(shè)計(jì)(CreatPlane(
95、 )函數(shù)的源代碼)</p><p> void CreatPlane(PlaneLink *p,int n,int N) </p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=N;i<N+n;i++)</p&g
96、t;<p><b> {</b></p><p> p[i].first=NULL; // 帶頭結(jié)點(diǎn)的單鏈表為空時(shí)的條件</p><p> p[i].Q.front=p[i].Q.rear=NULL; //隊(duì)列為空時(shí)的條件</p><p> cout<<">>>>>
97、;>\n";</p><p> cout<<" 請(qǐng)輸入航班號(hào): "; cin>>p[i].number;</p><p> cout<<" 輸入終點(diǎn)站名: "; cin>>p[i].end;</p><p> for( j=0;j<N;j++)
98、</p><p><b> {</b></p><p> if(strcmp(p[i].number,p[j].number)==0) //查看該航班號(hào)是否已經(jīng)存在</p><p><b> {</b></p><p> cout<<" 已經(jīng)存在該航班號(hào)!\n &qu
99、ot;; break; </p><p><b> }</b></p><p> if(strcmp(p[i].end,p[j].end)==0) // 查看是否存在到改站點(diǎn)的航班</p><p><b> {</b></p><p> cout<<" 已經(jīng)有到
100、該站點(diǎn)的航班!\n "; break;</p><p><b> }</b></p><p><b> }</b></p><p><b> if(j==N)</b></p><p><b> {</b></p><p
101、> cout<<" 飛機(jī)號(hào)、飛行日期、成員定額:\n";</p><p> cin>>p[i].planenum>>p[i].date>>p[i].dinge;</p><p> p[i].tick=p[i].dinge; p[i].k=0;</p><p> cout<<
102、;" 錄入完成!\n";</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 6.總航線預(yù)覽功能的算法設(shè)計(jì)(display( )函數(shù)的源代碼)</p>&l
103、t;p> int display(PlaneLink *p,int N) //N為當(dāng)前的航班數(shù) </p><p><b> {</b></p><p> cout<<"==============================================================================\n
104、";</p><p> cout<<" 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 定額 余票數(shù) 排隊(duì)等候人數(shù)\n";</p><p> cout<<"____________________________________________________________________
105、__________\n";</p><p> for(int i=0;i<N;i++)</p><p><b> {</b></p><p> cout<<setw(9)<<p[i].number<<setw(6)<<p[i].planenum<<setw(12
106、)<<p[i].end<<setw(12)<<p[i].date<<setw(10)<<p[i].dinge<<setw(10)<<p[i].tick<<setw(10)<<p[i].k<<endl;</p><p><b> }</b></p><p
107、> cout<<"==============================================================================\n";</p><p><b> return 0;</b></p><p><b> }</b></p><
108、;p><b> 五、調(diào)試分析</b></p><p> 1)各功能的具體實(shí)例分析</p><p> 為了調(diào)試分析方便,在程序中已經(jīng)初始放入了三個(gè)航班信息,如下:</p><p><b> 1.系統(tǒng)主菜單界面</b></p><p> 2.總航線預(yù)覽功能界面</p>&l
109、t;p> 3.查詢(xún)單條航線功能</p><p> 圖1.按終點(diǎn)站名查詢(xún)</p><p><b> 圖2.按航班號(hào)查詢(xún)</b></p><p> 圖3.錯(cuò)誤查詢(xún)輸出結(jié)果</p><p><b> 4.訂票功能</b></p><p> ①.當(dāng)訂票的航班存在且航
110、班的余票數(shù)≥乘客訂票數(shù)時(shí)</p><p> ?、诋?dāng)訂票的航班存在但余票數(shù)≤訂票數(shù)≤航班的定額時(shí)</p><p> ?、郛?dāng)航班存在但訂票數(shù)大于航班定額時(shí)乘客將無(wú)法排隊(duì)等候了</p><p> ?、?當(dāng)預(yù)定的航班不存在時(shí)</p><p><b> 5.退票功能</b></p><p> ?、?當(dāng)退票
111、后余票數(shù)能夠滿(mǎn)足排隊(duì)乘客的需要時(shí)</p><p> ②.當(dāng)航班號(hào)或姓名輸入錯(cuò)誤時(shí),系統(tǒng)會(huì)輸出顯示以下的三種界面</p><p><b> 圖1</b></p><p><b> 圖2</b></p><p><b> 圖3</b></p><p>
112、;<b> 6.錄入功能</b></p><p> 2)實(shí)驗(yàn)過(guò)程中出現(xiàn)的問(wèn)題及解決方法:</p><p> 一開(kāi)始錯(cuò)誤很多,包括大量的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤。通過(guò)反復(fù)的編譯、調(diào)試、學(xué)習(xí)和修改,更正了程序中的語(yǔ)法,使程序可以正常編譯,運(yùn)行。</p><p> 程序健壯性方面屢屢遇到問(wèn)題,在程序的測(cè)試過(guò)程中逐步發(fā)現(xiàn)并改進(jìn),如主菜單選擇如果輸入字
113、符型數(shù)據(jù)就會(huì)引起程序的混亂出現(xiàn)自動(dòng)跳出;解決方法,引入新的部分從鍵盤(pán)獲取字符型數(shù)據(jù),通過(guò)字符型常量與數(shù)據(jù)間的關(guān)系,將字符數(shù)據(jù)轉(zhuǎn)化成整形數(shù)據(jù)。</p><p> 程序優(yōu)化,程序雖然可以運(yùn)行使用,但是有很多不合理處, 例如程序的運(yùn)行過(guò)程對(duì)于正確的輸入情況考慮的還比較完全,但對(duì)于有誤信息的輸入情況考慮的不是很好,經(jīng)常輸入有誤或是不符合的信息時(shí),會(huì)出現(xiàn)死循環(huán)或者其他一些異常。對(duì)于種情況,我都是通過(guò)F10調(diào)試,在調(diào)試過(guò)程
114、輸入剛出錯(cuò)我輸入的信息,然后逐句或是逐過(guò)程的進(jìn)行調(diào)試,最終都能找到問(wèn)題的具體所在處,然后通過(guò)分析為什么這處會(huì)出現(xiàn)異常,從這不斷的調(diào)試及分析的過(guò)程中得出了這些錯(cuò)誤的修改方法。從而不斷的完善了整個(gè)系統(tǒng)程序。</p><p> 功能添加上,我是在實(shí)現(xiàn)基礎(chǔ)功能的基礎(chǔ)上再添加一些其他的比較復(fù)雜難處理的功能,但在添加另外的功能時(shí),常常會(huì)出現(xiàn)這些功能之間邏輯聯(lián)系不好的問(wèn)題。這些主要就是通過(guò)調(diào)試看 這些函數(shù)的連接處的代碼的調(diào)試
115、情況,比如一些for循環(huán)、while循環(huán)或是if語(yǔ)句等的限制條件上把握的不好,經(jīng)常會(huì)出現(xiàn)在我的邏輯理論上應(yīng)該執(zhí)行的語(yǔ)句沒(méi)執(zhí)行,而不該執(zhí)行的卻執(zhí)行了的情況。在調(diào)試的時(shí)候我會(huì)首先看看這些連接處的中間變量的值的變化境況,通過(guò)這找出了比較這些語(yǔ)句的正確的限制的條件。</p><p><b> 六、課程設(shè)計(jì)總結(jié)</b></p><p> 在一周的時(shí)間里,不斷地對(duì)程序及各模塊
116、進(jìn)行修改、編譯、調(diào)試、運(yùn)行,其間遇到很多問(wèn)題,但通過(guò)自己的努力及詢(xún)問(wèn)同學(xué)的幫助都一一解決了。</p><p> 因本人能力有限,在編寫(xiě)的時(shí)候只使用了相對(duì)較為簡(jiǎn)單的基礎(chǔ)語(yǔ)言 ,代替了相對(duì)較為復(fù)雜的語(yǔ)言,降低了運(yùn)行效率。</p><p> 程序是寫(xiě)出來(lái)的,不是想出來(lái)的。開(kāi)始階總是在想,總感覺(jué)很困難做不了,但是真正投入其中之后才發(fā)覺(jué)其實(shí)只要用心,只要有克服一切的勇氣和信心就可以把程序做好,錯(cuò)
117、誤總是越改越少的。</p><p> 要用愉悅的心情去做,從編程的過(guò)程中體會(huì)樂(lè)趣,興趣是最好的老師就是這么回事</p><p> 學(xué)會(huì)利用輔助程序去發(fā)現(xiàn)問(wèn)題</p><p> 通過(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)在軟件開(kāi)發(fā)中的應(yīng)用 。</p>&l
118、t;p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是檢驗(yàn)我們這個(gè)學(xué)期學(xué)習(xí)成果的重要手段,通過(guò)這學(xué)期的學(xué)習(xí),我認(rèn)為學(xué)好數(shù)據(jù)結(jié)構(gòu)這門(mén)課程,不僅要認(rèn)真閱讀課本知識(shí),更重要的是要通過(guò)上機(jī)實(shí)踐才能增強(qiáng)和鞏固我的知識(shí)。經(jīng)過(guò)這一階段的上機(jī)實(shí)踐學(xué)習(xí),使我對(duì)數(shù)據(jù)結(jié)構(gòu)有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它要重在實(shí)踐,要通過(guò)不斷的上機(jī)操作才能更好地學(xué)習(xí)它。通過(guò)實(shí)踐,我也發(fā)現(xiàn)我的很多不足之處,首先是自己平時(shí)上機(jī)練習(xí)太少,知識(shí)的積壓給編程帶來(lái)了一定的麻煩。另外我對(duì)數(shù)據(jù)結(jié)構(gòu)的一些標(biāo)
119、準(zhǔn)庫(kù)函數(shù)還不太了解,如開(kāi)始進(jìn)入系統(tǒng)后發(fā)現(xiàn)操作的界面很亂,如果能夠及時(shí)的清屏那樣就會(huì)變的很明了。查閱了相關(guān)的資料和問(wèn)同學(xué)后我知道只要在程序中調(diào)用庫(kù)函數(shù)system("cls")就可以了,知道了這個(gè)函數(shù)的基本用法;還有對(duì)數(shù)據(jù)結(jié)構(gòu)中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過(guò)實(shí)踐,使我獨(dú)自處理錯(cuò)誤的能力也有了很大的提高。</p><p><b> 七、參考資料</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)航空訂票系統(tǒng)課程設(shè)計(jì)報(bào)告
- 航空客運(yùn)訂票系統(tǒng)課程設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--航空客運(yùn)訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---航空客運(yùn)訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)航空航班課程設(shè)計(jì)--航空客運(yùn)訂票系統(tǒng)
- 航空客運(yùn)訂票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)源代碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---飛機(jī)訂票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 航空訂票系統(tǒng)數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)-- 航空訂票管理系統(tǒng)
- 航空訂票管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告-航空訂票系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語(yǔ)言版飛機(jī) 訂票 系統(tǒng)資料
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 課程設(shè)計(jì)---航空客運(yùn)訂票系統(tǒng)
- 航空客運(yùn)訂票系統(tǒng)課程設(shè)計(jì)
- java課程設(shè)計(jì)-航空訂票管理系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論