

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計論文</b></p><p><b> 數據結構課程設計</b></p><p><b> 目 錄</b></p><p> 第1章 航空訂票系統(tǒng)- 1 -</p><p> 1.1 課程設計目的- 1 -</p>
2、<p> 1.2航空訂票問題- 2 -</p><p> 1.3概要設計- 2 -</p><p> 1.4詳細設計及運行結果- 4 -</p><p> 1.5調試情況,設計技巧及體會- 12 -</p><p> 第2章 八皇后問題- 13 -</p><p> 2.1 面對的
3、問題- 13 -</p><p> 2.2需求分析- 13 -</p><p> 2.2.1 涉及到的知識- 13 -</p><p> 2.2.2軟硬件的需求- 13 -</p><p> 2.2.3 功能需求- 14 -</p><p> 2.4 詳細設計和實現- 14 -</p>
4、<p> 2.4.1 算法描述- 14 -</p><p> 2.4.2 算法流程圖- 15 -</p><p> 2.5 程序調試- 16 -</p><p> 2.6運行與測試- 17 -</p><p> 總 結- 18 -</p><p> 參考文獻- 19 -&l
5、t;/p><p> 附錄:源代碼- 20 -</p><p> 第1章 航空訂票系統(tǒng)</p><p> 1.1 課程設計目的</p><p> 1. 數據結構課程設計是綜合運用數據結構課程中學到的幾種典型數據結構,以及程序設計語言(C語言),自行實現一個較為完整的應用系統(tǒng)的設計與開發(fā)</p><p> 2.
6、 通過課程設計,自己通過系統(tǒng)分析、系統(tǒng)設計、編程調試,寫實驗報告等環(huán)節(jié),進一步掌握應用系統(tǒng)設計的方法和步驟,靈活運用并深刻理解典型數據結構在軟件開發(fā)中的應用 。</p><p> 3. 學會將知識應用于實際的方法,提高分析和解決問題的能力,增加綜合能力。</p><p><b> 航空空訂票系統(tǒng):</b></p><p> (1)熟練掌
7、握鏈表存儲結構及其建立過程和常用操作;</p><p> ?。?)熟練掌握隊列的建立過程和常用操作;</p><p> ?。?)學會自己調試程序的方法并掌握一定的技巧。</p><p><b> 1.2航空訂票問題</b></p><p> 航空客運訂票的業(yè)務活動包括:查詢航線、客票預訂和辦理退票等。設計一個航空客運
8、訂票系統(tǒng),以使上述業(yè)務可以借助計算機來完成。</p><p> 1. 每條航線所涉及的信息有:終點站名、航班號、飛機號、飛行日(星期幾)、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級1,2或3)以及等候替補的客戶名單(包括姓名、所需票量); </p><p> 2. 全部數據可以只放在內存中; </p><p> 3. 系統(tǒng)能實現的操
9、作和功能如下: </p><p><b> 1.查詢航線 </b></p><p> 根據旅客提出的終點站名輸出下列信息:航班號、飛機號、星期幾飛行,最近一天航班的日期和余票額; </p><p> 2.承辦訂票業(yè)務 </p><p> 根據客戶提出的要求(航班號、訂票數額)查詢該航班票額情況,若尚有
10、余票,則為客戶辦理訂票手續(xù), </p><p> 輸出座位號;若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊候補; </p><p><b> 3. 退票業(yè)務 </b></p><p> 根據客戶提供的情況(日期、航班),為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,若所退票額能
11、滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊候補的客戶。 </p><p><b> 1.3概要設計</b></p><p> 1.系統(tǒng)結構圖(功能模塊圖)</p><p> 圖1-1系統(tǒng)結構圖(功能模塊圖)</p><p><b> 2.功能模塊說明</b></p>
12、;<p> ?。?)顯示已初始化的全部航線信息</p><p> (2)瀏覽已訂票客戶信息</p><p> ?。?)根據客戶提出的終點站名,調用find()函數尋找航線信息,調用list()函數輸出航線信息</p><p> ?。?)辦理訂票業(yè)務:根據客戶提供的航班號進行查詢航線信息,若客戶訂票額超過乘員定票總額,退出,若客戶訂票額末超過余票量,訂
13、票成功并登記信息,在訂票乘員名單域中添加客戶信息;如果暫時沒有票,詢問客戶是否要排隊等侯,如果是,則在等候隊列增加該客戶的訂票信息。</p><p> ?。?)辦理退票業(yè)務:調用查詢函數,根據客戶提供的航線進行搜索根據客戶提供的姓名到訂票客戶名單域進行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據隊列中從出的客戶信息判斷是否滿足要求,如果滿足,則將該客戶的信息插入到乘客信息鏈表中。</p&g
14、t;<p><b> ?。?)退出本系統(tǒng)</b></p><p> 1.4算法的主要思路</p><p> 1.首先對界面的設計,可以對操作的人員來說簡單上手。對系統(tǒng)的應用都能進行相應的操作。</p><p> ?。?)設置管理員的功能。</p><p> ?。?)設置客戶的功能</p>
15、<p> ?。?)管理員的主要操作界面</p><p> ?。?)客戶的主要操作界面</p><p><b> ?。?)結束</b></p><p> 2.類dingpiao用來顯示客戶訂票的事件;</p><p><b> 基本思路如下:</b></p><p&g
16、t; ?。?) 客戶提交自己的詳細信息。</p><p> ?。?) 管理員處理相應的內容并給票給客戶。</p><p><b> ?。?) 訂票結束</b></p><p> 3.類tuipiao將處客戶的退票的信息,釋放存儲空間,基本思路如下:</p><p> ?。?) 客戶提交自己的詳細信息。</p>
17、;<p> (2) 管理員把客戶的票取出,</p><p> 1.4詳細設計及運行結果</p><p> ?。?)顯示已初始化的全部航線信息</p><p> 圖1-2已初始化的全部航線信息</p><p> ?。?)瀏覽已訂票客戶信息</p><p> 圖1-3瀏覽已訂票客戶信息</p&
18、gt;<p><b> ?。?)查詢航線</b></p><p><b> 圖1-4查詢航線</b></p><p><b> ?。?)辦理訂票業(yè)務</b></p><p> 圖1-5辦理訂票業(yè)務</p><p><b> ?。?)辦理退票業(yè)務<
19、;/b></p><p> 圖1-6辦理退票業(yè)務</p><p> ?。?)排序:sort_tkt()</p><p><b> 程序運行實例如下:</b></p><p><b> 1 主界面的進入</b></p><p> 圖1-6主界面的進入</p&
20、gt;<p> 2 管理員的相應功能</p><p> 圖1-7管理員的相應功能</p><p><b> 3 用戶的相應功能</b></p><p> 1-8圖用戶的相應功能</p><p> 4 管理員錄入訂票信息</p><p> 圖1-9管理員錄入訂票信息<
21、/p><p><b> 5 用戶訂票跟退票</b></p><p> 圖1-10用戶訂票跟退票</p><p> 1.5調試情況,設計技巧及體會</p><p><b> 1.總體過程</b></p><p> 編譯和調試工具:選擇Visual C++6.0,該工具穩(wěn)定
22、,其中有一個強大的調試工具,但我不是熟悉。還需要進一步的練習。</p><p> 2.在一周半的時間里,不斷地對程序及各模塊進行修改、編譯、調試、運行,其間遇到很多問題:</p><p> (1)因本人能力有限,在編寫的時候只使用了相對較為簡單的基礎語言 ,代替了相對較為復雜的語言,降低了運行效率。</p><p> ?。?)程序在起初設計的時候,經常出現溢出錯
23、誤,而且不只一處。為了修正這些溢出錯誤,耗費了大量的時間,修正解釋之后再看源程序,才發(fā)現原來只是因為開始的函數定義的數據類型出現了問題,對函數的定義不清楚,字符的不正確定義造成了后期大量的糾錯工作, </p><p> (3)由于忘記了一些c語言的規(guī)范使得在調試過程中一些錯誤沒有發(fā)現。例如,調用函數時,數組只需要傳遞數組名即可;字符‘0’和整形的0是不同的文明不可以直接對其畫等號。</p><
24、;p> ?。?)測試用例具有一定的廣泛性。運行程序時輸入了多種不同字符信息,經過多次修改結果達到了預期效果。說明程序具有一定的可靠性和穩(wěn)定性。</p><p> 3.通過調試我自己認為,在哈夫曼編碼譯碼系統(tǒng)中用出棧入棧進行哈夫曼譯碼編碼譯碼要簡單于使用數組,而使用結構體數組來存儲待編譯的字符,編碼譯碼時通過結構體數組來實現要優(yōu)于使用鏈表。</p><p><b> 4.
25、調試體會</b></p><p> 經過這次實習,我對調試掌握的更加熟練了,改變了過去只調試不知道如何對照程序語言修改程序的壞習慣,對調試也有了新的認識,意識到了程序語言的規(guī)范性以及我們在編程時要有嚴謹的態(tài)度,同時在寫程序時如果加一定量的注釋,既增加了程序的可讀性,也可以使自己在讀程序時更容易。 </p><p> 第2章 八皇后問題</p><p&
26、gt; 2.1 面對的問題 </p><p> 八皇后問題要求在一個8*8的棋盤上放上8個皇后,使得每一個皇后既攻擊不到另外七個皇后,也不被另外七個皇后所攻擊.按照國際象棋的規(guī)則,一個皇后可以攻擊與之處在同一行或同一列或同一斜線上的其他任何棋子.因此,八皇后問題等于要求八個皇后中的任意兩個不能被放在同一行或同一列或同一斜線上。 </p><p> 而本課程設計本人的目的也是通過用c+
27、+語言平臺將一個8*8的棋盤上放上8個皇后,使得每一個皇后既攻擊不到另外七個皇后,也不被另外七個皇后所攻擊的92種結構予以實現.使用遞歸方法最終將其問題變得一目了然,更加易懂。</p><p> 關鍵詞: 八皇后 ; c++ ; 遞歸法 </p><p> 1.解決沖突問題: </p><p> 這個問題包括了行,列,兩條對角線; </p>
28、;<p> 列:規(guī)定每一列放一個皇后,不會造成列上的沖突; </p><p> 行:當第I行被某個皇后占領后,則同一行上的所有空格都不能再放皇后,要把以I為下標的標記置為被占領狀態(tài);</p><p> 2. 使用數據結構的知識,用遞歸法解決問題。</p><p><b> 2.2需求分析</b></p>&l
29、t;p> 2.2.1 涉及到的知識</p><p> 本次課程設計中,用到的主要知識有:遞歸法的運用,for語句的靈活運用,數據結構中樹知識的靈活運用、棧及數組的掌握。</p><p> 2.2.2軟硬件的需求</p><p> 1.系統(tǒng)要求:win98以上操作系統(tǒng); </p><p> 2.語言平臺:tc++或vc++6.0
30、;</p><p> 2.2.3 功能需求</p><p> 當運行程序時,在屏幕上顯示每一種方法八個皇后的相對位置,要用比較直觀 的界面顯示。2.3概要設計</p><p> 本課件學生是用循環(huán)遞歸循環(huán)來實現的,分別一一測試了每一種擺法,并把它擁有的92種變化表現出來。在這個程序中,我的主要思路以及思想是這樣的: </p><p>
31、 1.解決沖突問題: </p><p> 這個問題包括了行,列,兩條對角線; </p><p> 列:規(guī)定每一列放一個皇后,不會造成列上的沖突; </p><p> 行:當第I行被某個皇后占領后,則同一行上的所有空格都不能再放皇后,要把以I為下標的標記置為被占領狀態(tài); </p><p> 對角線:對角線有兩個方向。在這我把這兩條對角線
32、稱為:主對角線和從對角線。在同一對角線上的所有點(設下標為(i,j)),要么(i+j)是常數,要么(i-j)是常數。因此,當第I個皇后占領了第J列后,要同時把以(i+j)、(i-j)為下標的標記置為被占領狀態(tài)。 </p><p> 2.數據結構的實現 </p><p> 而對于數據結構的實現,學生則是著重于: </p><p> 數組a[I]:a [I]表示第
33、I個皇后放置的列;I的范圍:1..8; </p><p> 對角線數組:b[j](主對角線),c[j](從對角線),根據程序的運行,去決定主從對角線是否放入皇后。</p><p> 2.4 詳細設計和實現</p><p> 2.4.1 算法描述</p><p><b> 1. 數據初始化。</b></p&g
34、t;<p> 2. 從n列開始擺放第n個皇后(因為這樣便可以符合每一豎列一個皇后的要求),先測試當前位置(n,m)是否等于0(未被占領)。如果是,擺放第n個皇后,并宣布占領(記得姚橫列豎列斜列一起設置),接著進行遞歸;如果不是,測試下一個位置(n,m+1),但是如果當n<=8,m=8時,發(fā)現此時已無法擺放時,便要進行回溯。從問題的某一種可能出發(fā),搜索從這種情況能出發(fā),繼續(xù)搜索,這種不斷“回溯”的尋找解的方法,稱為“
35、回溯法”。</p><p> 3.使用數組實現回溯法的思想。</p><p> 4.當n>8時,便打印出結果。</p><p> 5.輸出函數我使用printf輸出,運行形式為:第m種方法為:* * * * * * * * </p><p> 2.4.2 算法流程圖</p><p><b>
36、圖2-1初始化</b></p><p><b> 圖2-2結果</b></p><p><b> 2.5 程序調試</b></p><p> 調試過程、步驟及遇到的問題</p><p> 在完整程序調試時遇到幾個小問題,后經細心改正后才把調試工作做完。</p>&l
37、t;p> 例如:當用printf輸出時,出現了一些錯誤,幾經調試后,發(fā)現原來是缺少了stdio.h這樣一個頭文件,添加了頭文件后, 還出現了一些問題,邏輯錯誤導致程序死循環(huán)或不循環(huán)或循環(huán)一小部分,但是編譯時卻沒有錯誤,就是沒有正確的輸出答案,一開始我也不知道是怎么回事,通過和同學的交流,發(fā)現是邏輯錯誤,經過改正后,程序終于可以運行了.</p><p><b> 2.6運行與測試</b&g
38、t;</p><p><b> 運行演示</b></p><p><b> 圖2-3運行結果1</b></p><p> 圖2-4 運行結果2</p><p><b> 總 結</b></p><p> 通過了19周這個星期的程序設計,
39、我從中得到了許多的經驗以及軟件設計的一些新的思路;從這2個問題設計以及分析中,本人從中理解到了數據結構對于計算機軟件設計的重要性,它的使用,可以改變一個軟件的運行周期,也可以將軟件的思路從繁化簡,并且都能夠通過數據結構的相關引導,將本身以前編程思想進行擴充,發(fā)展;這也是在這次課程設計中我所掌握得到的。 </p><p> 但由于我的基本知識還不是那么扎實,也缺乏對軟件設計的經驗,在這過程中也出現了一些問題,如,
40、八皇后在變成初期由于沒真正體會到數據結構中“樹”在里面的運用,將程序往大一時c語言的方向發(fā)展,不自覺的采用了非遞歸的算法,結果大大增加了程序的復雜程度。并且也讓整個程序的時間復雜度變得更大;在后來學生對數據結構的第六章進行了比較深入的研讀,才發(fā)現了數據結構樹的實際運用的空間是相當的大,并且,通過了重溫樹的回溯,以及二叉樹的遍歷,最終將程序進行了一次較大的改造。并且通過思考,再將以前的數組知識加以運用才最終解決了這個問題,整個程序的算法的
41、可看性也有了相當的改進。 </p><p> 課程設計隨著時間的推移,也即將結束了,但這個學期數據結構的學習還是具有相當大的意義,它從一個程度上改變了我們的編程思想,如何將一個程序快速而又準備的進行編寫,進行編譯,都成為了我們思考的重點,也通過這一個學期的學習,我們將數據結構的思想帶入到了我們以后的編程學習中去。在這個階段,我也明白了,好的思想,不能提留于字面上的認知,還需要的是平時多練多寫一些相關的程序,并且
42、通過修改,加入新的算法去嘗試改變自己的一些編程思想。保持更新算法的速度,這才是關鍵。 </p><p> 課程設計已經接近尾聲了,但它給我的不只是程序設計上的滿足,更重要的是對自己編程思想的一次更新,以及對算法的一個全新的認識!</p><p><b> 參考文獻</b></p><p> [1] 蘇仕華,數據結構課程設計.-北京:機械
43、工業(yè)出版社,2005.5</p><p> [2] 于永彥,趙建洋.課程設計指導書.淮安:江蘇淮陰工學院 計算機工程系,2006</p><p> [3] 劉振安,劉燕君,孫忱. C++語言課程設計.北京:高等教育出版社,2003</p><p> [4] 陳志泊, 張海燕, 王春玲. Visual C++程序設計. 中國鐵道出版社 ,2005</
44、p><p> [5] 呂鳳哲,C++語言程序設計(第二版).北京:電子工業(yè)出版社,2005</p><p> [6] 殷人昆,陶永雷等.數據結構(用面向對象方法與C++ ).北京:清華大學出版社,1999</p><p> [7] 嚴蔚敏,吳偉民,數據結構.北京:清華大學出版社,1997</p><p> [8] 李春葆.數據結構
45、—考研指導.北京:清華大學出版社,2002</p><p> [9] 陳慧南.數據結構—C++語言描述.北京:人民郵電出版社,2005.03</p><p><b> 附錄:源代碼</b></p><p> 4.1/*航空票務管理系統(tǒng)源代碼*/</p><p> #include <stdio.h>
46、</p><p> #include <stdlib.h></p><p> #include <string.h></p><p> #define MAXSIZE 3 /*定義航線量的最大值*/</p><p> typedef struct wat_ros</p><p> {
47、 char name[10];/*姓名*/</p><p> int req_amt;/*訂票量*/</p><p> struct wat_ros *next;</p><p> }qnode,*qptr;</p><p> typedef struct pqueue</p><p> { qptr fr
48、ont;/*等候替補客戶名單域的頭指針*/</p><p> qptr rear;/*等候替補客戶名單域的屬指針*/</p><p> }linkqueue;</p><p> typedef struct ord_ros</p><p> { char name[10];/*客戶姓名*/</p><p>
49、 int ord_amt;/*訂票量*/</p><p> int grade;/*艙位等級*/</p><p> struct ord_ros *next;</p><p> }linklist;</p><p> struct airline</p><p> { char ter_name[10];
50、/*終點站名 */</p><p> char air_num[10];/*航班號*/</p><p> char plane_num[10];/*飛機號*/</p><p> char day[7];/*飛行周日(星期幾)*/</p><p> int tkt_amt;/*乘員定額*/</p><p> i
51、nt tkt_sur;/*余票量*/</p><p> linklist *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/</p><p> linkqueue wait;/*等候替補的客戶名單域,分別指向排隊等候名單隊頭隊尾的指針*/</p><p> }lineinfo;</p><p> struct airline
52、*start;</p><p> void display(struct airline *info)</p><p> /*打印每條航線的基本信息*/</p><p> {printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n",info->ter_name,info->air_num,info-&g
53、t;plane_num,info->day,info->tkt_amt,info->tkt_sur);</p><p><b> }</b></p><p> void list()/*打印全部航線信息*/</p><p> { struct airline *info;</p><p><
54、;b> int i=0;</b></p><p> info=start;</p><p> printf("終點站名\t航班號\t飛機號\t飛行周日\t乘員定額\t余票量\n");</p><p> while(i<MAXSIZE){</p><p> display(info);<
55、;/p><p><b> info++;</b></p><p><b> i++;</b></p><p><b> }</b></p><p> printf("\n\n");</p><p><b> }<
56、/b></p><p> void search()</p><p> /*根據客戶提出的終點站名輸出航線信息*/</p><p> { struct airline *info,*find();</p><p> char name[10];</p><p><b> int i=0;&l
57、t;/b></p><p> info=start;</p><p> printf("請輸入終點站名:");</p><p> scanf("%s",name);</p><p> while(i<MAXSIZE) {</p><p> if(!strcm
58、p(name,info->ter_name)) break;</p><p><b> info++;</b></p><p><b> i++;</b></p><p><b> }</b></p><p> if(i>=MAXSIZE)</p>
59、;<p> printf("對不起,該航線未找到!\n");</p><p><b> else{</b></p><p> printf("終點站名\t航班號\t飛機號\t飛行周日\t乘員定額\t余票量\n");</p><p> display(info);</p>
60、<p><b> }</b></p><p><b> }</b></p><p> struct airline *find()</p><p> /*根據系統(tǒng)提出的航班號查詢并以指針形式返回*/</p><p> { struct airline *info;</p
61、><p> char number[10];</p><p><b> int i=0;</b></p><p> info=start;</p><p> printf("請輸入航班號:");</p><p> scanf("%s",number);
62、</p><p> while(i<MAXSIZE) {</p><p> if(!strcmp(number,info->air_num)) return info;</p><p><b> info++;</b></p><p><b> i++;</b></p>
63、;<p><b> }</b></p><p> printf("對不起,該航線末找到!\n");</p><p> return NULL;</p><p><b> }</b></p><p> void prtlink()</p>&l
64、t;p> /*打印訂票乘員名單域的客戶名單信息*/</p><p> { linklist *p;</p><p> struct airline *info;</p><p> info=find();</p><p> p=info->order;</p><p> if(p!=NULL)
65、{</p><p> printf("客戶姓名 訂票數額 艙位等級\n");</p><p><b> while(p){</b></p><p> printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);</p>
66、;<p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p> printf("該航線沒有客戶信息!!\n");<
67、/p><p><b> }</b></p><p> linklist *insertlink(linklist *head,int amount,char name[],int grade)</p><p> /*增加訂票乘員名單域的客戶信息*/</p><p> { linklist *p1,*new;<
68、/p><p><b> p1=head;</b></p><p> new=(linklist *)malloc(sizeof(linklist));</p><p> if(!new) {printf("\nOut of memory!!\n");return NULL;}</p><p> s
69、trcpy(new->name,name);</p><p> new->ord_amt=amount;</p><p> new->grade=grade;</p><p> new->next=NULL;</p><p> if(head==NULL)/*若原無訂票客戶信息*/</p><
70、;p> {head=new;new->next=NULL;}</p><p><b> else</b></p><p><b> head=new;</b></p><p> new->next=p1;</p><p> return head;</p>
71、<p><b> }</b></p><p> linkqueue appendqueue(linkqueue q,char name[],int amount)</p><p> /*增加排隊等候的客戶名單域*/</p><p> { qptr new;</p><p> new=(qptr)mal
72、loc(sizeof(qnode));</p><p> strcpy(new->name,name);</p><p> new->req_amt=amount;</p><p> new->next=NULL;</p><p> if(q.front==NULL)/*若原排隊等候客戶名單域為空*/</p&g
73、t;<p> q.front=new;</p><p><b> else</b></p><p> q.rear->next=new;</p><p> q.rear=new;</p><p><b> return q;</b></p><p&g
74、t;<b> }</b></p><p> void order()</p><p> /*辦理訂票業(yè)務*/</p><p> { struct airline *info;</p><p> int amount,grade;</p><p> char name[10];<
75、/p><p> info=start;</p><p> if(!(info=find())) return;/*根據客戶提供的航班號進行查詢,如為空,退出該模塊*/</p><p> printf("請輸入你訂票所需要的數量:");</p><p> scanf("%d",&amount)
76、;</p><p> if(amount>info->tkt_amt)/*若客戶訂票額超過乘員定票總額,退出*/</p><p> { printf("\n對不起,您輸入的票的數量已經超過乘員定額!");</p><p><b> return;</b></p><p><b
77、> }</b></p><p> if(amount<=info->tkt_sur)/*若客戶訂票額末超過余票量,訂票成功并等記信息*/</p><p><b> {</b></p><p><b> int i;</b></p><p> printf(&q
78、uot;請輸入您的姓名(訂票客戶):");</p><p> scanf("%s",name);</p><p> printf("請輸入%s票的艙位等級:",name);</p><p> scanf("%d",&grade);</p><p> info
79、->order=insertlink(info->order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/</p><p> for(i=0;i<amount;i++)/*依次輸出該訂票客戶的座位號*/</p><p> printf("%s的座位號是:%d\n",name,info->tkt_amt-info
80、->tkt_sur+i+1);</p><p> info->tkt_sur-=amount;/*該航線的余票量應減掉該客戶的訂票量*/</p><p> printf("\n祝您乘坐愉快!\n");</p><p><b> }</b></p><p> else /
81、*若滿員或余票額少于訂票額,詢問客戶是否需要進行排隊等候*/</p><p> { char r;</p><p> printf("\n已經沒有更多的票,您需要排隊等候嗎?(Y/N)");</p><p> r=getch();</p><p> printf("%c",r);</p&
82、gt;<p> if(r=='Y'||r=='y')</p><p> { printf("\n請輸入您的姓名(排隊訂票客戶):");</p><p> scanf("%s",name);</p><p> info->wait=appendqueue(info-&
83、gt;wait,name,amount);/*在排隊等候乘員名單域中添加客戶信息*/</p><p> printf("\n注冊成功!\n");</p><p><b> }</b></p><p> else printf("\n歡迎您下次再次訂購!\n");</p><p&g
84、t;<b> }</b></p><p><b> }</b></p><p> void return_tkt()</p><p><b> /*退票模塊*/</b></p><p> { struct airline *info;</p><
85、p> qnode *t,*back,*f,*r;</p><p> int grade;</p><p> linklist *p1,*p2,*head;</p><p> char cusname[10];</p><p> if(!(info=find())) return;/*調用查詢函數,根據客戶提供的航線進行搜索*/
86、</p><p> head=info->order;</p><p><b> p1=head;</b></p><p> printf("請輸入你的姓名(退票客戶):");</p><p> scanf("%s",cusname);</p><
87、p> while(p1!=NULL) {/*根據客戶提供的姓名到訂票客戶名單域進行查詢*/</p><p> if(!strcmp(cusname,p1->name)) break;</p><p> p2=p1;p1=p1->next;</p><p><b> }</b></p><p>
88、 if(p1==NULL){ printf("對不起,你沒有訂過票!\n");return;}/*若未找到,退出本模塊*/</p><p> else{/*若信息查詢成功,刪除訂票客戶名單域中的信息*/</p><p> if(p1==head) head=p1->next;</p><p> else p2->next=p1-
89、>next;</p><p> info->tkt_sur+=p1->ord_amt;</p><p> grade=p1->grade;</p><p> printf("%s成功退票!\n",p1->name);</p><p><b> free(p1);</b&
90、gt;</p><p><b> }</b></p><p> info->order=head;/*重新將航線名單域指向訂票單鏈表的頭指針 */</p><p> f=(info->wait).front;/*f指向排隊等候名單隊列的頭結點*/</p><p> r=(info->wait).
91、rear;/*r指向排隊等候名單隊列的尾結點*/</p><p> t=f;/*t為當前滿點條件的排隊候補名單域*/</p><p><b> while(t)</b></p><p><b> {</b></p><p> if(info->tkt_sur>=info->
92、wait.front->req_amt){/*若滿足條件者為頭結點*/</p><p><b> int i;</b></p><p> info->wait.front=t->next;</p><p> printf("%s訂票成功!\n",t->name);</p><
93、p> for(i=0;i<t->req_amt;i++)/*輸出座位號*/</p><p> printf("%s的座位號是:%d\n",t->name,(info->tkt_sur)-i);</p><p> info->tkt_sur-=t->req_amt;</p><p> info-&g
94、t;order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到訂票客戶名單鏈表中*/</p><p><b> free(t);</b></p><p><b> break;</b></p><p><b> }</b&
95、gt;</p><p> back=t;t=t->next;</p><p> if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若滿足條件者不為頭結點*/</p><p><b> { int i;</b></p><p> bac
96、k->next=t->next;</p><p> printf("%s訂票成功!\n",t->name);</p><p> for(i=0;i<t->req_amt;i++)/*輸出座位號*/</p><p> printf("<%s>'s seat number is:%d\
97、n",t->name,(info->tkt_sur)-i);</p><p> info->tkt_sur-=t->req_amt;</p><p> info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到訂票客戶名單鏈表中*/</p>
98、<p> free(t);break;</p><p><b> }</b></p><p> if(f==r) break;</p><p><b> }</b></p><p><b> }</b></p><p> int m
99、enu_select()</p><p><b> /*菜單界面*/</b></p><p><b> { int c;</b></p><p> char s[20];</p><p> printf("\n\t\t航空客運訂票系統(tǒng)\n");</p>&
100、lt;p> printf("******************************************\n");</p><p> printf("1.瀏覽航線信息:\n");</p><p> printf("2.瀏覽已訂票客戶信息:\n");</p><p> printf(&q
101、uot;3.查詢航線\n");</p><p> printf("4.辦理訂票業(yè)務:\n");</p><p> printf("5.辦理退票業(yè)務:\n");</p><p> printf("6.退出系統(tǒng)\n");</p><p> printf("**
102、*****************************************\n");</p><p><b> do{</b></p><p> printf("請選擇:");</p><p> scanf("%s",s);</p><p> c=atoi
103、(s);</p><p> }while(c<0||c>7);</p><p><b> return c;</b></p><p><b> }</b></p><p><b> main()</b></p><p> { st
104、ruct airline air[MAXSIZE]={{"beijing","1","B8571","SUN",3,3},</p><p> {"shanghai","2","S1002","MON",2,2},</p><p>
105、 {"london","3","L1003","FRI",1,1}};/*初始化航線信息*/</p><p> /* clrscr();*/</p><p> start=air;</p><p><b> for(;;){</b></p>
106、<p> switch(menu_select()){</p><p> case 1:list();break;</p><p> case 2:prtlink();break;</p><p> case 3:search();break;</p><p> case 4:order();break;</p>
107、;<p> case 5:return_tkt();break;</p><p> case 6:printf("\n歡迎使用本系統(tǒng),再見!\n");exit(0);</p><p><b> }</b></p><p> printf("\nPress any key to continue
108、!\n");</p><p><b> getch();</b></p><p><b> }</b></p><p> 4.2八皇后代碼編寫及詳細注釋</p><p> #include <conio.h></p><p> #include
109、 <math.h></p><p> #include <stdlib.h></p><p> #include <stdio.h></p><p> #include <iostream.h></p><p> #define QUEENS 8</p><p>
110、 int iCount = 0; //!記錄解的序號的全局變量。</p><p> int Site[QUEENS]; //!記錄皇后在各行上的放置位置的全局數組。</p><p> void Queen(int n); //!遞歸求解的函數。</p><p> void Output();//!輸出一個解。</p><p>
111、 int IsValid(int n); </p><p> //!判斷第n個皇后放上去之后,是否有〉沖突。</p><p> void main() /*----------------------------Main:主函數。----------------------------*/</p><p> { system("title
112、 葉青--遞歸算法八皇后問題 ");</p><p> cout<<" "<<"八皇后的解法:"<<endl;</p><p> cout<<" "<<"---------------------
113、----------------"<<endl; </p><p> Queen(0); //!從第0行開始遞歸試探。 </p><p> getch();//!按任意鍵返回。</p><p><b> }</b></p><p> void Queen(int n) /*--
114、---------------Queen:遞歸放置第n個皇后,程序的核心!----------------*/</p><p> { int i; </p><p> if(n == QUEENS) //!參數n從0開始,等于8時便試出了一個解,將它輸出并回溯。 </p><p> { Output(); return
115、; } </p><p> for(i = 1 ; i <= QUEENS ; i++) //!n還沒到8,在第n行的各個行上依次試探。 </p><p> { Site[n] = i; //!在該行的第i行上放置皇后。 </p><p> if(IsValid(n)) //!如果放置沒有沖突,就開始下一行
116、的試探。 </p><p> Queen(n + 1); }}</p><p> int IsValid(int n) /*------IsValid:判斷第n個皇后放上去之后,是否合法,即是否無沖突。------*/</p><p> { int i; </p><p> for(i = 0 ; i
117、 < n ; i++) //!將第n個皇后的位置依次于前面n-1個皇后的位置比較。 </p><p> { if(Site[i] == Site[n]) //!兩個皇后在同一列上,返回0。 </p><p> return 0; </p><p> if(abs(Site[i] - Site[n]) == (n
118、- i)) //!兩個皇后在同一對角線上,返回0。 </p><p> return 0; } </p><p> return 1; //!沒有沖突,返回1。</p><p><b> }</b></p><p> void Output()/*------------Output:輸出
119、一個解,即一種沒有沖突的放置方案。------------*/</p><p><b> { </b></p><p><b> int i; </b></p><p> printf("No.%-5d" , ++iCount); //!輸出序號。 </p><p&
120、gt; for(i = 0 ; i < QUEENS ; i++)//!依次輸出各個行上的皇后的位置,即所在的列數。 </p><p> printf("%d " , Site[i]); </p><p> printf("\n");</p><p><b> } </b>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數據結構課程設計---航空訂票系統(tǒng)
- 數據結構課程設計---航空訂票系統(tǒng)
- 數據結構課程設計-航空訂票系統(tǒng)
- 數據結構課程設計---航空訂票系統(tǒng)
- 數據結構航空訂票系統(tǒng)課程設計報告
- 航空客運訂票系統(tǒng)課程設計(數據結構)
- 數據結構課程設計--航空客運訂票系統(tǒng)
- 數據結構課程設計報告---航空客運訂票系統(tǒng)
- 數據結構航空航班課程設計--航空客運訂票系統(tǒng)
- 航空客運訂票系統(tǒng)數據結構課程設計源代碼
- 數據結構課程設計---飛機訂票系統(tǒng)設計與實現
- 航空訂票系統(tǒng)數據庫課程設計
- 數據庫課程設計-- 航空訂票管理系統(tǒng)
- 航空訂票管理系統(tǒng)課程設計
- 課程設計報告-航空訂票系統(tǒng)
- 數據結構課程設計c語言版飛機 訂票 系統(tǒng)資料
- 數據結構課程設計--數據結構課程設計----huffman編碼
- 課程設計---航空客運訂票系統(tǒng)
- 航空客運訂票系統(tǒng)課程設計
- java課程設計-航空訂票管理系統(tǒng)設計
評論
0/150
提交評論