c++課程設(shè)計--學(xué)生成績管理系統(tǒng)設(shè)計與管理_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計(論文)</b></p><p>  2017年 1 月 12 日</p><p> 課程名稱程序設(shè)計實踐</p><p> 題 目學(xué)生成績管理系統(tǒng)設(shè)計與實現(xiàn)實現(xiàn)</p><p> 院 (系)理學(xué)院</p><p> 專業(yè)班級</p>&

2、lt;p> 姓 名</p><p> 學(xué) 號</p><p> 指導(dǎo)教師</p><p>  學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)</p><p><b>  摘要</b></p><p>  學(xué)生成績管理系統(tǒng)是典型的信息管理系統(tǒng),是學(xué)校教務(wù)管理的重要組成部分,其處理信息量很大。<

3、/p><p>  本課程設(shè)計是用C++實現(xiàn)對學(xué)生的成績管理作一個簡單的模擬,實質(zhì)是建立學(xué)生成績單鏈表,每條記錄由學(xué)號、姓名與成績組成,即鏈表中每個結(jié)點由4個域組成,分別為:學(xué)號、姓名、成績存放下一個結(jié)點地址的next域。用菜單選擇操作方式完成6項功能分別寫成六個函數(shù),創(chuàng)建學(xué)生成績對應(yīng)建立學(xué)生單鏈表的功能,對全部學(xué)生成績的排序,最后保存在文件中,另外四個功能分別對應(yīng)單鏈表的顯示、查詢、修改與刪除四大基本操作。該系統(tǒng)中的

4、數(shù)據(jù)采用線性表中的鏈?zhǔn)酱鎯Y(jié)構(gòu)即單鏈表來存儲,用類類型定義每個學(xué)生記錄并采用外部文件方式記錄數(shù)據(jù)簡便數(shù)據(jù)的讀取與保存。</p><p>  通過對學(xué)生成績管理系統(tǒng)的制作,能夠讓使用者迅速地對學(xué)生的成績做各項處理和顯示,最終的到想要的信息,方便且易于操作。</p><p>  關(guān)鍵詞 學(xué)生成績管理系統(tǒng) , C++, 鏈表 ,文件 </p><p><b&

5、gt;  目錄</b></p><p>  1 總體介紹課程設(shè)計內(nèi)容1</p><p>  1.1 課設(shè)內(nèi)容總體介紹1</p><p>  1.1.1設(shè)計內(nèi)容1</p><p>  1.1.2課程設(shè)計的要求1</p><p>  1.2 個人完成部分2</p><p>  

6、2 主要算法與原理3</p><p><b>  2.1 鏈表3</b></p><p>  2.1.1 鏈表的介紹3</p><p>  2.1.2 鏈表的創(chuàng)建與輸出 3</p><p>  2.1.3鏈表結(jié)點的訪問 4</p><p>  2.1.4鏈表結(jié)點的插入

7、 4</p><p>  2.1.5鏈表結(jié)點的刪除 4</p><p>  2.2 文件的使用 4</p><p>  2.2.1.打開文件4</p><p>  2.2.2關(guān)閉文件5</p><p>  2.2.3文本文件的讀寫5</p><p>  

8、3 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)6</p><p>  3.1 學(xué)生類成員及函數(shù)6</p><p>  3.2 學(xué)生信息類成員及函數(shù)6</p><p>  3.3 主要函數(shù)說明7</p><p>  3.4 學(xué)生成績管理系統(tǒng)的總結(jié)構(gòu)圖7</p><p>  3.5 模塊的流程圖7</p>&l

9、t;p>  3.6 難點及難點的解決8</p><p>  4 結(jié)果分析及改進(jìn)9</p><p>  5 小結(jié)和心得13</p><p><b>  6 參考文獻(xiàn)14</b></p><p><b>  附錄15</b></p><p>  1 總體介紹課程設(shè)

10、計內(nèi)容</p><p>  1.1 課設(shè)內(nèi)容總體介紹</p><p><b>  1.1.1設(shè)計內(nèi)容</b></p><p>  制作學(xué)生成績管理系統(tǒng),實現(xiàn)數(shù)據(jù)錄入、數(shù)據(jù)刪除、數(shù)據(jù)瀏覽以及數(shù)據(jù)查詢等功能。</p><p>  1.1.2課程設(shè)計的要求</p><p>  包括系統(tǒng)設(shè)計要求,開發(fā)環(huán)境

11、要求,技術(shù)文檔要求三部分。</p><p>  (1)系統(tǒng)設(shè)計要求:</p><p> ?。╝)學(xué)生成績管理系統(tǒng)中不同使用單位(用戶)的學(xué)生人數(shù)事先無法確定。</p><p> ?。╞) 該學(xué)生成績管理系統(tǒng)要求有學(xué)生成績錄入,查詢,修改,刪除,排序。</p><p> ?。╟) 系統(tǒng)使用文字菜單,用戶通過選擇菜單項的編號,實現(xiàn)系統(tǒng)對子模塊的調(diào)

12、用。</p><p> ?。╠) 每個班級每門課程的成績可以從學(xué)生的成績總表提取出子表并存儲成一個文本文件。該文本文件名由班級號和課程名拼音字符串構(gòu)成。輸入班級號和課程名字符串后自動生成文件名。 </p><p>  (e) 每個學(xué)生學(xué)習(xí)的課程有數(shù)學(xué),英語,C++。</p><p>  (f) 學(xué)生的成績總表結(jié)構(gòu)約定為(學(xué)號,姓名,課程名,總評成績).總評成績等于各

13、科成績之和。</p><p>  (g)學(xué)號是一個9位整數(shù)構(gòu)成的字符串, 學(xué)號的編碼規(guī)則:入學(xué)年份+在讀年級+在讀班級+班內(nèi)編號;入學(xué)年份用4位整數(shù)構(gòu)成字符串,如2014年入學(xué)則表示為:”2014”;在讀年級用1位整數(shù)構(gòu)成字符串,如正在1年級讀書則表示為:”1”;在讀班級用2位整數(shù)構(gòu)成字符串,如正在1班讀書則表示為:”01”;班內(nèi)編號用2位整數(shù)構(gòu)成字符串,如在班內(nèi)編號為23號則表示為:”23”。</p>

14、;<p><b> ?。?)開發(fā)環(huán)境要求</b></p><p>  軟件環(huán)境:windows XP/windows 7,Visual C++</p><p>  硬件環(huán)境:計算機(jī)(Pen4 CPU, 512MRAM,60G以上硬盤,輸入輸出設(shè)備)</p><p>  (3)技術(shù)文檔要求:</p><p>

15、  按軟件工程技術(shù)文檔要求。要求流程圖繪制規(guī)范,模塊功能描述清晰</p><p>  1.2 個人完成部分</p><p>  第一階段:學(xué)習(xí)鏈表相關(guān)知識來動態(tài)分配存儲空間,并作出鏈表的程序及學(xué)習(xí)文件在C++中的應(yīng)用;</p><p>  第二階段:錄入學(xué)生成績、顯示學(xué)生成績、查詢學(xué)生成績并畫出相關(guān)流程圖,并與隊友共同把所有的程序進(jìn)行整理并調(diào)試成功;</p&g

16、t;<p>  第三階段:獨立完成論文的書寫。</p><p><b>  2 主要算法與原理</b></p><p><b>  2.1 鏈表</b></p><p>  2.1.1 鏈表的介紹</p><p>  數(shù)組式計算機(jī)根據(jù)事先定義好的數(shù)組類型與長度自動為其分配一連續(xù)的存儲單

17、元,相同數(shù)組的位置和距離都是固定的,也就是說,任何一個數(shù)組元素的地址都可一個簡單的公式計算出來,因此這種結(jié)構(gòu)可以有效的對數(shù)組元素進(jìn)行隨機(jī)訪問。但若對數(shù)組元素進(jìn)行插入和刪除操作,則會引起大量數(shù)據(jù)的移動,從而使簡單的數(shù)據(jù)處理變得非常復(fù)雜,低效。鏈表是一種動態(tài)數(shù)據(jù)結(jié)構(gòu),用一組任意的存儲單元(可以是連續(xù)的,也可以是不連續(xù)的)存放數(shù)據(jù)元素。 鏈表中每一個元素成為“結(jié)點”,每一個結(jié)點都是由數(shù)據(jù)域和指針域組成的,每個結(jié)點中的指針域指向下一個結(jié)點。He

18、ad是“頭指針”,表示鏈表的開始,用來指向第一個結(jié)點,而最后一個指針的指針域為NULL(空地址),表示鏈表的結(jié)束??梢钥闯鲦湵斫Y(jié)構(gòu)必須利用指針才能實現(xiàn),即一個結(jié)點中必須包含一個指針變量,用來存放下一個結(jié)點的地址。實際上,鏈表中的每個結(jié)點可以用若干個數(shù)據(jù)和若干個指針。結(jié)點中只有一個指針的鏈表稱為單鏈表,這是最簡單的鏈表結(jié)構(gòu)。</p><p>  2.1.2 鏈表的創(chuàng)建與輸出 </p><

19、;p>  圖1 動態(tài)鏈表創(chuàng)建 圖 2 鏈表輸出</p><p>  2.1.3鏈表結(jié)點的訪問  </p><p>  由于鏈表中的各個結(jié)點是由指針鏈接在一起的,其存儲單元文筆是連續(xù)的,因此,對其中任意結(jié)點的地址無法向數(shù)組一樣,用一個簡單的公式計算出來,進(jìn)行隨機(jī)訪問。只能從鏈表的頭指針(即head)開始,用一個指針p先指向第

20、一個結(jié)點,然后根據(jù)結(jié)點p找到下一個結(jié)點。以此類推,直至找到所要訪問的結(jié)點或到最后一個結(jié)點(指針為空)為止。</p><p>  2.1.4鏈表結(jié)點的插入  </p><p>  如果要在鏈表中的結(jié)點a之前插入結(jié)點b,則需要考慮下面幾點情況。(1)插入前鏈表是一個空表,這時插入新結(jié)點b后。(2)若a是鏈表的第一個結(jié)點,則插入后,結(jié)點b為第一個結(jié)點。(3)若鏈表中存在a,且不是第一個

21、結(jié)點,則首先要找出a的上一個結(jié)點a_k,然后使a_k的指針域指向b,在令b的指針域指向a,即可完成插入。(4)如鏈表中不存在a,則插在最后。先找到鏈表的最后一個結(jié)點a_n,然后使a_n的指針域指向結(jié)點b,而b指針的指針為空。</p><p>  2.1.5鏈表結(jié)點的刪除  </p><p>  如果要在鏈表中刪除結(jié)點a并釋放被刪除的結(jié)點所占的存儲空間,則需要考慮下列幾種情況。(1

22、)若要刪除的結(jié)點a是第一個結(jié)點,則把head指向a的下一個結(jié)點。(2)若要刪除的結(jié)點a存在于鏈表中,但不是第一個結(jié)點,則應(yīng)使a得上一個結(jié)點a_k-1的指針域指向的下一個結(jié)點a_k+1。(3)空表或要刪除的結(jié)點a不存在,則不做任何改變。</p><p>  2.2 文件的使用 </p><p>  2.2.1.打開文件</p><p>  在ofstream

23、類中,成員函數(shù)open()實現(xiàn)打開文件的操作,從而將數(shù)據(jù)流和文件進(jìn)行關(guān)聯(lián),通過ofstream,ifstream,fstream對象進(jìn)行對文件的讀寫操作</p><p><b>  函數(shù):open()</b></p><p>  參數(shù): filename   操作文件名</p><p>  mode  &

24、#160;     打開文件的方式</p><p>  prot        打開文件的屬性</p><p><b>  2.2.2關(guān)閉文件</b></p><p>  當(dāng)文件讀寫操作完成之后,我們必須將文件關(guān)閉以使文件重新變?yōu)榭稍L問

25、的。成員函數(shù)close(),它負(fù)責(zé)將緩存中的數(shù)據(jù)排放出來并關(guān)閉文件。這個函數(shù)一旦被調(diào)用,原先的流對象就可以被用來打開其它的文件了,這個文件也就可以重新被其它的進(jìn)程所訪問了。為防止流對象被銷毀時還聯(lián)系著打開的文件,析構(gòu)函數(shù)將會自動調(diào)用關(guān)閉函數(shù)close()。</p><p>  2.2.3文本文件的讀寫</p><p>  Read成員函數(shù)從一個文件讀字節(jié)到一個指定的存儲器區(qū)域,由長度參數(shù)確

26、定要讀的字節(jié)數(shù)。如果給出長度參數(shù),當(dāng)遇到文件結(jié)束或者在文本模式文件中遇到文件結(jié)束標(biāo)記字符時結(jié)束。</p><p>  3 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)</p><p>  3.1 學(xué)生類成員及函數(shù)</p><p><b>  表一 學(xué)生類</b></p><p>  3.2 學(xué)生信息類成員及函數(shù)</p>&

27、lt;p><b>  表二 學(xué)生信息類</b></p><p>  3.3 主要函數(shù)說明</p><p>  首先在創(chuàng)建菜單時,應(yīng)包括創(chuàng)建學(xué)生成績錄入,顯示,查詢,修改,刪除,排序這六個功能,然后通過調(diào)用創(chuàng)建信息函數(shù)完成學(xué)生成績的錄入,顯示函數(shù)實現(xiàn)學(xué)生信息的全部顯示,通過修改可以改變輸入錯的信息,針對有的學(xué)生如果轉(zhuǎn)學(xué)什么的可以對其信息進(jìn)行刪除,利用姓名來調(diào)用查詢

28、函數(shù)能夠得到所想要的學(xué)生信息;最后,通過調(diào)用排序函數(shù)后在,可以在所見的文件夾里打開所有錄入的學(xué)生信息及最終排序結(jié)果。</p><p>  3.4 學(xué)生成績管理系統(tǒng)的總結(jié)構(gòu)圖</p><p>  通過總結(jié)構(gòu)圖能夠直觀地看出所制作的成績管理系統(tǒng)的各項功能,總結(jié)構(gòu)圖如下圖3.</p><p>  圖3 學(xué)生成績管理系統(tǒng)的總結(jié)構(gòu)</p><p>  

29、3.5 模塊的流程圖</p><p>  根據(jù)系統(tǒng)提示,選擇1創(chuàng)建學(xué)生信息,根據(jù)系統(tǒng)提示可以一次輸入姓名,學(xué)號,成績,如果要對成績顯示則繼續(xù)選擇2,可以對成績顯示,當(dāng)創(chuàng)建的信息大于等于2時可以繼續(xù)選擇3,進(jìn)行排序,最終的結(jié)果可以在當(dāng)前所建的記事本里顯示各項成績及排序,要對信息查詢選擇4來查詢你想要的信息,也可以對信息修改等,最終可以選擇0安全退出系統(tǒng)。 </p><p>  進(jìn)入系統(tǒng)根據(jù)系

30、統(tǒng)提示來選擇想要進(jìn)行的操作,從而完成各項的功能,利用信息查詢也可以來判斷所操作的刪除是否刪除成功的測試,查詢流程如下,圖4.</p><p>  圖4 信息查詢流程圖</p><p>  3.6 難點及難點的解決</p><p>  難點:通過構(gòu)造兩個類來實現(xiàn)各種功能,使用鏈表來對各項功能的實現(xiàn)及使用文件來保存所得到的成績排序結(jié)果的連接中相對較難。</p>

31、;<p>  解決:通過自己認(rèn)真學(xué)習(xí)課本所學(xué)過的鏈表及文件相關(guān)的知識,并通過上網(wǎng)查找類似的鏈表和文件在C++中的應(yīng)用來完成。</p><p><b>  4 結(jié)果分析及改進(jìn)</b></p><p>  首先進(jìn)入系統(tǒng)界面后,會有時間,日期的顯示,并提示密碼的輸入,如下圖5.</p><p><b>  圖5 首界面<

32、/b></p><p>  根據(jù)界面提示進(jìn)入菜單界面,可以對想要的操作進(jìn)行選擇,如圖6.</p><p><b>  圖6 菜單界面</b></p><p>  選擇1,創(chuàng)建學(xué)生信息,創(chuàng)建學(xué)生的姓名、學(xué)號,各科成績,最后會顯示添加成功,結(jié)果如下圖7.</p><p><b>  圖7 創(chuàng)建學(xué)生信息<

33、/b></p><p>  根據(jù)剛才創(chuàng)建更多的學(xué)生信息后,選擇3,可以顯示創(chuàng)建的所有學(xué)生的信息,如圖8.</p><p><b>  圖8 顯示學(xué)生信息</b></p><p>  根據(jù)剛才創(chuàng)建的所有信息可以進(jìn)行查詢自己所想要的學(xué)生信息,如下圖9.</p><p><b>  圖9 查詢學(xué)生信息</

34、b></p><p>  如果有的同學(xué)轉(zhuǎn)學(xué)或其他什么的,該信息已經(jīng)無意義,可以對該信息進(jìn)行刪除,如圖9.</p><p>  圖10 刪除學(xué)生信息</p><p>  如果第一次創(chuàng)建信息過程中出現(xiàn)錯誤或輸入的姓名與學(xué)號不對應(yīng),則可以通過修改學(xué)生的信息,如圖10.</p><p><b>  圖11 修改信息</b>

35、</p><p>  最后完成所有輸入的成績排序,得到最終的結(jié)果顯示,如圖11.</p><p><b>  圖12 排序結(jié)果</b></p><p>  所有的操作完成后,選擇0,可以安全退出系統(tǒng)。如下圖12.</p><p>  圖13 系統(tǒng)安全退出系統(tǒng)</p><p><b>  

36、5 小結(jié)和心得</b></p><p>  對于我們所選的學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn),我是根據(jù)我們所做的ssrt 的項目有啟發(fā)而做的,經(jīng)過查閱資料發(fā)現(xiàn)利用文件和鏈表來實現(xiàn),所以自己又把我們學(xué)過的鏈表和文件進(jìn)行學(xué)習(xí),查閱相關(guān)的實例練習(xí)鏈表的應(yīng)用,但剛開始我們想的比較簡單是依據(jù)C語言而實現(xiàn)的,到后來經(jīng)老師的點撥,發(fā)現(xiàn)我們做的應(yīng)該是基于C++ 的程序,雖然僅剩一天半左右的時間,我和隊友能夠更根據(jù)自己前期準(zhǔn)

37、備的基礎(chǔ)上,進(jìn)一步查閱資料并對自己原有的程序進(jìn)行修改,最終的以完成。</p><p>  通過這次C++的課程設(shè)計的學(xué)習(xí),讓我體會到我們所學(xué)的C++課程的實用性,以前我認(rèn)為計算機(jī)方面的課程僅僅是我所要必修的,沒有什么的實際價值,但是經(jīng)過這次課程設(shè)計,看到同學(xué)們所做的小游戲后,我發(fā)現(xiàn)其實我們所學(xué)的都是非常有用的,只是在以前我們?nèi)狈λ伎己湾憻?,僅僅把游戲當(dāng)作一種娛樂,并沒有發(fā)現(xiàn)用我們所學(xué)的知識也是可以制作的,所以啟發(fā)

38、我們以后需要多思考,多進(jìn)行實際操作。</p><p>  利用這次訓(xùn)練,我發(fā)現(xiàn)自己能夠掌握更多的知識,通過兩個人的合作,能夠相互取長補(bǔ)短,對我后期的學(xué)習(xí)也有很大的幫助,讓我不再對計算機(jī)課程感到頭疼,同時也增加了我對編程的興趣與愛好,希望以后的學(xué)習(xí)、生活中,我能夠和做這次課程設(shè)計一樣,勤于動手,動腦,努力來彌補(bǔ)不足之處。</p><p><b>  6 參考文獻(xiàn)</b>

39、</p><p>  [1] 譚浩強(qiáng).C++程序設(shè)計[M].北京.清華大學(xué)出版社,2004.6.</p><p>  [2] 譚浩強(qiáng).C++程序設(shè)計解題與上機(jī)指導(dǎo)[M].北京.清華大學(xué)出版社.2005.3.[3] 錢新賢,楊猛,程兆煒,張少東.Visual C++編程疑難詳解[M].北京.人民郵電出版社,2000.5</p><p>  [4]http:

40、//wenku.baidu.com/link?url=H3Fwag-V9gQ5Xp2l7eH-pfvTUjUciMMvcY14V </p><p>  [5] http://blog.csdn.net/kevin_zhai/article/details/50494020</p><p><b>  附錄</b></p><p>  #incl

41、ude <fstream> </p><p>  #include <string> </p><p>  #include<iostream></p><p>  #include <conio.h></p><p>  #include<ctime>//用getch();

42、</p><p>  using namespace std; </p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  class Student </p><p><b>  { </b></p><p><b>  publ

43、ic: </b></p><p>  char name[20]; </p><p>  char Id[20]; </p><p>  int Cnum; //C++課程得分 </p><p>  int Mnum; //數(shù)學(xué)課程得分 </p><p>  int Enum;

44、 //英語課程得分 </p><p>  int sum; //總分 </p><p>  Student * Next; </p><p>  void Input() </p><p><b>  { </b></p><p>  cout<

45、<"\t\t請輸入學(xué)生的姓名:"; </p><p>  cin>>name; </p><p>  cout<<"\t\t請輸入學(xué)生的學(xué)號(九位):"; </p><p><b>  cin>>Id;</b></p><p>  co

46、ut<<"\t\t請輸入C++課程的期末成績:"; </p><p>  cin>>Cnum; </p><p>  cout<<"\t\t請輸入數(shù)學(xué)課程的期末成績:"; </p><p>  cin>>Mnum; </p><p>  cout<

47、;<"\t\t請輸入英語課程的成績:"; </p><p>  cin>>Enum; </p><p>  sum=Cnum+Mnum+Enum; </p><p><b>  } </b></p><p>  void ReadFile(istream & in) &

48、lt;/p><p><b>  { </b></p><p>  in>>name>>Id>>Cnum>>Mnum>>Enum>>sum; </p><p><b>  } </b></p><p>  void Show()

49、 </p><p><b>  { </b></p><p>  cout<<" 姓名 " <<"學(xué)號 "<<" C++ " <<" 數(shù)學(xué) " <<" 英語 "<<"

50、 總成績 "<<endl; </p><p>  cout<< name<<" "<<Id<<" "<<Cnum<<" "<<Mnum<<" "<<Enum<<"

51、 "<<sum<<endl;</p><p><b>  } </b></p><p><b>  }; </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  class St

52、udentmassage </p><p><b>  { </b></p><p><b>  public: </b></p><p>  Studentmassage(); </p><p>  ~Studentmassage(); </p><p>  vo

53、id ShowMenu(); </p><p>  void Find(); </p><p>  void Save(); </p><p>  void ModifyItem(); </p><p>  void RemoveItem(); </p><p>  void Swap(Student *,S

54、tudent *); </p><p>  void Sort(); //void Unpass(); </p><p>  int ListCount(); //void Average(); </p><p>  void Display() </p><p><b>  { </b></p

55、><p>  for(Student * p=Head->Next;p!=End;p=p->Next) </p><p>  p->Show(); </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p&g

56、t;<b>  } </b></p><p>  void AddItem() </p><p><b>  { </b></p><p>  End->Input(); </p><p>  End->Next=new Student; </p><p&g

57、t;  End=End->Next; </p><p>  cout<<"添加成功!"<<endl; </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } &

58、lt;/b></p><p>  private: </p><p>  Student * Head,* End; </p><p>  ifstream in; </p><p>  ofstream out; </p><p>  Student *FindItem(char * name) &l

59、t;/p><p><b>  { </b></p><p>  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功則返回上一個指針,不成功就返回空 </p><p>  if(!strcmp(p->Next->name,name))return p; </p>

60、;<p>  return NULL; </p><p><b>  } </b></p><p>  Student *FindID(char * Id) </p><p><b>  { </b></p><p>  for(Student * p=Head;p->N

61、ext!=End;p=p->Next)//匹配成功則返回上一個指針,不成功就返回空 </p><p>  if(!strcmp(p->Next->Id,Id))return p; </p><p>  return NULL; </p><p><b>  } </b></p><p><

62、b>  }; </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌構(gòu)造函數(shù)﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  Studentmassage::Studentmassage() </p><p><b>  { </b></p><p>  Head=new Student;

63、</p><p>  Head->Next=new Student; </p><p>  End=Head->Next; </p><p>  in.open("sort.txt"); </p><p><b>  if(!in) </b></p><p>

64、;  cout<<"這是一個新系統(tǒng),無學(xué)生信息。請先輸入。"<<endl; </p><p><b>  else </b></p><p><b>  { </b></p><p>  while(!in.eof()) </p><p><

65、b>  { </b></p><p>  End->ReadFile(in); </p><p>  if(End->name[0]=='\0')break; </p><p>  End->Next=new Student; </p><p>  End=End->Next;

66、 </p><p><b>  } </b></p><p>  in.close(); </p><p>  cout<<"\t\t讀取學(xué)生信息成功!"<<endl; </p><p><b>  } </b></p><p

67、><b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析構(gòu)函數(shù)﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  Studentmassage::~Studentmassage() </p><p><b>  { </b></p><p><b>  Sa

68、ve(); </b></p><p>  for(Student * temp;Head->Next!=End;) </p><p><b>  { </b></p><p>  temp=Head->Next; </p><p>  Head->Next=Head->Next

69、->Next; </p><p>  delete temp; </p><p><b>  } </b></p><p>  delete Head,End; </p><p><b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜單﹌

70、﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::ShowMenu() </p><p><b>  { </b></p><p>  cout<<"***********************************************

71、***************"<<endl; </p><p>  cout<<"********制作人:西安建筑科技大學(xué) 張丹莉 周春燕***********"<<endl; </p><p>  cout<<"********* 歡迎來到學(xué)生成績管理系統(tǒng) *********

72、**"<<endl; </p><p>  cout<<"********* 1 創(chuàng)建學(xué)生信息 ***********"<<endl; </p><p>  cout<<"********* 2 顯示學(xué)生信息 *********

73、**"<<endl; </p><p>  cout<<"********* 3 排序?qū)W生信息 ***********"<<endl; </p><p>  cout<<"********* 4 查詢學(xué)生信息 *********

74、**"<<endl; </p><p>  cout<<"********* 5 刪除學(xué)生信息 ***********"<<endl; </p><p>  cout<<"********* 6 修改學(xué)生信息 *********

75、**"<<endl; </p><p>  cout<<"********* 0 成功退出系統(tǒng) ***********"<<endl; </p><p>  cout<<"***********************************************

76、***************"<<endl; </p><p>  cout<<"**************************************************************"<<endl; </p><p>  cout<<"請輸入您想完成的操作:"; &l

77、t;/p><p><b>  }</b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函數(shù)﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::Find() </p><p><b>  { </b></p><p>  char

78、 name[20] ,Id[10]; </p><p><b>  int x; </b></p><p>  Student * p=NULL; </p><p>  cout<<"\n\t\t*********************************\n"; </p><p

79、>  cout<<"\t\t※ 1.按學(xué)生的姓名查找\n\t\t※ 2.按學(xué)生學(xué)號查找"; </p><p>  cout<<"\n\t\t*********************************\n請選擇:"; </p><p><b>  cin>>x; </b>&l

80、t;/p><p>  switch(x) </p><p><b>  { </b></p><p>  case 1:{cout<<"\t\t請輸入要查找的學(xué)生的姓名:";cin>>name; </p><p>  if(p=FindItem(name)) </p&

81、gt;<p><b>  { </b></p><p>  p->Next->Show(); </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b

82、></p><p><b>  else </b></p><p><b>  { </b></p><p>  cout<<"\t\t沒有找到該姓名的學(xué)生!"<<'\n'<<endl; </p><p>  cou

83、t<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b></p><p><b>  }break; </b></p><p><b>  case 2: </b></

84、p><p><b>  { </b></p><p>  cout<<"\t\t請輸入要查找的學(xué)生的學(xué)號:";cin>>Id; </p><p>  if(p=FindID(Id)) </p><p><b>  { </b></p>&

85、lt;p>  p->Next->Show(); </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b></p><p><b>  else </b>

86、;</p><p><b>  { </b></p><p>  cout<<"\t\t沒有找到該學(xué)好的學(xué)生!"<<'\n'<<endl; </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><

87、p>  getch(); </p><p><b>  } </b></p><p><b>  }break; </b></p><p><b>  } </b></p><p><b>  } </b></p><p

88、>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::ModifyItem() //修改信息 </p><p><b>  { </b></p><p>  char name[20]; </p><p>  Studen

89、t * p=NULL; </p><p>  cout<<"\t\t請輸入要修改的人的姓名:";cin>>name; </p><p>  if(p=FindItem(name)) </p><p><b>  { </b></p><p>  cout<<

90、"\t\t已找到學(xué)生的信息,請輸入新的信息!"<<endl; </p><p>  p->Next->Input(); </p><p>  cout<<"修改成功!"<<endl; </p><p>  cout<<"輸入任意字符!繼續(xù)……"

91、;; </p><p>  getch(); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  cout<<"\t\t

92、沒有找到!"<<endl; </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b></p><p><b>  } </b></p>

93、<p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌刪除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::RemoveItem() // 刪除信息 </p><p><b>  { </b></p><p>  char name[20]; </p><p

94、>  Student * p=NULL,*temp=NULL; </p><p>  cout<<"\t\t請輸入要刪除的學(xué)生的姓名:"<<endl;cin>>name; </p><p>  if(p=FindItem(name)) </p><p><b>  { </b>

95、;</p><p>  temp=p->Next; </p><p>  p->Next=p->Next->Next; </p><p>  delete temp; </p><p>  cout<<"\t\t刪除成功!"<<endl; </p>&

96、lt;p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b>&

97、lt;/p><p>  cout<<"\t\t沒有找到!"<<endl; </p><p>  cout<<"輸入任意字符!繼續(xù)……"; </p><p>  getch(); </p><p><b>  } </b></p>

98、<p><b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::Swap(Student *p1, Student *p2)//交換兩個combox變量的數(shù)據(jù)域 </p><p><b>  { </b

99、></p><p>  Student *temp=new Student; </p><p>  strcpy(temp->name,p1->name); </p><p>  strcpy(temp->Id,p1->Id); </p><p>  temp->Cnum=p1->Cnum;

100、 </p><p>  temp->Mnum=p1->Mnum; </p><p>  temp->Enum=p1->Enum; </p><p>  temp->sum=p1->sum; </p><p>  strcpy(p1->name,p2->name); </p>

101、<p>  strcpy(p1->Id,p2->Id); </p><p>  p1->Cnum=p2->Cnum; </p><p>  p1->Mnum=p2->Mnum; </p><p>  p1->Enum=p2->Enum; </p><p>  p1->s

102、um=p2->sum; </p><p>  strcpy(p2->name,temp->name); </p><p>  strcpy(p2->Id,temp->Id); </p><p>  p2->Cnum=temp->Cnum; </p><p>  p2->Mnum=temp

103、->Mnum; </p><p>  p2->Enum=temp->Enum; </p><p>  p2->sum=temp->sum; </p><p><b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p>

104、<p>  int Studentmassage::ListCount()//統(tǒng)計當(dāng)前鏈表的記錄總數(shù),返回一個整數(shù) </p><p><b>  { </b></p><p>  if(! Head) </p><p>  return 0; </p><p>  int n=0; </p>

105、;<p>  for(Student * p=Head->Next;p!=End;p=p->Next) </p><p><b>  { </b></p><p><b>  n++; </b></p><p><b>  } </b></p><

106、p>  return n; </p><p><b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::Sort()//對當(dāng)前鏈表進(jìn)行排序 </p><p><b>  { </b&

107、gt;</p><p>  cout <<"Sorting..."<<endl; </p><p>  Student *p=NULL,*p1=NULL,*k=NULL; </p><p>  int n=Studentmassage::ListCount(); </p><p>  if(n

108、<2) </p><p><b>  return; </b></p><p>  for(p=Head->Next;p!=End;p=p->Next) </p><p>  for(k=p->Next;k!=End;k=k->Next) </p><p><b>  {

109、 </b></p><p>  if(p->sum>k->sum) </p><p><b>  { </b></p><p>  Studentmassage::Swap(p,k); </p><p><b>  } </b></p><

110、p><b>  }</b></p><p>  cout <<"排序完成!"<<endl; </p><p><b>  getch(); </b></p><p><b>  return; </b></p><p>&l

111、t;b>  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函數(shù)﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  void Studentmassage::Save() </p><p><b>  { </b></p><p>  out.open("sort.txt

112、"); </p><p>  for(Student *p=Head->Next;p!=End;p=p->Next) </p><p>  out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"

113、\t" </p><p>  <<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n'; </p><p>  out.close(); </p><p><b>

114、  } </b></p><p>  //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函數(shù)﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ </p><p>  int main() </p><p><b>  { </b></p><p><b>  int x; </b></p><p>

115、  bool quit=false; </p><p>  system("cls"); </p><p>  time_t t; </p><p>  time(&t); </p><p>  cout <<"***********歡迎進(jìn)入西安建筑科技大學(xué)學(xué)生管理系統(tǒng)*********

116、*******\n"<<endl </p><p>  << " ^ 當(dāng)前系統(tǒng)時間是: " << ctime(&t)<<endl; //密碼設(shè)置 </p><p>  cout<<" ^ 進(jìn)入該系統(tǒng)設(shè)有密碼,只有2次

117、機(jī)會! \n"<<endl; </p><p>  cout<<" ^ 溫馨向您提示,登錄密碼為 123456 \n"<<endl; </p><p>  cout<<" ^ 請您輸入密碼: ";</p><p>  string s

118、tr; </p><p>  cin>>str; </p><p>  if(str=="123456") </p><p>  { cin.get();</p><p>  Studentmassage Grade; </p><p>  cout<<"按任意鍵

119、開始……";</p><p><b>  getch();</b></p><p>  while(!quit) </p><p><b>  { </b></p><p>  system("cls"); </p><p>  Grade

120、.ShowMenu(); </p><p><b>  cin>>x; </b></p><p>  switch(x) </p><p><b>  { </b></p><p>  case 0:quit=true;</p><p>  cout<

121、;<"----------------------------------------------------------------------------------"<<endl;</p><p>  cout<<"======>> 西安建筑科技大學(xué)學(xué)生成績管理系統(tǒng) <<====="<<endl; /*

122、結(jié)束程序*/ </p><p>  cout<<" ★************ 西安建筑科技大學(xué)**************★"<<endl;</p><p>  cout<<" ★************ 理 學(xué) 院 **************★"<<endl;</p>

123、<p>  cout<<" ★************ 應(yīng) 數(shù) 1401 班 **************★"<<endl;</p><p>  cout<<" ★************ 141003133 ****************★"<<endl;</p>

124、<p>  cout<<"==========>> 歡迎使用西安建筑科技大學(xué)生成績管理系統(tǒng) <<==========="<<endl; </p><p>  cout<<"-------------------------------------------------------

125、-----------------------------"<<endl;</p><p><b>  break; </b></p><p>  case 1:Grade.AddItem();break; </p><p>  case 2:Grade.Display();break; </p>&l

126、t;p>  case 3:Grade.Sort();break; </p><p>  case 4:Grade.Find();break; </p><p>  case 5:Grade.RemoveItem();break; </p><p>  case 6:Grade.ModifyItem();break; </p><p&

127、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><

128、p>  cout<<"第一次密碼錯誤,請重新輸入密碼!"<<endl; </p><p>  cin>>str; </p><p>  if(str=="123456") </p><p><b>  {</b></p><p>  { c

129、in.get();} </p><p>  Studentmassage Grade; </p><p>  cout<<"按任意鍵開始……";</p><p><b>  getch();</b></p><p>  while(!quit) </p><p>

130、;<b>  { </b></p><p>  system("cls"); </p><p>  Grade.ShowMenu(); </p><p><b>  cin>>x; </b></p><p>  switch(x) </p>&

131、lt;p><b>  { </b></p><p>  case 0:quit=true;</p><p>  cout<<"----------------------------------------------------------------------------------"<<endl;</p

132、><p>  cout<<"======>> 西安建筑科技大學(xué)學(xué)生成績管理系統(tǒng) <<====="<<endl; /*結(jié)束程序*/ </p><p>  cout<<" ★************ 西安建筑科技大學(xué)**************★"<<endl;</p>

133、<p>  cout<<" ★************ 理 學(xué) 院 **************★"<<endl;</p><p>  cout<<" ★************ 應(yīng) 數(shù) 1401 班 **************★"<<endl;</p><p&g

134、t;  cout<<" ★************ 141003133 ****************★"<<endl;</p><p>  cout<<"==========>> 歡迎使用西安建筑科技大學(xué)生成績管理系統(tǒng) <<==========="<<endl;

135、 </p><p>  cout<<"------------------------------------------------------------------------------------"<<endl;</p><p><b>  break; </b></p><p>

136、;  case 1:Grade.AddItem();break; </p><p>  case 2:Grade.Display();break; </p><p>  case 3:Grade.Sort();break; </p><p>  case 4:Grade.Find();break; </p><p>  case 5:

137、Grade.RemoveItem();break; </p><p>  case 6:Grade.ModifyItem();break; </p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></

138、p><p><b>  else </b></p><p>  cout<<"您無權(quán)使用本系統(tǒng)!"<<endl; </p><p><b>  }</b></p><p>  return 0; </p><p><b> 

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論