|
一、系統(tǒng)需求與功能分析 .1 系統(tǒng)需求分析 (1) 能完成學(xué)生信息的錄入,插入、修改、刪除、輸出、查詢等功能; (2)采用單鏈表存儲結(jié)構(gòu)實現(xiàn); (3) 所有數(shù)據(jù)以外部文件方式保存。 .2系統(tǒng)功能分析 (1)要設(shè)計一個學(xué)生信息管理系統(tǒng),其功能包括: ②入函數(shù)Add():將學(xué)生信息按尾插法插入到鏈表中; ②插入函數(shù)Insert():根據(jù)所給學(xué)號作為插入位置,在其后插入信息; ③修改函數(shù)Modify():修改指定的學(xué)生信息; ④刪除函數(shù)Delete():當(dāng)需要刪除的學(xué)號和姓名一致時則刪除對應(yīng)的學(xué)生記錄; ⑤輸出函數(shù)Show():顯示全部學(xué)生信息; ⑥查詢函數(shù)Search():分別可以按學(xué)號和按姓名進(jìn)行學(xué)生信息查詢; ⑦菜單函數(shù)Menu():為程序的菜單函數(shù)為實現(xiàn)各種功能提供便捷; ⑧讀取數(shù)據(jù)函數(shù)Read():從外部文件讀取學(xué)生信息信息; ⑨保存數(shù)據(jù)函數(shù)Save():將數(shù)據(jù)保存到外部文件中。 (2)線性表的鏈接存儲結(jié)構(gòu)稱為單鏈表,單鏈表使用一組任意的存儲單元存放線性表的元素,這組存儲單元可以連續(xù)也可以不連續(xù),甚至可以零散分布在內(nèi)存中的任意位置。為了正確表示元素之間邏輯關(guān)系,每個存儲單元在存儲數(shù)據(jù)元素的同時,還必須存儲其后繼元素所在地址信息,這個地址信息稱為指針,這兩部分組成了數(shù)據(jù)元素的存儲映像,稱為結(jié)點,結(jié)點結(jié)構(gòu)如圖1.1所示。 設(shè)p是一個指針變量,則p的值是一個指針。設(shè)指針p指向某個結(jié)點,則該結(jié)點用*p表示,在單鏈表中,結(jié)點p由兩個域組成:存放數(shù)據(jù)元素的部分和存放后繼結(jié)點地址的指針部分,分別用p->data和p->next來標(biāo)識,p->next指向結(jié)點ai 1,其指針與結(jié)點之間關(guān)系如圖1.2所示。 .3系統(tǒng)性能分析 1.硬件環(huán)境 處理器:CPU主頻在500MHz以上 內(nèi)存:128MB以上 硬盤空間:10MB。 2.軟件環(huán)境 操作系統(tǒng): Windows 98/Me/NT/2000/XP(推薦使用Windows 2000/XP)。 調(diào)試環(huán)境: Visual C 及以上版本。 二、總體結(jié)構(gòu)設(shè)計 .1系統(tǒng)的結(jié)構(gòu)設(shè)計 通過對學(xué)生信息管理系統(tǒng)的功能分析,可以定義出系統(tǒng)的總體結(jié)構(gòu)模塊圖,如圖2.1所示。 .2系統(tǒng)管理流程圖 前面的分析中已經(jīng)定義了系統(tǒng)各個模塊,屬于靜態(tài)建模的范圍。在系統(tǒng)運行時刻的動態(tài)模型應(yīng)該由系統(tǒng)的流程決定。當(dāng)用戶運行該系統(tǒng)后可以來進(jìn)行學(xué)生信息信息(錄入)插入管理、學(xué)生信息修改管理、學(xué)生信息刪除管理、學(xué)生信息顯示管理及學(xué)生信息顯示等操作,具體的流程如圖2.2所示。 主模塊應(yīng)負(fù)責(zé)應(yīng)用程序的主界面,由它調(diào)用其他模塊.因此主模塊應(yīng)具有操作性好、界面清晰的特點,使用戶能夠很方便地找到所需功能。 根據(jù)功能需求的結(jié)果分析,主界面應(yīng)該由學(xué)生信息錄入管理,學(xué)生信息插入管理,學(xué)生信息修改管理、學(xué)生信息刪除管理、學(xué)生信息顯示管理和學(xué)生信息信息查詢管理組成,可以通過輸入相應(yīng)的數(shù)字進(jìn)入相應(yīng)的功能模塊。 三、 系統(tǒng)詳細(xì)設(shè)計和系統(tǒng)實現(xiàn) 系統(tǒng)總體設(shè)計完成后,就可以根據(jù)需求對各個模塊來進(jìn)行實現(xiàn)了。在本系統(tǒng)中需要編碼實現(xiàn)的主要有學(xué)生信息信息插入、學(xué)生信息信息查詢、學(xué)生信息信息修改、學(xué)生信息信息刪除和學(xué)生信息信息輸出等5個模塊。 (1)學(xué)生信息錄入模塊 添加的信息包括姓名(允許重復(fù))、學(xué)號(不允許重復(fù))、年齡、性別、宿舍地址、計算機成績、數(shù)學(xué)成績和英語成績。 本程序采用的是尾插法,就是每次將新申請的結(jié)點插在終端結(jié)點的后面,其執(zhí)行過程如圖3.12所示。 (2)學(xué)生信息插入模塊 輸入一個存在的學(xué)號作為插入位置,在其后插入的信息包括姓名、學(xué)號、年齡、性別、宿舍地址、計算機成績、數(shù)學(xué)成績和英語成績。 本程序采用的是尾插法,就是每次將新申請的結(jié)點插在終端結(jié)點的后面,其執(zhí)行過程如圖3.22所示。 (3)學(xué)生信息修改模塊 首先要查找與要修改數(shù)據(jù)相匹配的信息,若沒有則返回失敗。否則把相應(yīng)的信息輸出,然后再重新輸入新的數(shù)據(jù)并保存到單鏈表。 (4)學(xué)生信息刪除模塊 當(dāng)選擇刪除功能時,首先輸入要刪除的同學(xué)的姓名,然后輸入要刪除的同學(xué)的學(xué)號,如果該同學(xué)存在并且姓名與學(xué)號匹配的上,則進(jìn)行刪除操作,否則返回失敗。 刪除操作定義為將單鏈表的第i個結(jié)點刪去。因為在單鏈表中結(jié)點ai存儲地址在其前驅(qū)結(jié)點ai-1的指針域,所以必須首先找到ai-1的存儲地址p,然后令p的next域指向ai 的后繼結(jié)點,即把結(jié)點ai 從鏈上摘下來,最后釋放結(jié)點ai的存儲空間 (5)學(xué)生信息顯示模塊 從單鏈表表頭遍歷整個單鏈表,將所有數(shù)據(jù)輸出。其部分代碼如下 (6)學(xué)生信息查詢模塊 在單鏈表中,即使知道被訪問結(jié)點的位置i,也不能像順序表那樣直接按序號訪問,而只能從頭指針出發(fā),設(shè)置一個工作指針p,順next域逐個結(jié)點往下搜索。當(dāng)p指向某個結(jié)點時判斷是否為第i個結(jié)點,若是則查找成功;否則,將工作指針p后移,即將p指向原來所指結(jié)點的后繼結(jié)點。直到p為NULL時 四、 系統(tǒng)測試 在完成了系統(tǒng)各方面的設(shè)計后,并不是可以運行就完成的,為了保證系統(tǒng)性能的穩(wěn)定性跟安全性等,就要對系統(tǒng)做測試。 測試環(huán)境如下: 硬件:聯(lián)想ThinkPad 2.4GHz,500GB硬盤,4G內(nèi)存; 軟件:Windows 7 Personal SP1,分辨率1366*768,Microsoft Visual C .0。 在對系統(tǒng)功能進(jìn)行逐一測試的時候,遇到了一些問題,例如,因為把學(xué)號定義為整形(int),在輸入以0為開頭的學(xué)號時,系統(tǒng)會自動把0去掉,這樣學(xué)號的信息就丟失了第一位。為了解決這個問題,將學(xué)號改成了 字符型(char),這樣在構(gòu)造函數(shù)里也需要把學(xué)號的初始化用 字符串拷貝(strcpy)來實現(xiàn)。 遇到的問題還有很多,例如數(shù)據(jù)出錯,內(nèi)存溢出等,經(jīng)過反復(fù)測試,調(diào)試和努力修正,程序得以完善。 五、 測試結(jié)果 運行的主界面如圖5.1所示: ①當(dāng)選擇1學(xué)生信息錄入功能時 ②為了驗證插入的正確性,首先再錄入一條信息,然后顯示信息。然后在第一個人和第二個人之間插入信息。 錄入第二條信息后,返回主菜單 選擇5 顯示全部學(xué)生信息:運行結(jié)果如圖5.3所示。 按任意鍵返回主菜單后,選擇2 插入學(xué)生信息,輸入存在的學(xué)號作為插入位置,比我在第一個和第二人之間插入一個新信息,只需要輸入第一個學(xué)生的學(xué)號即可,運行結(jié)果如圖5.4所示。 插入完成后,程序會自動返回主菜單,為了驗證插入的正確性,選擇5 顯示全部學(xué)生信息,運行結(jié)果如圖5.5 所示。 ③當(dāng)在主菜單中選擇3時,則進(jìn)行學(xué)生信息修改功能。其運行結(jié)果如圖5.6所示。 選擇按姓名或?qū)W號修改均可,運行結(jié)果如 圖5.7所示 為了驗證修改的正確性,返回主菜單 輸入5 顯示全部學(xué)生信息,可以看到第三條記錄已經(jīng)更新,如圖5.7 所示 ④當(dāng)在主菜單中選擇3時,則進(jìn)行刪除功能。輸入正確的姓名和學(xué)號才會執(zhí)行刪除操作。其運行結(jié)果如圖5.8所示。 為了驗證程序的正確性,返回主菜單,選擇5 顯示全部學(xué)生信息,可以看到第二條記錄已被刪除。 ②返回主菜單后選擇6查詢學(xué)生信息,運行結(jié)果按由姓名查詢和按學(xué)號查詢分別如圖5.10和圖5.11所示。 六、心得體會 在本次課程設(shè)計過程中,曾遇到過不少問題,單靠我個人的努力,很難按時完成該課程設(shè)計,在此,我衷心感謝我的指導(dǎo)老師。xxx老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我獲益非淺。從一遍一遍得修改到最后定稿的各個環(huán)節(jié)給予細(xì)心指導(dǎo),使我在知識和能力上都得到了極大的提高,在此表示衷心地感謝。在整個過程中,我查閱了大量的關(guān)于學(xué)生信息管理系統(tǒng)的資料和網(wǎng)站,在老師的指導(dǎo)和自己的努力下,終于完成了本次課程設(shè)計。 通過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的實驗,在解決問題的過程中,充分體會到了數(shù)據(jù)結(jié)構(gòu)這門課程對于軟件設(shè)計的重要性,也體會到了數(shù)據(jù)結(jié)構(gòu) 算法=程序這句話的真正含義,一個實際問題的解決第一步就是要依賴于良好的抽象思維的,將實際問題轉(zhuǎn)化為相應(yīng)的數(shù)據(jù)結(jié)構(gòu),只有這一步做好了,才能采取相應(yīng)的算法和優(yōu)化方法解決問題和解決好問題。 同時我還要感謝指導(dǎo)過我的每一位老師,他們給了我很大的指導(dǎo)和幫助,還有在我陷入困境時幫助過我的同學(xué)們。另外,還要感謝學(xué)校領(lǐng)導(dǎo)、輔導(dǎo)員,為我們提供了良好的設(shè)計環(huán)境以及各方面的支持。
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|