

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 《數(shù)據(jù)結(jié)構(gòu)與算法》</b></p><p><b> 課程設(shè)計報告</b></p><p><b> 目 錄</b></p><p> 1.課程設(shè)計目的………………………………………………………………………2</p><p> 2.課程設(shè)
2、計題目及要求………………………………………………………………2</p><p> 2.1一元多項式加法、減法、乘法運算的實現(xiàn)………………………………………2</p><p> 2.2校園導(dǎo)游咨詢 ……………………………………………………………………3</p><p> 2.3簡單文本編輯器設(shè)計與實現(xiàn) ……………………………………………………3</p>
3、;<p> 2.4利用單鏈表實現(xiàn)學(xué)生成績管理系統(tǒng) ……………………………………………4</p><p> 2.5課程設(shè)計要求 ……………………………………………………………………5</p><p> 3.詳細設(shè)計描述………………………………………………………………………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校園導(dǎo)
5、游咨詢……………………………………………………………………13</p><p> 3.6簡單文本編輯器設(shè)計與實現(xiàn)……………………………………………………17</p><p> 3.7利用單鏈表實現(xiàn)學(xué)生成績管理系統(tǒng)……………………………………………23</p><p> 4.總結(jié)………………………………………………………………………………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> 課程設(shè)計目的</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》主要介紹一些最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現(xiàn)算法,并對算法的效率進行簡單的分析和討論。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設(shè)計、數(shù)據(jù)庫、操作
8、系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等各種領(lǐng)域。</p><p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是為數(shù)據(jù)結(jié)構(gòu)課程獨立開設(shè)的實踐性教學(xué)環(huán)節(jié)。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計對于鞏固數(shù)據(jù)結(jié)構(gòu)知識,加強學(xué)生的實際動手能力和提高學(xué)生綜合素質(zhì)是十分必要的。課程設(shè)計的目的:</p><p> 1.要求學(xué)生達到熟練掌握C語言的基本知識和技能。</p><p> 2.了解并
9、掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力。</p><p> 3.提高程序設(shè)計和調(diào)試能力。學(xué)生通過上機實習(xí),驗證自己設(shè)計的算法的正確性。學(xué)會有效利用基本調(diào)試方法,迅速找出程序代碼中的錯誤并且修改。</p><p> 4.培養(yǎng)算法分析能力。分析所設(shè)計算法的時間復(fù)雜度和空間復(fù)雜度,進一步提高程序設(shè)計水平。</p><p> 5.初步掌握軟件開發(fā)過
10、程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能。</p><p><b> 課程設(shè)計題目及要求</b></p><p> 一元多項式加法、減法、乘法運算的實現(xiàn)</p><p> 設(shè)計要求:設(shè)計一個程序,能夠完成兩個一元多項式作加法、減法、乘法,給出明確的等式形式。</p><p> 設(shè)計思路:使用順序存儲
11、結(jié)構(gòu)儲存多項式各項的系數(shù)與指數(shù),利用線性表的插入、刪除等功能就能完成多項式的加法、減法、乘法運算。</p><p><b> 校園導(dǎo)游咨詢</b></p><p> 設(shè)計要求:設(shè)計一個校園導(dǎo)游程序,為來訪的客人提供各種信息咨詢服務(wù),包括:</p><p> 1.設(shè)計所在的學(xué)校的校園平面圖,所含景點不少于5個。以圖中頂點表示校內(nèi)各景點,存放
12、景點的名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。</p><p> 2.為來訪客人提供圖中任意景點相關(guān)信息的咨詢。</p><p> 3.為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨蓚€景點之間的一條最短的簡單路徑。</p><p> 設(shè)計思路:利用圖的順序存儲結(jié)構(gòu)將校園內(nèi)各景點間關(guān)系用鄰接矩陣的方式存儲到計算機,圖的頂點能夠表示各個景
13、點,各頂點的連線上的權(quán)值表示兩個景點之間的距離。利用Floyd算法求出兩個景點的最短路徑,并將路徑長度及經(jīng)過各點顯示出來。</p><p> 簡單文本編輯器設(shè)計與實現(xiàn)</p><p> 設(shè)計要求:輸入一頁文字,采用動態(tài)存儲結(jié)構(gòu)存儲一頁文章,每行最多不超過80個字符,共N行。</p><p><b> 功能如下:</b></p>
14、<p> 1.分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?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è)計思路:利用雙向鏈表存儲結(jié)構(gòu)存儲文章,每行文字存儲在數(shù)組中,不超過80個字,行數(shù)保存為num。對每行文本從頭到尾進行循環(huán),讀入一個字符進行計算以統(tǒng)計文本中的中英文字母數(shù)和空格數(shù)及整篇文章的總字?jǐn)?shù)。通過對數(shù)組中字符串的操作完成查找定位的功能。通過對每行文本行號的處理能夠完成刪除一行或在某行前插入文本的功能。</p><p> 利用單鏈表實現(xiàn)學(xué)生成績管理系統(tǒng)</p><p&g
16、t; 設(shè)計要求:利用單鏈表存儲結(jié)構(gòu)實現(xiàn)學(xué)生成績管理系統(tǒng),支持基本的數(shù)據(jù)錄入、刪除、查找、修改、統(tǒng)計和文件讀寫功能。整個系統(tǒng)由五大功能模塊組成:</p><p> 1.輸入記錄:主要完成將數(shù)據(jù)存入單鏈表中的工作。</p><p> 2.查詢記錄:可按學(xué)生的姓名或?qū)W號查詢。</p><p> 3.更新記錄:對記錄的修改、刪除、插入、排序。</p>
17、<p> 4.統(tǒng)計記錄:完成對各門功課最高分和不及格人數(shù)的統(tǒng)計。</p><p> 5.輸出記錄:實現(xiàn)屏幕顯示和將單鏈表中存儲的記錄信息寫入數(shù)據(jù)文件中。</p><p> 設(shè)計思路:采用模塊化設(shè)計的方法,將本系統(tǒng)分為輸入模塊、查詢模塊、更新模塊、統(tǒng)計模塊和輸出模塊。分別對每個模塊進行設(shè)計,最后利用統(tǒng)一調(diào)用的函數(shù)就能完成系統(tǒng)的復(fù)雜功能。輸入模塊將學(xué)生姓名、學(xué)號、各科成績等數(shù)據(jù)
18、存入單鏈表中。查詢模塊通過對學(xué)生的姓名、學(xué)號在單鏈表中進行查詢,若能找到滿足查詢條件的記錄,就返回該學(xué)生記錄的指針,否則返回NULL空指針。更新模塊能夠完成特定記錄的修改、刪除、插入和排序。統(tǒng)計模塊可以按照學(xué)生各門功課的最高分?jǐn)?shù)或不及格人數(shù)進行統(tǒng)計。輸出模塊能夠?qū)捂湵碇写鎯Φ臄?shù)據(jù)顯示在終端或?qū)С龅綌?shù)據(jù)文件中。</p><p><b> 課程設(shè)計要求</b></p><
19、p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計用C編程實現(xiàn)。</p><p> 課程設(shè)計的一般步驟:</p><p> 1.問題描述與分析:根據(jù)設(shè)計題目的要求,充分地分析和理解問題,明確問題要求做什么?限制條件是什么? </p><p> 2.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計:為實現(xiàn)每個功能選擇的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),分析原因及合理性。</p><p> 3.軟件結(jié)構(gòu)設(shè)計
20、:設(shè)計軟件模塊之間的結(jié)構(gòu)。</p><p> 4.算法設(shè)計:算法的設(shè)計及算法分析。每個部分的算法設(shè)計說明,可以用流程圖描述算法。</p><p> 5.程序編碼:把詳細設(shè)計的結(jié)果進一步求精為程序設(shè)計語言程序。源程序要按照軟件工程的規(guī)則來編寫,要求結(jié)構(gòu)清晰,重要功能部分要加上清晰的程序注釋。</p><p> 6.調(diào)試分析:掌握調(diào)試工具的各種功能,設(shè)計測試數(shù)據(jù),
21、測試輸出的結(jié)果。并進行算法的時間復(fù)雜度和空間復(fù)雜度的分析。</p><p> 7.總結(jié):課程設(shè)計過程的收獲,遇到問題以及解決問題的思路和方法,程序調(diào)試能力的思考,對數(shù)據(jù)結(jié)構(gòu)這門課程的認識及思考等。</p><p> 8.編寫課程設(shè)計報告</p><p><b> 詳細設(shè)計描述</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提供的控制臺應(yīng)用程序?qū)W(xué)習(xí)和掌握標(biāo)準(zhǔn)C++內(nèi)容非常有利。“可視”的資源編輯器與MFC類以及應(yīng)用程序向?qū)?,為快速高效地開發(fā)出功能強大的Window
23、s應(yīng)用程序提供了極大的方便。利用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功能,按對應(yīng)按鍵就能夠通過調(diào)用相關(guān)函數(shù)實現(xiàn)對應(yīng)功能。</p><p> 一元多項式加法、減法、乘法運算的實現(xiàn)</p><p> 3.4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p> 3.4.2函數(shù)執(zhí)行流程</p><p> 3.4.3函數(shù)功能
25、描述</p><p> int statuspol(pol *p)函數(shù)的功能為判斷當(dāng)前多項式的狀態(tài)。如果當(dāng)前多項式不存在則返回-1,如果當(dāng)前多項式為空則返回0,如果當(dāng)前多項式不為空則返回1。該函數(shù)在以下幾個函數(shù)中有很重要的作用。</p><p> pol *initpol()函數(shù)的功能為初始化順序存儲結(jié)構(gòu)的多項式,并返回順序表表示的多項式的首地址。若內(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ù)當(dāng)前狀態(tài)為空為止。</p><p> int locpol(pol *p,term x)函數(shù)的功能為在多項式p中查找與x項指數(shù)相同的項是否存在,存在則返回1,不存在則返回0。在查找前先
27、調(diào)用statuspol (p)函數(shù)判斷當(dāng)前多項式是否為空,若為空則直接返回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)結(jié)束后返回1表示創(chuàng)建成功。</p><p> char compare(term term1,term term2)函數(shù)的功能為判斷兩個項指數(shù)之間的大小關(guān)系。若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中。若相加結(jié)束后某個
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)建若干個空多項式,將每項相乘的結(jié)果存入空多項式中然后將新生成的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)用對應(yīng)功能。若輸入0則返回主菜單。</p><p>
33、 3.4.4程序測試分析</p><p> 進入程序后,選擇1進入“一元多項式加法、減法、乘法運算的實現(xiàn)”,打開程序主界面。</p><p> 剛進入程序時系統(tǒng)中沒有記錄任何多項式,主菜單中提示用戶先創(chuàng)建多項式。選擇1創(chuàng)建多項式。按照屏幕提示輸入相關(guān)內(nèi)容就能夠創(chuàng)建2個一元多項式。創(chuàng)建完畢后按任意鍵就能夠返回主菜單。</p><p> 返回主菜單后,主菜單鐘就能
34、夠顯示剛剛創(chuàng)建的2個多項式,現(xiàn)在就能夠使用其他的功能了。</p><p> 選擇2可以將剛才建立的2個多項式相加,并得出結(jié)果。</p><p> 按任意鍵返回主菜單后選擇3就能夠?qū)⒔⒌?個多項式相減,并將結(jié)果打印輸出在顯示器上。</p><p> 繼續(xù)按任意鍵返回,選擇4就能將2個多項式相乘并將結(jié)果打印輸出在顯示器上。</p><p>
35、; 返回主菜單后選擇5就能將剛才創(chuàng)建的2個多項式重置。重置后因為多項式不存在,所以主菜單上會提示用戶如果要使用其他功能,就需要創(chuàng)建多項式。</p><p> 功能使用完畢后按0就能夠返回課程設(shè)計程序主菜單,選擇其他功能或退出程序。</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)整相關(guān)循環(huán)函數(shù),輸出的結(jié)果得到了修正。</p><p> 其次,因為程序多處使用了system(“cls”)命令進行清屏,這樣雖然能夠保持屏幕干凈整潔,但同時也帶來了一些問題。例如,用戶輸入多項式回到主菜單后無法得知剛才輸入的內(nèi)容,會給用戶帶來困擾,因此在修改的過程中在主界面添加了提示信息,如果用戶沒有輸
37、入多項式或者清空了多項式就提醒用戶先創(chuàng)建多項式,如果用戶已經(jīng)創(chuàng)建了多項式,就將多項式顯示在主界面上,方便用戶進行其他操作。</p><p><b> 校園導(dǎo)游咨詢</b></p><p> 3.5.1數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p> 3.5.2函數(shù)執(zhí)行流程</p><p> 3.5.3函數(shù)功能描述</p>
38、;<p> void introduce()函數(shù)的功能是對校園內(nèi)各個景點的介紹。首先進入while循環(huán),將學(xué)校內(nèi)各個景點顯示出來,提示用戶輸入對應(yīng)編碼查詢對應(yīng)景點信息。用戶查詢完對應(yīng)的信息后詢問用戶是否需要繼續(xù)查詢其他景點,如果需要則繼續(xù)輸入景點編號,如果不需要則返回主界面。</p><p> void mindis()函數(shù)的功能是顯示兩景點間最短路徑及最短距離。進入while循環(huán)后顯示學(xué)校景點
39、列表,詢問用戶需要查找兩點的名稱并判斷是否合法,然后調(diào)用floyed()函數(shù)對兩點間路徑進行計算并將結(jié)果顯示出來。</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中則包含了最短通路徑的信息。再將最短通路徑各邊上的權(quán)值相加保存到min[i][j]中就表示從Vi到Vj兩點路徑的長度。&
41、lt;/p><p> void main2()函數(shù)為校園導(dǎo)游系統(tǒng)的調(diào)用函數(shù)。首先將圖中的權(quán)值輸入到cost數(shù)組中。進入while循環(huán),利用switch語句判斷用戶選擇的功能并調(diào)用相關(guān)函數(shù)完成對應(yīng)功能。</p><p> 3.5.4 景點分布圖及各點間權(quán)值(單位:米)</p><p> 1.學(xué)校正門 2.圖書館總館 3.百花園 4.中區(qū)廣場 5.體育場<
42、;/p><p> 6.體育館 7.大學(xué)生活動中心 8.11號教學(xué)樓 9.黃埔廣場</p><p> 10.英語角 11.18號教學(xué)樓 12.南二門</p><p> 3.5.5程序測試分析</p><p> 進入程序后,選擇2進入“校園導(dǎo)游咨詢”,打開程序主界面。</p><p> 選擇1進入景點信息查
43、詢。選擇對應(yīng)景點就能夠查詢景點的詳細信息。</p><p> 查詢結(jié)束后詢問用戶是否需要繼續(xù)查詢,如果需要則輸入y繼續(xù)查詢其他景點詳細信息,不需要則返回主界面?;氐街鹘缑婧筮x擇2就能查詢2景點間的最短路徑及最短距離。輸入景點編號后就會顯示相關(guān)信息。</p><p> 圖中提示用戶從6.體育館到2.圖書館總館的最短路徑是6.體育館→5.體育場→3.百花園→2.圖書館總館,6.體育館到2.
44、圖書館的最短距離是950米。返回主界面后選0就能返回課程設(shè)計程序主菜單使用其他功能或退出程序。</p><p> 3.5.6程序調(diào)試分析</p><p> 程序在調(diào)試的過程中主要出現(xiàn)的問題是floyd算法編寫時對循環(huán)掌握不夠透徹導(dǎo)致的計算結(jié)果錯誤。因為需要大量使用for循環(huán)來計算兩點間的最短路徑及最短距離。在不斷調(diào)試及分析之后能夠編寫出時間、空間復(fù)雜度達標(biāo)的代碼。</p>
45、<p> 簡單文本編輯器設(shè)計與實現(xiàn)</p><p> 3.6.1數(shù)據(jù)結(jié)構(gòu)設(shè)計</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)用相關(guān)功能。若用戶輸入0則返回主菜單選擇其他操作或退出程序。</p><p> 3.6.4程序測試分析</p><p> 進入程序后,選擇3進入簡單文本編輯器設(shè)計與實現(xiàn)。</p><p> 此時可以選擇1創(chuàng)建一個新的文件,若程序所在文件夾下存在text.txt文件也可以選擇8將文件中的內(nèi)容讀
51、入。</p><p><b> 讀入中的文件。</b></p><p> 選擇1創(chuàng)建一個新的文件,輸入開始輸入的行號就能夠輸入文字。每行最多錄入80個字符。如果要結(jié)束則在空白的一行按下回車鍵就能夠返回主界面。</p><p> 選擇2就能夠?qū)偛泡斎氲奈谋撅@示出來。</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能夠在指定行前插入文本。首先選擇要插入的行號,然后添加文字。想要結(jié)束輸入在空白行輸入
53、空格即可。</p><p> 選擇7就能將內(nèi)存中的數(shù)據(jù)保存到程序所在文件夾內(nèi)地text.txt文件中。若該文件不存在,則創(chuàng)建一個文件,并保存在其中。</p><p> 選擇0就能返回課程設(shè)計程序主菜單進行其他操作或退出程序。</p><p> 3.6.5程序調(diào)試分析</p><p> 程序的調(diào)試過程中發(fā)現(xiàn)了一些問題。比較主要的就是查找
54、和統(tǒng)計功能中比較突出的一個問題。例如,輸入的文本時he her hero,如果查找或者統(tǒng)計he,則會顯示有3個結(jié)果,并且顯示3個位置,如圖所示。</p><p> 這是由于本程序中統(tǒng)計和查找功能中調(diào)用的字符串相關(guān)函數(shù)的特性導(dǎo)致的。這個問題可以通過在要查找的詞語后添加空格解決,這樣查找的內(nèi)容就變?yōu)榱薶e(空格),這樣就能查找到正確的結(jié)果。</p><p> 要根除這個問題需要重新設(shè)計新的
55、算法,這個功能需要在將來仔細研究后進行解決。</p><p> 利用單鏈表實現(xiàn)學(xué)生成績管理系統(tǒng)</p><p> 3.7.1數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p> 3.7.2函數(shù)執(zhí)行流程</p><p> 3.7.3函數(shù)功能描述</p><p> void printheader()函數(shù)的功能是將已經(jīng)預(yù)處理好的表頭按
56、照一定順序輸出先是到屏幕上。繪制出的表格比較整齊,能夠使整體界面更美觀。</p><p> void printdata(Node *pp)函數(shù)的功能是輸出表中的數(shù)據(jù),輸出時同樣會調(diào)用預(yù)處理的表頭。</p><p> void Wrong()函數(shù)的功能是輸出案件錯誤信息,在后面的函數(shù)中若要提示用戶輸入錯誤可以直接調(diào)用本函數(shù)。</p><p> void Nof
57、ind()函數(shù)的功能為提示用戶未從數(shù)據(jù)中查找到特定學(xué)生的信息,在后面的函數(shù)中若要提示用戶相關(guān)錯誤可以直接調(diào)用本函數(shù)。</p><p> void Disp(Link l)函數(shù)的功能為將單鏈表l中存儲的學(xué)生記錄,內(nèi)容為student結(jié)構(gòu)中定義的各項內(nèi)容顯示輸出在屏幕上。</p><p> Node* Locate(Link l,char findmess[],char nameornum
58、[])函數(shù)的功能為查詢學(xué)生信息的第一部分,按照學(xué)號查詢或按照姓名查詢。</p><p> int Locate2(Link l,char findmess[],char nameornum[])函數(shù)的功能為查詢學(xué)生信息的第二部分,按照院系查詢或按照班級查詢。</p><p> void stringinput(char *t,int lens,char *notice)函數(shù)的功能為屬于
59、一串字符串,并檢測字符串的長度,如果字符長度長度大于lens則提示用戶輸入非法并重新輸入。</p><p> int numberinput(char *notice)函數(shù)的功能為將學(xué)生的分?jǐn)?shù)輸入到設(shè)備中,若分?jǐn)?shù)不在規(guī)定范圍(0-100)內(nèi)則提示用戶操作非法并重新輸入。</p><p> void Create(Link l)函數(shù)的功能為創(chuàng)建學(xué)生信息。根據(jù)屏幕輸入學(xué)生的各項信息,計算出
60、總分和平均分,并將學(xué)生成績信息存儲到二進制文件中。文件操作結(jié)束后將saveflag的值改為1,表示文件內(nèi)數(shù)據(jù)有改動,在退出時提示用戶是否需要保存文件。</p><p> void Find(Link l)函數(shù)的功能為查詢學(xué)生的記錄。函數(shù)內(nèi)建有菜單,能夠?qū)崿F(xiàn)按照學(xué)號、姓名、院系、班級4種方式查詢學(xué)生信息。通過switch函數(shù)判斷用戶需要哪一種查詢方法,在分別調(diào)用Locate函數(shù)和Locate2函數(shù)實現(xiàn)相關(guān)功能。&
61、lt;/p><p> void Del(Link l)函數(shù)的功能為刪除學(xué)生記錄。函數(shù)能夠?qū)崿F(xiàn)按照學(xué)號、姓名2種方式刪除學(xué)生信息。按照用戶選擇的刪除方式提示用戶輸入相關(guān)內(nèi)容,如果用戶輸入的內(nèi)容在數(shù)據(jù)中不存在則提示用戶輸入錯誤并重新輸入。</p><p> void Modify(Link l)函數(shù)的功能為修改學(xué)生記錄。通過提示用戶要修改的學(xué)生的學(xué)號實現(xiàn)修改功能,不能修改學(xué)號。</p&g
62、t;<p> void Insert(Link l)函數(shù)的功能為增加學(xué)生信息。按照學(xué)號查詢到要插入的節(jié)點的位置,然后再該學(xué)號之后插入一個新的節(jié)點,將相關(guān)內(nèi)容保存到數(shù)據(jù)中后保存至源文件。</p><p> void Tongji(Link l)函數(shù)的功能為統(tǒng)計已保存的數(shù)據(jù)中各科成績的分?jǐn)?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ù)按照學(xué)號排序輸出并保存成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ù)的功能為打印輸出更新學(xué)生信息的選項菜單。</p><p> v
65、oid main4()函數(shù)為學(xué)生成績管理系統(tǒng)的調(diào)用部分。首先檢測文件夾內(nèi)是否存有student.dat文件,如果有則讀取其中的內(nèi)容,如果其中沒有內(nèi)容或者不存在此文件則提示用戶進入系統(tǒng)后先創(chuàng)建學(xué)生信息。打開文件后進入while循環(huán),根據(jù)用戶選擇的操作調(diào)用相關(guān)函數(shù)實現(xiàn)功能。在用戶退出時若發(fā)現(xiàn)數(shù)據(jù)有更改并且沒有存盤則提示用戶是否需要保存再退出。</p><p> 3.7.4程序測試分析</p><
66、p> 進入程序后在主菜單選擇4進入學(xué)生成績管理系統(tǒng)。程序所在文件夾內(nèi)已經(jīng)存在文件,則會自動導(dǎo)入該文件并提示文件內(nèi)數(shù)據(jù)的個數(shù)。按任意鍵后就能進入程序主界面。</p><p> 進入菜單后選擇1可以繼續(xù)創(chuàng)建學(xué)生信息。</p><p> 用戶能夠一直輸入數(shù)據(jù)直到按0返回主菜單。返回主菜單后選擇2可以進入更新學(xué)生信息的子頁面。</p><p> 選擇1可以插入
67、新的學(xué)生信息。</p><p> 選擇2能夠刪除學(xué)生信息。刪除學(xué)生信息有2種方法,分別是按照學(xué)號刪除和按照姓名刪除。</p><p> 選擇3能夠修改學(xué)生信息。</p><p> 更新數(shù)據(jù)完成后選擇0返回主菜單。選擇3可以查詢學(xué)生信息。</p><p> 查詢有4種方式,按照學(xué)號、姓名、院系、班級查詢。</p><
68、p> 如果輸入4再輸入要查詢的班級就能夠查詢到相關(guān)信息。其他方式大同小異就不另做演示。</p><p> 返回主菜單選擇4就能夠統(tǒng)計現(xiàn)有數(shù)據(jù)。統(tǒng)計的內(nèi)容包括統(tǒng)計各分?jǐn)?shù)段人數(shù)、各科及總分最高、最低分以及各科通過率。選擇統(tǒng)計內(nèi)容后就能顯示相關(guān)結(jié)果,如果需要繼續(xù)查詢其他內(nèi)容按y即可。</p><p> 返回主菜單后選擇5、6就能夠?qū)F(xiàn)有數(shù)據(jù)按照學(xué)號或總分進行排序。</p>
69、<p> 排序結(jié)束后程序會將對應(yīng)的內(nèi)容保存在程序所在文件夾中的對應(yīng)文件中。</p><p> 返回主菜單后選擇7就能夠?qū)F(xiàn)有數(shù)據(jù)文件保存成student.dat,并將本次保存的學(xué)生數(shù)據(jù)的個數(shù)顯示出來。</p><p> 選擇0就能返回課程設(shè)計程序主界面,如果返回時數(shù)據(jù)有變動卻沒有保存操作就會提示用戶是否需要保存文件。</p><p> 3.7.
70、5程序調(diào)試分析</p><p> 這個程序包含的內(nèi)容比較多,涉及面也比較廣。在調(diào)試過程中難免會碰到很多棘手的問題。首先由于程序功能過多,如果將所有功能都放在主界面上就會導(dǎo)致過于凌亂給用戶留下不好的第一印象,經(jīng)過調(diào)整,將一些有關(guān)聯(lián)的功能整合到一起,通過二級菜單的方法能夠解決菜單過于臃腫的問題。</p><p> 另外,在文件的保存方面,因為以前對文件方面的函數(shù)理解不是很透徹,在文件的創(chuàng)建
71、、保存等方面遇到了很多問題。通過重新學(xué)習(xí)C語言文件操作的相關(guān)函數(shù)后,文件的保存及打開方面的問題得到了解決。</p><p><b> 總結(jié)</b></p><p><b> 開發(fā)經(jīng)驗</b></p><p> 本次課程設(shè)計內(nèi)容設(shè)計4個小程序,每個程序又包含不同的模塊,通過對這些程序、模塊的編寫我體會到了以下幾點內(nèi)容:
72、</p><p> 大程序的設(shè)計方式要按照“自上而下,逐步細化和模塊化”的方法進行程序設(shè)計。</p><p> 編寫主函數(shù),并進行測試與調(diào)試。當(dāng)被調(diào)函數(shù)又需要調(diào)用其他函數(shù)時,也要遵循逐步細化的原則。C語言提供豐富的庫函數(shù),編程序時要善于使用庫函數(shù),避免不必要的勞動。</p><p> 定義函數(shù)時,應(yīng)選好參數(shù)的個數(shù)和數(shù)據(jù)類型。</p><p&
73、gt; 文件的使用方法。文件使用完畢后應(yīng)該及時關(guān)閉。</p><p><b> 不足之處</b></p><p> 本次課程設(shè)計因為對一些功能掌握不是很熟悉,也產(chǎn)生了一些不足之處。首先,我認為這個程序還不是很完善,在程序的精簡方面有很多地方的代碼還能夠有所縮減,其次,在屏幕的打印輸出方面有些地方仍然存在漏洞,有些地方不是很美觀,這是以后需要不斷修改和注意的地方。
74、</p><p><b> 感想和心得體會</b></p><p> 通過這次課程設(shè)計,我感觸很深,要把所學(xué)理論知識運用于解決實際問題不僅要付出艱辛的勞動,還得要有科學(xué)的方法和堅持不懈的努力。這次實訓(xùn)讓我進一步理解了“編程是什么”,“如何去編程”,“編程的目的又是什么”,使我發(fā)現(xiàn)自己的知識竟是如此貧乏,頓時感到了壓力的存在,從而也激發(fā)了我的學(xué)習(xí)熱情。它會成為我今后
75、不斷進取、永不懈怠的動力。</p><p> 在整個實訓(xùn)過程中,我能夠堅持虛心的向老師以及同學(xué)請教問題,它使我明白了虛心好學(xué)的重要性,更讓我懂得了如何跟老師同學(xué)去相處、去溝通。沒有老師和同學(xué)們的無私幫助,我不可能圓滿完成這次實訓(xùn)任務(wù)。感謝幫助過我的所有老師和同學(xué)們,要列出所有幫助過我的人的名字是不現(xiàn)實的,因為有些困難是通過因特網(wǎng)解決的,我甚至不知道他們的名字,在此,謹(jǐn)向他們一并表示感謝!</p>
76、<p><b> 參考文獻</b></p><p> [1]陳建新等. 數(shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)與課程設(shè)計教程 科學(xué)出版社 2010</p><p> [2]莊晉林等. 使用數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計 中國水利水電出版社 2009</p><p> [3]王載新等. 程序設(shè)計基礎(chǔ):C語言 清華大學(xué)出版社 2004</p
77、><p> [4] (美) Robert L. Kruse等. 敖富江譯 數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計:C語言(第二版) 清華大學(xué)出版社 2005</p><p> [5]CSDN.NET – 全球最大中文IT社區(qū)(http://www.csdn.net/)</p><p><b> 課程設(shè)計成績:</b></p><p&g
78、t; 注:教師按學(xué)生實際成績(平時成績和業(yè)務(wù)考核成績)登記并錄入教務(wù)MIS系統(tǒng),由系統(tǒng)自動轉(zhuǎn)化為“優(yōu)秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(60分以下)”五等。</p><p><b> 指導(dǎo)教師評語:</b></p><p> 指導(dǎo)教師(簽名): </p><
79、;p> 20 年 月 日</p><p><b> 課程設(shè)計成績:</b></p><p> 注:請學(xué)生自己按照課程設(shè)計的要求,根據(jù)實際查找資料、編程情況、調(diào)試情況,以及考勤情況,實事求是地寫出本次課程設(shè)計的自我評定。</p><p><b> 自我鑒定評語:</b></p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計報告
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 算法與數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---迷宮算法
- 數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用(算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計)
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計報告---圖的算法實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計題目
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---prim算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
評論
0/150
提交評論