版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
任務(wù)書
題目:學生成績管理系統(tǒng)
設(shè)計內(nèi)容及要求:
1.課程設(shè)計任務(wù)內(nèi)容
設(shè)計一個簡易的學生成績管理系統(tǒng),能夠完成學生成績的增加、刪除、查找、
修改、統(tǒng)計等操作,數(shù)據(jù)信息保存文件保存。要求系統(tǒng)具有菜單和提示,界面友好.
20課程設(shè)計要求
實現(xiàn)學生成績的管理和保存.
開辟環(huán)境:vc++6。0
實現(xiàn)目標:
(1)熟悉的運用c語言程序編寫代碼。
(2)能夠理清整個程序的運行過程并繪畫流程圖
(3)了解如何定義局部變量和整體變量;
(4)學會上機調(diào)試程序,發(fā)現(xiàn)問題,并解決
(5)學習使用C++程序來了解程序原理。
(6)學習用文檔書寫程序說明
管理信息系統(tǒng)正在向著網(wǎng)絡(luò)化、智能化和集成化等趨勢發(fā)展.學
生成績管理系統(tǒng)是為了更好的管理學生考試成績而開辟的數(shù)據(jù)管理
軟件。它對于一個學校是不可缺少的重要部份,它的內(nèi)容對于學校的
決策者和管理者來說都至關(guān)重要.學生成績管理管理系統(tǒng)為用戶提供
充足的信息和快捷的查詢手段,實現(xiàn)學生基本信息、成績的錄入,刪
除,查詢,維護以及成績的統(tǒng)計分析等幾方面的功能,是現(xiàn)實問題的
迫切要求。
本系統(tǒng)開辟的總體任務(wù)是實現(xiàn)學生成績管理的系統(tǒng)化、規(guī)范化、
自動化。達到提高學生成績管理效率的目的。與傳統(tǒng)管理方法相比有
明顯的優(yōu)點:查找方便,可靠性高,保密性好,成本低。徹底改變了以
前繁雜的管理模式,實現(xiàn)全面的、相對集中的、職能化的信息綜合管
理.
計算機被用到信息管理系統(tǒng)的環(huán)境正是適應(yīng)了當今時代飛速發(fā)
展的信息時代。人們深刻的認識到了計算機功能的強大,對于復雜的
信息管理,計算機充分發(fā)揮著它的優(yōu)越性.檢索迅速、查找方便、可
靠性高、存儲量大、保密性好、壽命長、成本低,這些優(yōu)點極大地減
輕了學院教學人員的工作量,縮小開支,提高了學生檔案管理的效率
和準確性,能夠合理的安排時間,學生能夠盡快的知道自己的考試成
績。同時,學生管理系統(tǒng)的應(yīng)用也為今天的教育在未來市場的競爭力
有所提高.
目錄
1.引言............................................................3
2.課題分析........................................................6
3.具體設(shè)計過程................................錯誤!未定義書簽。
3.1設(shè)計思路....................................................6
3.2程序設(shè)計流程圖.............................................7
3.3.函數(shù)實現(xiàn)說明...............................................7
4.程序運行結(jié)果..................................................13
50軟件使用說明...................................................14
6。結(jié)論...........................................................14
參考文獻.......................................................16
附錄源代碼.......................................................16
1o引言
數(shù)據(jù)結(jié)構(gòu)在計算機科學界至今沒有標準的定義。個人根據(jù)各自的理解的不
同而有不同的表述方法:
SartajSahni在他的《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用》一書中稱:數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)
對象,以及存在于該對象的實例和組成實例的數(shù)據(jù)元素之間的各種聯(lián)系。這些
聯(lián)系可以通過定義相關(guān)的函數(shù)來給出?!彼麑?shù)據(jù)對象(dataobject)定義為“一
個數(shù)據(jù)對象是實例或者值的集合“CliffordA.Shaffer在《數(shù)據(jù)結(jié)構(gòu)與算法分析》
一書中的定義是:“數(shù)據(jù)結(jié)構(gòu)是ADT(抽象數(shù)據(jù)類型AbstractDataType)的物
理實現(xiàn)。”
LobertL。Kruse在《數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計》一書中,將一個數(shù)據(jù)結(jié)構(gòu)的
設(shè)計過程分成抽象層、數(shù)據(jù)結(jié)構(gòu)層和實現(xiàn)層.其中,抽象層是指抽象數(shù)據(jù)類型層,
它討論數(shù)據(jù)的邏輯結(jié)構(gòu)及其運算,數(shù)據(jù)結(jié)構(gòu)層和實現(xiàn)層討論一個數(shù)據(jù)結(jié)構(gòu)的表
示和在計算機內(nèi)的存儲細節(jié)以及運算的實現(xiàn).數(shù)據(jù)結(jié)構(gòu)具體指同一類數(shù)據(jù)元素中,
各元素之間的相互關(guān)系,包括三個組成成份,數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的存儲結(jié)構(gòu)
和數(shù)據(jù)運算結(jié)構(gòu).
1.1O重要意義
普通認為,一個數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的.對數(shù)據(jù)
元素間邏輯關(guān)系的描述稱為數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)必須在計算機內(nèi)存儲,數(shù)據(jù)的
存儲結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)形式,是其在計算機內(nèi)的表示;此外討論一個數(shù)據(jù)
結(jié)構(gòu)必須同時討論在該類數(shù)據(jù)上執(zhí)行的運算才故意義。
在許多類型的程序的設(shè)計中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個基本的設(shè)計考慮因
素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗表明,系統(tǒng)實現(xiàn)的艱難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴
重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法就
容易得到了。有些時候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之
適應(yīng).不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。
選擇了數(shù)據(jù)結(jié)構(gòu),算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構(gòu)造的關(guān)鍵因
素。這種洞見導致了許多種軟件設(shè)計方法和程序設(shè)計語言的浮現(xiàn),面向?qū)ο蟮?/p>
程序設(shè)計語言就是其中之一.
1o2.研究內(nèi)容
在計算機科學中,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機的
操作對象(數(shù)據(jù)元素)以及它們之間的關(guān)系和運算等的學科,而且確保經(jīng)過這些
運算后所得到的新結(jié)構(gòu)仍然是原來的結(jié)構(gòu)類型。
“數(shù)據(jù)結(jié)構(gòu)”作為一門獨立的課程在國外是從1968年才開始設(shè)立的。1968
年美國唐?歐?克努特教授開創(chuàng)了數(shù)據(jù)結(jié)構(gòu)的最初體系,他所著的《計算機程序
設(shè)計技巧》第一卷《基本算法》是第一本較系統(tǒng)地闡述數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲
結(jié)構(gòu)及其操作的著作?!皵?shù)據(jù)結(jié)構(gòu)”在計算機科學中是一門綜合性的專業(yè)基礎(chǔ)課.
數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學、計算機硬件和計算機軟件三者之間的一門核心課程。數(shù)
據(jù)結(jié)構(gòu)這一門課的內(nèi)容不僅是普通程序設(shè)計(特殊是非數(shù)值性程序設(shè)計)的基礎(chǔ),
而且是設(shè)計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基
礎(chǔ).
計算機是一門研究用計算機進行信息表示和處理的科學.這里面涉及到兩
個問題:信息的表示,信息的處理.而信息的表示和組織又直接關(guān)系到處理信
息的程序的效率。隨著計算機的普及,信息量的增加,信息范圍的拓寬,使許多
系統(tǒng)程序和應(yīng)用程序的規(guī)模很大,結(jié)構(gòu)又相當復雜。因此,為了編寫出一個“好”
的程序,必須分析待處理的對象的特征及各對象之間存在的關(guān)系,這就是數(shù)據(jù)結(jié)
構(gòu)這門課所要研究的問題。眾所周知,計算機的程序是對信息進行加工處理.在
大多數(shù)情況下,這些信息并非沒有組織,信息(數(shù)據(jù))之間往往具有重要的結(jié)
構(gòu)關(guān)系,這就是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。數(shù)據(jù)的結(jié)構(gòu),直接影響算法的選擇和效率。
計算機解決一個具體問題時,大致需要經(jīng)過下列幾個步驟:首先要從具體問
題中抽象出一個適當?shù)臄?shù)學模型,然后設(shè)計一個解此數(shù)學模型的算法
(Algorithm),最后編出程序、進行測試、調(diào)整直至得到最終解答。尋求數(shù)學
模型的實質(zhì)是分析問題,從中提取操作的對象,并找出這些操作對象之間含有的
關(guān)系,然后用數(shù)學的語言加以描述.計算機算法與數(shù)據(jù)的結(jié)構(gòu)密切相關(guān),算法無
不依附于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率.運算是由計
算機來完成,這就要設(shè)計相應(yīng)的插入、刪除和修改的算法。也就是說,數(shù)據(jù)結(jié)構(gòu)
還需要給出每種結(jié)構(gòu)類型所定義的各種運算的算法。
數(shù)據(jù)是對客觀事物的符號表示,在計算機科學中是指所有能輸入到計算機
中并由計算機程序處理的符號的總稱。數(shù)據(jù)元素是數(shù)據(jù)的基本單位,在計算機程
序中通常作為一個整體考慮。一個數(shù)據(jù)元素由若干個數(shù)據(jù)項組成。數(shù)據(jù)項是數(shù)
據(jù)的不可分割的最小單位.有兩類數(shù)據(jù)元素:一類是不可分割的原子型數(shù)據(jù)元素,
如:整數(shù)"5",字符“N”等;另一類是由多個款項構(gòu)成的數(shù)據(jù)元素,其中每一個
款項被稱為一個數(shù)據(jù)項。例如描述一個學生的信息的數(shù)據(jù)元素可由下列6個數(shù)
據(jù)項組成.其中的出生日期又可以由三個數(shù)據(jù)項:“年”、”月“和"日"組成,則稱"
出生日期''為組合項,而其它不可分割的數(shù)據(jù)項為原子項。關(guān)鍵字指的是能識別
一個或者多個數(shù)據(jù)元素的數(shù)據(jù)項。若能起惟一識別作用,則稱之為"主"關(guān)鍵字,
否則稱之為“次'關(guān)鍵字。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的
一個子集.數(shù)據(jù)對象可以是有限的,也可以是無限的。
數(shù)據(jù)處理是指對數(shù)據(jù)進行查找、插入、刪除、合并、排序、統(tǒng)計以及簡單
計算等的操作過程。在早期,計算機主要用于科學和工程計算,進入八十年代
以后,計算機主要用于數(shù)據(jù)處理。據(jù)有關(guān)統(tǒng)計資料表明,現(xiàn)在計算機用于數(shù)據(jù)處
理的時間比例達到80%以上,隨著時間的推移和計算機應(yīng)用的進一步普及,計
算機用于數(shù)據(jù)處理的時間比例勢必進一步增大.
2.課題分析
學生成績管理系統(tǒng)主要提供成績查詢,方便管理的網(wǎng)上的信息查閱平臺,學
生可以通過該系統(tǒng)查閱與自己相關(guān)信息,查看留言、提交留言。教師可以通過
成績管理系統(tǒng)查閱學生成績信息,教師信息,查看教師留言、學生留言、提交留
言、留言的管理等相關(guān)操作。系統(tǒng)管理員可以實現(xiàn)以上的所有功能,還有對學
生的添加、刪除、修改、教師的添加、刪除、修改,數(shù)據(jù)庫的備份、數(shù)據(jù)庫的還
原等相關(guān)操作。根據(jù)開辟要求,學生成績管理系統(tǒng)主要應(yīng)用于教育系統(tǒng),完成對
日常的教學、教務(wù)、教師以及學生的計算機化的管理。開辟學生成績管理系統(tǒng)
可使學院教職員工減輕工作壓力,比較系統(tǒng)地對教務(wù)、教學上的各項服務(wù)和信
息進行管理,同時,可以減少勞動力的使用,加快查詢速度、加強管理,以及國家
各部門關(guān)于信息化的步伐,使各項管理更加規(guī)范化。目前,學校工作繁雜、資料
重多。目前,管理信息系統(tǒng)已進入高校,但還未普及,而對于學生成績管理來
說,目前還沒有一套完整的、統(tǒng)一的系統(tǒng)。因此,開辟一套適和大眾的、兼容性
好的系統(tǒng)是很有必要的。
3.具體設(shè)計過程
3.1設(shè)計思路
要完成學生成績信息的增刪改查及統(tǒng)計,首先設(shè)計一下內(nèi)存中存放數(shù)據(jù)信息
的格式.在本設(shè)計中采用動態(tài)內(nèi)存空間分配的鏈表方法,該方法為一個結(jié)構(gòu)分配
內(nèi)存空間.每一次分配一塊空間可用來存放一個學生成績的數(shù)據(jù),可稱之為一個
結(jié)點.有多少個學生就應(yīng)該有多少結(jié)點.
總控模塊管理有三種不同的信息的處理模塊,即管理員模塊、教師模塊、學
生模塊,各模塊的主要功能有:
(1)系統(tǒng)管理員進入學生成績管理的主要功能:實現(xiàn)管理員用戶的添加、修改
和刪除,以及對教師添加、教師修改、教師刪除、教師查詢、學生添加、學生修
改、學生刪除、學生查詢等基本功能,并且參預開設(shè)課程、選擇課程的管理,安
排教師的任課和學生的選課工作。
(2)教師進入學生成績管理系統(tǒng)的主要功能:各科教師登錄系統(tǒng)后查詢和修
改個人信息,修改自己的賬號密碼,查詢自己的授課課程,實現(xiàn)對選修了自己課
程的學生的成績進行查詢、錄入和修改,各科老師可以對自己學生選修課程結(jié)束
后賦予分數(shù),同時可以對自己所帶課程的成績優(yōu)秀人數(shù)、及格人數(shù)、不及格人數(shù)
的分布信息進行查詢。
(3)學生進入學生成績管理系統(tǒng)的主要功能:每一個學生登錄后可以查詢和
修改個人信息、修改自己的賬號密碼,以及自己所選任課老師的個人信息,同
時在課程結(jié)束后可以查詢在校期間各個時間段選修課程的成績與學分,以及對
單科成績和總分的排名查詢。
3o2程序設(shè)計結(jié)構(gòu)圖
學生成績系統(tǒng)中學生的成績信息按照學號的順序進行存放。根據(jù)任
務(wù)要求,下面將系統(tǒng)功能進行詳細設(shè)計劃分,功能結(jié)構(gòu)圖1如下:
圖1
3o3.函數(shù)實現(xiàn)說明
在本實驗中,使用鏈表存放學生成績數(shù)據(jù),設(shè)計一個功能類record
來完成系統(tǒng)的各項功能.具體設(shè)計如下:
classrecord
(
public:
structSCORE*InsertRecord(structSCORE*h);〃增加學生成績信
息
structSCORE*DeleteRecord(structSCORE*h);〃刪除學生成績
信息
structSCORE*UpdateRecord(structSCORE*h);〃修改學生成
績信息
voidFindRecord(structSCORE*h,intx,floats1,floats2);〃根據(jù)某門
課程的分數(shù)段查詢學生成績信息
voidFindRecord(structSCORE*h,stringx);〃根據(jù)學生姓
名查詢成績信息
voidFindRecord(structSCORE*h,intx);//根據(jù)學生學號查詢
成績信息
voidStatisticRecord(structSCORE*h,intx);〃統(tǒng)計某門課程的及
格學生人數(shù)、及格率,并顯示不及格學生信息
voidStacRecordFine(structSCORE*h);//統(tǒng)計三門課程
成績?nèi)珵閮?yōu)秀的學生人數(shù),并顯示全為優(yōu)秀的學生信息
voidStacRecordDisq(structSCORE*h);〃統(tǒng)計三門課程成
績?nèi)坎患案竦膶W生人數(shù),并顯示全部不及格的學生信息
voidPrintRecord(structSCORE*h);〃輸出所有學生成
績信息
voidSaveRecordFile(structSCORE*h);〃保存學生成績信
息到文件
structSCORE*LoadRecordFile(structSCORE*h);〃從文件中加
載學生成績信息
),4o程序運行結(jié)果
圖1為初始界面,當我們選擇運行程序時,便會浮現(xiàn)如下圖的界面。根據(jù)上面文字
的內(nèi)容,我們可以了解系統(tǒng)的功能.并開始根據(jù)提示操作。如下圖所示:
圖2為具體添加學生信息的操作:
圖3為修改學生成績信息:
圖4為刪除學生成績信息:
5o軟件使用說明
學生成績管理系統(tǒng)包括九個模塊:輸入學生資料,輸出學生資料,學生姓名按
順序羅列,添加學生資料,按姓名查找,刪除該學生資料,查找并顯示學生資料,
按姓名查找,修改該學生資料,從文件中讀入數(shù)據(jù),儲存學生資料并退出系統(tǒng)。
這九個模塊既相互聯(lián)系又相互獨立。本系統(tǒng)根據(jù)學生成績管理的需要,而建立
一個學生成績管理系統(tǒng),以方便對成績的各項管理操作.本系統(tǒng)能對成績進行輸
入和輸出;能按姓名對學生進行排序,并顯示學生資料、成績等,無非得以系統(tǒng)
輸入學生資料、成績?yōu)榍疤?;能添加學生成績資料;能根據(jù)學生的姓名來查詢該
學生的成績資料,并修改或者是刪除該學生信息;能夠從文件中讀取學生信息,
并
且添加到系統(tǒng)中;能把對系統(tǒng)所進行的操作進行保存,以及時更新系統(tǒng)中的數(shù)據(jù).
6o結(jié)論
課程設(shè)計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,
鍛煉實踐能力的重要環(huán)節(jié),是對我們的實際工作能力的具體訓練和考察過程。隨
著科學技術(shù)發(fā)展的日新月異,當今計算機應(yīng)用在生活中可以說得是無處不在。因
此作為二十一世紀的大學來說掌握程序開辟技術(shù)是十分重要的,而C語言又是最
常見,功能最強大的一種高級語言,因此做好c語言課程設(shè)計是十分必要的.回
顧起此次課程設(shè)計,至今我們?nèi)愿锌H多,的確,自從拿到題目到完成整個編程,
從理論到實踐,在整整半個月的日子里,可以學到不少不少的東西,同時不僅可
以鞏固了以前所學過的知識,而且學到了不少在書本上所沒有學到過的知識。
通過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,惟獨理論知
識是遠遠不夠的,惟獨把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,
才干真正為社會服務(wù),從而提高自己的實際動手能力和獨立思量的能力.在設(shè)計
的過程中遇到問題,可以說得是艱難重重,這畢竟第一次做的,難免會遇到過各
種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學過的
知識理解得不夠深刻,掌握得不夠堅固,比如說結(jié)構(gòu)體,指針,鏈表……通過這
次課程設(shè)計之后,我們把前面所學過的知識又重新溫故了一遍。
我做的是黑白棋的課程設(shè)計,雖然是很簡單的一個小的程序,但對我一個初
學者來說卻是一個很大的艱難.更加是第一次做課程設(shè)計,所以第一天下午在機
房做了一個下午卻絲毫沒有發(fā)展,最主要是不知從何開始,這個時候才知道上課
老師們不厭其煩的教導是多么的珍貴,這個時候才懊悔上課的時候沒有認真的聽
講。可是現(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復習一下。
特殊是結(jié)構(gòu)體,繪制棋盤的部份,幾乎是一片空白,不知從何著手.無非經(jīng)
過幾天的努力,大體上把課本上的知識點看了一遍,知識點也都基本是撐握了,
所以一下一步就是開始正式的編程序了.無非畢竟是個新手,還是不知如何下手,
于是就在網(wǎng)上下了一篇類似的程序,經(jīng)過子細的研究,終于讀懂了c語言編程的
基本過程和方法。經(jīng)過一波三折,終于開始正式編程。
編程是一件很枯燥很無聊的事情,但是出于完成作業(yè),得到學分的壓力,還
必須強破自己堅持下去,按照老師所說的模塊化思想,分部份的進行編寫.而且編
程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因為某一處的
小的錯誤而導致整個程序的無法運行。所以認真子細就是非常重要的了.
開始的時候真的感覺編程是一件很無聊的事情,無非當一個程序運行成功的
時候那種歡躍是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終
于把程序完成為了,盡管程序還是有不少錯誤和漏洞,無非還是很高興的.無論如
何是自己的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學習C語言的一
次實踐作業(yè),自己進步的證明.
通過這次課程設(shè)計,使我對C語言有了更進一步的認識和了解,要想學好它
要重在實踐,要通過不斷的上機操作才干更好地學習它,我也發(fā)現(xiàn)我的好多不足
之處,首先是自己在指法上還不行,時常按錯字母,通過學習也有所改進;再有
對C語言的一些標準庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還
有對C語言中時常浮現(xiàn)的錯誤也不了解,通過實踐的學習,我認識到學好計算機
要重視實踐操作,不僅僅是學習C語言,還是其它的語言,以及其它的計算機方
面的知識都要重在實踐,所以后在學習過程中,我會更加凝視實踐操作,使自己
便好地學好計算機。
在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學到了不少人生的哲
理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么
樣去克服心理上的不良情緒。因此在以后的生活和學習的過程中,我一定會把課
程設(shè)計的精神帶到生活中,不畏艱難,勇往直前!
參考文獻
[1]譚浩強.《C程序設(shè)計(第三版)》,清華大學出版社,2005o
7
[2]梁鳳蘭鄭步芹《C++程序設(shè)計實踐指導》,東南大學出版社,
2022o12
附錄:源代碼
#include<iostream)
#include<string)
#include<fstream>
usingnamespacestd;
structSCORE〃定義存放學生成績信息的結(jié)點
{
intnum;〃學號
stringname;〃姓名
floatmath;〃數(shù)學成績
floatenglish;〃英語成績
floatcomputer;〃就算計基礎(chǔ)成績
floatscoresum;〃總成績
structSCORE*next;//next為指向下一結(jié)點的指針
structSCORE*head;〃指向鏈表頭結(jié)點的指針
intstudentSum=O;//學生總?cè)藬?shù)
classrecord
i
public:
structSCORE*lnsertRecord(structSCORE*h);〃增加學生成績
信息
structSCORE*DeleteRecord(structSCORE*h);〃刪除學生
成績信息
structSCORE*UpdateRecord(structSCORE*h);//修改學生成
績信息
voidFindRecord(structSCORE*h,intx,floats1,floats2);//根據(jù)某門課
程的分數(shù)段查詢學生成績信息
voidFindRecord(structSCORE*h,stringx);//根據(jù)學生姓
名查詢成績信息
voidFindRecord(structSCORE*h,intx);〃根據(jù)學生
學號查詢成績信息
voidStatisticRecord(structSCORE*h,intx);//統(tǒng)計某門課程
的及格學生人數(shù)、及格率,并顯示不及格學生信息
voidStacRecordFine(structSCORE*h);〃統(tǒng)計三門課
程成績?nèi)珵閮?yōu)秀的學生人數(shù),并顯示全為優(yōu)秀的學生信息
voidStacRecordDisq(structSCORE*h);〃統(tǒng)計三門課程成
績?nèi)坎患案竦膶W生人數(shù),并顯示全部不及格的學生信息
voidPrintRecord(structSCORE*h);〃輸出所有學生
成績信息
voidSaveRecordFile(structSCORE*h);//保存學生成
績信息到文件
structSCORE女LoadRecordFile(structSCORE*h);//從文件中
加載學生成績信息
);
structSCORE*record::lnsertRecord(structSCORE*h)
structSCORE*p1,*p2,*p3;//定義指針變量p1、p2、p3
p3=newSCORE;〃創(chuàng)建新的學生成績結(jié)
八占、、
cout(Cn請輸入學生學號:”;
cin?p3—)num;//從鍵盤接收輸入數(shù)賦
值給結(jié)點的學號
cout〈v,n請輸入學生姓名:";
cin)>p3->name;//從鍵盤接收輸入數(shù)賦
值給結(jié)點的姓名
cout<<”\n請輸入學生數(shù)學成績:";
cin)>p3->math;〃從鍵盤接收輸入數(shù)賦
值給結(jié)點的數(shù)學成績
cout〈〈”\n請輸入學生英語成績:";
cin?p3—)english;〃從鍵盤接收輸入數(shù)賦值
給結(jié)點的英語成績
cout?”\n請輸入學生的計算機基礎(chǔ)成績:";
cin)>p3—>computer;//從鍵盤接收輸入數(shù)
賦值給結(jié)點的計算機成績
p3—>scoresum=p3—)math+p3->english+p3—)computer;〃計算
結(jié)點的總成績
p3—)next=NULL;〃將要插入結(jié)點的指針
域設(shè)置為空
if(h==NULL)〃當鏈表中沒有結(jié)點時,
將要加入的結(jié)點作為頭結(jié)點
(
h=p3;
returnh;
p1=p2=h;
while(p1!=NULL&&p3—)num>p1->num)〃查找結(jié)點的學號
大于要插入結(jié)點學號的第一個結(jié)點
//指針p1表示符合條件的結(jié)
點的指針,指針p2是指針p1的前一個結(jié)點指針
(
p2=p1;
p1=p1—>next;
)
if(p1==h)〃插入位置為頭結(jié)點前
(
p3->next=p3;
h=p3;
returnh;
else〃插入位置為鏈表中間和
鏈表尾部
(
p2->next=p3;
p3->next=p1;
studentSum+=1;〃學生人數(shù)加1
returnh;〃返回鏈表的頭結(jié)點
)
voidrecord:PrintRecord(SCORE*h)
(
if(h==NULL)
(
coutvc'W抱歉,沒有任何記錄!\n";
return;
)
cout<<"\n學號\t姓名\t數(shù)學\t英語\t計算機\t總分"《endl;
while(h)〃輸出鏈表中每一個結(jié)點
的學生成績信息
cout?h—)num<\tM?h->name?'T<<h->mathvv'Y"<<h")
english<<"\t"(<h—>computer<"\f,<<h—)scoresum?endl;
h=h->next;
structSCORE*record::DeleteRecord(structSCORE*h)
structSCORE*p1,*p2;
intnum;
if(h==NULL)〃鏈表為空
(
cout〈〈”\n抱歉,沒有任何記錄!”;
returnh;
)
p1=p2=h;〃將鏈表的頭結(jié)點指
針h賦值給指針p1和指針p2
cout?"\n請輸入要刪除記錄的學生學號”;
cin))num;
while(p1!=NULL&&p1->num!=num)〃查找結(jié)點的學
號等于要刪除學生學號的第一個結(jié)點
//指針p1表示符合條件
的結(jié)點的指針,指針p2是指針p1的前一個結(jié)點指針
p2=p1;
p1=p1->next;
if(p1=NULL)〃沒有找到符合要
求的結(jié)點
(
coutv<"\n抱歉啊,表中沒有該記錄哦!”;
returnh;
if(p1—〉num==num)
{
studentSum-1;〃學生人數(shù)減1
if(p1==h)〃刪除的是頭結(jié)點
h=h—>next;
else〃刪除的是非頭結(jié)點
p2->next=p1—>next;
deletep1;//釋放p1所指向的儲存單
)
returnh;
structSCORE*record::UpdateRecord(structSCORE*h)
{
structSCORE*p1;
intnum;
if(h==NULL)〃鏈表為空
{
cout〈v"\n抱歉,沒有任何記錄!”;
returnh;
)
p1=h;〃將鏈表的頭結(jié)點指
針h賦值給指針p1
cout〈<"\n請輸入要修改記錄的學生學號!”;
cin>)num;
while(p1!=NULL&&p1—)num!=num)〃查找結(jié)點的
學號等于要修改學生學號的指針結(jié)點
(
p1=p1—)next;//將p1指針移到下一
個結(jié)點
)
if(p1==NULL)〃沒有找到符合要求
的結(jié)點
cout〈V”\n抱歉啊,表中沒有該記錄哦!”;
returnh;
)
if(p1—>num==num)〃找到符合要求的
結(jié)點,并修改學生的相關(guān)成績
(
cout(〈”\n請重新輸入學生的數(shù)學成績:";
cin)〉p1—)math;
cout<<"\n請重新輸入學生英語成績:”;
cin?p1->english;
cout〈〈,n請重新輸入學生的計算機基礎(chǔ)成績:
cin?p1—)computer;
p1->scoresum=p1-)math+p1—>english+p1—)computer;
}
returnh;
)
voidrecord::FindRecord(structSCORE*hjntx,floats1.floats2)
(
if(h==NULL)〃鏈表為空
(
cout(〈”\n抱歉,沒有任何記錄!
return;
)
cout?"\n學號\t姓名\t數(shù)學\t英語\t計算機\t總分"〈(endl;
while(h)
(
if(x==1)
//查找數(shù)學成績在某分數(shù)段的學生成績信息
if(h->math>=s1&&h->math<=s2)
cout<<h—>num<<"\tw(<h->name<<"\t"(<h—)math?"\t,,
(〈h-〉
english<〈"\t"〈<h->computer<〈"\t"<<h-〉scoresum?endl;
if(x==2)
//查找英語成績在某分數(shù)段的學生成績信息
if(h-)english>=s1&&h—)english<=s2)
cout?h->num〈<”\t"<(h->name<〈"\t”<(h—〉math<
"t”(<h->
english<〈h->computer?”scoresum((endl;
if(x==3)
〃查找計算機成績在某分數(shù)段的學生成績信息
if(h—)computer>=s1&&h—)english<=s2)
cout<〈h->num<<”\t"〈<h->name〈〈"\t”<(h—)
math?"\t,,<(h—)
english?'\t"<<h—)computer<"\t"?h-)scoresum
<<endl;
h=h->next;
)
)
voidrecord::FindRecord(structSCORE*h,intnum)〃根據(jù)學
生學號查找學生成績信息
{
structSCORE*p1;
if(h==NULL)
〃鏈表為空
{
cout〈v”\n抱歉,沒有任何記錄!”;
return;
)
p1=h;
//將鏈表的頭結(jié)點指針h賦值給指針p1
while(p1!=NULL&&p1->num!=num)
//查找節(jié)點的學號等于要查找學生學號的指針結(jié)點
(
p1=p1-〉next;
)
if(p1==NULL)
〃沒有找到
(
cout<〈”\n抱歉,表中沒有該記錄哦!”;
return;
)
if(p1->num==num)
〃找到并顯示信息
I
cout<〈”\n學號\t姓名\t數(shù)學\t英語\t計算機\t總分"vvendl;
cout<<p1—)num?"\t"<<p1—)name<(V<<p1—)math?,"\t"?p1
一>
englishvc"\t"<(p1->computer<(p1-)scoresum〈<endl;
)
)
voidrecord::FindRecord(structSCORE*h,stringname)//根據(jù)學
生姓名查找學生成績信息
(
structSCORE*p1;
if(h==NULL)
〃鏈表為空
(
cout<("\n抱歉,沒有任何記錄";
return;
p1=h;
while(p1!=NULL&&p1->name!=name)
(
p1=p1-)next;
)
if(p1==NULL)
(
coutvc”\n抱歉,表中沒有該記錄哦!”;
return;
)
if(p1—)name==name)
(
cout<<"\n學號\t姓名\t數(shù)學\t英語\t計算機\t總分”<〈endl;
cout?p1—)num〈v"\t”〈vp1->namev<”\t"v<p1—)math(〈“\t"
(<p1->
english<('V?p1—>computer(〈“\t"?p1—)scoresum(<endl;
voidrecord::StatisticRecord(structSCORE*h,intx)
structSCORE*p=h;//將鏈表的頭結(jié)
點指針h復制給指針p
intcount=0;〃定義統(tǒng)計人數(shù)
count變量并賦初始值為0
if(p==NULL)〃鏈表為空
cout(〈"\n抱歉,沒有任何記錄!
return;
while(p)
if(x==1)〃統(tǒng)計數(shù)學成績及格
的學生人數(shù)
if(p-)math>=60)
count+=1;
if(x==2)//統(tǒng)計英語成績及格
的學生人數(shù)
if(p-)english)=60)
count+=1;
if(x==3)〃統(tǒng)計計算機成績及格
的學生人數(shù)
if(p—>computer)=60)
count+=1;
p=p—〉next;
)
if(x==1)//顯示數(shù)學成績
及格的學生人數(shù)及及格率
(
cout<〈”數(shù)學成績及格學生人數(shù)為";
cout<(count;
cout<〈”,及格率為“;
cout(<count/(float)studentSum?endl;
if(count<studentSum)
cout<〈'n學號\t姓名\t數(shù)學"〈<endl;
else
cout<〈"沒有數(shù)學成績不及格學生"v(endl
)
else
if(x==2)〃顯示英語成績及格
的學生人數(shù)及及格率
(
cout<〈"英語績及格學生人數(shù)為”;
cout((count;
cout<<",及格率為“;
cout?count/(float)studentSum?endl;
if(count<studentSum)
cout?"\n學號\t姓名\t英語”<〈endl;
else
cout〈<”沒有英語成績不及格的學生”<<endl;
)
else
if(x==3)〃顯示計算機成績及
格的學生人數(shù)及及格率
cout〈〈”計算機成績及格的學生人數(shù)為";
cout?count;
cout<〈",及格率為“;
cout((count/(float)studentSum(<endl;
if(count<studentSum)
cout〈〈"\n學號\t姓名\t計算機“cvendl;
else
cout〈<”沒有計算機成績不及格的學生”〈〈endl;
)
P=h;
while(p)
if(x==1)
〃顯示數(shù)學成績不及格的學生信息
if(p->math<60)
cout<<p—)num(〈"\t"<<p—>name<〈"\t"(<p->
math?endl;
if(x==2)
//顯示英語成績不及格的學生信息
if(p—)english<60)
cout?p—>num(〈"\t"<(p->name<〈,t"
<<p->english?endl;
if(x==3)
〃顯示計算機成績不及格的學生信息
if(p—>computer(60)
cout(<p—)num〈C\t"(<p—>name(〈”\t"
?p—)computer<endl;
p=p->next;
voidrecord::StacRecordFine(structSCORE*h)
{
structSCORE*p=h;
//將鏈表的頭結(jié)點指針h賦值給指針平p
intcount=0;
//定義統(tǒng)計人數(shù)count變量并賦初始值為0
if(p==NULL)
〃鏈表為空
(
cout〈<“\n抱歉,沒有任何記錄!
return;
)
while(p)
(
if(p—>math)=90&&p-〉english>=90&&p-)computer>=90)
〃統(tǒng)計三門成績?nèi)繛閮?yōu)秀的學生人數(shù)
count+=1;
p=p—>next;//
將指針移到下一結(jié)點
)
cout〈〈"三門成績?nèi)珵閮?yōu)秀的學生人數(shù)為";
cout<(count<<endl;
cout<Cn學號\t姓名\t數(shù)學\t英語\t計算機\t總分”<(endl;
p=h;
//將鏈表的頭結(jié)點指針h賦值給指針p
while(p)
if(p->math>=90&&p-)english)=90&&p—)computer)=90)//
顯示三門成績?nèi)繛閮?yōu)秀的學生信息
cout〈<p->num(<p—>name<\t"?p->math〈v"\t”<
<p->
english<〈"\t"〈<p->computer(\t"?p->scoresum<(endl;
p=p->next;
)
)
voidrecord::StacRecordDisq(structSCORE*h)
(
structSCORE*p=h;
//將鏈表的頭結(jié)點指針h賦值給指針p
intcount=0;
//定義統(tǒng)計人數(shù)count變量并賦初值為0
if(p==NULL)
〃鏈表為空
{
cout(”n抱歉,沒有任何記錄!”;
return;
)
while(p)
(
if(p->math(60&&p->english〈60&&p—〉computer(60)
//統(tǒng)計三門成績?nèi)繛椴患案竦膶W生人數(shù)
count+=1;
p=p->next;
)
cout(〈”三門成績?nèi)坎患案竦膶W生信息為";
cout?count?endl;
cout<〈"全為不及格的學生信息為:"?endl;
cout<〈”\n學號\t姓名\t數(shù)學\t英語\t計算機\t總分"〈(endl;
p=h;
while(p)
(
if(p—>math<60&&p->english<60&&p->computer<60)//
顯示三門成績?nèi)繛椴患案竦膶W生信息
cout〈〈p—〉num<〈”\t"?p—>name?>>\tv〈(p->math〈〈”
\t"(<p—>
english<(w\t"?p->computer〈<“\t"(<p—>scoresum<(endl;
p=p->next;
)
)
voidrecord::SaveRecordFile(structSCORE*h)
〃將鏈表中的數(shù)據(jù)寫入文件
structSCORE*p;
ofstreamofile;
ofile。open("score。dat",ios::out);//
以寫的方式打開文件score.dat,若該文件不存在,則創(chuàng)建score0dat文件
if(!ofile)//
文件打開錯誤
(
cout<〈”\n數(shù)據(jù)文件打開錯誤沒有將數(shù)據(jù)寫入文件!\n”;
return;
)
ofile〈<”學號\t姓名\t數(shù)學\t英語\t計算機\t總分";
while(h)
(
ofile<<endl(<h—)num?'\t"?h—>name(C\t"?h->math<<'\t"<<h
—>
english<〈"\t"<<h->computer〈〈“\t"?h")scoresum;//
將當前結(jié)點的數(shù)據(jù)信息寫入到文件中
p=h;h=h—>next;
deletep;
)
ofileoclose();//
關(guān)閉文件對象
)
structSCORE*record::LoadRecordFile(structSCORE*h)
(
ifstreamifile;//
定義輸入文件對象
ifile.open("score.datJos::in);〃以
讀的方式打開文Ascore.dat
structSCORE*p,*q;
if(!ifile)//
文件打開錯誤
(
cout(〈'V數(shù)據(jù)文件不存在,加載不成功!\n";
returnNULL;
)
chars[50];
ifileogetline(s,50);//
讀取文件指針當前行數(shù)據(jù)
while(!ifile.eof())
(
studentSum=studentSum+1;//
學生人數(shù)加1
p=newSCORE;
//創(chuàng)建新的score變量
ifile)〉p->num>>p—)name)>p->math)〉p-)
english>>p-〉computer?p->scoresum;//
將數(shù)據(jù)從文件中讀取到新的結(jié)點中
p->next=NULL;//
新結(jié)點的指針域為空
if(h==NULL)//
將新結(jié)點插入到鏈表中
q=h=p;
else
(
q—>next=p;
q=p;
)
)
ifile.close0;//
關(guān)閉文件對象
returnh;
)
voidSystemMenu(recordr)//
系統(tǒng)菜單,及處理用戶的選擇
(
intchoice;
while(1)
{
cout〈〈”\n\t\t歡迎進入學生成績管理系統(tǒng)!//
顯示系統(tǒng)主菜單
coutv<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@";
cout<("\n\t1,添加學生成績信息";
cout<<"\n\t2,刪除學生成績信息";
cout(〈'、n\t3、修改學生成績信息";
cout<〈”\n\t4、查詢學生成績信息”;
cout(〈”\n\t5、顯示所有學生成績信息”;
cout(〈'Vi\t6、統(tǒng)計學生成績信息”;
cout?”\n\tO、退出系統(tǒng)";
cout〈〈”\n@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@";
cout<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 45186-2024限制快遞過度包裝要求
- PB-22-7-Hydroxyquinoline-isomer-生命科學試劑-MCE-6693
- 9-Keto-tafluprost-生命科學試劑-MCE-9653
- 二零二五年度未簽勞動合同員工勞動仲裁應(yīng)對與勞動權(quán)益保障協(xié)議
- 2025年度文化創(chuàng)意產(chǎn)業(yè)計件工資與創(chuàng)意成果量化勞動合同
- 2025年度二零二五年度化妝品銷售提成獎勵合同
- 科技孵化器創(chuàng)新創(chuàng)業(yè)者的搖籃
- 跨學科視角下的小學生音樂素養(yǎng)培養(yǎng)研究
- 小學心理健康教育的實踐與思考
- 校園體育活動安全與防護措施
- 護理人文知識培訓課件
- 建筑工程施工安全管理課件
- 浙江省杭州市2023年中考一模語文試題及答案
- 上海市楊浦區(qū)2022屆初三中考二模英語試卷+答案
- 高中英語原版小說整書閱讀指導《奇跡男孩》(wonder)-Part one 講義
- GB/T 4745-2012紡織品防水性能的檢測和評價沾水法
- 國家綜合性消防救援隊伍消防員管理規(guī)定
- 2023年全國各地高考英語試卷:完形填空匯編(9篇-含解析)
- 五年級上冊數(shù)學習題課件 簡便計算專項整理 蘇教版 共21張
- 疼痛科的建立和建設(shè)
- 運動技能學習PPT課件
評論
0/150
提交評論