學生成績管理系統(tǒng)設計與實現(xiàn)-高級程序設計語言 課程設計_第1頁
學生成績管理系統(tǒng)設計與實現(xiàn)-高級程序設計語言 課程設計_第2頁
學生成績管理系統(tǒng)設計與實現(xiàn)-高級程序設計語言 課程設計_第3頁
學生成績管理系統(tǒng)設計與實現(xiàn)-高級程序設計語言 課程設計_第4頁
學生成績管理系統(tǒng)設計與實現(xiàn)-高級程序設計語言 課程設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

高級程序設計語言課程設計成果報告學生成績管理系統(tǒng)設計與實現(xiàn)學生學號: 學生姓名: 學 院: 計算機學院 專業(yè)班級: 軟件工程1341 專業(yè)課程: 高級程序設計語言指導教師: 2014 年 6 月 27 日題 目學生成績管理系統(tǒng)設計與實現(xiàn)考核項目考核內容得分平時考核(30分)出勤情況、態(tài)度、效率;知識掌握情況、基本操作技能、知識應用能力、獲取知識能力系統(tǒng)設計(20分)分析系統(tǒng)的功能模塊編程調試(20分)實現(xiàn)系統(tǒng)的各個功能模塊,并完成調試回答問題(15分)回答老師針對課程設計提出的問題課程設計報告撰寫(10分)嚴格按照規(guī)范要求完成課程設計報告源代碼(5分)按照規(guī)范要求完成課程設計源代碼的排版總 評 成 績指導教師評語: 日期: 年 月 日目 錄第1章 系統(tǒng)設計目的11.1 課程設計目的11.2 課程設計內容1第2章 系統(tǒng)實現(xiàn)思路22.1問題的需求分析22.2系統(tǒng)性能要求22.3 系統(tǒng)功能模塊22.4 模塊框架圖2第3章 系統(tǒng)詳細設計43.1有關類的設計43.2輸入數(shù)據(jù)功能的設計63.3保存數(shù)據(jù)功能的設計93.4查詢數(shù)據(jù)功能的設計103.5修改數(shù)據(jù)功能的設計133.6數(shù)據(jù)排列的設計15第4章 系統(tǒng)調試運行174.1成績的錄入174.2成績的增加174.3刪除184.4 修改184.5 查詢194.6排序顯示194.7 退出程序19課程設計體會20參考文獻20第1章 系統(tǒng)設計目的1.1 課程設計目的C+程序設計不僅具有很強的理論性,更是一門實踐性非常強的課程,其實踐教學環(huán)節(jié)的效果直接影響著理論教學的效果。本課程注重邊學邊練,但由于課堂教學和實驗的深度與廣度有限,練習的深度也受到了一定的限度。為了彌補這一點,而設置了C+程序設計實踐教學的方案,主要以教學實習的方式對學生進行綜合訓練,培養(yǎng)實際分析問題、編程和動手能力,通過教學實習,幫助學生系統(tǒng)地掌握面向對象程序設計方法及各種編輯技巧,努力成為自由駕馭程序設計語言的軟件編程能手。1.2 課程設計內容1.設計四個類:學生類(描述學生基本信息);成績類;班級類;課程類(描述課程信息,課程編號,科目名稱(如高等數(shù)學,大學英語等)。學生成績及課程信息用文件保存,每個類一個文件,程序執(zhí)行時從文件讀入; 2能按學期,按班級完成對學生成績的錄入,修改,能按班級統(tǒng)計學生的成績;求學生的總分及平均分;并能根據(jù)學生的平均成績進行排序,能查詢學生成績,不及格科目及學生名單;能按班級輸出學生的成績單。 設置學生的成績信息:學生學號、姓名、所選課程名稱、平時成績、期末成績、平時成績所占百分比; 計算學生總評成績:總評成績=平時成績*平時成績所占百分比+期末成績*(1-平時成績所占百分比); 顯示學生的姓名、所選課程名稱以及平時成績、期末成績和總評成績信息。分單人顯示和以班輸出(班成績單格式輸出到文件); 注意,至少一個班,30人三門課。 第2章 系統(tǒng)實現(xiàn)思路2.1問題的需求分析1.能對學生各科成績進行錄入;2.能對學生的成績進行增加;3.能對學生的成績進行刪除;4.能對學生的成績進行修改;5.能對學生的成績按總成績,姓名,進行查詢;6.能輸出學生的所有數(shù)據(jù);7.能進行成績統(tǒng)計;8.能進行總分查詢排名。2.2系統(tǒng)性能要求1.系統(tǒng)安全、可靠;2.功能齊全;3.操作方便、界面友好;4易于維護和擴充。2.3 系統(tǒng)功能模塊學生成績查詢系統(tǒng)有:成績錄入、增加、刪除、修改,數(shù)據(jù)查詢,排序顯示構成。2.4 模塊框架圖 根據(jù)學生的基本信息,借助C+有的優(yōu)勢特點,我們做出了以下的模版圖塊,便于理解和設計運用。 按總成績排名學生成績管理系統(tǒng)操作查詢成績統(tǒng)計錄入增加刪除修改總成績查詢姓名輸出所有學生的成績每個學生的平均成績各科不及格人數(shù)圖2-1 模版框架圖第3章 系統(tǒng)詳細設計3.1有關類的設計 從題中要求可知,要設計四個類 (1)成績類:大體上分為三類:數(shù)學、英語、c+;但是每一類又可分為三個小的部分:平時成績、期末成績和總評成績。因此,我這樣來定義這樣的成績類。class gradePublic:Double math3;Double English3;Double c+3;(2)班級類:對于班級類,主要是學生成績的劃分;按照班級劃分和按照學期劃分。所以,班級類中就有兩個成員year和class。class ClassPublic:Int year;Int class;(3)分數(shù)類:對于分數(shù)類,主要是針對對象學生,因此分數(shù)類是從grade和class公共派生類,在分數(shù)類中,還要統(tǒng)計三個科目的成績,所以就把統(tǒng)計函數(shù)寫在了這里面。Class score;public grate,public classPublic:Char name30;Char number30;Double sum;Double average;Double mh()Return (math0*math3+math1*(1-math2);Double eg()Return (English0*rnglish3+English1*(1-english2);Double c()Return (c+0)*(c+3)+(c+1)*(1-c+2);(4)學生類:對于學生類,就比較復雜了,首先要定義學生的數(shù)組來表示學生在哪學年,班級等,接下來要寫函數(shù)了,析構函數(shù),保存函數(shù),查找函數(shù),排序函數(shù),修改函數(shù)等等。Class studentPrivate:Scorestu22m;/學生數(shù)組staticintsize1,size2,size3,size4;ints1,s2,s3,s4; /定義數(shù)據(jù)public:Student()s1=0;s2=0;s3=0;s4=0;/構造函數(shù)Student() /析構函數(shù)voidadd(); /添加函數(shù)voidsearch(); /查找函數(shù)voidlist(); /名單函數(shù)voidchange(); /修改函數(shù)voidsort1(); /排序函數(shù)voidsort2(); /排序函數(shù)voidsave(); /保存函數(shù)voidoutput(); /讀取函數(shù);intStudent:size1=0;intStudent:size2=0;intStudent:size3=0;intStudent:size4=0; 3.2輸入數(shù)據(jù)功能的設計 輸入函數(shù)主要是輸入要存入的學生信息:姓名,學生的各科成績等,由于要輸入大量的數(shù)據(jù),所以我就用數(shù)組來定義一班三十個人的姓名,這樣就可以直接的輸入,以便在之后的程序中用到。錄入的時候,我用到了一個類,其中的各科成績都有分別的輸入,從而保證了程序的條理清晰,不給人那么凌亂感。 class Tstu /通過定義一個類來定義數(shù)據(jù)錄入的函數(shù) char name30; /定義一個學生姓名的數(shù)組 int number; float math,cpp,english,average,sum; /定義三科的科目,平時成績 總評成績public: Tstu() ; Tstu ( char n30, int num,float ma,float cj,float eng ) ; float getsum(); /得到總分的函數(shù) float getaver(); /得到平均分的函數(shù) friend void main(); /將主函數(shù)定義為友元函數(shù),方便訪問類中的成員 ; Tstu:Tstu ( char n20, int num,float ma,float cj,float eng ) strcpy(name,n); /得到姓名 number=num; /得到學號 math=ma; /得到數(shù)學成績 cpp=cj; /得到c+成績 english=eng; /得到英語成績 float Tstu:getsum() /得到總分的函數(shù) sum=cpp+english+math; return sum; float Tstu:getaver() /得到平均分的函數(shù) average=getsum()/3; return average; ase 1: /數(shù)據(jù)的錄入 char c; /用于在小項中選擇是否繼續(xù)操作 char name30; int number; float math,cpp,english; do cout請輸入姓名:name; cout請輸入學號:number; cout請輸入數(shù)學成績:math; cout請輸入C+成績:cpp; cout請輸入英語成績:english; fstream outfile,infile; /作一個文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) outfile.open(f1.txt,ios:out|ios:app); if(!file) coutf1.txt can not open.n; return; outfilename 學號:number 數(shù)學成績:math C+成績:cpp 外語成績:englishendl; outfile.close(); infile.open(f1.txt,ios:in); if(!file) /判斷文件是否打開 coutf1.txt can not open.n; return; char ch; while(infile.get(ch) coutch; coutendl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)endl; 3.3保存數(shù)據(jù)功能的設計 保存數(shù)據(jù)主要是對數(shù)據(jù)的保密性,可持續(xù)性等進行完整的保存,以便以后程序在應用是能準確無誤的調用所保存的數(shù)據(jù)。 fstream outfile,infile; /作一個文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) outfile.open(f1.txt,ios:out|ios:app); if(!file) coutf1.txt can not open.n; return; outfilename 學號:number 數(shù)學成績:math C+成績:cpp 外語成績:englishendl; outfile.close(); infile.open(f1.txt,ios:in); if(!file) /判斷文件是否打開 coutf1.txt can not open.n; return; char ch; while(infile.get(ch) coutch; coutendl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)c; chris1=0; do if(c!=y&c!=n) cout指令錯誤!請重新輸入!c; else chris1=1; while(chris1=0); while(c=y); /重復輸入 break; 3.4查詢數(shù)據(jù)功能的設計 查詢功能主要分為兩種:(1)按總分查詢;(2按姓名查詢。按總分查詢 (1)按總分查詢 case 5:/按總分查詢 int j=0;float SUM;char c;int flag; if(i=0)cout系統(tǒng)中沒有輸入數(shù)據(jù),請先輸入數(shù)據(jù)!endl;break; do flag=0; cout請輸入您要查詢的學生的總成績:SUM; if(sj-getsum()=SUM) flag=1;cout您要查詢的學生是:(*sj).nameendl;cout該生的信息為:endl;cout 學號:(*sj).number 數(shù)學分數(shù):(*sj).math c+分數(shù):(*sj).cpp 英語分數(shù)(*sj).englishendl; for(int j=0;ji;j+) if(flag=0)cout對不起!您要查詢的學生不存在!endl;coutc;if(c!=y&c!=n)cout指令錯誤!請重新輸入!c; ; while(c=y); break; (2)按照姓名查詢case 6:/按姓名查詢 char n20;char c;int j=0;int flag; if(i=0)cout系統(tǒng)中沒有輸入數(shù)據(jù),請先輸入數(shù)據(jù)!endl;break; do flag=0; cout請輸入要查詢的名字: n; for(int j=0;ji;j+) if(strcmp(n,(*sj).name)=0)flag=1;cout您要查詢的學生是:(*sj).nameendl;cout該生的信息是:學號:(*sj).number 數(shù)學分數(shù):(*sj).mathc+分數(shù):(*sj).cpp英語分數(shù):(*sj).englishendl; if(flag=0)cout對不起您要查詢的學生不存在,請查證后再輸入!endl;coutc;if(c!=y&c!=n)cout指令錯誤!請重新輸入:c; while(c=y); break; 3.5修改數(shù)據(jù)功能的設計 case 4:/修改數(shù)據(jù) string sname,line,str,name; int nu;float eng,ma,com;int flag;char c;if(i=0)cout系統(tǒng)中沒有輸入數(shù)據(jù),請先輸入數(shù)據(jù)!endl;break;do flag=0; coutname; fstream fin(f1.txt,ios:in); ofstream outfile(f.txt,ios:trunc|ios:out); coutendl; while(!fin.eof() ) /在文件中查找 getline(fin,line); istringstream stream(line); sname = line.substr(0,line.find( ,0);if(name!=sname)outfilelineendl;else flag=1; fin.close(); if(flag=1) coutnamenumacomeng;coutendl;outfilename 學號:nu 數(shù)學成績:ma C+成績:com 外語成績:engendl; outfile.close();fstream outf(f1.txt,ios:trunc|ios:out);fstream inf(f.txt,ios:in);outfinf.rdbuf()endl;outf.close();inf.close(); if(flag=0)cout對不起,您要修改的學生不存在!請查證后輸入!endl; coutc; coutendl; if(c!=y&c!=n) cout 指令錯誤!請重新輸入!endlc; while(c=y);break; 3.6數(shù)據(jù)排列的設計 if(i=0)cout系統(tǒng)中沒有輸入數(shù)據(jù),請先輸入數(shù)據(jù)!endl;break; int h,g,n;int j=0;float a100,temp; for(g=0;gi;g+) aj=(*sg).getsum();j+; for(h=0;hi;h+) for(n=0;nan+1 temp=an;an=an+1;an+1=temp; for(n=1;n=i;n+) coutanendl; break; 3.7主函數(shù)的設計void main() cout*歡迎來到學生成績查詢系統(tǒng)*endl; cout請選擇您需要的操作!endl; /菜單的輸出 cout操作:endl; cout(1)數(shù)據(jù)錄入endl; cout(2)增加學生endl; cout(3)刪除學生endl; cout(4)修改數(shù)據(jù)endl; cout查詢:endl; cout(5)按總成績查詢endl; cout(6)按姓名查詢endl; cout(7)輸出所有學生的數(shù)據(jù)endl; cout成績統(tǒng)計:endl; cout(8)每個學生的平均成績endl; cout(9)各科不及格人數(shù)endl; cout排名:endl; cout(10)按總分查詢排名endl; cout(11)退出endl; cout選擇相關操作請輸入相對的括號里的阿拉伯數(shù)字及字母!end第4章 系統(tǒng)調試運行每一個case都能執(zhí)行,但是有很多的地方都不夠完善,例如:在總成績排序中,只能輸出總成績,不能單獨的輸出學生的相應的信息;每次進行別的操作之前都要在進行一次數(shù)據(jù)的錄入,不能直接對原有的文件進行讀取。 4.1成績的錄入在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如錄入成績。如圖4-1圖 4-1 錄入成績4.2成績的增加在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如增加成績。如圖4-2圖4-2 增加成績4.3刪除在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如選擇數(shù)字3,刪除成績。如圖4-3圖 4-3 刪除成績4.4 修改在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如選擇數(shù)字4,修改成績。如圖4-4圖4.4修改成績4.5 查詢在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如選擇數(shù)字6,查詢總成績。如圖4-5圖 4-5查詢總成績4.6排序顯示在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如選擇數(shù)字10,用總成績排序。如圖4-6圖4-6 總成績排序4.7 退出程序在程序運行的簡捷窗口,選擇自己所要查詢的目的。例如選擇數(shù)字11,退出程序。如圖4-7圖4-7 退出程序課程設計體會本次的學生管理系統(tǒng)作業(yè),使我感觸頗深,當老師布置完作業(yè)后,通過與同學的交流,自己的思考,網(wǎng)絡的幫助,完成了這次的作業(yè),我認為應該對程序的設計要有一個比較明確的認識,然后分析系統(tǒng)的作用功能與設計系統(tǒng),最終通過代碼的設計與調試,完成系統(tǒng)。在這短短的五天里我收獲如下:1、 鞏固和加深了對C+的理解,提高綜合運用本課程所學知識的能力。2、 培養(yǎng)了我選用參考書,查閱手冊及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。3、 通過實際編譯系統(tǒng)的分析設計、編程調試,掌握應用軟件的分析方法和工程設計方法。根據(jù)在課程設計中遇到的問題,我將在以后的學習當中注意一下幾點:1、 認真上好專業(yè)實驗課,多在實踐中鍛煉自己。2、 寫程序的過程中要考慮周到,嚴密。3、 在做設計的時候要有信心、有耐心,切勿浮躁。4、 認真的學習課本知識,掌握課本中的知識點,并在基礎上學會靈活運用。5、 在課余時間里多寫程序,熟練掌握在調試程序中所遇到的常見錯誤,以便能節(jié)省調試程序的時間。這次的作業(yè)對我一個初學c+的學生來說 還是比較難得,但是我對c+有濃厚的興趣,所以編程過程中并沒有過多的煩惱,根據(jù)c+所學的概念、理論和方法,進一步加深對c+語言的理解和掌握。在c+編程中,需要的是不斷改進,才能提高自己的能力。參考文獻1 譚浩強.C+面向對象程序設計.清華大學出版社2 譚浩強.C+程序設計.清華大學出版社3 譚浩強.C程序設計題解與上機指導.清華大學出版社4 譚浩強.C+面向對象程序設計題解與上機指導.清華大學出版社5 譚浩強.C+程序設計題解與上機指導.清華大學出版社#include#include#include#include#includeusing namespace std;class Tstuchar name20;int number;float math,cpp,english,average,sum;public:Tstu();Tstu(char n20,int num,float ma,float cj,float eng); float getsum();float getaver(); friend void main(); ; Tstu:Tstu ( char n20, int num,float ma,float cj,float eng ) strcpy(name,n); number=num; math=ma; cpp=cj; english=eng; float Tstu:getsum() sum=cpp+english+math; return sum; float Tstu:getaver() average=getsum()/3; return average; void main() cout*歡迎來到學生成績查詢系統(tǒng)*endl; cout請選擇您需要的操作!endl;cout操作:endl; cout(1)數(shù)據(jù)錄入endl; cout(2)增加學生endl; cout(3)刪除學生endl; cout(4)修改數(shù)據(jù)endl; cout查詢:endl; cout(5)按總成績查詢endl; cout(6)按姓名查詢endl; cout(7)輸出所有學生的數(shù)據(jù)endl; cout成績統(tǒng)計:endl; cout(8)每個學生的平均成績endl; cout(9)各科不及格人數(shù)endl; cout排名:endl; cout(10)按總分查詢排名endl; cout(11)退出endl; cout選擇相關操作請輸入相對的括號里的阿拉伯數(shù)字及字母!p; if(p=1&p=11) chris1=1; else cout指令錯誤!請重新輸入:endl; while(chris1=0); do switch(p) case 1: /數(shù)據(jù)的錄入 char c; /用于在小項中選擇是否繼續(xù)操作 char name20; int number; float math,cpp,english; do cout請輸入姓名:name; cout請輸入學號:number; cout請輸入數(shù)學成績:math; cout請輸入C+成績:cpp; cout請輸入英語成績:english; fstream outfile,infile; /作一個文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) outfile.open(f1.txt,ios:out|ios:app); if(!file) coutf1.txt can not open.n; return; outfilename 學號:number 數(shù)學成績:math C+成績:cpp 外語成績:englishendl; outfile.close(); infile.open(f1.txt,ios:in); if(!file) /判斷文件是否打開 coutf1.txt can not open.n; return; char ch; while(infile.get(ch) coutch; coutendl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)c; chris1=0; do if(c!=y&c!=n) cout指令錯誤!請重新輸入!c; else chris1=1; while(chris1=0); while(c=y); /重復輸入 break; case 2: /增加學生數(shù)據(jù) char name20; int number; float math,cpp,english; char c; do cout請輸入您要增加的學生的姓名:name; cout請輸入你要增加的學生的學號:number; cout請輸入數(shù)學成績:math; cout請輸入C+成績:cpp; cout請輸入英語成績:english; fstream outfile,infile; outfile.open(f1.txt,ios:out|ios:app); if(!file) coutf1.txt can not open.n; return; outfilename 學號:number 數(shù)學成績:math C+成績:cpp 外語成績:englishendl; outfile.close(); infile.open(f1.txt,ios:in); if(!file) coutf1.txt can not open.n; return; char h; while(infile.get(h) couth; coutendl; infile.close(); j+; si=new Tstu(name,number, math, cpp, english); i+; cout數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)c; if(c!=y&c!=n) cout指令錯誤!請重新輸入!c; while(c=y); break; case 3:/刪除學生信息 char c; string xingming,line,str,name; do ifstream fin(f1.txt); fstream outfile(f2.txt,ios:trunc|ios:out); /作一個文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) cout請輸入您要刪除的學生的姓名:xingming; while(!fin.eof() ) getline(fin,line); istringstream stream(line); name = line.substr(0,line.find( ,0);/找到名字,判斷是否相等 if(name != xingming) outfilelineen

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論