




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
任務(wù)書題目:學(xué)生成績管理系統(tǒng)設(shè)計內(nèi)容及要求:1.課程設(shè)計任務(wù)內(nèi)容設(shè)計一個簡易的學(xué)生成績管理系統(tǒng),能夠完成學(xué)生成績的增加、刪除、查找、修改、統(tǒng)計等操作,數(shù)據(jù)信息保存文件保存。要求系統(tǒng)具有菜單和提示,界面友好。2.課程設(shè)計要求實現(xiàn)學(xué)生成績的管理和保存。開發(fā)環(huán)境:vc++6.0實現(xiàn)目標(biāo):熟悉的運用c語言程序編寫代碼。能夠理清整個程序的運行過程并繪畫流程圖了解如何定義局部變量和整體變量;學(xué)會上機調(diào)試程序,發(fā)現(xiàn)問題,并解決學(xué)習(xí)使用C++程序來了解程序原理。學(xué)習(xí)用文檔書寫程序說明摘要管理信息系統(tǒng)正在向著網(wǎng)絡(luò)化、智能化和集成化等趨勢發(fā)展。學(xué)生成績管理系統(tǒng)是為了更好的管理學(xué)生考試成績而開發(fā)的數(shù)據(jù)管理軟件。它對于一個學(xué)校是不可缺少的重要部分,它的內(nèi)容對于學(xué)校的決策者和管理者來說都至關(guān)重要。學(xué)生成績管理管理系統(tǒng)為用戶提供充足的信息和快捷的查詢手段,實現(xiàn)學(xué)生基本信息、成績的錄入,刪除,查詢,維護以及成績的統(tǒng)計分析等幾方面的功能,是現(xiàn)實問題的迫切要求。本系統(tǒng)開發(fā)的總體任務(wù)是實現(xiàn)學(xué)生成績管理的系統(tǒng)化、規(guī)范化、自動化。達(dá)到提高學(xué)生成績管理效率的目的。與傳統(tǒng)管理方法相比有明顯的優(yōu)點:查找方便,可靠性高,保密性好,成本低。徹底改變了以前繁雜的管理模式,實現(xiàn)全面的、相對集中的、職能化的信息綜合管理。計算機被用到信息管理系統(tǒng)的環(huán)境正是適應(yīng)了當(dāng)今時代飛速發(fā)展的信息時代。人們深刻的認(rèn)識到了計算機功能的強大,對于復(fù)雜的信息管理,計算機充分發(fā)揮著它的優(yōu)越性。檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低,這些優(yōu)點極大地減輕了學(xué)院教學(xué)人員的工作量,縮小開支,提高了學(xué)生檔案管理的效率和準(zhǔn)確性,能夠合理的安排時間,學(xué)生能夠盡快的知道自己的考試成績。同時,學(xué)生管理系統(tǒng)的應(yīng)用也為今天的教育在未來市場的競爭力有所提高。目錄TOC\o"1-3"\h\u1.引言 52.課題分析 73.具體設(shè)計過程 83.1設(shè)計思路 83.2程序設(shè)計流程圖 83.3.函數(shù)實現(xiàn)說明 104.程序運行結(jié)果 135.軟件使用說明 146.結(jié)論 14參考文獻(xiàn) 16附錄:源代碼 161.引言數(shù)據(jù)結(jié)構(gòu)在計算機科學(xué)界至今沒有標(biāo)準(zhǔn)的定義。個人根據(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)?!盠obertL.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)的存儲細(xì)節(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.1.重要意義一般認(rèn)為,一個數(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án)重的依賴于是否選擇了最優(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)鍵因素。這種洞見導(dǎo)致了許多種軟件設(shè)計方法和程序設(shè)計語言的出現(xiàn),面向?qū)ο蟮某绦蛟O(shè)計語言就是其中之一。1.2.研究內(nèi)容在計算機科學(xué)中,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機的操作對象(數(shù)據(jù)元素)以及它們之間的關(guān)系和運算等的學(xué)科,而且確保經(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)”在計算機科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機硬件和計算機軟件三者之間的一門核心課程。數(shù)據(jù)結(jié)構(gòu)這一門課的內(nèi)容不僅是一般程序設(shè)計(特別是非數(shù)值性程序設(shè)計)的基礎(chǔ),而且是設(shè)計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎(chǔ)。計算機是一門研究用計算機進行信息表示和處理的科學(xué)。這里面涉及到兩個問題:信息的表示,信息的處理。而信息的表示和組織又直接關(guān)系到處理信息的程序的效率。隨著計算機的普及,信息量的增加,信息范圍的拓寬,使許多系統(tǒng)程序和應(yīng)用程序的規(guī)模很大,結(jié)構(gòu)又相當(dāng)復(fù)雜。因此,為了編寫出一個“好”的程序,必須分析待處理的對象的特征及各對象之間存在的關(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)過下列幾個步驟:首先要從具體問題中抽象出一個適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計一個解此數(shù)學(xué)模型的算法(Algorithm),最后編出程序、進行測試、調(diào)整直至得到最終解答。尋求數(shù)學(xué)模型的實質(zhì)是分析問題,從中提取操作的對象,并找出這些操作對象之間含有的關(guān)系,然后用數(shù)學(xué)的語言加以描述。計算機算法與數(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ù)是對客觀事物的符號表示,在計算機科學(xué)中是指所有能輸入到計算機中并由計算機程序處理的符號的總稱。數(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ù)項。例如描述一個學(xué)生的信息的數(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)計以及簡單計算等的操作過程。在早期,計算機主要用于科學(xué)和工程計算,進入八十年代以后,計算機主要用于數(shù)據(jù)處理。據(jù)有關(guān)統(tǒng)計資料表明,現(xiàn)在計算機用于數(shù)據(jù)處理的時間比例達(dá)到80%以上,隨著時間的推移和計算機應(yīng)用的進一步普及,計算機用于數(shù)據(jù)處理的時間比例必將進一步增大。課題分析學(xué)生成績管理系統(tǒng)主要提供成績查詢,方便管理的網(wǎng)上的信息查閱平臺,學(xué)生可以通過該系統(tǒng)查閱與自己相關(guān)信息,查看留言、提交留言。教師可以通過成績管理系統(tǒng)查閱學(xué)生成績信息,教師信息,查看教師留言、學(xué)生留言、提交留言、留言的管理等相關(guān)操作。系統(tǒng)管理員可以實現(xiàn)以上的所有功能,還有對學(xué)生的添加、刪除、修改、教師的添加、刪除、修改,數(shù)據(jù)庫的備份、數(shù)據(jù)庫的還原等相關(guān)操作。根據(jù)開發(fā)要求,學(xué)生成績管理系統(tǒng)主要應(yīng)用于教育系統(tǒng),完成對日常的教學(xué)、教務(wù)、教師以及學(xué)生的計算機化的管理。開發(fā)學(xué)生成績管理系統(tǒng)可使學(xué)院教職員工減輕工作壓力,比較系統(tǒng)地對教務(wù)、教學(xué)上的各項服務(wù)和信息進行管理,同時,可以減少勞動力的使用,加快查詢速度、加強管理,以及國家各部門關(guān)于信息化的步伐,使各項管理更加規(guī)范化。目前,學(xué)校工作繁雜、資料重多。目前,管理信息系統(tǒng)已進入高校,但還未普及,而對于學(xué)生成績管理來說,目前還沒有一套完整的、統(tǒng)一的系統(tǒng)。因此,開發(fā)一套適和大眾的、兼容性好的系統(tǒng)是很有必要的。具體設(shè)計過程3.1設(shè)計思路要完成學(xué)生成績信息的增刪改查及統(tǒng)計,首先設(shè)計一下內(nèi)存中存放數(shù)據(jù)信息的格式。在本設(shè)計中采用動態(tài)內(nèi)存空間分配的鏈表方法,該方法為一個結(jié)構(gòu)分配內(nèi)存空間。每一次分配一塊空間可用來存放一個學(xué)生成績的數(shù)據(jù),可稱之為一個結(jié)點。有多少個學(xué)生就應(yīng)該有多少結(jié)點??偪啬K管理有三種不同的信息的處理模塊,即管理員模塊、教師模塊、學(xué)生模塊,各模塊的主要功能有:(1)系統(tǒng)管理員進入學(xué)生成績管理的主要功能:實現(xiàn)管理員用戶的添加、修改和刪除,以及對教師添加、教師修改、教師刪除、教師查詢、學(xué)生添加、學(xué)生修改、學(xué)生刪除、學(xué)生查詢等基本功能,并且參與開設(shè)課程、選擇課程的管理,安排教師的任課和學(xué)生的選課工作。(2)教師進入學(xué)生成績管理系統(tǒng)的主要功能:各科教師登錄系統(tǒng)后查詢和修改個人信息,修改自己的賬號密碼,查詢自己的授課課程,實現(xiàn)對選修了自己課程的學(xué)生的成績進行查詢、錄入和修改,各科老師可以對自己學(xué)生選修課程結(jié)束后給予分?jǐn)?shù),同時可以對自己所帶課程的成績優(yōu)秀人數(shù)、及格人數(shù)、不及格人數(shù)的分布信息進行查詢。(3)學(xué)生進入學(xué)生成績管理系統(tǒng)的主要功能:每個學(xué)生登錄后可以查詢和修改個人信息、修改自己的賬號密碼,以及自己所選任課老師的個人信息,同時在課程結(jié)束后可以查詢在校期間各個時間段選修課程的成績與學(xué)分,以及對單科成績和總分的排名查詢。3.2程序設(shè)計結(jié)構(gòu)圖學(xué)生成績系統(tǒng)中學(xué)生的成績信息按照學(xué)號的順序進行存放。根據(jù)任務(wù)要求,下面將系統(tǒng)功能進行詳細(xì)設(shè)計劃分,功能結(jié)構(gòu)圖1如下:圖13.3.函數(shù)實現(xiàn)說明在本實驗中,使用鏈表存放學(xué)生成績數(shù)據(jù),設(shè)計一個功能類record來完成系統(tǒng)的各項功能。具體設(shè)計如下:classrecord{public:structSCORE*InsertRecord(structSCORE*h);//增加學(xué)生成績信息 structSCORE*DeleteRecord(structSCORE*h);//刪除學(xué)生成績信息 structSCORE*UpdateRecord(structSCORE*h);//修改學(xué)生成績信息voidFindRecord(structSCORE*h,intx,floats1,floats2);//根據(jù)某門課程的分?jǐn)?shù)段查詢學(xué)生成績信息 voidFindRecord(structSCORE*h,stringx);//根據(jù)學(xué)生姓名查詢成績信息 voidFindRecord(structSCORE*h,intx);//根據(jù)學(xué)生學(xué)號查詢成績信息 voidStatisticRecord(structSCORE*h,intx);//統(tǒng)計某門課程的及格學(xué)生人數(shù)、及格率,并顯示不及格學(xué)生信息 voidStacRecordFine(structSCORE*h);//統(tǒng)計三門課程成績?nèi)珵閮?yōu)秀的學(xué)生人數(shù),并顯示全為優(yōu)秀的學(xué)生信息voidStacRecordDisq(structSCORE*h);//統(tǒng)計三門課程成績?nèi)坎患案竦膶W(xué)生人數(shù),并顯示全部不及格的學(xué)生信息 voidPrintRecord(structSCORE*h);//輸出所有學(xué)生成績信息 voidSaveRecordFile(structSCORE*h);//保存學(xué)生成績信息到文件 structSCORE*LoadRecordFile(structSCORE*h);//從文件中加載學(xué)生成績信息};4.程序運行結(jié)果圖1為初始界面,當(dāng)我們選擇運行程序時,便會出現(xiàn)如下圖的界面。根據(jù)上面文字的內(nèi)容,我們可以了解系統(tǒng)的功能。并開始根據(jù)提示操作。如下圖所示:圖2為具體添加學(xué)生信息的操作:圖3為修改學(xué)生成績信息:圖4為刪除學(xué)生成績信息:5.軟件使用說明學(xué)生成績管理系統(tǒng)包括九個模塊:輸入學(xué)生資料,輸出學(xué)生資料,學(xué)生姓名按順序排列,添加學(xué)生資料,按姓名查找,刪除該學(xué)生資料,查找并顯示學(xué)生資料,按姓名查找,修改該學(xué)生資料,從文件中讀入數(shù)據(jù),儲存學(xué)生資料并退出系統(tǒng)。這九個模塊既相互聯(lián)系又相互獨立。本系統(tǒng)根據(jù)學(xué)生成績管理的需要,而建立一個學(xué)生成績管理系統(tǒng),以方便對成績的各項管理操作。本系統(tǒng)能對成績進行輸入和輸出;能按姓名對學(xué)生進行排序,并顯示學(xué)生資料、成績等,不過得以系統(tǒng)輸入學(xué)生資料、成績?yōu)榍疤?;能添加學(xué)生成績資料;能根據(jù)學(xué)生的姓名來查詢該學(xué)生的成績資料,并修改或是刪除該學(xué)生信息;能夠從文件中讀取學(xué)生信息,并且添加到系統(tǒng)中;能把對系統(tǒng)所進行的操作進行保存,以及時更新系統(tǒng)中的數(shù)據(jù)。6.結(jié)論課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對我們的實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)是十分重要的,而C語言又是最常見,功能最強大的一種高級語言,因此做好C語言課程設(shè)計是十分必要的?;仡櫰鸫舜握n程設(shè)計,至今我們?nèi)愿锌H多,的確,自從拿到題目到完成整個編程,從理論到實踐,在整整半個月的日子里,可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體,指針,鏈表……通過這次課程設(shè)計之后,我們把前面所學(xué)過的知識又重新溫故了一遍。我做的是黑白棋的課程設(shè)計,雖然是很簡單的一個小的程序,但對我一個初學(xué)者來說卻是一個很大的困難。更加是第一次做課程設(shè)計,所以第一天下午在機房做了一個下午卻絲毫沒有進展,最主要是不知從何開始,這個時候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個時候才后悔上課的時候沒有認(rèn)真的聽講。可是現(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復(fù)習(xí)一下。特別是結(jié)構(gòu)體,繪制棋盤的部分,幾乎是一片空白,不知從何著手。不過經(jīng)過幾天的努力,大體上把課本上的知識點看了一遍,知識點也都基本是撐握了,所以一下一步就是開始正式的編程序了。不過畢竟是個新手,還是不知如何下手,于是就在網(wǎng)上下了一篇類似的程序,經(jīng)過仔細(xì)的研究,終于讀懂了C語言編程的基本過程和方法。經(jīng)過一波三折,終于開始正式編程。編程是一件很枯燥很無聊的事情,但是出于完成作業(yè),得到學(xué)分的壓力,還必須強破自己堅持下去,按照老師所說的模塊化思想,分部分的進行編寫。而且編程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因為某一處的小的錯誤而導(dǎo)致整個程序的無法運行。所以認(rèn)真仔細(xì)就是非常重要的了。開始的時候真的感覺編程是一件很無聊的事情,不過當(dāng)一個程序運行成功的時候那種喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序完成了,盡管程序還是有很多錯誤和漏洞,不過還是很高興的。無論如何是自己的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學(xué)習(xí)C語言的一次實踐作業(yè),自己進步的證明。通過這次課程設(shè)計,使我對C語言有了更進一步的認(rèn)識和了解,要想學(xué)好它要重在實踐,要通過不斷的上機操作才能更好地學(xué)習(xí)它,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行,經(jīng)常按錯字母,通過學(xué)習(xí)也有所改進;再有對C語言的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還有對C語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實踐的學(xué)習(xí),我認(rèn)識到學(xué)好計算機要重視實踐操作,不僅僅是學(xué)習(xí)C語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注視實踐操作,使自己便好地學(xué)好計算機。在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會把課程設(shè)計的精神帶到生活中,不畏艱難,勇往直前!參考文獻(xiàn)[1]譚浩強.《C程序設(shè)計(第三版)》,清華大學(xué)出版社,2005.7[2]梁鳳蘭鄭步芹《C++程序設(shè)計實踐指導(dǎo)》,東南大學(xué)出版社,2015.12附錄:源代碼#include<iostream>#include<string>#include<fstream>usingnamespacestd;structSCORE//定義存放學(xué)生成績信息的結(jié)點{intnum;//學(xué)號 stringname;//姓名 floatmath;//數(shù)學(xué)成績 floatenglish;//英語成績 floatcomputer;//就算計基礎(chǔ)成績 floatscoresum;//總成績 structSCORE*next;//next為指向下一結(jié)點的指針};structSCORE*head;//指向鏈表頭結(jié)點的指針intstudentSum=0;//學(xué)生總?cè)藬?shù)classrecord{public:structSCORE*InsertRecord(structSCORE*h);//增加學(xué)生成績信息 structSCORE*DeleteRecord(structSCORE*h);//刪除學(xué)生成績信息 structSCORE*UpdateRecord(structSCORE*h);//修改學(xué)生成績信息voidFindRecord(structSCORE*h,intx,floats1,floats2);//根據(jù)某門課程的分?jǐn)?shù)段查詢學(xué)生成績信息 voidFindRecord(structSCORE*h,stringx);//根據(jù)學(xué)生姓名查詢成績信息 voidFindRecord(structSCORE*h,intx);//根據(jù)學(xué)生學(xué)號查詢成績信息 voidStatisticRecord(structSCORE*h,intx);//統(tǒng)計某門課程的及格學(xué)生人數(shù)、及格率,并顯示不及格學(xué)生信息 voidStacRecordFine(structSCORE*h);//統(tǒng)計三門課程成績?nèi)珵閮?yōu)秀的學(xué)生人數(shù),并顯示全為優(yōu)秀的學(xué)生信息voidStacRecordDisq(structSCORE*h);//統(tǒng)計三門課程成績?nèi)坎患案竦膶W(xué)生人數(shù),并顯示全部不及格的學(xué)生信息 voidPrintRecord(structSCORE*h);//輸出所有學(xué)生成績信息 voidSaveRecordFile(structSCORE*h);//保存學(xué)生成績信息到文件 structSCORE*LoadRecordFile(structSCORE*h);//從文件中加載學(xué)生成績信息};structSCORE*record::InsertRecord(structSCORE*h){structSCORE*p1,*p2,*p3;//定義指針變量p1、p2、p3 p3=newSCORE;//創(chuàng)建新的學(xué)生成績結(jié)點 cout<<"\n請輸入學(xué)生學(xué)號:"; cin>>p3->num;//從鍵盤接收輸入數(shù)賦值給結(jié)點的學(xué)號 cout<<"\n請輸入學(xué)生姓名:"; cin>>p3->name;//從鍵盤接收輸入數(shù)賦值給結(jié)點的姓名 cout<<"\n請輸入學(xué)生數(shù)學(xué)成績:"; cin>>p3->math;//從鍵盤接收輸入數(shù)賦值給結(jié)點的數(shù)學(xué)成績 cout<<"\n請輸入學(xué)生英語成績:"; cin>>p3->english;//從鍵盤接收輸入數(shù)賦值給結(jié)點的英語成績 cout<<"\n請輸入學(xué)生的計算機基礎(chǔ)成績:"; cin>>p3->computer;//從鍵盤接收輸入數(shù)賦值給結(jié)點的計算機成績 p3->scoresum=p3->math+p3->english+p3->computer;//計算結(jié)點的總成績 p3->next=NULL;//將要插入結(jié)點的指針域設(shè)置為空 if(h==NULL)//當(dāng)鏈表中沒有結(jié)點時,將要加入的結(jié)點作為頭結(jié)點 {h=p3; returnh; } p1=p2=h; while(p1!=NULL&&p3->num>p1->num)//查找結(jié)點的學(xué)號大于要插入結(jié)點學(xué)號的第一個結(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;//學(xué)生人數(shù)加1 returnh;//返回鏈表的頭結(jié)點}voidrecord::PrintRecord(SCORE*h){if(h==NULL) { cout<<"\n抱歉,沒有任何記錄!\n"; return; } cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"<<endl; while(h)//輸出鏈表中每個結(jié)點的學(xué)生成績信息 { cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h->english<<"\t"<<h->computer<<"\t"<<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請輸入要刪除記錄的學(xué)生學(xué)號"; cin>>num; while(p1!=NULL&&p1->num!=num)//查找結(jié)點的學(xué)號等于要刪除學(xué)生學(xué)號的第一個結(jié)點 //指針p1表示符合條件的結(jié)點的指針,指針p2是指針p1的前一個結(jié)點指針 { p2=p1; p1=p1->next; } if(p1=NULL)//沒有找到符合要求的結(jié)點 { cout<<"\n抱歉啊,表中沒有該記錄哦!"; returnh; } if(p1->num==num) { studentSum-=1;//學(xué)生人數(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)//鏈表為空{(diào) cout<<"\n抱歉,沒有任何記錄!"; returnh; } p1=h;//將鏈表的頭結(jié)點指針h賦值給指針p1 cout<<"\n請輸入要修改記錄的學(xué)生學(xué)號!"; cin>>num; while(p1!=NULL&&p1->num!=num)//查找結(jié)點的學(xué)號等于要修改學(xué)生學(xué)號的指針結(jié)點 { p1=p1->next;//將p1指針移到下一個結(jié)點 } if(p1==NULL)//沒有找到符合要求的結(jié)點 { cout<<"\n抱歉啊,表中沒有該記錄哦!"; returnh; } if(p1->num==num)//找到符合要求的結(jié)點,并修改學(xué)生的相關(guān)成績 { cout<<"\n請重新輸入學(xué)生的數(shù)學(xué)成績:"; cin>>p1->math; cout<<"\n請重新輸入學(xué)生英語成績:"; cin>>p1->english; cout<<"\n請重新輸入學(xué)生的計算機基礎(chǔ)成績:"; cin>>p1->computer; p1->scoresum=p1->math+p1->english+p1->computer; } returnh;}voidrecord::FindRecord(structSCORE*h,intx,floats1,floats2){if(h==NULL)//鏈表為空 { cout<<"\n抱歉,沒有任何記錄!"; return; } cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"<<endl; while(h) { if(x==1)//查找數(shù)學(xué)成績在某分?jǐn)?shù)段的學(xué)生成績信息 if(h->math>=s1&&h->math<=s2) cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> english<<"\t"<<h->computer<<"\t"<<h->scoresum<<endl; if(x==2)//查找英語成績在某分?jǐn)?shù)段的學(xué)生成績信息 if(h->english>=s1&&h->english<=s2) cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> english<<"\t"<<h->computer<<"\t"<<h->scoresum<<endl; if(x==3)//查找計算機成績在某分?jǐn)?shù)段的學(xué)生成績信息 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ù)學(xué)生學(xué)號查找學(xué)生成績信息{structSCORE*p1; if(h==NULL)//鏈表為空 { cout<<"\n抱歉,沒有任何記錄!"; return; } p1=h;//將鏈表的頭結(jié)點指針h賦值給指針p1 while(p1!=NULL&&p1->num!=num)//查找節(jié)點的學(xué)號等于要查找學(xué)生學(xué)號的指針結(jié)點 { p1=p1->next; } if(p1==NULL)//沒有找到 { cout<<"\n抱歉,表中沒有該記錄哦!"; return; } if(p1->num==num)//找到并顯示信息 { cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"<<endl; cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> english<<"\t"<<p1->computer<<"\t"<<p1->scoresum<<endl; }}voidrecord::FindRecord(structSCORE*h,stringname)//根據(jù)學(xué)生姓名查找學(xué)生成績信息{structSCORE*p1; if(h==NULL)//鏈表為空 { cout<<"\n抱歉,沒有任何記錄"; return; } p1=h; while(p1!=NULL&&p1->name!=name) { p1=p1->next; } if(p1==NULL) { cout<<"\n抱歉,表中沒有該記錄哦!"; return; } if(p1->name==name) { cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"<<endl; cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> english<<"\t"<<p1->computer<<"\t"<<p1->scoresum<<endl; }}voidrecord::StatisticRecord(structSCORE*h,intx){ structSCORE*p=h;//將鏈表的頭結(jié)點指針h復(fù)制給指針p intcount=0;//定義統(tǒng)計人數(shù)count變量并賦初始值為0 if(p==NULL)//鏈表為空 { cout<<"\n抱歉,沒有任何記錄!"; return; } while(p) { if(x==1)//統(tǒng)計數(shù)學(xué)成績及格的學(xué)生人數(shù) if(p->math>=60) count+=1; if(x==2)//統(tǒng)計英語成績及格的學(xué)生人數(shù) if(p->english>=60) count+=1; if(x==3)//統(tǒng)計計算機成績及格的學(xué)生人數(shù) if(p->computer>=60) count+=1; p=p->next; } if(x==1)//顯示數(shù)學(xué)成績及格的學(xué)生人數(shù)及及格率 { cout<<"數(shù)學(xué)成績及格學(xué)生人數(shù)為"; cout<<count; cout<<",及格率為"; cout<<count/(float)studentSum<<endl; if(count<studentSum) cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)"<<endl; else cout<<"沒有數(shù)學(xué)成績不及格學(xué)生"<<endl; } else if(x==2)//顯示英語成績及格的學(xué)生人數(shù)及及格率 { cout<<"英語績及格學(xué)生人數(shù)為"; cout<<count; cout<<",及格率為"; cout<<count/(float)studentSum<<endl; if(count<studentSum) cout<<"\n學(xué)號\t姓名\t英語"<<endl; else cout<<"沒有英語成績不及格的學(xué)生"<<endl; } else if(x==3)//顯示計算機成績及格的學(xué)生人數(shù)及及格率 { cout<<"計算機成績及格的學(xué)生人數(shù)為"; cout<<count; cout<<",及格率為"; cout<<count/(float)studentSum<<endl; if(count<studentSum) cout<<"\n學(xué)號\t姓名\t計算機"<<endl; else cout<<"沒有計算機成績不及格的學(xué)生"<<endl; } p=h; while(p) { if(x==1)//顯示數(shù)學(xué)成績不及格的學(xué)生信息 if(p->math<60) cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<endl; if(x==2)//顯示英語成績不及格的學(xué)生信息 if(p->english<60) cout<<p->num<<"\t"<<p->name<<"\t"<<p->english<<endl; if(x==3)//顯示計算機成績不及格的學(xué)生信息 if(p->computer<60) cout<<p->num<<"\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)秀的學(xué)生人數(shù) count+=1; p=p->next;//將指針移到下一結(jié)點 } cout<<"三門成績?nèi)珵閮?yōu)秀的學(xué)生人數(shù)為"; cout<<count<<endl; cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\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)秀的學(xué)生信息 cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<"\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(xué)生人數(shù) count+=1; p=p->next; } cout<<"三門成績?nèi)坎患案竦膶W(xué)生信息為"; cout<<count<<endl; cout<<"全為不及格的學(xué)生信息為:"<<endl; cout<<"\n學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"<<endl; p=h; while(p) { if(p->math<60&&p->english<60&&p->computer<60)//顯示三門成績?nèi)繛椴患案竦膶W(xué)生信息 cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<"\t"<<p-> english<<"\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)建score.dat文件 if(!ofile)//文件打開錯誤 { cout<<"\n數(shù)據(jù)文件打開錯誤沒有將數(shù)據(jù)寫入文件!\n"; return; } ofile<<"學(xué)號\t姓名\t數(shù)學(xué)\t英語\t計算機\t總分"; while(h) { ofile<<endl<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> english<<"\t"<<h->computer<<"\t"<<h->scoresum;//將當(dāng)前結(jié)點的數(shù)據(jù)信息寫入到文件中 p=h;h=h->next; deletep; } ofile.close();//關(guān)閉文件對象}structSCORE*record::LoadRecordFile(structSCORE*h){ ifstreamifile;//定義輸入文件對象 ifile.open("score.dat",ios::in);//以讀的方式打開文件score.dat structSCORE*p,*q; if(!ifile)//文件打開錯誤 { cout<<"\n數(shù)據(jù)文件不存在,加載不成功!\n"; returnNULL; } chars[50]; ifile.getline(s,50);//讀取文件指針當(dāng)前行數(shù)據(jù) while(!ifile.eof()) { studentSum=studentSum+1;//學(xué)生人數(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.close();//關(guān)閉文件對象 returnh;}voidSystemMenu(recordr)//系統(tǒng)菜單,及處理用戶的選擇{ intchoice; while(1) { cout<<"\n\t\t歡迎進入學(xué)生成績管理系統(tǒng)!";//顯示系統(tǒng)主菜單 cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"; cout<<"\n\t1、添加學(xué)生成績信息"; cout<<"\n\t2、刪除學(xué)生成績信息"; cout<<"\n\t3、修改學(xué)生成績信息"; cout<<"\n\t4、查詢學(xué)生成績信息"; cout<<"\n\t5、顯示所有學(xué)生成績信息"; cout<<"\n\t6、統(tǒng)計學(xué)生成績信息"; cout<<"\n\t0、退出系統(tǒng)"; cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"; cout<<"\n請根據(jù)提示選擇操作:"; cin>>choice; switch(choice) { case1://增加學(xué)生成績信息 head=r.InsertRecord(head); break; case2://刪除學(xué)生成績信息 head=r.DeleteRecord(head); case3://修改學(xué)生成績信息 head=r.UpdateRecord(head); case4://查詢學(xué)生成績信息 while(1) { intc; cout<<"\n************************************************"; cout<<"\n\t1.根據(jù)學(xué)號查詢學(xué)生成績信息"; cout<<"\n\t2.根據(jù)姓名查詢學(xué)生成績信息"; cout<<"\n\t3.根據(jù)數(shù)學(xué)分?jǐn)?shù)查詢學(xué)生成績信息"; cout<<"\n\t4.根據(jù)英語成績查詢學(xué)生成績信息"; cout<<"\n\t5.根據(jù)計算機基礎(chǔ)成績查詢學(xué)生成績信息"; cout<<"\n\t6.返回上級目錄"; cout<<"\n************************************************"; //顯示查詢子菜單 cout<<"\n請根據(jù)提示選擇操作:"; cin>>c; if(c==1)//根據(jù)學(xué)號查詢學(xué)生成績信息 { intx; cout<<"\n請輸入需要查詢的學(xué)生學(xué)號:"; cin>>x; r.FindRecord(head,x); } if(c==1)//根據(jù)學(xué)生學(xué)號查詢學(xué)生成績信息 { intx; co
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物業(yè)賠償業(yè)主公共區(qū)域設(shè)施損壞協(xié)議書
- 二零二五年度自媒體平臺內(nèi)容創(chuàng)作者扶持計劃合作協(xié)議
- 2025年度汽車抵押貸款利息調(diào)整合同
- 二零二五年度診所合伙人投資合作與權(quán)益保障協(xié)議
- 二零二五年度餐飲店面租賃合同含節(jié)假日特色活動策劃
- 鼎捷E10-6.0培訓(xùn)教材-質(zhì)量管理
- 《物流系統(tǒng)分析》課件 項目二任務(wù)三 了解物流需求預(yù)測
- 2025年蚌埠道路客貨運輸從業(yè)資格證模擬考試下載
- 2025年濟南貨運從業(yè)資格證考試題答案
- 2025年日喀則貨運資格證題庫在線練習(xí)
- 幼兒園大班音樂教案《我們多快樂》
- 《草船借箭》課本劇劇本-4篇
- 2024年山東服裝職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 團播主持人協(xié)議
- 《工傷預(yù)防知識教育》課件
- 電梯維保經(jīng)營計劃書
- 蘇教版二年級科學(xué)下冊第7課《栽小蔥》課件PPT
- 《活著》讀后感-課件
- 市政道路工程質(zhì)量保證措施
- 網(wǎng)店運營管理(第二版)課件全套 段文忠 第1-9章 網(wǎng)店運營基本原理- 戰(zhàn)略化運營 動態(tài)競爭
- 煤礦機電事故及其防治措施
評論
0/150
提交評論