數(shù)據(jù)結構與算法課程設計報告_第1頁
已閱讀1頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  《數(shù)據(jù)結構與算法》</b></p><p><b>  課程設計報告</b></p><p><b>  目 錄</b></p><p>  1.課程設計目的………………………………………………………………………2</p><p>  2.課程設

2、計題目及要求………………………………………………………………2</p><p>  2.1一元多項式加法、減法、乘法運算的實現(xiàn)………………………………………2</p><p>  2.2校園導游咨詢 ……………………………………………………………………3</p><p>  2.3簡單文本編輯器設計與實現(xiàn) ……………………………………………………3</p>

3、;<p>  2.4利用單鏈表實現(xiàn)學生成績管理系統(tǒng) ……………………………………………4</p><p>  2.5課程設計要求 ……………………………………………………………………5</p><p>  3.詳細設計描述………………………………………………………………………5</p><p>  3.1運行環(huán)境 …………………………………………………

4、………………………5</p><p>  3.2系統(tǒng)流程圖 ………………………………………………………………………6</p><p>  3.3主控main函數(shù)……………………………………………………………………7</p><p>  3.4一元多項式加法、減法、乘法運算的實現(xiàn)………………………………………8</p><p>  3.5校園導

5、游咨詢……………………………………………………………………13</p><p>  3.6簡單文本編輯器設計與實現(xiàn)……………………………………………………17</p><p>  3.7利用單鏈表實現(xiàn)學生成績管理系統(tǒng)……………………………………………23</p><p>  4.總結………………………………………………………………………………31</p>

6、<p>  4.1開發(fā)經(jīng)驗…………………………………………………………………………31</p><p>  4.2不足之處…………………………………………………………………………32</p><p>  4.3感謝和心得體會…………………………………………………………………32</p><p>  參考文獻 …………………………………………………………

7、…………………33</p><p><b>  課程設計目的</b></p><p>  《數(shù)據(jù)結構》主要介紹一些最常用的數(shù)據(jù)結構,闡明各種數(shù)據(jù)結構內(nèi)在的邏輯關系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現(xiàn)算法,并對算法的效率進行簡單的分析和討論。數(shù)據(jù)結構是介于數(shù)學、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設計、數(shù)據(jù)庫、操作

8、系統(tǒng)、編譯原理及人工智能等的重要基礎,廣泛的應用于信息學、系統(tǒng)工程等各種領域。</p><p>  數(shù)據(jù)結構課程設計是為數(shù)據(jù)結構課程獨立開設的實踐性教學環(huán)節(jié)。數(shù)據(jù)結構課程設計對于鞏固數(shù)據(jù)結構知識,加強學生的實際動手能力和提高學生綜合素質(zhì)是十分必要的。課程設計的目的:</p><p>  1.要求學生達到熟練掌握C語言的基本知識和技能。</p><p>  2.了解并

9、掌握數(shù)據(jù)結構與算法的設計方法,具備初步的獨立分析和設計能力。</p><p>  3.提高程序設計和調(diào)試能力。學生通過上機實習,驗證自己設計的算法的正確性。學會有效利用基本調(diào)試方法,迅速找出程序代碼中的錯誤并且修改。</p><p>  4.培養(yǎng)算法分析能力。分析所設計算法的時間復雜度和空間復雜度,進一步提高程序設計水平。</p><p>  5.初步掌握軟件開發(fā)過

10、程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能。</p><p><b>  課程設計題目及要求</b></p><p>  一元多項式加法、減法、乘法運算的實現(xiàn)</p><p>  設計要求:設計一個程序,能夠完成兩個一元多項式作加法、減法、乘法,給出明確的等式形式。</p><p>  設計思路:使用順序存儲

11、結構儲存多項式各項的系數(shù)與指數(shù),利用線性表的插入、刪除等功能就能完成多項式的加法、減法、乘法運算。</p><p><b>  校園導游咨詢</b></p><p>  設計要求:設計一個校園導游程序,為來訪的客人提供各種信息咨詢服務,包括:</p><p>  1.設計所在的學校的校園平面圖,所含景點不少于5個。以圖中頂點表示校內(nèi)各景點,存放

12、景點的名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關信息。</p><p>  2.為來訪客人提供圖中任意景點相關信息的咨詢。</p><p>  3.為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨蓚€景點之間的一條最短的簡單路徑。</p><p>  設計思路:利用圖的順序存儲結構將校園內(nèi)各景點間關系用鄰接矩陣的方式存儲到計算機,圖的頂點能夠表示各個景

13、點,各頂點的連線上的權值表示兩個景點之間的距離。利用Floyd算法求出兩個景點的最短路徑,并將路徑長度及經(jīng)過各點顯示出來。</p><p>  簡單文本編輯器設計與實現(xiàn)</p><p>  設計要求:輸入一頁文字,采用動態(tài)存儲結構存儲一頁文章,每行最多不超過80個字符,共N行。</p><p><b>  功能如下:</b></p>

14、<p>  1.分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字數(shù)。</p><p>  2.統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù)。</p><p>  3.在指定行前插入文本,刪除指定行文本。</p><p>  4.查找定位某個單詞在文本中的位置。</p><p>  5.裝入和保存文本。</p>&l

15、t;p>  設計思路:利用雙向鏈表存儲結構存儲文章,每行文字存儲在數(shù)組中,不超過80個字,行數(shù)保存為num。對每行文本從頭到尾進行循環(huán),讀入一個字符進行計算以統(tǒng)計文本中的中英文字母數(shù)和空格數(shù)及整篇文章的總字數(shù)。通過對數(shù)組中字符串的操作完成查找定位的功能。通過對每行文本行號的處理能夠完成刪除一行或在某行前插入文本的功能。</p><p>  利用單鏈表實現(xiàn)學生成績管理系統(tǒng)</p><p&g

16、t;  設計要求:利用單鏈表存儲結構實現(xiàn)學生成績管理系統(tǒng),支持基本的數(shù)據(jù)錄入、刪除、查找、修改、統(tǒng)計和文件讀寫功能。整個系統(tǒng)由五大功能模塊組成:</p><p>  1.輸入記錄:主要完成將數(shù)據(jù)存入單鏈表中的工作。</p><p>  2.查詢記錄:可按學生的姓名或學號查詢。</p><p>  3.更新記錄:對記錄的修改、刪除、插入、排序。</p>

17、<p>  4.統(tǒng)計記錄:完成對各門功課最高分和不及格人數(shù)的統(tǒng)計。</p><p>  5.輸出記錄:實現(xiàn)屏幕顯示和將單鏈表中存儲的記錄信息寫入數(shù)據(jù)文件中。</p><p>  設計思路:采用模塊化設計的方法,將本系統(tǒng)分為輸入模塊、查詢模塊、更新模塊、統(tǒng)計模塊和輸出模塊。分別對每個模塊進行設計,最后利用統(tǒng)一調(diào)用的函數(shù)就能完成系統(tǒng)的復雜功能。輸入模塊將學生姓名、學號、各科成績等數(shù)據(jù)

18、存入單鏈表中。查詢模塊通過對學生的姓名、學號在單鏈表中進行查詢,若能找到滿足查詢條件的記錄,就返回該學生記錄的指針,否則返回NULL空指針。更新模塊能夠完成特定記錄的修改、刪除、插入和排序。統(tǒng)計模塊可以按照學生各門功課的最高分數(shù)或不及格人數(shù)進行統(tǒng)計。輸出模塊能夠將單鏈表中存儲的數(shù)據(jù)顯示在終端或導出到數(shù)據(jù)文件中。</p><p><b>  課程設計要求</b></p><

19、p>  數(shù)據(jù)結構課程設計用C編程實現(xiàn)。</p><p>  課程設計的一般步驟:</p><p>  1.問題描述與分析:根據(jù)設計題目的要求,充分地分析和理解問題,明確問題要求做什么?限制條件是什么? </p><p>  2.數(shù)據(jù)結構設計:為實現(xiàn)每個功能選擇的邏輯結構和存儲結構,分析原因及合理性。</p><p>  3.軟件結構設計

20、:設計軟件模塊之間的結構。</p><p>  4.算法設計:算法的設計及算法分析。每個部分的算法設計說明,可以用流程圖描述算法。</p><p>  5.程序編碼:把詳細設計的結果進一步求精為程序設計語言程序。源程序要按照軟件工程的規(guī)則來編寫,要求結構清晰,重要功能部分要加上清晰的程序注釋。</p><p>  6.調(diào)試分析:掌握調(diào)試工具的各種功能,設計測試數(shù)據(jù),

21、測試輸出的結果。并進行算法的時間復雜度和空間復雜度的分析。</p><p>  7.總結:課程設計過程的收獲,遇到問題以及解決問題的思路和方法,程序調(diào)試能力的思考,對數(shù)據(jù)結構這門課程的認識及思考等。</p><p>  8.編寫課程設計報告</p><p><b>  詳細設計描述</b></p><p><b&g

22、t;  運行環(huán)境</b></p><p>  開發(fā)環(huán)境:Microsoft Visual C++ 6.0。Visual C++(簡稱VC)是Microsoft公司推出的目前使用極為廣泛的基于Windows平臺的C++可視化開發(fā)環(huán)境。Visual C++ 6.0提供的控制臺應用程序對學習和掌握標準C++內(nèi)容非常有利?!翱梢暋钡馁Y源編輯器與MFC類以及應用程序向導,為快速高效地開發(fā)出功能強大的Window

23、s應用程序提供了極大的方便。利用Visual C++ 6.0進行Internet、數(shù)據(jù)庫及多媒體等多方面的程序開發(fā)也很容易。</p><p><b>  系統(tǒng)流程圖</b></p><p><b>  主控main函數(shù)</b></p><p>  3.3.1main函數(shù)執(zhí)行流程圖</p><p> 

24、 3.3.2main函數(shù)測試分析</p><p>  進入主界面中后能夠選擇0-4功能,按對應按鍵就能夠通過調(diào)用相關函數(shù)實現(xiàn)對應功能。</p><p>  一元多項式加法、減法、乘法運算的實現(xiàn)</p><p>  3.4.1數(shù)據(jù)結構設計</p><p>  3.4.2函數(shù)執(zhí)行流程</p><p>  3.4.3函數(shù)功能

25、描述</p><p>  int statuspol(pol *p)函數(shù)的功能為判斷當前多項式的狀態(tài)。如果當前多項式不存在則返回-1,如果當前多項式為空則返回0,如果當前多項式不為空則返回1。該函數(shù)在以下幾個函數(shù)中有很重要的作用。</p><p>  pol *initpol()函數(shù)的功能為初始化順序存儲結構的多項式,并返回順序表表示的多項式的首地址。若內(nèi)存空間滿無法創(chuàng)建新順序表則返回NU

26、LL,不為滿則返回創(chuàng)建的多項式p。</p><p>  void resetpol(pol *p)函數(shù)的功能為重置一個多項式。利用if循環(huán)清空p->last直到利用statuspol(p)函數(shù)判斷函數(shù)當前狀態(tài)為空為止。</p><p>  int locpol(pol *p,term x)函數(shù)的功能為在多項式p中查找與x項指數(shù)相同的項是否存在,存在則返回1,不存在則返回0。在查找前先

27、調(diào)用statuspol (p)函數(shù)判斷當前多項式是否為空,若為空則直接返回0,若不為空則繼續(xù)查找。</p><p>  int inspol(pol *p,term x)函數(shù)的功能為在多項式p中插入一個指數(shù)項x,并使多項式按照指數(shù)降序排列。</p><p>  int createpol(pol *p,int n)函數(shù)的功能為創(chuàng)建一個包含n項系數(shù)和指數(shù)的一元多項式的有序表p,程序依次判斷多

28、項式是否不存在、項數(shù)是否大于MAXSIZE的限制,若滿足以上條件則進入循環(huán)輸入n項系數(shù)和指數(shù)。循環(huán)結束后返回1表示創(chuàng)建成功。</p><p>  char compare(term term1,term term2)函數(shù)的功能為判斷兩個項指數(shù)之間的大小關系。若term1指數(shù)項大于term2指數(shù)項則返回大于號‘>’,若term1指數(shù)項小于term2指數(shù)項則返回小于號‘<’,若term1指數(shù)項等于term

29、2指數(shù)項則返回等于號‘=’。該函數(shù)在下面的函數(shù)中有重要作用。</p><p>  pol *addpol(pol *p1,pol *p2)函數(shù)的功能為將多項式p1與p2相加并生成一個新的多項式,然后將其返回。首先判斷兩個多項式中是否有多項式不存在,然后利用compare函數(shù)判斷多項式各項的指數(shù)大小,若指數(shù)項不相等,則將指數(shù)項大的一項存入新創(chuàng)建的p3中,若兩項指數(shù)相等,則將兩項系數(shù)相加后存入p3中。若相加結束后某個

30、多項式有剩余項則將剩余項全部存入p3中。</p><p>  pol *subpol(pol *p1,pol *p2)函數(shù)的功能為將多項式p1與p2相減并生成一個新的多項式,然后將其返回。首先判斷兩個多項式中是否有多項式不存在,然后將多項式p2中的每一項變?yōu)橄喾磾?shù)并存入新創(chuàng)建的p3中,然后將p1與p3進行相加就能完成減法操作。</p><p>  pol *mulitpol(pol *p1

31、,pol *p2)函數(shù)的功能為將多項式p1與多項式p2相乘并生成一個新的多項式,然后將其返回。首先判斷兩個多項式中是否有多項式不存在,然后創(chuàng)建若干個空多項式,將每項相乘的結果存入空多項式中然后將新生成的p3與若干個空多項式相加就能完成乘法運算。</p><p>  void printpol(pol *p)函數(shù)的功能為將多項式中的每個元素顯示出來。</p><p>  void menup

32、ol()函數(shù)的功能是顯示選項菜單。</p><p>  void main1()函數(shù)的功能為一元多項式程序的調(diào)用部分。分別創(chuàng)建多項式p1,p2,p3,然后進入while循環(huán)。首先判斷多項式是否存在,如果存在,則將多項式顯示出來,便于用戶選擇其他功能。若不存在,則提示用戶先創(chuàng)建多項式再使用其他功能。利用switch函數(shù)分別判斷輸入選項并調(diào)用對應功能。若輸入0則返回主菜單。</p><p> 

33、 3.4.4程序測試分析</p><p>  進入程序后,選擇1進入“一元多項式加法、減法、乘法運算的實現(xiàn)”,打開程序主界面。</p><p>  剛進入程序時系統(tǒng)中沒有記錄任何多項式,主菜單中提示用戶先創(chuàng)建多項式。選擇1創(chuàng)建多項式。按照屏幕提示輸入相關內(nèi)容就能夠創(chuàng)建2個一元多項式。創(chuàng)建完畢后按任意鍵就能夠返回主菜單。</p><p>  返回主菜單后,主菜單鐘就能

34、夠顯示剛剛創(chuàng)建的2個多項式,現(xiàn)在就能夠使用其他的功能了。</p><p>  選擇2可以將剛才建立的2個多項式相加,并得出結果。</p><p>  按任意鍵返回主菜單后選擇3就能夠將建立的2個多項式相減,并將結果打印輸出在顯示器上。</p><p>  繼續(xù)按任意鍵返回,選擇4就能將2個多項式相乘并將結果打印輸出在顯示器上。</p><p>

35、;  返回主菜單后選擇5就能將剛才創(chuàng)建的2個多項式重置。重置后因為多項式不存在,所以主菜單上會提示用戶如果要使用其他功能,就需要創(chuàng)建多項式。</p><p>  功能使用完畢后按0就能夠返回課程設計程序主菜單,選擇其他功能或退出程序。</p><p>  3.4.5程序調(diào)試分析</p><p>  在調(diào)試的過程中,經(jīng)常出現(xiàn)一些小問題。比如,在將多項式輸入的過程中,顯

36、示出來的多項式往往沒有按照指數(shù)項的大小由高到低排列,經(jīng)過排查問題后發(fā)現(xiàn)問題出在inspol()函數(shù)中,通過調(diào)整相關循環(huán)函數(shù),輸出的結果得到了修正。</p><p>  其次,因為程序多處使用了system(“cls”)命令進行清屏,這樣雖然能夠保持屏幕干凈整潔,但同時也帶來了一些問題。例如,用戶輸入多項式回到主菜單后無法得知剛才輸入的內(nèi)容,會給用戶帶來困擾,因此在修改的過程中在主界面添加了提示信息,如果用戶沒有輸

37、入多項式或者清空了多項式就提醒用戶先創(chuàng)建多項式,如果用戶已經(jīng)創(chuàng)建了多項式,就將多項式顯示在主界面上,方便用戶進行其他操作。</p><p><b>  校園導游咨詢</b></p><p>  3.5.1數(shù)據(jù)結構設計</p><p>  3.5.2函數(shù)執(zhí)行流程</p><p>  3.5.3函數(shù)功能描述</p>

38、;<p>  void introduce()函數(shù)的功能是對校園內(nèi)各個景點的介紹。首先進入while循環(huán),將學校內(nèi)各個景點顯示出來,提示用戶輸入對應編碼查詢對應景點信息。用戶查詢完對應的信息后詢問用戶是否需要繼續(xù)查詢其他景點,如果需要則繼續(xù)輸入景點編號,如果不需要則返回主界面。</p><p>  void mindis()函數(shù)的功能是顯示兩景點間最短路徑及最短距離。進入while循環(huán)后顯示學校景點

39、列表,詢問用戶需要查找兩點的名稱并判斷是否合法,然后調(diào)用floyed()函數(shù)對兩點間路徑進行計算并將結果顯示出來。</p><p>  void floyed()函數(shù)的功能是利用floyed算法求兩景點的最短路徑。首先將圖用鄰接矩陣cost表示出來,如果從Vi到Vj有路可達,則cost[i][j]=d,d表示該路的長度;否則cost[i][j]為空。定義一個矩陣path用來記錄所插入點的信息,path[i][j]

40、表示從Vi到Vj需要經(jīng)過的點,初始化path[i][j]=j。把各個頂點插入圖中,比較插點后的距離與原來的距離,cost[i][j]=min(cost[i][j],cost[i][j]+cost[k][j]),如果cost [i][j]的值變小,則path[i][j]=k。在cost中包含兩點之間最短道路的信息,而在D中則包含了最短通路徑的信息。再將最短通路徑各邊上的權值相加保存到min[i][j]中就表示從Vi到Vj兩點路徑的長度。&

41、lt;/p><p>  void main2()函數(shù)為校園導游系統(tǒng)的調(diào)用函數(shù)。首先將圖中的權值輸入到cost數(shù)組中。進入while循環(huán),利用switch語句判斷用戶選擇的功能并調(diào)用相關函數(shù)完成對應功能。</p><p>  3.5.4 景點分布圖及各點間權值(單位:米)</p><p>  1.學校正門 2.圖書館總館 3.百花園 4.中區(qū)廣場 5.體育場<

42、;/p><p>  6.體育館 7.大學生活動中心 8.11號教學樓 9.黃埔廣場</p><p>  10.英語角 11.18號教學樓 12.南二門</p><p>  3.5.5程序測試分析</p><p>  進入程序后,選擇2進入“校園導游咨詢”,打開程序主界面。</p><p>  選擇1進入景點信息查

43、詢。選擇對應景點就能夠查詢景點的詳細信息。</p><p>  查詢結束后詢問用戶是否需要繼續(xù)查詢,如果需要則輸入y繼續(xù)查詢其他景點詳細信息,不需要則返回主界面?;氐街鹘缑婧筮x擇2就能查詢2景點間的最短路徑及最短距離。輸入景點編號后就會顯示相關信息。</p><p>  圖中提示用戶從6.體育館到2.圖書館總館的最短路徑是6.體育館→5.體育場→3.百花園→2.圖書館總館,6.體育館到2.

44、圖書館的最短距離是950米。返回主界面后選0就能返回課程設計程序主菜單使用其他功能或退出程序。</p><p>  3.5.6程序調(diào)試分析</p><p>  程序在調(diào)試的過程中主要出現(xiàn)的問題是floyd算法編寫時對循環(huán)掌握不夠透徹導致的計算結果錯誤。因為需要大量使用for循環(huán)來計算兩點間的最短路徑及最短距離。在不斷調(diào)試及分析之后能夠編寫出時間、空間復雜度達標的代碼。</p>

45、<p>  簡單文本編輯器設計與實現(xiàn)</p><p>  3.6.1數(shù)據(jù)結構設計</p><p>  3.6.2函數(shù)執(zhí)行流程</p><p>  3.6.3函數(shù)功能描述</p><p>  txtLine *find(int linenum)函數(shù)的功能為查找行號為linenum的文本。通過while循環(huán)對info的行號num與li

46、nenum的對比最終找到需要的一行文本。</p><p>  void patchup(int n,int incr)函數(shù)的功能為更新現(xiàn)有文本的行號。通過調(diào)用find函數(shù)將查找到的文本的行號進行更新。</p><p>  txtLine *insert_Line(txtLine *i)函數(shù)的功能為先將現(xiàn)有的文本的行號由小到大排序,然后插入一行文本。</p><p>

47、  int enter(int linenum)函數(shù)的功能為在行號為linenum的一行前面插入一行文本。通過調(diào)用insert_Line函數(shù)將gets函數(shù)輸入的文本存入行號為linenum的行中,并將linenum返回。</p><p>  void delete_text()函數(shù)的功能是刪除指定行。首先利用find函數(shù)查找行號問linenum的行,然后利用行號的變換將linenum行刪除,最后利用patchup

48、函數(shù)將文本的行號進行更新。</p><p>  void list()函數(shù)的功能為顯示現(xiàn)有文本。顯示的方式為從頭開始顯示。</p><p>  void wordnum()函數(shù)的功能為統(tǒng)計單詞在文本中出現(xiàn)的次數(shù)。</p><p>  void wordfind()函數(shù)的功能為查找單詞在文本中的位置。</p><p>  void save()

49、函數(shù)的功能為將保存在內(nèi)存中的文本保存到程序所在文件夾中,保存文件名為text.txt。</p><p>  void load()函數(shù)的功能為打開程序所在文件夾中的text.txt文件,將其存入內(nèi)存中。</p><p>  void txtmenu()函數(shù)的功能為打印顯示簡易文本編輯器的主菜單。</p><p>  void menu3()函數(shù)為簡易文本編輯器的調(diào)用

50、部分。進入while循環(huán)以后通過switch語句判斷用戶輸入的選項并調(diào)用相關功能。若用戶輸入0則返回主菜單選擇其他操作或退出程序。</p><p>  3.6.4程序測試分析</p><p>  進入程序后,選擇3進入簡單文本編輯器設計與實現(xiàn)。</p><p>  此時可以選擇1創(chuàng)建一個新的文件,若程序所在文件夾下存在text.txt文件也可以選擇8將文件中的內(nèi)容讀

51、入。</p><p><b>  讀入中的文件。</b></p><p>  選擇1創(chuàng)建一個新的文件,輸入開始輸入的行號就能夠輸入文字。每行最多錄入80個字符。如果要結束則在空白的一行按下回車鍵就能夠返回主界面。</p><p>  選擇2就能夠將剛才輸入的文本顯示出來。</p><p>  選擇3就能夠在已經(jīng)存入的文本

52、中按照行號刪除一行。并將行號重新調(diào)整并顯示出來。</p><p>  選擇4可以對輸入的文字進行單詞統(tǒng)計,能夠統(tǒng)計輸入的單詞的在文本中出現(xiàn)的次數(shù)。</p><p>  選擇5就能夠查詢單詞在文本中的具體位置。查找玩一個后若選擇y則能夠繼續(xù)查找直到查找完畢。</p><p>  選擇6能夠在指定行前插入文本。首先選擇要插入的行號,然后添加文字。想要結束輸入在空白行輸入

53、空格即可。</p><p>  選擇7就能將內(nèi)存中的數(shù)據(jù)保存到程序所在文件夾內(nèi)地text.txt文件中。若該文件不存在,則創(chuàng)建一個文件,并保存在其中。</p><p>  選擇0就能返回課程設計程序主菜單進行其他操作或退出程序。</p><p>  3.6.5程序調(diào)試分析</p><p>  程序的調(diào)試過程中發(fā)現(xiàn)了一些問題。比較主要的就是查找

54、和統(tǒng)計功能中比較突出的一個問題。例如,輸入的文本時he her hero,如果查找或者統(tǒng)計he,則會顯示有3個結果,并且顯示3個位置,如圖所示。</p><p>  這是由于本程序中統(tǒng)計和查找功能中調(diào)用的字符串相關函數(shù)的特性導致的。這個問題可以通過在要查找的詞語后添加空格解決,這樣查找的內(nèi)容就變?yōu)榱薶e(空格),這樣就能查找到正確的結果。</p><p>  要根除這個問題需要重新設計新的

55、算法,這個功能需要在將來仔細研究后進行解決。</p><p>  利用單鏈表實現(xiàn)學生成績管理系統(tǒng)</p><p>  3.7.1數(shù)據(jù)結構設計</p><p>  3.7.2函數(shù)執(zhí)行流程</p><p>  3.7.3函數(shù)功能描述</p><p>  void printheader()函數(shù)的功能是將已經(jīng)預處理好的表頭按

56、照一定順序輸出先是到屏幕上。繪制出的表格比較整齊,能夠使整體界面更美觀。</p><p>  void printdata(Node *pp)函數(shù)的功能是輸出表中的數(shù)據(jù),輸出時同樣會調(diào)用預處理的表頭。</p><p>  void Wrong()函數(shù)的功能是輸出案件錯誤信息,在后面的函數(shù)中若要提示用戶輸入錯誤可以直接調(diào)用本函數(shù)。</p><p>  void Nof

57、ind()函數(shù)的功能為提示用戶未從數(shù)據(jù)中查找到特定學生的信息,在后面的函數(shù)中若要提示用戶相關錯誤可以直接調(diào)用本函數(shù)。</p><p>  void Disp(Link l)函數(shù)的功能為將單鏈表l中存儲的學生記錄,內(nèi)容為student結構中定義的各項內(nèi)容顯示輸出在屏幕上。</p><p>  Node* Locate(Link l,char findmess[],char nameornum

58、[])函數(shù)的功能為查詢學生信息的第一部分,按照學號查詢或按照姓名查詢。</p><p>  int Locate2(Link l,char findmess[],char nameornum[])函數(shù)的功能為查詢學生信息的第二部分,按照院系查詢或按照班級查詢。</p><p>  void stringinput(char *t,int lens,char *notice)函數(shù)的功能為屬于

59、一串字符串,并檢測字符串的長度,如果字符長度長度大于lens則提示用戶輸入非法并重新輸入。</p><p>  int numberinput(char *notice)函數(shù)的功能為將學生的分數(shù)輸入到設備中,若分數(shù)不在規(guī)定范圍(0-100)內(nèi)則提示用戶操作非法并重新輸入。</p><p>  void Create(Link l)函數(shù)的功能為創(chuàng)建學生信息。根據(jù)屏幕輸入學生的各項信息,計算出

60、總分和平均分,并將學生成績信息存儲到二進制文件中。文件操作結束后將saveflag的值改為1,表示文件內(nèi)數(shù)據(jù)有改動,在退出時提示用戶是否需要保存文件。</p><p>  void Find(Link l)函數(shù)的功能為查詢學生的記錄。函數(shù)內(nèi)建有菜單,能夠實現(xiàn)按照學號、姓名、院系、班級4種方式查詢學生信息。通過switch函數(shù)判斷用戶需要哪一種查詢方法,在分別調(diào)用Locate函數(shù)和Locate2函數(shù)實現(xiàn)相關功能。&

61、lt;/p><p>  void Del(Link l)函數(shù)的功能為刪除學生記錄。函數(shù)能夠實現(xiàn)按照學號、姓名2種方式刪除學生信息。按照用戶選擇的刪除方式提示用戶輸入相關內(nèi)容,如果用戶輸入的內(nèi)容在數(shù)據(jù)中不存在則提示用戶輸入錯誤并重新輸入。</p><p>  void Modify(Link l)函數(shù)的功能為修改學生記錄。通過提示用戶要修改的學生的學號實現(xiàn)修改功能,不能修改學號。</p&g

62、t;<p>  void Insert(Link l)函數(shù)的功能為增加學生信息。按照學號查詢到要插入的節(jié)點的位置,然后再該學號之后插入一個新的節(jié)點,將相關內(nèi)容保存到數(shù)據(jù)中后保存至源文件。</p><p>  void Tongji(Link l)函數(shù)的功能為統(tǒng)計已保存的數(shù)據(jù)中各科成績的分數(shù)段人數(shù)、最高、最低分,總分的最高、最低分,各科的通過率。程序內(nèi)建菜單,通過用戶選擇操作能夠分別將各單項內(nèi)容打印輸

63、出在屏幕上。</p><p>  void Save(Link l,char file[20])函數(shù)的功能為將保存在內(nèi)存中的數(shù)據(jù)存儲到文件中。若用戶在操作時沒有保存文件而想要退出程序時則會提示用戶文件數(shù)據(jù)有更改是否需要保存。</p><p>  void Sortnum(Link l)函數(shù)的功能為將各項數(shù)據(jù)按照學號排序輸出并保存成number.dat文件。</p><p

64、>  void Sortscore(Link l)函數(shù)的功能為利用插入排序發(fā)實現(xiàn)單鏈表的按總分的降序排序。排序完成后將數(shù)據(jù)保存成score.dat文件。</p><p>  void menu()函數(shù)的功能為打印輸入主界面的選項菜單。</p><p>  void Update(Link l)函數(shù)的功能為打印輸出更新學生信息的選項菜單。</p><p>  v

65、oid main4()函數(shù)為學生成績管理系統(tǒng)的調(diào)用部分。首先檢測文件夾內(nèi)是否存有student.dat文件,如果有則讀取其中的內(nèi)容,如果其中沒有內(nèi)容或者不存在此文件則提示用戶進入系統(tǒng)后先創(chuàng)建學生信息。打開文件后進入while循環(huán),根據(jù)用戶選擇的操作調(diào)用相關函數(shù)實現(xiàn)功能。在用戶退出時若發(fā)現(xiàn)數(shù)據(jù)有更改并且沒有存盤則提示用戶是否需要保存再退出。</p><p>  3.7.4程序測試分析</p><

66、p>  進入程序后在主菜單選擇4進入學生成績管理系統(tǒng)。程序所在文件夾內(nèi)已經(jīng)存在文件,則會自動導入該文件并提示文件內(nèi)數(shù)據(jù)的個數(shù)。按任意鍵后就能進入程序主界面。</p><p>  進入菜單后選擇1可以繼續(xù)創(chuàng)建學生信息。</p><p>  用戶能夠一直輸入數(shù)據(jù)直到按0返回主菜單。返回主菜單后選擇2可以進入更新學生信息的子頁面。</p><p>  選擇1可以插入

67、新的學生信息。</p><p>  選擇2能夠刪除學生信息。刪除學生信息有2種方法,分別是按照學號刪除和按照姓名刪除。</p><p>  選擇3能夠修改學生信息。</p><p>  更新數(shù)據(jù)完成后選擇0返回主菜單。選擇3可以查詢學生信息。</p><p>  查詢有4種方式,按照學號、姓名、院系、班級查詢。</p><

68、p>  如果輸入4再輸入要查詢的班級就能夠查詢到相關信息。其他方式大同小異就不另做演示。</p><p>  返回主菜單選擇4就能夠統(tǒng)計現(xiàn)有數(shù)據(jù)。統(tǒng)計的內(nèi)容包括統(tǒng)計各分數(shù)段人數(shù)、各科及總分最高、最低分以及各科通過率。選擇統(tǒng)計內(nèi)容后就能顯示相關結果,如果需要繼續(xù)查詢其他內(nèi)容按y即可。</p><p>  返回主菜單后選擇5、6就能夠將現(xiàn)有數(shù)據(jù)按照學號或總分進行排序。</p>

69、<p>  排序結束后程序會將對應的內(nèi)容保存在程序所在文件夾中的對應文件中。</p><p>  返回主菜單后選擇7就能夠將現(xiàn)有數(shù)據(jù)文件保存成student.dat,并將本次保存的學生數(shù)據(jù)的個數(shù)顯示出來。</p><p>  選擇0就能返回課程設計程序主界面,如果返回時數(shù)據(jù)有變動卻沒有保存操作就會提示用戶是否需要保存文件。</p><p>  3.7.

70、5程序調(diào)試分析</p><p>  這個程序包含的內(nèi)容比較多,涉及面也比較廣。在調(diào)試過程中難免會碰到很多棘手的問題。首先由于程序功能過多,如果將所有功能都放在主界面上就會導致過于凌亂給用戶留下不好的第一印象,經(jīng)過調(diào)整,將一些有關聯(lián)的功能整合到一起,通過二級菜單的方法能夠解決菜單過于臃腫的問題。</p><p>  另外,在文件的保存方面,因為以前對文件方面的函數(shù)理解不是很透徹,在文件的創(chuàng)建

71、、保存等方面遇到了很多問題。通過重新學習C語言文件操作的相關函數(shù)后,文件的保存及打開方面的問題得到了解決。</p><p><b>  總結</b></p><p><b>  開發(fā)經(jīng)驗</b></p><p>  本次課程設計內(nèi)容設計4個小程序,每個程序又包含不同的模塊,通過對這些程序、模塊的編寫我體會到了以下幾點內(nèi)容:

72、</p><p>  大程序的設計方式要按照“自上而下,逐步細化和模塊化”的方法進行程序設計。</p><p>  編寫主函數(shù),并進行測試與調(diào)試。當被調(diào)函數(shù)又需要調(diào)用其他函數(shù)時,也要遵循逐步細化的原則。C語言提供豐富的庫函數(shù),編程序時要善于使用庫函數(shù),避免不必要的勞動。</p><p>  定義函數(shù)時,應選好參數(shù)的個數(shù)和數(shù)據(jù)類型。</p><p&

73、gt;  文件的使用方法。文件使用完畢后應該及時關閉。</p><p><b>  不足之處</b></p><p>  本次課程設計因為對一些功能掌握不是很熟悉,也產(chǎn)生了一些不足之處。首先,我認為這個程序還不是很完善,在程序的精簡方面有很多地方的代碼還能夠有所縮減,其次,在屏幕的打印輸出方面有些地方仍然存在漏洞,有些地方不是很美觀,這是以后需要不斷修改和注意的地方。

74、</p><p><b>  感想和心得體會</b></p><p>  通過這次課程設計,我感觸很深,要把所學理論知識運用于解決實際問題不僅要付出艱辛的勞動,還得要有科學的方法和堅持不懈的努力。這次實訓讓我進一步理解了“編程是什么”,“如何去編程”,“編程的目的又是什么”,使我發(fā)現(xiàn)自己的知識竟是如此貧乏,頓時感到了壓力的存在,從而也激發(fā)了我的學習熱情。它會成為我今后

75、不斷進取、永不懈怠的動力。</p><p>  在整個實訓過程中,我能夠堅持虛心的向老師以及同學請教問題,它使我明白了虛心好學的重要性,更讓我懂得了如何跟老師同學去相處、去溝通。沒有老師和同學們的無私幫助,我不可能圓滿完成這次實訓任務。感謝幫助過我的所有老師和同學們,要列出所有幫助過我的人的名字是不現(xiàn)實的,因為有些困難是通過因特網(wǎng)解決的,我甚至不知道他們的名字,在此,謹向他們一并表示感謝!</p>

76、<p><b>  參考文獻</b></p><p>  [1]陳建新等. 數(shù)據(jù)結構實驗指導與課程設計教程 科學出版社 2010</p><p>  [2]莊晉林等. 使用數(shù)據(jù)結構與算法設計 中國水利水電出版社 2009</p><p>  [3]王載新等. 程序設計基礎:C語言 清華大學出版社 2004</p

77、><p>  [4] (美) Robert L. Kruse等. 敖富江譯 數(shù)據(jù)結構與程序設計:C語言(第二版) 清華大學出版社 2005</p><p>  [5]CSDN.NET – 全球最大中文IT社區(qū)(http://www.csdn.net/)</p><p><b>  課程設計成績:</b></p><p&g

78、t;  注:教師按學生實際成績(平時成績和業(yè)務考核成績)登記并錄入教務MIS系統(tǒng),由系統(tǒng)自動轉化為“優(yōu)秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(60分以下)”五等。</p><p><b>  指導教師評語:</b></p><p>  指導教師(簽名): </p><

79、;p>  20 年 月 日</p><p><b>  課程設計成績:</b></p><p>  注:請學生自己按照課程設計的要求,根據(jù)實際查找資料、編程情況、調(diào)試情況,以及考勤情況,實事求是地寫出本次課程設計的自我評定。</p><p><b>  自我鑒定評語:</b></p><p

溫馨提示

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

評論

0/150

提交評論