單鏈表的學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).doc
《單鏈表的學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《單鏈表的學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).doc(34頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
長(zhǎng)春建筑學(xué)院《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)(論文) 基于單鏈表的學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) Design and implementation of the system of student performance management based on single table 年 級(jí): 12 級(jí) 學(xué) 號(hào): 121500103 姓 名: 徐文輝 專(zhuān) 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)老師: 常大俊 二零一三年十二月 長(zhǎng)春建筑學(xué)院《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)(論文) II 摘 要 學(xué)生成績(jī)管理系統(tǒng)是典型的信息管理系統(tǒng),是學(xué)校教務(wù)管理的重要組成部分,其 處理信息量很大。本課程設(shè)計(jì)是用 C++實(shí)現(xiàn)對(duì)學(xué)生的成績(jī)管理作一個(gè)簡(jiǎn)單的模擬,實(shí) 質(zhì)是建立學(xué)生成績(jī)單鏈表,每條記錄由姓名、學(xué)號(hào)與成績(jī)組成,即 鏈表中每個(gè)結(jié)點(diǎn)由 4 個(gè)域組成,分別為:學(xué)號(hào)、姓名、成 績(jī)、存放下一個(gè)結(jié)點(diǎn)地址的 next 域。用菜單選擇 操作方式完成五項(xiàng)功能分別寫(xiě)成五個(gè)函數(shù),插入學(xué)生成績(jī)對(duì)應(yīng)建立學(xué)生單鏈表的功 能,輸出全部學(xué)生成績(jī)記錄,后三個(gè)功能分 別對(duì)應(yīng)單鏈表的查詢、修改與 刪除三大基 本操作。該系統(tǒng)中的數(shù)據(jù)采用線性表中的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)即單鏈表來(lái)存儲(chǔ),用結(jié)構(gòu)體類(lèi) 型和類(lèi)類(lèi)型定義每個(gè)學(xué)生記錄并采用外部文件方式記錄數(shù)據(jù)簡(jiǎn)便數(shù)據(jù)的讀取與保存。 關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu),單鏈表, C 語(yǔ)言,學(xué)生成績(jī)管理 ______________________________________________________________________________________________________________ -可編輯修改- Abstract Student achievement management system is a typical management information system, is an important part of the school educational administration management, the large amount of information. The curriculum design is used to achieve C++ performance management for the students to make a simplesimulation, the essence is to establish students report list, each recordconsists of name,and grade, namely the linked list in each node iscomposed of 4 domains, respectively: next domain name, student number,grade, put down a node address the. Complete the five functions were written in five function menu to select the mode of operation, into the student achievement established a single list of the output function of students, allstudents record, after the three functions corresponding to single table query,modify and delete the three basic operations. The system data in the linked storage structure of linear table is a single linked list to store, use the structure types and class types define each student records and the use of an external file to read and save data and simple data record. 長(zhǎng)春建筑學(xué)院《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)(論文) 目 錄 摘 要 .II ABSTRACT .III 第 1 章 引 言 .- 1 - 1.1 設(shè)計(jì)內(nèi)容 .- 1 - 1.2 設(shè)計(jì)目的 .- 1 - 1.3 設(shè)計(jì)目標(biāo) .- 2 - 第 2 章 系統(tǒng)需求與功能分析 .- 4 - 2.1 系統(tǒng)需求分析 .- 4 - 2.2 系統(tǒng)功能分析 .- 4 - 2.3 系統(tǒng)性能分析 .- 5 - 第 3 章 總體結(jié)構(gòu)分析 .- 6 - 3.1 系統(tǒng)的結(jié)構(gòu)分析: .- 6 - 3.2 系統(tǒng)管理流程圖: .- 6 - 第 4 章 概要設(shè)計(jì) .- 12 - 第 5 章 詳細(xì)設(shè)計(jì) .- 13 - 第 6 章 調(diào)試分析 .- 20 - 第 7 章 測(cè)試結(jié)果 .- 21 - 第 8 章 結(jié)束語(yǔ) .- 24 - 參考文獻(xiàn) .- 25 - 長(zhǎng)春建筑學(xué)院《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)(論文) - 1 - 第 1 章 引 言 1.1 設(shè)計(jì)內(nèi)容 在程序設(shè)計(jì)中,可以用許多種數(shù)據(jù)結(jié)構(gòu)來(lái)處理數(shù)據(jù)存儲(chǔ),對(duì)于該學(xué)生管理系統(tǒng)而 言線形表無(wú)疑是最好的選擇,考慮到學(xué)生成績(jī)管理系統(tǒng)一經(jīng)建立不僅進(jìn)行查詢而且 需要頻繁的進(jìn)行插入和刪除,所以采用單鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)。這種內(nèi)存的動(dòng)態(tài)分配策 略使我們?cè)诰帉?xiě)算法是無(wú)需考慮有多少空間資源可用于實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu),算法在需要 內(nèi)存的時(shí)候向內(nèi)存申請(qǐng),當(dāng)不需要的時(shí)候釋放它。 為了簡(jiǎn)便起見(jiàn),成績(jī)管理系統(tǒng)記錄中只包括學(xué)號(hào)、姓名、 語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī)、英 語(yǔ)成和成績(jī)存放下一個(gè)結(jié)點(diǎn)地址的 next 域等數(shù)據(jù)項(xiàng)。為學(xué)生成績(jī)?cè)O(shè)計(jì)一個(gè)類(lèi),內(nèi)中包 含存儲(chǔ)學(xué)生成績(jī)信息的單鏈表以及對(duì)單鏈表進(jìn)行各種操作的成員函數(shù)。為各個(gè)成績(jī) 如語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī)和英 語(yǔ)成績(jī)等數(shù)據(jù)項(xiàng)建立一個(gè)結(jié)構(gòu)體類(lèi)型,并用此結(jié)構(gòu)類(lèi)型對(duì) 學(xué)生成績(jī)類(lèi)進(jìn)行實(shí)例化。 對(duì)學(xué)生成績(jī)信息要求完成如下功能: (1) 插入:將學(xué)生的成 績(jī)信息插入; (2) 查詢:查詢滿 足條件的學(xué)生; (3) 修改:對(duì)成 績(jī)信息的數(shù)據(jù)項(xiàng)進(jìn)行修改; (4) 刪除:將滿 足條件的學(xué)生信息刪除; (5) 輸出:將全部的學(xué)生成績(jī)信息輸出。 為了方便數(shù)據(jù)的讀取與保存,我們采用外部文件來(lái)進(jìn)行數(shù)據(jù)保存能實(shí)現(xiàn)學(xué)生信 息數(shù)據(jù)的維護(hù)。 ______________________________________________________________________________________________________________ -可編輯修改- 1.2 設(shè)計(jì)目的 學(xué)生成績(jī)管理是一個(gè)學(xué)校不可缺少的部分,它的內(nèi)容對(duì)于學(xué)校的管理者和學(xué)生 以及學(xué)生家長(zhǎng)來(lái)說(shuō)都至關(guān)重要,所以一個(gè)良好的學(xué)生成績(jī)管理系統(tǒng)應(yīng)該能夠?yàn)橛脩?提供充足的信息和快捷的查詢手段。學(xué)生成績(jī)管理系統(tǒng)對(duì)學(xué)校加強(qiáng)學(xué)生成績(jī)管理有 著極其重要的作用.由于各個(gè)大學(xué)都在持續(xù)擴(kuò)招,學(xué)生的數(shù)量日益龐大,對(duì)于如何管理 如此龐大的學(xué)生成績(jī)數(shù)據(jù)顯得更為復(fù)雜,傳統(tǒng)的手工成績(jī)管理不僅工作量大,而且容 易出現(xiàn)問(wèn)題,如:效率低、保密性差,另外時(shí)間一長(zhǎng),將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì) 于查找、更新和維護(hù)都帶來(lái)了不少的困難。已不能適應(yīng)時(shí)代的發(fā)展。 隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn) 識(shí),它已 進(jìn)入人類(lèi)社會(huì)的各個(gè) 領(lǐng)域并發(fā)揮著越來(lái)越重要的作用。 作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)生成績(jī)信息進(jìn)行管理,具有手工管理 所無(wú)法比擬的優(yōu)點(diǎn)。例:檢 索迅速、 查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命 長(zhǎng)、 成本低等。這些優(yōu)點(diǎn)能夠極大地提高管理者管理的效率,也是學(xué)校走向科學(xué)化、正規(guī)化 管理,與世界接軌的重要條件。 因此,開(kāi)發(fā)設(shè)計(jì)這樣一套學(xué)生成績(jī)管理軟件成為很有必要的事情。 該學(xué)生成績(jī)管理系統(tǒng)采用 C++語(yǔ)言開(kāi)發(fā)研制,針對(duì)學(xué)生成績(jī)及其數(shù)據(jù)特點(diǎn),可以 全面實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的插入、 查詢、修改、刪除和輸 出等功能的計(jì)算機(jī)管理。它能使 學(xué)生成績(jī)數(shù)據(jù)的工作人員從繁重的工作中解脫出來(lái),大大減輕了工作量,減少人為的 工作失誤,全面提高學(xué)生成 績(jī)管理的效率,從而使學(xué)校對(duì)于學(xué)生成績(jī)的管理水平和技 術(shù)水平躍上一個(gè)新的臺(tái)階。 ______________________________________________________________________________________________________________ -可編輯修改- 1.3 設(shè)計(jì)目標(biāo) 此建立學(xué)生成績(jī)信息管理系統(tǒng),采用計(jì)算機(jī)對(duì)學(xué)生成績(jī)信息進(jìn)行管理,進(jìn)一步提高學(xué) 校現(xiàn)代化水平。幫助廣大成績(jī)信息管理者提高工作效率、減少工作時(shí)間, 實(shí)現(xiàn)學(xué)生及 其家長(zhǎng)信息查詢工作流程的系統(tǒng)化、公平化、規(guī)范化和自動(dòng)化,也 為廣大在教師提供 便利快捷的成績(jī)錄入功能。為了保證系統(tǒng)能夠長(zhǎng)期、安全、 穩(wěn)定、可靠、高效的運(yùn)行, 本課題將達(dá)到以下幾個(gè)目的: (1)系統(tǒng)處理的準(zhǔn)確性 系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,要充 分考慮系統(tǒng)當(dāng)前和將來(lái)可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足 高校對(duì)信息處理的需求。 (2)系統(tǒng)處理的及 時(shí)性 由于學(xué)生非常關(guān)心自己的信息正確與否以便及時(shí)接受來(lái)自學(xué)校的學(xué)習(xí)成績(jī)信息, 學(xué)生成績(jī)信息管理功能對(duì)于整個(gè)系統(tǒng)的功能和性能完成舉足輕重。在系統(tǒng)開(kāi)發(fā)過(guò)程 中,必須 采用一定的方法保證系統(tǒng)的準(zhǔn)確性。 (3)系統(tǒng)的保密性 學(xué)生成績(jī)信息是屬于個(gè)人的隱私,所以系統(tǒng)在開(kāi)發(fā)時(shí),應(yīng)該充分考慮系統(tǒng)的保密 性,以保證學(xué)生的隱私權(quán)。 (4)系統(tǒng)的開(kāi)放性和可 擴(kuò)充性 學(xué)生成績(jī)信息管理系統(tǒng)在開(kāi)發(fā)過(guò)程中,應(yīng)該充分考慮以后的可擴(kuò)充性。例如學(xué)生 成績(jī)信息管理的方式的改變,學(xué)生成績(jī)信息的需求也會(huì)不斷的更新和完善。 ______________________________________________________________________________________________________________ -可編輯修改- 第 2 章 系統(tǒng)需求與功能分析 2.1 系統(tǒng)需求分析 1) 能完成學(xué)生成績(jī)的插入、查詢、修改、刪除、輸出等功能; (2)采用單鏈表存 儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn); (3) 所有數(shù)據(jù)以外部文件方式保存。 2.2 系統(tǒng)功能分析 (1)要設(shè)計(jì)一個(gè)學(xué)生成 績(jī)管理系統(tǒng),其功能包括: ①插入函數(shù) Add():將學(xué)生成 績(jī)信息插入到鏈表中; ______________________________________________________________________________________________________________ -可編輯修改- ②查詢函數(shù) Search():分別 可以按學(xué)號(hào)和按姓名進(jìn)行學(xué)生成績(jī)查詢; ③刪除函數(shù) Delete():當(dāng)需要?jiǎng)h除的學(xué)號(hào)和姓名一致時(shí)則刪除對(duì)應(yīng)的學(xué)生記錄; ④修改函數(shù) Modify():修改指定的學(xué)生成績(jī)信息; ⑤輸出函數(shù) Show():輸出全部學(xué)生成 績(jī)信息; ⑥菜單函數(shù) Menu():為程序的菜單函數(shù)為實(shí)現(xiàn)各種功能提供便捷; ⑦讀取數(shù)據(jù)函數(shù) Read():從外部文件讀取學(xué)生成績(jī)信息; ⑧保存數(shù)據(jù)函數(shù) Save():將數(shù)據(jù)保存到外部文件中。 (2)線性表的鏈 接存儲(chǔ)結(jié)構(gòu)稱為單鏈表,單鏈表使用一組任意的存儲(chǔ)單元存放線 性表的元素,這組存儲(chǔ)單元可以連續(xù)也可以不連續(xù),甚至可以零散分布在內(nèi)存中的任 意位置。為了正確表示元素之 間邏輯關(guān)系,每個(gè)存 儲(chǔ)單 元在存儲(chǔ)數(shù)據(jù)元素的同時(shí), 還 必須存儲(chǔ)其后繼元素所在地址信息,這個(gè)地址信息稱為指針,這兩部分組成了數(shù)據(jù)元 素的存儲(chǔ)映像,稱為結(jié)點(diǎn),結(jié)點(diǎn)結(jié)構(gòu)如圖 2.1 所示。 圖 2.1 單鏈表的結(jié)點(diǎn)構(gòu)造 設(shè) p 是一個(gè)指針變量,則 p 的值是一個(gè)指針。 設(shè)指針 p 指向某個(gè)結(jié)點(diǎn), 則該結(jié)點(diǎn) 用*p 表示,在單鏈表中,結(jié)點(diǎn) p 由兩個(gè)域組成:存放數(shù)據(jù)元素的部分和存放后繼結(jié)點(diǎn) 地址的指針部分,分別用 p-data 和 p-next 來(lái)標(biāo)識(shí),p-next 指向結(jié)點(diǎn) ai+1,其指針與 結(jié)點(diǎn)之間關(guān)系如圖 2.2 所示。 圖 2.2 指針與結(jié)點(diǎn)之間關(guān)系的示意圖 ______________________________________________________________________________________________________________ -可編輯修改- 2.3 系統(tǒng)性能分析 1.硬件環(huán)境 處理器:CPU 主頻在 500MHz 以上 內(nèi)存:128MB 以上 硬盤(pán)空間:10MB 。 2.軟件環(huán)境 操作系統(tǒng): Windows 98/Me/NT/2000/XP(推薦使用 Windows 2000/XP)。 調(diào)試環(huán)境: Visual C++及以上版本。 第 3 章 總體結(jié)構(gòu)分析 3.1 系統(tǒng)的結(jié)構(gòu)分析: 通過(guò)對(duì)學(xué)生成績(jī)信息管理系統(tǒng)的功能分析,可以定義出系統(tǒng)的總體結(jié)構(gòu)模塊圖, 如圖 3.1 所示。 ______________________________________________________________________________________________________________ -可編輯修改- 學(xué)生成績(jī)管理系統(tǒng) 學(xué)生 成績(jī) 插入 學(xué)生 成績(jī) 查詢 學(xué)生 成績(jī) 刪除 學(xué)生 成績(jī) 修改 學(xué)生 成績(jī) 輸出 學(xué)生 成績(jī) 讀取 學(xué)生 成績(jī) 保存 圖 3.1 學(xué)生成績(jī)管理系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì) 3.2 系統(tǒng)管理流程圖: 前面的分析中已經(jīng)定義了系統(tǒng)各個(gè)模塊,屬于靜態(tài)建模的范圍。在系統(tǒng)運(yùn)行時(shí)刻的動(dòng) 態(tài)模型應(yīng)該由系統(tǒng)的流程決定。當(dāng)用戶運(yùn)行該系統(tǒng)后可以來(lái)進(jìn)行學(xué)生成績(jī)信息插入 管理、學(xué)生成績(jī)信息查詢管理、學(xué)生成績(jī)信息刪除管理、學(xué)生成績(jī)信息修改管理及學(xué) 生成績(jī)信息輸出等操作,具體的流程如圖 3.2 所示。 ______________________________________________________________________________________________________________ -可編輯修改- 進(jìn)入系統(tǒng) 數(shù)據(jù)讀入 查詢 修改 刪除 輸出 數(shù)據(jù)保存 退出系統(tǒng) 不保存 YN 圖 3.2 系統(tǒng)流程圖 主模塊應(yīng)負(fù)責(zé)應(yīng)用程序的主界面,由它調(diào)用其他模塊.因此主模塊應(yīng)具有操 作性好、界面清晰的特點(diǎn),使用戶能夠很方便地找到所需功能。 根據(jù)功能需求的結(jié)果分析,主界面應(yīng)該由學(xué)生成績(jī)信息插入管理,學(xué)生成績(jī) 信息查詢管理、學(xué)生成績(jī)信息修改管理、學(xué)生成績(jī)信息 刪除管理和學(xué)生成績(jī)信息 輸出管理組成,可以通過(guò)輸 入相應(yīng)的數(shù)字進(jìn)入相應(yīng)的功能模塊。4 系統(tǒng)詳細(xì)設(shè)計(jì) 和系統(tǒng)實(shí)現(xiàn) 系統(tǒng)總體設(shè)計(jì)完成后,就可以根據(jù)需求對(duì)各個(gè)模塊來(lái)進(jìn)行實(shí)現(xiàn)了。在本系統(tǒng) 中需要編碼實(shí)現(xiàn)的主要有學(xué)生成績(jī)信息插入、學(xué)生成績(jī)信息查詢、學(xué)生成績(jī)信息 修改、學(xué)生成績(jī)信息刪除和學(xué)生成績(jī)信息輸出等 5 個(gè)模塊。 ______________________________________________________________________________________________________________ -可編輯修改- (1)學(xué)生成績(jī)插入模 塊 添加的信息包括學(xué)號(hào)(不允許重復(fù))、姓名(不允許重復(fù))、語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī) 和英語(yǔ)成績(jī)。流程圖如下圖 4.1 所示。 開(kāi)始插入數(shù) 據(jù) 輸入學(xué)生成績(jī)信息 調(diào)用類(lèi)成員函數(shù)采用 單鏈表保存數(shù)據(jù) 結(jié)束 圖 4.1 插入模塊流程圖 ______________________________________________________________________________________________________________ -可編輯修改- 本程序采用的是尾插法,就是每次將新申請(qǐng)的結(jié)點(diǎn)插在終端結(jié)點(diǎn)的后面,其執(zhí) 行過(guò)程如圖 4.2 所示。 圖 4.2 尾插法建立單鏈表操作示意圖 (2)學(xué)生成績(jī)查詢 模塊 按姓名和學(xué)號(hào)查找學(xué)生成績(jī)的流程圖分別如下圖 4.3 所示。 ______________________________________________________________________________________________________________ -可編輯修改- 結(jié)束 輸入要查 找姓名 判斷 抱歉沒(méi)有該學(xué)生輸出該學(xué)生的信息 按姓名 查找開(kāi)始 NY 圖 4.3 按姓名查找學(xué)生成績(jī)信息流程圖 ______________________________________________________________________________________________________________ -可編輯修改- 在單鏈表中,即使知道被訪問(wèn)結(jié)點(diǎn)的位置 i,也不能像順序表那樣直接按序號(hào)訪 問(wèn),而只能從頭指針出發(fā),設(shè)置一個(gè)工作指針 p,順 next 域逐個(gè)結(jié)點(diǎn)往下搜索。當(dāng) p 指向某個(gè)結(jié)點(diǎn)時(shí)判斷是否為第 i 個(gè)結(jié)點(diǎn),若是 則查 找成功;否則,將工作指針 p 后移, 即將 p 指向原來(lái)所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)。直到 p 為 NULL 時(shí)查找失敗。單鏈表查找過(guò)程 如圖 4.4 所示。 圖 4.4 單鏈表查找過(guò)程的示意圖 按學(xué)號(hào)查詢學(xué)生成績(jī)信息同按姓名查找學(xué)生成績(jī)信息,此處不再詳細(xì)列出。 (3)學(xué)生成績(jī)修改模 塊 首先要查找與要修改數(shù)據(jù)相匹配的信息,若沒(méi)有則返回失敗。否則把相應(yīng)的信息 輸出,然后再重新輸入新的數(shù)據(jù)并保存到單鏈表。 (4)學(xué)生成績(jī)刪 除模塊 當(dāng)選擇刪除功能時(shí),首先輸入要?jiǎng)h除的同學(xué)的姓名,然后輸入要?jiǎng)h除的同學(xué)的學(xué) 號(hào),如果該同學(xué)存在并且姓名與學(xué)號(hào)匹配的上, 則進(jìn) 行刪除操作,否 則返回失敗。其 流程圖 4.5 如下: ______________________________________________________________________________________________________________ -可編輯修改- 開(kāi)始刪除操作 輸入姓名 輸入學(xué)號(hào) 姓名學(xué)號(hào)一致 執(zhí)行刪除功能 返回主菜單 N Y 圖 4.5 刪除學(xué)生信息模塊流程圖 刪除操作定義為將單鏈表的第 i 個(gè)結(jié)點(diǎn)刪去。因?yàn)?在單鏈表中結(jié)點(diǎn) ai 存儲(chǔ)地址在 ______________________________________________________________________________________________________________ -可編輯修改- 其前驅(qū)結(jié)點(diǎn) ai-1 的指針域,所以必須首先找到 ai-1 的存 儲(chǔ)地址 p,然后令 p 的 next 域指 向 ai 的后繼結(jié)點(diǎn),即把結(jié)點(diǎn) ai 從鏈上摘下來(lái),最后釋放結(jié)點(diǎn) ai 的存儲(chǔ)空間,如圖 4.6 所示。 圖 4.6 在單鏈表中刪除結(jié)點(diǎn)指針的變化情況 (5)學(xué)生成績(jī)輸 出模塊 從單鏈表表頭遍歷整個(gè)單鏈表,將所有數(shù)據(jù)輸出。其部分代碼如下: void Function::Show() { char choose; Student *temp; system(“cls“); temp=Student_First-Next; if(!temp) { coutchoose; while(choose!='1') { coutchoose; } Menu(); } else { coutNext; } } coutchoose; while(choose!='1') { coutchoose; } Menu(); } 第 4 章 概要設(shè)計(jì) 利用單鏈表設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng),使之提供以下功能: (1) 錄入學(xué)生信息記錄 (2) 查詢學(xué)生信息記錄 (3) 刪除學(xué)生信息記錄 (4) 修改學(xué)生信息記錄 (5) 顯示全部學(xué)生信息記錄 需求說(shuō)明: (1) 學(xué)生信息包括學(xué)號(hào)、姓名、性別、數(shù)學(xué)成 績(jī)、英 語(yǔ)成績(jī)、計(jì)算機(jī)成績(jī)、總分、平 ______________________________________________________________________________________________________________ -可編輯修改- 均分、名次,并且要求學(xué)號(hào)不重復(fù); (2) 錄入記錄可以從以二進(jìn)制形式存儲(chǔ)的數(shù)據(jù)文件中讀入,也可以從鍵盤(pán)逐個(gè)輸 入學(xué)生記錄。當(dāng)從數(shù)據(jù)文件中讀入記錄時(shí),它就是在以記錄為單位存儲(chǔ)的數(shù)據(jù)文件中 ,將記錄逐條復(fù)制到單鏈表中。 (3) 對(duì)學(xué)生信息應(yīng)能夠分別按學(xué)號(hào)及按姓名兩種方式進(jìn)行查詢,要求能返回所有 符合條件的學(xué)生的信息;若找到該學(xué)生的記錄,它則返回該學(xué)生記錄的指針。否則,它 返回一個(gè)值為 NULL 的空指針,并打印出未找到該學(xué)生記錄的提示信息。 (4) 更新學(xué)生信息:要求可以對(duì)其進(jìn)行修改、刪除、排序、插入等操作,進(jìn)行了這些 操作之后,需要將修改的數(shù)據(jù)存入源數(shù)據(jù)文件; (5) 輸出要求:對(duì)學(xué)生記錄存盤(pán)操作,即將 單鏈 表中的各節(jié)點(diǎn)中存儲(chǔ)的學(xué)生記錄信 息寫(xiě)入數(shù)據(jù)文件中,并將單鏈表中存儲(chǔ)的學(xué)生記錄信息以表格的形式在屏幕上打印 出來(lái); (6) 學(xué)生信息的顯示要求有一定的規(guī)范格式; (7) 并要求在此過(guò)程中能夠盡可能的兼容用戶使用過(guò)程中的異常情況。 二、總體設(shè)計(jì) 初步提出解決方案,以及系統(tǒng)的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方案,并寫(xiě)出書(shū)面總體設(shè) 計(jì)說(shuō)明書(shū)。 三、詳細(xì)設(shè)計(jì) 四、編寫(xiě)代碼 調(diào)試總結(jié) ______________________________________________________________________________________________________________ -可編輯修改- 第 5 章 詳細(xì)設(shè)計(jì) /******************************錄入模板************************/ void Add() //錄入學(xué)生成績(jī)信息函數(shù) { char name[20]; int no; Class score; char choose; Student *f1,*p,*f2; system(“cls“); f1=Student_First; f2=Student_First-Next; while(f1-Next) f1=f1-Next; do { p=new Student; Printf(“請(qǐng)輸入您要添加的學(xué)生成績(jī)信息:\n“); Printf(“請(qǐng)輸入學(xué)生姓名:“); Sccanf(“%c”, while(f2) { if(strcmp(f2-GetName(),name)==0) { printf(“該學(xué)生已存在, 請(qǐng)確定姓名!\n\n“); Printf(“請(qǐng)輸入姓名:“); Sccanf(“%c”, break; } f2=f2-Next; ______________________________________________________________________________________________________________ -可編輯修改- } printf(“請(qǐng)輸入學(xué)號(hào):“); Scanf(“%c”,no); printf(“請(qǐng)輸入語(yǔ)文成績(jī):“); Scanf(“%d”, printf(“請(qǐng)輸入數(shù)學(xué)成績(jī):“); Scanf(“%d”, printf(“請(qǐng)輸入英語(yǔ)成績(jī):“); Scanf(“%d”, p-Set(name,no,score); f1-Next=p; p-Next=NULL; f1=f1-Next; Printf(“是否繼續(xù)輸入信息?(Y\\N) \n“); Scanf(“%c”, }while(choose=='y'||choose=='Y'); Save(); Printf(“1.返回主菜單\n“); Scanf(“%d”, while(choose!='1') { printf(“1.返回主菜單“); Scanf(“%d”, } Menu(); } /******************************刪除模板************************/ ______________________________________________________________________________________________________________ -可編輯修改- void Delete() //刪除信息函數(shù) { char name[20]; int no; char choose; Student *temp,*p; system(“cls“); p=temp=Student_First-Next; Printf(“請(qǐng)輸 入姓名:“); Scanf(“%c”, Printf(“輸 入學(xué)號(hào):“); Scanf(“%c”, while(temp) { if(strcmp(temp-GetName(),name)==0 temp-Out(); printf(“\n 是否刪除(Y/N)“); Scanf(“%c”, if(choose=='y'||choose=='Y') { p-Next=temp-Next; delete temp; Printf(“刪除成功:\n“); } break; } p=temp; temp=temp-Next; ______________________________________________________________________________________________________________ -可編輯修改- } Save(); Printf(“1.返回主菜單\n2. 繼續(xù)刪除“); Scanf(“%c”, while(choose!='1' Scanf(“%c”, } if(choose=='1') Menu(); else if(choose=='2') Delete(); } /******************************修改模板************************/ void Modify() //修改學(xué)生信息函數(shù) { char choose,name[20]; Student *temp,*p; int no; Class score; system(“cls“); temp=p=Student_First; Printf(“請(qǐng)輸 入您要修改的學(xué)生姓名:“); Scanf(“%c”, while(temp) { if(strcmp(temp-GetName(),name)==0) { Printf(“姓名\t 學(xué)號(hào)\t 語(yǔ)文成績(jī)\t 數(shù)學(xué)成績(jī)\t 英語(yǔ)成績(jī)\n“; temp-Out(); Printf(“請(qǐng)輸入姓名:“); ______________________________________________________________________________________________________________ -可編輯修改- Scanf(“%c”, Printf(“請(qǐng)輸入學(xué)號(hào):“); Scanf(“%c”, Printf(“請(qǐng)輸入語(yǔ)文成績(jī):“); Scanf(“%c”, Printf(“請(qǐng)輸入數(shù)學(xué)成績(jī):“); Scanf(“%c”, Printf(“請(qǐng)輸入英語(yǔ)成績(jī):“); Scanf(“%c”, temp-Set(name,no,score); break; } temp=temp-Next; } Save(); Printf(“修改成功 !“); Printf(“1.返回主菜單\n2. 繼續(xù)修改“); Scanf(“%c”, while(choose!='1' Scanf(“%c”, } if(choose=='1') Menu(); else if(choose=='2') Modify(); } ______________________________________________________________________________________________________________ -可編輯修改- /******************************查找模板************************/ void Search() { int flag(0); char choose; char t1[20]; int t2; system(“cls“); Student *temp=Student_First-Next; do { printf(“輸入查詢方式:\n1.按姓名查詢\n2.按學(xué)號(hào)查詢\n“); Scanf(“%c”, if(choose=='1') { printf(“請(qǐng)輸入您要查詢的姓名:“); Scanf(“%d”, while(temp) { if(strcmp(t1,temp-GetName())==0) { flag=1; break; } temp=temp-Next; } if(flag==0) Printf(“\n 無(wú)該學(xué)生的信息\n“); else { printf(“姓名\t 學(xué)號(hào)\t 語(yǔ)文成績(jī)\t 數(shù)學(xué)成 績(jī)\t 英語(yǔ)成績(jī)\n“); temp-Out(); } break; ______________________________________________________________________________________________________________ -可編輯修改- } else if(choose=='2') { printf(“請(qǐng)輸入您要查詢的學(xué)號(hào)“); Scanf(“%d”, while(temp) { if(t2==temp-GetNo()) { flag=1; break; } temp=temp-Next; } if(flag==0) printf(“\n 無(wú)該學(xué)生的信息\n“Out(); } break; } }while(choose!='1'||choose!='2'); printf(“\n1.返回主菜單\n2.繼續(xù)查詢“); Scanf(“%c”, while(choose!='1' Scanf(“%c”,); } if(choose=='1') Menu(); ______________________________________________________________________________________________________________ -可編輯修改- else if(choose=='2') Search(); } 第 6 章 調(diào)試分析 對(duì)以上代碼在 DEV C++環(huán) 境下運(yùn)行, 進(jìn)行不斷調(diào)試 ,發(fā)現(xiàn)錯(cuò)誤,修改錯(cuò)誤。 (1)開(kāi)始程序運(yùn)行輸入學(xué)生數(shù)據(jù)時(shí),沒(méi)有設(shè)置結(jié)束語(yǔ)造成了無(wú)限循環(huán)的結(jié)果。 (2)開(kāi)始執(zhí)行輸入函數(shù),按學(xué)號(hào)順序輸入學(xué)生的成績(jī),輸完后執(zhí)行顯示功能,學(xué)生 成績(jī)記錄是空的無(wú)法顯示的, 試著在其中增加一些語(yǔ)句,把學(xué)生信息寫(xiě)入文件中,然 后再?gòu)奈募凶x取,接著在運(yùn)行程序,學(xué)生成績(jī)便可以正確的輸出了。 (3)開(kāi)始時(shí),先把成績(jī)總分排序,再插入一個(gè)學(xué)生的成績(jī), 執(zhí)行顯示功能,雖然插 入的學(xué)生的成績(jī)能正常插入,但該學(xué)生的名次為 0。后來(lái),在插入成 績(jī)之后,調(diào)用排序 函數(shù),把所有成績(jī)重新排序一次,插入的學(xué)生便可以正常排序了。 (4)為了輸入更多的學(xué)生在輸入函數(shù)中設(shè)了一個(gè)無(wú)限循環(huán),可以輸入無(wú)數(shù)個(gè)學(xué)生 的成績(jī)信息,當(dāng)學(xué)號(hào)為 0 的 時(shí)候則停止輸入。 ______________________________________________________________________________________________________________ -可編輯修改- (5)輸入太多個(gè)學(xué)生的成績(jī)時(shí),屏幕顯示不能控制為一頁(yè)一頁(yè)顯示,所以為了方 便起見(jiàn),不要輸入太多記錄 ,十個(gè) 為最佳。 (6)運(yùn)行程序時(shí)還有許多小錯(cuò)誤比如少加 ; “”等,或把 ;錯(cuò)寫(xiě)成: ,等平時(shí) 多注意一下就行。 (7)在編寫(xiě)修改函數(shù) 時(shí),發(fā)現(xiàn)總成績(jī)沒(méi)有變化,因?yàn)檠h(huán)語(yǔ)句之后沒(méi)有進(jìn)行數(shù)據(jù) 的重新賦值,以至于新的數(shù)據(jù)沒(méi)能插進(jìn)順序表。 第 7 章 測(cè)試結(jié)果 1、運(yùn)行主界面如圖 7.1 所示: ______________________________________________________________________________________________________________ -可編輯修改- 圖 7.1 運(yùn)行主界面 ①當(dāng)選擇 1 插入學(xué)生成 績(jī) 信息功能時(shí),如圖 7.2 所示。 圖 7.2 插入學(xué)生成績(jī)信息實(shí)現(xiàn) ②返回主菜單 后選擇 2 查詢 學(xué)生成績(jī)信息,運(yùn)行 結(jié)果按由姓名查詢和按學(xué)號(hào)查詢分 別如圖 7.3 和圖 7.4 所示。 ______________________________________________________________________________________________________________ -可編輯修改- 圖 7.3 按姓名查找相關(guān)信息實(shí)現(xiàn) 圖 7.4 按學(xué)號(hào)查找相關(guān)信息實(shí)現(xiàn) ③當(dāng)在主菜單 中選擇 3 時(shí) ,則進(jìn)行刪除功能。其運(yùn)行結(jié)果如圖 7.5 所示。 圖 7.5 刪除學(xué)生信息功能實(shí)現(xiàn) ④當(dāng)在主菜單 中選擇 4 時(shí) ,則進(jìn)行學(xué)生信息修改功能。其運(yùn)行結(jié)果如圖 7.6 所示。 ______________________________________________________________________________________________________________ -可編輯修改- 圖 7.6 修改學(xué)生信息功能實(shí)現(xiàn) ⑤當(dāng)在主菜單 中選擇 5 時(shí) ,則進(jìn)行學(xué)生信息輸出功能。其運(yùn)行結(jié)果如圖 7.7 所示。 圖 7.7 輸出學(xué)生信息功能實(shí)現(xiàn) ______________________________________________________________________________________________________________ -可編輯修改- 第 8 章 結(jié)束語(yǔ) 在本次課程設(shè)計(jì)過(guò)程中,曾遇到過(guò)不少問(wèn)題, 單靠我個(gè)人的努力,很難按時(shí)完成 該課程設(shè)計(jì),在此,我衷心感謝我的指導(dǎo)老師。常老 師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)?治學(xué)精神和深厚的理論水平都使我獲益非淺。從一遍一遍得修改 到最后定稿的各個(gè) 環(huán)節(jié)給予細(xì)心指導(dǎo), 使我在知 識(shí)和能力上都得到了極大的提高 ,在此表示衷心地感謝。 在整個(gè)過(guò)程中,我查閱了大量的關(guān)于學(xué)生成 績(jī)管理系統(tǒng) 的資料和網(wǎng)站,在老師的指導(dǎo) 和自己的努力下,終于完成了本次 課程設(shè)計(jì)。 通過(guò)這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的實(shí)驗(yàn),在解決問(wèn)題的過(guò)程中,充分體會(huì)到了數(shù)據(jù)結(jié) 構(gòu)這門(mén)課程對(duì)于軟件設(shè)計(jì)的重要性,也體會(huì)到了數(shù)據(jù)結(jié)構(gòu)+算法=程序這句話的真正 含義,一個(gè) 實(shí)際問(wèn)題的解決第一步就是要依賴于良好的抽象思維的,將實(shí)際問(wèn)題轉(zhuǎn)化 為相應(yīng)的數(shù)據(jù)結(jié)構(gòu),只有這 一步做好了,才能采取相應(yīng)的算法和優(yōu)化方法解決問(wèn)題和 解決好問(wèn)題。 同時(shí)我還要感謝指導(dǎo)過(guò)我的每一位老師,他們給了我很大的指導(dǎo)和幫助,還有在 我陷入困境時(shí)幫助過(guò)我的同學(xué)們。另外, 還要感謝學(xué)校 領(lǐng)導(dǎo)、 輔導(dǎo)員,為我們提供了 良好的設(shè)計(jì)環(huán)境以及各方面的支持。 ______________________________________________________________________________________________________________ -可編輯修改- 參考文獻(xiàn) [1] 唐國(guó)民,王國(guó)鈞. 《數(shù)據(jù)結(jié)構(gòu)》. 第一版.清華大學(xué)出版社,2009 年 [2] 鄭山紅,李萬(wàn)龍,于秀霞. 《C 語(yǔ)言程序設(shè)計(jì)》. 第二版.人民郵電出版社,2012 年.- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
18 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單鏈表 學(xué)生 成績(jī)管理系統(tǒng) 設(shè)計(jì) 實(shí)現(xiàn)
鏈接地址:http://www.3dchina-expo.com/p-1106079.html