




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)(論文)任務(wù)書(shū) 軟 件 學(xué) 院 學(xué)院 專(zhuān)業(yè) 班一、課程設(shè)計(jì)(論文) 學(xué) 生 成 績(jī) 管 理 系 統(tǒng) 的 設(shè) 計(jì) 與 實(shí) 現(xiàn) 二、課程設(shè)計(jì)(論文)工作自2014年12月22日起至2012年12月27日止 三、課程設(shè)計(jì)(論文) 地點(diǎn): 創(chuàng) 新 大 樓 機(jī) 房 四、課程設(shè)計(jì)(論文)內(nèi)容要求:1本課程設(shè)計(jì)的目的訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識(shí),獨(dú)立完成問(wèn)題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識(shí),編寫(xiě)程序求解指定問(wèn)題;初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力,鞏固、深化學(xué)生的理論知識(shí),提升編程水平。2課程設(shè)計(jì)的任務(wù)及要
2、求1)基本要求:要求從分析題目的需求入手,按設(shè)計(jì)抽象數(shù)據(jù)類(lèi)型、構(gòu)思算法、通過(guò)設(shè)計(jì)實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型、編寫(xiě)上機(jī)程序和上機(jī)調(diào)試等若干步驟完成題目,最終寫(xiě)出完整的報(bào)告;在程序設(shè)計(jì)階段應(yīng)盡量利用已有的標(biāo)準(zhǔn)函數(shù),加大代碼的重用率;程序設(shè)計(jì)語(yǔ)言推薦使用C/C+,程序書(shū)寫(xiě)規(guī)范,源程序需必要的注釋?zhuān)幻课煌瑢W(xué)需提交可獨(dú)立運(yùn)行的程序和規(guī)范的課程設(shè)計(jì)報(bào)告。2)課程設(shè)計(jì)論文編寫(xiě)要求理論設(shè)計(jì)部分以課程設(shè)計(jì)論文的形式提交,格式必須按照課程設(shè)計(jì)論文標(biāo)準(zhǔn)格式進(jìn)行書(shū)寫(xiě)和裝訂;課程設(shè)計(jì)報(bào)告(論文)包括中文目錄、設(shè)計(jì)任務(wù)、需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼實(shí)現(xiàn)、調(diào)試分析、總結(jié)、謝辭、參考文獻(xiàn)、附錄等;設(shè)計(jì)部分應(yīng)包含系統(tǒng)功能模塊圖,調(diào)
3、試分析應(yīng)包括運(yùn)行截圖等。3)課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn): 學(xué)習(xí)態(tài)度:10分;系統(tǒng)設(shè)計(jì):20分;編程調(diào)試:20分;回答問(wèn)題:20分;論文撰寫(xiě):30分。4)參考文獻(xiàn):嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)M. 清華大學(xué)出版社. 2010.3 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版)M. 清華大學(xué)出版社. 1999.2何欽銘,馮燕等. 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)M. 浙江大學(xué)出版社. 2007.85)課程設(shè)計(jì)進(jìn)度安排準(zhǔn)備階段(4學(xué)時(shí)):選擇設(shè)計(jì)題目、了解目的要求、查閱相關(guān)資料;程序模塊設(shè)計(jì)分析階段(4學(xué)時(shí)):程序概要設(shè)計(jì)、詳細(xì)設(shè)計(jì);代碼編寫(xiě)調(diào)試階段(8學(xué)時(shí)):程序模塊代碼編寫(xiě)、調(diào)試、測(cè)試;撰寫(xiě)論文階段(4學(xué)時(shí)):總結(jié)
4、設(shè)計(jì)任務(wù)和設(shè)計(jì)內(nèi)容,撰寫(xiě)設(shè)計(jì)論文。學(xué)生簽名: 年 月 日6)課程設(shè)計(jì)題目具體要求:能夠?qū)崿F(xiàn)對(duì)學(xué)生成績(jī)的常用管理功能。采用一定的存儲(chǔ)結(jié)構(gòu)對(duì)學(xué)生成績(jī)進(jìn)行管理;可以進(jìn)行成績(jī)的錄入、查詢(xún)、修改、刪除等操作;可以查詢(xún)某門(mén)課程的平均分,學(xué)生的排名,不同分?jǐn)?shù)段的學(xué)生人數(shù)及學(xué)生信息等; 可以查詢(xún)某學(xué)生的各課程分?jǐn)?shù),總分及學(xué)生的班級(jí)排名等;可以按學(xué)號(hào)排序輸出全部學(xué)生的成績(jī)信息、總分及班級(jí)排名等。課程設(shè)計(jì)(論文)評(píng)審意見(jiàn)(1)學(xué)習(xí)態(tài)度(10分):優(yōu)()、良()、中()、一般()、差(); (2)系統(tǒng)設(shè)計(jì)(20分):優(yōu)( )、良()、中()、一般()、差(); (3)編程調(diào)試(20分):優(yōu)()、良()、中()、一般
5、()、差();(4)回答問(wèn)題(20分):優(yōu)()、良()、中()、一般()、差();(5)論文撰寫(xiě)(30分):優(yōu)()、良()、中()、一般()、差();(6)格式規(guī)范性及考勤是否降等級(jí):是()、否()評(píng)閱人: 周娟 職稱(chēng): 講師 2014年12 月 28日目 錄第1章 設(shè)計(jì)任務(wù)分析1第2章 功能實(shí)現(xiàn)詳細(xì)設(shè)計(jì)2第3章 功能測(cè)試8第4章 調(diào)試與改進(jìn)19第5章 小結(jié)20第6章 源代碼21第1章 設(shè)計(jì)任務(wù)分析1.1. 需求與功能分析1.1.1. 需求分析學(xué)生成績(jī)管理系統(tǒng)是一個(gè)教育單位不可缺少的部分它的內(nèi)容對(duì)于學(xué)校的決策者和管理者來(lái)說(shuō)都至關(guān)重要所以學(xué)生成績(jī)管理系統(tǒng)應(yīng)該能夠?yàn)橛脩?hù)提供充足的信息和快捷的查詢(xún)手
6、段。以前各個(gè)學(xué)校的學(xué)生成績(jī)管理基本上都是靠手工進(jìn)行,但隨著各個(gè)學(xué)校的規(guī)模增大,有關(guān)學(xué)生成績(jī)管理工作所涉及的數(shù)據(jù)量也越來(lái)越大,有的學(xué)校不得不靠增加人力、物力來(lái)進(jìn)行學(xué)生成績(jī)管理。這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差等,另外其所用時(shí)間長(zhǎng),產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于查找、更新和維護(hù)都帶來(lái)了不少的困難。如今學(xué)校的學(xué)生越來(lái)越多,成績(jī)管理的工作量越來(lái)越大,手工管理成績(jī)的弊端也越來(lái)越明顯。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)生檔案信息進(jìn)行管理具有手工管理所無(wú)法比擬的優(yōu)點(diǎn),如檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等,能夠極大地提高學(xué)生檔案管理的效率。所以我想借本次課程設(shè)
7、計(jì)之際,設(shè)計(jì)一個(gè)簡(jiǎn)易的學(xué)生成績(jī)管理系統(tǒng)。1.1.2. 功能分析1) 輸入輸出的形式和輸入值的范圍首先輸入學(xué)生個(gè)數(shù)按回車(chē)鍵,然后按照提示選擇輸入學(xué)生信息并將學(xué)生信息保存在文本文檔中,具體對(duì)學(xué)生信息進(jìn)行插入刪除查詢(xún)操作時(shí),將保存在文本文檔中的學(xué)生信息提取出來(lái)保存在自己定義的數(shù)據(jù)結(jié)構(gòu)中,然后再對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,所有操作完成后或者在相應(yīng)的命令后再將學(xué)生信息保存到文本文檔中。輸入數(shù)據(jù)類(lèi)型主要是char、int、float等數(shù)據(jù)類(lèi)型,輸入內(nèi)容包括學(xué)號(hào)、姓名、基礎(chǔ)會(huì)計(jì)成績(jī)、大學(xué)英語(yǔ)成績(jī)、數(shù)據(jù)結(jié)構(gòu)成績(jī)、總分、平均分等數(shù)據(jù)。輸出的形式為學(xué)號(hào)、姓名、基礎(chǔ)會(huì)計(jì)成績(jī)、大學(xué)英語(yǔ)成績(jī)、數(shù)據(jù)結(jié)構(gòu)成績(jī)、總分、平均分等數(shù)據(jù)
8、。2) 程序所達(dá)到的功能i. 數(shù)據(jù)輸入功能,輸入的數(shù)據(jù)能最終保存在文件中;ii. 數(shù)據(jù)刪除功能,能最終從文件中刪除;iii. 多種排序功能,根據(jù)自己設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)排序算法;iv. 多種查詢(xún)功能(如按學(xué)號(hào)查詢(xún)、按姓名查詢(xún)等)及輸出功能;v. 學(xué)生信息的修改(比如修改學(xué)生姓名,修改學(xué)生某門(mén)課程的成績(jī)等);vi. 其他功能(如各種統(tǒng)計(jì),統(tǒng)計(jì)每個(gè)學(xué)生所有課程的平均分,統(tǒng)計(jì)某門(mén)課程的所有學(xué)生的平均分等等)第2章 功能實(shí)現(xiàn)詳細(xì)設(shè)計(jì)2.2.1. 庫(kù)函數(shù)先編入系統(tǒng)所需的庫(kù)函數(shù),使程序可運(yùn)行。#include<stdio.h>#include<iostream>#include&l
9、t;stdlib.h>#include<iomanip> /主要是對(duì)cin,cout之類(lèi)的一些操縱運(yùn)算,是I/O流控制頭文件#include<conio.h> /文件和標(biāo)準(zhǔn)控制臺(tái)的輸入輸出2.2. 菜單界面的設(shè)計(jì)2.2.1. 主菜單的設(shè)計(jì)在主界面中包括“<1>輸入學(xué)生信息并保存到文件 <2>讀取文件并輸出學(xué)生信息 <3>按學(xué)號(hào)查詢(xún) <4>按姓名查詢(xún) <5>按學(xué)號(hào)修改信息 <6>插入學(xué)生信息 <7>按學(xué)號(hào)刪除信息 <8>各科成績(jī)排序 <9>按總分降序排序 &l
10、t;10>各科成績(jī)統(tǒng)計(jì) <11>分?jǐn)?shù)段查找 <12>按學(xué)號(hào)排序 <13>退出”等功能。每個(gè)函數(shù)體如下:void input(Stu *r); /輸入 void output(Stu *r); /輸出 void searchnum(Stu *r); /按學(xué)號(hào)查找void searchname(Stu *r); /按姓名查找void modify(Stu *r); /修改學(xué)生信息Stu *insert(Stu *r); /插入信息void erase(Stu *r); /按學(xué)號(hào)刪除信息void sortmenu(); /排序菜單void sortsum(S
11、tu *r); /按總分降序排序void stat(Stu *r); /統(tǒng)計(jì)各科總分和平均分信息void intmenu(); /分?jǐn)?shù)段查找菜單圖2.2.1 主菜單界面 在此界面中用戶(hù)可以選擇要操作的選項(xiàng),回車(chē)之后即進(jìn)行相關(guān)操作或進(jìn)入相關(guān)二級(jí)菜單void sortnum(Stu *r); /按學(xué)號(hào)排序2.2.2. 排序菜單的設(shè)計(jì)在排序菜單中包括“<1>按基礎(chǔ)會(huì)計(jì)成績(jī)排序 <2>按大學(xué)英語(yǔ)成績(jī)排序 <3>按數(shù)據(jù)結(jié)構(gòu)成績(jī)排序 <4>返回上級(jí)菜單”等功能。每個(gè)函數(shù)體如下:void sort_BA(Stu *r); /基礎(chǔ)會(huì)計(jì)成績(jī)排序void sort_
12、UE(Stu *r); /大學(xué)英語(yǔ)成績(jī)排序圖2.2.2 排序菜單界面void sort_DS(Stu *r); /數(shù)據(jù)結(jié)構(gòu)成績(jī)排序2.2.3. 分?jǐn)?shù)段查找菜單的設(shè)計(jì)在分?jǐn)?shù)段查找菜單中包括“<1>基礎(chǔ)會(huì)計(jì)分?jǐn)?shù)段查找 <2>大學(xué)英語(yǔ)分?jǐn)?shù)段查找<3>數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)段查找<4>返回上級(jí)菜單”等功能。每個(gè)函數(shù)體如下:void int_BA(Stu *r); /基礎(chǔ)會(huì)計(jì)分?jǐn)?shù)段查找void int_UE(Stu *r); /大學(xué)英語(yǔ)分?jǐn)?shù)段查找圖2.2.3 分?jǐn)?shù)段查找菜單界面void int_DS(Stu *r); /數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)段查找2.3. 詳細(xì)設(shè)計(jì)2.3.1
13、. 系統(tǒng)流程圖輸入學(xué)生人數(shù)主菜單界面輸入學(xué)生成績(jī)輸出學(xué)生成績(jī)按學(xué)號(hào)查詢(xún)成績(jī)按姓名查詢(xún)成績(jī)修改學(xué)生信息各科成績(jī)排序按學(xué)號(hào)刪除信息插入學(xué)生信息按總分降序排序各科成績(jī)統(tǒng)計(jì)分?jǐn)?shù)段查找按學(xué)號(hào)排序退出退出..1)2)... 各功能模塊的設(shè)計(jì)1) 主函數(shù)模塊用函數(shù)int main()來(lái)實(shí)現(xiàn),主要功能是顯示菜單,讓用戶(hù)根據(jù)提示選擇操作,首先定義一個(gè)指針數(shù)組(全局使用)Stu *p=(Stu *)new Stunum; 此處num指學(xué)生個(gè)數(shù),并不是學(xué)號(hào),這里應(yīng)用了do-while和switch-case語(yǔ)句來(lái)進(jìn)行循環(huán)選擇,最后若用戶(hù)選擇“13
14、”則保存記錄并退出循環(huán)。2) 學(xué)生記錄輸入模塊用函數(shù)void input(Stu *r)來(lái)實(shí)現(xiàn),在主菜單選擇“1”進(jìn)入輸入模塊之后用戶(hù)需要輸入所需學(xué)生個(gè)數(shù)的學(xué)生信息,包括學(xué)號(hào)、姓名、各科成績(jī)等,輸入完成之后會(huì)返回主菜單。本函數(shù)根據(jù)設(shè)計(jì)的條件判斷循環(huán)來(lái)判斷是否有重復(fù)學(xué)號(hào)輸入。本函數(shù)還將算出學(xué)生的總分與平均分并按學(xué)號(hào)的默認(rèn)順序?qū)⑵渑c輸入的原始學(xué)生記錄保存的文件中去。3) 學(xué)生記錄輸入模塊用函數(shù)void output(Stu *r)來(lái)實(shí)現(xiàn),在系統(tǒng)已經(jīng)錄入了學(xué)生資料的前提下,調(diào)用本函數(shù)可以輸出學(xué)生資料。其中setw()控制域?qū)挘ㄌ?hào)里整型數(shù)據(jù)的數(shù)值代表域?qū)挼淖址麛?shù)。4) 按學(xué)號(hào)查找學(xué)生記錄模塊用函數(shù)v
15、oid searchnum(Stu *r)來(lái)實(shí)現(xiàn),首先提示用戶(hù)輸入要查找的學(xué)生學(xué)號(hào),再用for循環(huán)語(yǔ)句和if判斷語(yǔ)句進(jìn)行循環(huán)判斷來(lái)進(jìn)行查找,if(rm.num=n)表示找到學(xué)生記錄,然后顯示學(xué)生記錄并跳出循環(huán),if(rm.num!=n)表示未找到學(xué)生記錄并輸出提示“該學(xué)號(hào)不存在!”。5) 按姓名查找學(xué)生記錄模塊用函數(shù)void searchname(Stu *r)來(lái)實(shí)現(xiàn),首先提示用戶(hù)輸入要查找的學(xué)生姓名,再用for循環(huán)語(yǔ)句和if判斷語(yǔ)句進(jìn)行循環(huán)判斷來(lái)進(jìn)行查找,if(0=n0) 表示找到學(xué)生記錄,然后顯示學(xué)生記錄并跳出循環(huán),if(0!=n0)表示未找到學(xué)生記錄并輸出提示
16、“該姓名不存在!”。6) 按學(xué)號(hào)修改學(xué)生信息模塊用函數(shù)void modify(Stu *r)來(lái)實(shí)現(xiàn),首先提示用戶(hù)輸入要修改信息的學(xué)生序號(hào),再通過(guò)if條件語(yǔ)句進(jìn)行判斷輸入的學(xué)號(hào)是否存在,if(rm.num!=n)表示輸入的學(xué)生學(xué)號(hào)不存在,輸出提示“該學(xué)號(hào)不存在”,再利用begin標(biāo)記和goto語(yǔ)句重新開(kāi)始循環(huán)并提示用戶(hù)重新輸入要修改的學(xué)生學(xué)號(hào)。if(rm.num=n)若輸入的學(xué)生學(xué)號(hào)存在,則先輸出修改前的學(xué)生信息,此處有一個(gè)while循環(huán)語(yǔ)句和switch-case選擇語(yǔ)句,用來(lái)選擇修改學(xué)生的某一科成績(jī),并讓用戶(hù)選擇是否繼續(xù)進(jìn)行修改。最后將修改過(guò)后的記錄寫(xiě)入文件中,并輸出提示“文件已修改并寫(xiě)入”
17、。7) 插入學(xué)生信息模塊用函數(shù)Stu *insert(Stu *r)來(lái)實(shí)現(xiàn),主要功能是添加學(xué)生資料。在此模塊中定義了另一個(gè)指針數(shù)組:Stu *y=(Stu *)new Stu(num+1);用來(lái)存放新添加的學(xué)生記錄。再利用for循環(huán)語(yǔ)句進(jìn)行輸入新學(xué)生記錄,最后輸出一個(gè)提示語(yǔ)句讓用戶(hù)判斷是否繼續(xù)輸入,若用戶(hù)輸入“Y”或“y”則繼續(xù)輸入,否則將返回主菜單。8) 刪除學(xué)生記錄模塊用函數(shù)void erase(Stu *r)來(lái)實(shí)現(xiàn),首先對(duì)文件進(jìn)行讀取,之后的if判斷語(yǔ)句根據(jù)用戶(hù)輸入的學(xué)號(hào)來(lái)顯示刪除前的信息記錄,然后用for循環(huán)語(yǔ)句循環(huán)把后一位的信息提前一位,整體數(shù)量建議,來(lái)進(jìn)行全局變量的修改,之后再把修
18、改過(guò)后的信息記錄保存到文件中去。9) 各科成績(jī)降序與學(xué)號(hào)(冒泡)排序模塊用函數(shù)void sort_BA(Stu *r),void sort_UE(Stu *r),void sort_DS(Stu *r)三個(gè)函數(shù)來(lái)實(shí)現(xiàn),主要功能是利用用戶(hù)保存在文件的學(xué)生記錄按單科成績(jī)進(jìn)行降序排序。首先對(duì)文件進(jìn)行讀取,然后進(jìn)行冒泡排序。冒泡排序有兩個(gè)優(yōu)點(diǎn),一是代碼比較容易,二是具有穩(wěn)定性。這里的穩(wěn)定性是指原序列中相同兩元素的相對(duì)順序仍然保持到排序后的序列。冒泡排序時(shí)進(jìn)過(guò)n-1趟子排序完成的,第i趟子排序從第1個(gè)數(shù)至第n+1個(gè)數(shù),若第i個(gè)數(shù)比后一個(gè)數(shù)大則交換兩數(shù)。排序之后,將排序之后的結(jié)果寫(xiě)入文件,再讀取文件的時(shí)候
19、,輸出的就是按單科成績(jī)排序后的結(jié)果。10) 總分降序排序模塊用函數(shù)void sortsum(Stu *r)來(lái)實(shí)現(xiàn),主要功能是利用保存在文件的學(xué)生總分進(jìn)行排序。首先對(duì)文件進(jìn)行讀取,然后進(jìn)行選擇排序。其基本思想是:n個(gè)記錄的文件的直接選擇排序可經(jīng)過(guò)n-1趟直接選擇排序得到有序結(jié)果:初始狀態(tài):無(wú)序區(qū)為R1.n,有序區(qū)為空。第1趟排序:在無(wú)序區(qū)R1.n中選出關(guān)鍵字最小的記錄Rk,將它與無(wú)序區(qū)的第1個(gè)記錄R1交換,使R1.1和R2.n分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無(wú)序區(qū)。第i趟排序第i趟排序開(kāi)始時(shí),當(dāng)前有序區(qū)和無(wú)序區(qū)分別為R1.i-1和R(i.n)。該趟排序從當(dāng)前無(wú)序區(qū)中選出關(guān)
20、鍵字最小的記錄 Rk,將它與無(wú)序區(qū)的第1個(gè)記錄R交換,使R1.i和R分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無(wú)序區(qū)。11) 各科成績(jī)統(tǒng)計(jì)模塊用函數(shù)void stat(Stu *r)來(lái)實(shí)現(xiàn),主要功能是計(jì)算各科總分和各科平均分。12) 各科分?jǐn)?shù)段查找模塊用函數(shù)void int_BA(Stu *r),void int_UE(Stu *r),void int_DS(Stu *r),void intsum(Stu *r);四個(gè)函數(shù)實(shí)現(xiàn),首先提示用戶(hù)輸入要查找的單科成績(jī)或總分的上限與下限,然后通過(guò)for循環(huán)語(yǔ)句遍歷學(xué)生記錄找到符合條件的學(xué)生并輸入相應(yīng)學(xué)生記錄。第3章 功能測(cè)試圖3-1 在主
21、菜單選擇1開(kāi)始輸入學(xué)生信息輸入學(xué)生人數(shù)之后進(jìn)入主菜單界面,在主菜單選擇1開(kāi)始輸入學(xué)生信息。圖3-2 輸入學(xué)生信息完成后的界面輸入完成后的界面:Student.txt:1 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.03 TT 93.0 94.0 95.0 282.0 94.04 DB 84.0 85.0 86.0 255.0 85.05 AJS 92.0 93.0 94.0 279.0 93.0圖3-3 輸出文件內(nèi)的學(xué)生信息返回主菜單后選擇2讀入文件信息并輸出。圖3-4 按學(xué)號(hào)查找學(xué)生信息返回主菜單后選擇3按學(xué)號(hào)查找學(xué)生信
22、息。圖3-5 按學(xué)生姓名查找返回主菜單后選擇4按姓名查找學(xué)生信息。圖3-6 按學(xué)號(hào)修改學(xué)生信息返回主菜單后選擇5按學(xué)號(hào)修改學(xué)生信息。圖3-7 修改完成后的界面修改完成后的界面:Student.txt:1 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.03 TT 93.0 94.0 95.0 282.0 94.04 DB 84.0 85.0 86.0 255.0 85.05 AJS 92.0 93.0 94.0 279.0 93.0圖3-8 插入學(xué)生信息返回主菜單后選擇6插入學(xué)生信息。Student.txt:1 JBJ 91.
23、0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.03 TT 93.0 94.0 95.0 282.0 94.04 DB 84.0 85.0 86.0 255.0 85.05 AJS 92.0 93.0 94.0 279.0 93.06 HM 99.0 98.0 97.0 294.0 98.0圖3-9 按學(xué)號(hào)刪除學(xué)生記錄返回主菜單后選擇7,按學(xué)號(hào)刪除學(xué)生記錄。student.txt:1 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.03 TT 93.0 94.0 95.0
24、282.0 94.04 DB 84.0 85.0 86.0 255.0 85.05 AJS 92.0 93.0 94.0 279.0 93.0圖3-10 排序菜單返回主菜單后選擇8進(jìn)入排序菜單,通過(guò)選擇1-3選擇單科成績(jī)進(jìn)行排序。圖3-11 排序完成的提示以選擇1基礎(chǔ)會(huì)計(jì)成績(jī)排序?yàn)槔簣D3-12 按基礎(chǔ)會(huì)計(jì)學(xué)成績(jī)降序?qū)W(xué)生記錄進(jìn)行排序的排序結(jié)果排序結(jié)果:Student.txt:3 TT 93.0 94.0 95.0 282.0 94.05 AJS 92.0 93.0 94.0 279.0 93.01 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.
25、0 264.0 88.04 DB 84.0 85.0 86.0 255.0 85.0圖3-13 按總分降序排序返回菜單后選擇9按總分降序?qū)W(xué)生記錄進(jìn)行排序。圖3-14 按總分降序排序?qū)W(xué)生記錄排序的結(jié)果排序結(jié)果:Student.txt3 TT 93.0 94.0 95.0 282.0 94.05 AJS 92.0 93.0 94.0 279.0 93.01 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.04 DB 84.0 85.0 86.0 255.0 85.0圖3-15 各科總分和平均分的統(tǒng)計(jì)返回主菜單后選擇10對(duì)各科總
26、分以及平均分進(jìn)行統(tǒng)計(jì)。圖3-16 分?jǐn)?shù)段查找菜單返回主菜單后選擇11進(jìn)入分?jǐn)?shù)段查找菜單對(duì)學(xué)生記錄的單科成績(jī)或總成績(jī)進(jìn)行分?jǐn)?shù)段查找。圖3-17 數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)段查找結(jié)果以數(shù)據(jù)結(jié)構(gòu)為例:圖3-18 提示用戶(hù)對(duì)學(xué)生記錄已完成按學(xué)號(hào)排序返回主菜單之后選擇12對(duì)學(xué)生記錄進(jìn)行按學(xué)號(hào)排序。圖3-19 按學(xué)生學(xué)號(hào)對(duì)學(xué)生記錄進(jìn)行排序的排序結(jié)果排序結(jié)果:student.txt:1 JBJ 91.0 92.0 93.0 276.0 92.02 RS 87.0 88.0 89.0 264.0 88.03 TT 93.0 94.0 95.0 282.0 94.04 DB 84.0 85.0 86.0 255.0 85.0
27、5 AJS 92.0 93.0 94.0 279.0 93.0第4章 調(diào)試與改進(jìn)程序編譯連接通過(guò)后在調(diào)試過(guò)程中以及本報(bào)告的編寫(xiě)過(guò)程中遇到了不少的問(wèn)題,經(jīng)過(guò)幾天的調(diào)試與修改大部分問(wèn)題已經(jīng)成功解決。遇到并以解決的部分問(wèn)題如下:1) 在多處需要用戶(hù)輸入數(shù)字時(shí)沒(méi)有設(shè)置數(shù)字范圍或者沒(méi)有限定用戶(hù)只能輸入數(shù)字,導(dǎo)致用戶(hù)在輸入錯(cuò)誤時(shí)出現(xiàn)越界問(wèn)題或者程序崩潰。以用戶(hù)在主菜單輸入數(shù)字選擇操作時(shí)為例,解決方法為利用while循環(huán)語(yǔ)句進(jìn)行循環(huán)判斷,在用戶(hù)輸入越界的數(shù)字或者輸入非數(shù)字時(shí)輸出錯(cuò)誤語(yǔ)句并利用cin.clear();與cin.sync();語(yǔ)句清除錯(cuò)誤狀態(tài)與輸入流再提示用戶(hù)重新輸入。2) 插入學(xué)生記錄時(shí)沒(méi)有進(jìn)
28、行新插入的學(xué)生學(xué)號(hào)是否重復(fù)的檢查,利用for循環(huán)語(yǔ)句與if判斷語(yǔ)句進(jìn)行循環(huán)判斷,在用戶(hù)輸入重復(fù)的學(xué)生學(xué)號(hào)時(shí)輸出提示該學(xué)號(hào)已存在并利用cin.clear();與cin.sync();語(yǔ)句清除錯(cuò)誤狀態(tài)與輸入流再提示用戶(hù)重新輸入。3) 修改學(xué)生記錄函數(shù)void modify(Stu *r)沒(méi)有判斷用戶(hù)輸入的學(xué)號(hào)是否存在,初次采用修改方式是增加一個(gè)if判斷語(yǔ)句if(rm.serial!=n)并將此這個(gè)判斷過(guò)程放在了for(m=0;m<num;m+)的大循環(huán)內(nèi),思考后發(fā)現(xiàn)在m遍歷了一次num之后再進(jìn)行此判斷必定輸出錯(cuò)誤提示,并跳到定義的begin標(biāo)記處,陷入了死循環(huán)。思考過(guò)后定義一個(gè)新變量l,在每
29、次滿(mǎn)足if(rm.serial!=n)時(shí)自增1,在循環(huán)結(jié)束以后若l的值等于num則輸出錯(cuò)誤提示并提示用戶(hù)重新輸入。修改過(guò)后發(fā)現(xiàn)在執(zhí)行完了修改成績(jī)之后仍會(huì)輸出錯(cuò)誤提示。最后定義了end標(biāo)記,在用戶(hù)輸入了一個(gè)存在的學(xué)號(hào)之后執(zhí)行修改成績(jī)完畢后直接利用goto語(yǔ)句跳到end標(biāo)記處。第5章 小結(jié)通過(guò)本次課程設(shè)計(jì),我鞏固了部分本學(xué)期以及上學(xué)期所學(xué)的理論知識(shí),有了一些新的理解與體會(huì)。對(duì)于一些平時(shí)似懂非懂的知識(shí),在這次課程設(shè)計(jì)中也解決了一些困惑,雖然還是不能夠全面的理解,但是已經(jīng)有了進(jìn)步。在課程設(shè)計(jì)中遇到不少困難,包括上一章提及的幾個(gè)問(wèn)題與已經(jīng)解決的一些小問(wèn)題,通過(guò)查閱資料、與同學(xué)討論,在應(yīng)用課本的前提下。拓
30、展課外知識(shí),基本完成了本次課程設(shè)計(jì),雖然其中還有許多不足之處,但是從中我學(xué)到了許多東西,懂得了不能拘泥于課本上的知識(shí)形式,應(yīng)該對(duì)其靈活運(yùn)用。本次課程設(shè)計(jì)使我認(rèn)識(shí)到自己對(duì)知識(shí)的掌握不夠全面,而且感覺(jué)到我們?cè)趯W(xué)習(xí)專(zhuān)業(yè)知識(shí)的同時(shí)還需要加強(qiáng)對(duì)自己邏輯性思維的培養(yǎng)以及對(duì)其他方面知識(shí)的學(xué)習(xí),邏輯性思維對(duì)于能不能寫(xiě)出一個(gè)好的算法以及排除代碼錯(cuò)誤方面至關(guān)重要。在編程的過(guò)程中我又重新復(fù)習(xí)了本學(xué)期的數(shù)據(jù)結(jié)構(gòu)以及上學(xué)期的C+程序設(shè)計(jì)的課本,對(duì)一些以前學(xué)過(guò)的知識(shí)有了更深的理解,對(duì)一些以前沒(méi)學(xué)過(guò)的知識(shí)有了初步的認(rèn)識(shí),當(dāng)自己把程序一點(diǎn)點(diǎn)完善時(shí)讓我對(duì)學(xué)好數(shù)據(jù)結(jié)構(gòu)這門(mén)課程更有信心了,以前一直感覺(jué)枯燥難學(xué)的數(shù)據(jù)結(jié)構(gòu),在編程的過(guò)
31、程中好像顯得不那么高深了。在以后的學(xué)習(xí)過(guò)程中,我一定會(huì)認(rèn)真負(fù)責(zé)地對(duì)待課本中的知識(shí)點(diǎn),進(jìn)一步充實(shí)、提高自己。爭(zhēng)取在不斷的練習(xí)中提高自己的層次。第6章 源代碼#include<stdio.h>#include<iostream>#include<iomanip>#include<stdlib.h>#include<conio.h>using namespace std;struct Stuint serial;char name50;float BA_score; /基礎(chǔ)會(huì)計(jì)成績(jī) float UE_score; /大學(xué)英語(yǔ)成績(jī) float
32、 DS_score; /數(shù)據(jù)結(jié)構(gòu)成績(jī)float sum; /總分 float average; ;/平均分int num=0;int ch,choice;void input(Stu *r); /輸入 void output(Stu *r); /輸出 void menu(); /菜單界面 void sortmenu(); /排序菜單void intmenu(); /分?jǐn)?shù)段查找菜單 void searchnum(Stu *r); /按學(xué)號(hào)查找 void searchname(Stu *r); /按姓名查找 void modify(Stu *r); /修改學(xué)生信息 void erase(Stu *
33、r); /按學(xué)號(hào)刪除信息 void sort_BA(Stu *r); /基礎(chǔ)會(huì)計(jì)成績(jī)排序void sort_UE(Stu *r); /大學(xué)英語(yǔ)成績(jī)排序void sort_DS(Stu *r); /數(shù)據(jù)結(jié)構(gòu)成績(jī)排序void sortnum(Stu *r); /按學(xué)號(hào)排序 void sortsum(Stu *r); /按總分降序排序 void stat(Stu *r); /統(tǒng)計(jì)各科總分和平均分信息 Stu *insert(Stu *r); /插入信息void int_BA(Stu *r); /基礎(chǔ)會(huì)計(jì)分?jǐn)?shù)段查找void int_UE(Stu *r); /大學(xué)英語(yǔ)分?jǐn)?shù)段查找 void int_DS(
34、Stu *r); /數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)段查找void intsum(Stu *r); /總分分?jǐn)?shù)段查找 int main()cout<<"輸入學(xué)生的人數(shù):" cin>>num; while(!cin) cout<<"輸入錯(cuò)誤!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入學(xué)生的人數(shù):" cin>>num;Stu *p=(Stu *)new Stunum;int m;menu();do cin>>m; while(!cin|m<1|m
35、>13) cout<<"輸入錯(cuò)誤!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入:" cin>>m; begin:switch(m)case 1:input(p);menu();break;case 2: output(p); menu();break;case 3: searchnum(p); menu();break;case 4:searchname(p);menu();break;case 5:modify(p);menu();break;case 6:p=insert(p
36、);menu();break; case 7:erase(p);menu();break;case 8:sortmenu();docin>>ch; while(!cin|ch<1|ch>4) cout<<"輸入錯(cuò)誤!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入:" cin>>ch;switch(ch)case 1:system("cls");sortmenu();sort_BA(p);output(p);sortmenu();break;ca
37、se 2:system("cls");sortmenu();sort_UE(p);output(p);sortmenu();break;case 3:system("cls");sortmenu();sort_DS(p);output(p);sortmenu();break;while(ch!=4);system("cls");menu();break;case 9:sortsum(p);output(p);menu();break;case 10:stat(p);menu();break;case 11:intmenu();doci
38、n>>choice;while(!cin|choice<1|choice>6) cout<<"輸入錯(cuò)誤!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入:" cin>>choice;switch(choice)case 1:system("cls");intmenu();int_BA(p);intmenu();break;case 2:system("cls");intmenu();int_UE(p);intmenu();br
39、eak;case 3:system("cls");intmenu();int_DS(p);intmenu();break;case 4:system("cls");intmenu();intsum(p);intmenu();break;while(choice!=5);system("cls");menu();break;case 12:system("cls");sortnum(p);output(p);menu();break;case 13:exit(0); default:while(m<0|m>
40、;12|!cin) cout<<"輸入有誤!請(qǐng)重新輸入"<<endl; cin.clear(); cin.sync(); cin>>m; goto begin;while(1);void menu()cout<<endl; cout<<endl; cout<<" *->菜 單 欄<-*n"<<endl; cout<<" * <1> 輸入學(xué)生信息并保存到文件 <2> 讀取文件并輸出學(xué)生信息 *"<&l
41、t;endl; cout<<" * <3> 按學(xué)號(hào)查詢(xún) <4> 按姓名查詢(xún) *"<<endl; cout<<" * <5> 修改學(xué)生信息 <6> 插入學(xué)生信息 *"<<endl; cout<<" * <7> 按學(xué)號(hào)刪除信息 <8> 各科成績(jī)排序 *"<<endl; cout<<" * <9> 按總分降序排序 <10> 各科成績(jī)統(tǒng)計(jì) *"&
42、lt;<endl; cout<<" * <11> 分?jǐn)?shù)段查找 <12> 按學(xué)號(hào)排序 *"<<endl; cout<<" * <13> 退 出 *"<<endl; cout<<" *-*n"<<endl; cout<<"請(qǐng)選擇:"<<endl;void sortmenu()cout<<endl; cout<<endl; cout<<"
43、*-> 排序菜單 <-*n"<<endl; cout<<" * 各 科 成 績(jī) 排 序 *"<<endl; cout<<" * <1> 基礎(chǔ)會(huì)計(jì) <2> 大學(xué)英語(yǔ) *"<<endl; cout<<" * <3> 數(shù)據(jù)結(jié)構(gòu) <4> 返回上級(jí) *"<<endl; cout<<" *-*n"<<endl; cout<<"請(qǐng)選
44、擇:"<<endl;void intmenu()cout<<endl; cout<<endl; cout<<" *-> 分?jǐn)?shù)段查找菜單 <-*n"<<endl; cout<<" * 各 科 及 總 分 分 數(shù) 段 查 找 *"<<endl; cout<<" * <1> 基礎(chǔ)會(huì)計(jì) <2> 大學(xué)英語(yǔ) *"<<endl; cout<<" * <3> 數(shù)據(jù)結(jié)
45、構(gòu) <4> 總分查找 *"<<endl;cout<<" * <5> 返回上級(jí) *"<<endl; cout<<" *-*n"<<endl; cout<<"請(qǐng)選擇:"<<endl;void input(Stu *r)FILE *fp;int n=0;int i;int t=0;cout<<endl<<"-> 請(qǐng)輸入學(xué)生信息 <-"<<endl;for(i
46、=0;i<num;i+)cout<<"請(qǐng)輸入第"<<i+1<<"個(gè)人的學(xué)號(hào):"cin>>ri.serial;while(!cin|ri.serial<0) cout<<"輸入錯(cuò)誤或序號(hào)不合理!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入第"<<i+1<<"個(gè)人的學(xué)號(hào):" cin>>ri.serial; if(i>=1) for(n=0;n
47、<i;n+)if(rn.serial=ri.serial)cout<<"該學(xué)號(hào)已存在!"<<endl;t=1; if(t=1)i-;t=0;continue;cout<<"請(qǐng)輸入姓名:"cin>>;cout<<"請(qǐng)輸入基礎(chǔ)會(huì)計(jì)成績(jī):"cin>>ri.BA_score;while(!cin|ri.BA_score>100|ri.BA_score<0) cout<<"輸入錯(cuò)誤或成績(jī)不合理!" cin.cl
48、ear(); cin.sync(); cout<<"請(qǐng)重新輸入基礎(chǔ)會(huì)計(jì)成績(jī):"cin>>ri.BA_score; cout<<"請(qǐng)輸入大學(xué)英語(yǔ)成績(jī):"cin>>ri.UE_score;while(!cin|ri.UE_score>100|ri.UE_score<0) cout<<"輸入錯(cuò)誤或成績(jī)不合理!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入大學(xué)英語(yǔ)成績(jī):"cin>>ri.UE_sc
49、ore; cout<<"請(qǐng)輸入數(shù)據(jù)結(jié)構(gòu)成績(jī):" cin>>ri.DS_score;while(!cin|ri.DS_score>100|ri.DS_score<0) cout<<"輸入錯(cuò)誤或成績(jī)不合理!" cin.clear(); cin.sync(); cout<<"請(qǐng)重新輸入數(shù)據(jù)結(jié)構(gòu)成績(jī):"cin>>ri.DS_score; ri.sum=ri.BA_score+ri.UE_score+ri.DS_score;ri.average=(ri.BA_score+r
50、i.UE_score+ri.DS_score)/3; fp=fopen("student.txt","w+"); if(!fp) cout<<"文件不能打開(kāi)"<<endl; exit(0); for(n=0;n<i;n+) fprintf(fp,"%d %s %.1f %.1f %.1f %.1f %.1f",rn.serial,,rn.BA_score,rn.UE_score,rn.DS_score,rn.sum,rn.average); fprintf(fp,&quo
51、t;n"); fclose(fp); cout<<"文件已經(jīng)寫(xiě)入!"<<endl; cout<<"按任意鍵以返回主菜單"<<endl;getch();system("cls");void output(Stu *r)int m;system("cls");if(num>0)FILE *fp;if(fp=fopen("student.txt","r")=NULL) cout<<"文件不能打開(kāi)&
52、quot;<<endl;exit(0); for(int n=0;n<num;n+)fscanf(fp,"%d%s%f%f%f%f%f",&rn.serial,&,&rn.BA_score,&rn.UE_score,&rn.DS_score,&rn.sum,&rn.average);fclose(fp);cout<<"文件已經(jīng)讀入"<<endl;cout<<"-> 學(xué) 生 信 息 如 下<-"<
53、<endl; cout<<"學(xué)號(hào)"<<setw(6)<<"姓名"<<setw(10)<<"基礎(chǔ)會(huì)計(jì)"<<setw(10)<<"大學(xué)英語(yǔ)"<<setw(10)<<"數(shù)據(jù)結(jié)構(gòu)"<<setw(6)<<"總分"<<setw(10)<<"平均分"<<endl; cout<<"-"<<endl; for(m=0;m<num;m+) cout<<rm.serial<<setw(8)<<<<setw(10)<<rm.BA_score<<setw(10)<<rm.UE_score<<setw(10)<<rm.DS_score<<setw(7)<<rm.sum<<setw(9)<<rm.ave
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小麥加工資源增值策略考核試卷
- 土木工程建筑排水系統(tǒng)施工考核試卷
- 2017社保培訓(xùn)課件
- 孔樁勞務(wù)合同范本
- 民宅鋪面出售合同范本
- 碼頭設(shè)備采購(gòu)合同范本
- 購(gòu)買(mǎi)國(guó)外技術(shù)合同范本
- 熱水買(mǎi)賣(mài)合同范本
- led燈改造合同范本
- 寵物寄養(yǎng)服務(wù)中動(dòng)物健康保證協(xié)議
- 22陳涉世家 司馬遷 公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì) 度部編版初中語(yǔ)文九年級(jí)下冊(cè)
- 2021年飽和蒸汽及過(guò)熱蒸汽焓值表
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產(chǎn)工作
- 《服裝市場(chǎng)營(yíng)銷(xiāo)》課件
- 網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估報(bào)告模板
- 什么是法律談判課件
- 成考教材-數(shù)學(xué)教程(文史財(cái)經(jīng)類(lèi))
- 保安服務(wù)管理制度范文
- 汽車(chē)行業(yè)維修記錄管理制度
評(píng)論
0/150
提交評(píng)論