当前位置:文档之家› 学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告

计算机与软件工程学院C++课程设计报告选题:学生成绩管理系统专业班级:时间:2016/6/20——2016/6/29指导教师:完成日期:2016/6/27一、课题描述管理容包括:学号、姓名、班级、五门课成绩。

主要功能有:添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等。

编写代码,运行程序后,显现下面的参考界面:成绩管理============1.输入学生成绩2.修改学生成绩3.删除学生成绩4.计算每位学生的总分5.计算每位学生的平均分6.按学号或姓名查询学生成绩7.按班级查询学生成绩8.成绩排序9.按班级统计学科总分、平均分等请选择(1~9,0:退出):二、需求分析开发一个学生成绩管理系统的目的,主要是对查询学生成绩过程中的所有信息进行更加科学、规和有效的综合管理,是为了让同学们能在任时候都能查阅到有关自己学科成绩有关的信息,也有利于让他们充分了解有关自己在大学期间所有课程的学习情况,提高查询速度。

该学生成绩管理系统主要包括期末成绩管理、具体的查询等。

本系统还提供学生相关的基本信息统计、汇总、查询,这样便于辅助学校领导的学生管理工作,改善管理质量、提高管理效率包括本班的每一位学生在校期间的基本情况与课程绩汇总。

本系统利用C++面向对象的功能,实现对学生成绩的管理。

主要功能为管理有关学生基本信息、成绩课程等,对每个学生的基本信息、专业成绩信息、选修课成绩信息、课程信息的查询、修改和删除。

本系统的结构分为学生基本情况管理模块、学生成绩管理模块、学生课程管理模块。

这是一个很实际的编程实例。

编程要求很详细,容也比较多,有一定难度。

首先,学生成绩记录是一个复杂的数据结构,至少应包括学号,姓名,性别和成绩。

所以,必须建立一个类student,用来记录班级,学号,姓名和成绩。

此外还得建立一个类对象数组s1[80],用来记录多个学生的成绩记录。

模块设计与分析(1)输入学生资料模块:主要功能用来对学生的成绩进行收集和输入。

在学生信息保存在系统中的前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。

在准确输入学生资料后,就可以对该学生的各科成绩进行录入。

该学生各科成绩输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入y,不想再输入学生成绩的话就输入n,再输入n之后,系统返回到主菜单。

(2)输出学生资料模块:主要功能用来对学生的成绩进行输出。

在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生的信息,资料等等。

具体包括学生的班级,学号,姓名和各科成绩。

在查看学生的资料,成绩各面的信息后,按任意键就可以返回到主菜单。

(3)按条件进行排列模块主要功能是用来对学生的资料进行排序。

在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料进行排序,这样就便查找同一类同学的资料。

(4)添加学生资料模块主要功能是用来添加学生资料,成绩。

如果系统有保存学生资料的情况下,想录入学生成绩的话,就不用添加学生资料这模块。

如果系统没有保存该学生信息的话,就要使用此模块,在成功添加学生资料后,就可以对该学生进行其他的操作。

(5)按姓名查找,删除该学生资料模块主要功能是用来删除学生资料。

在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。

由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化(6)查找并显示学生资料模块主要功能是用来查找学生资料。

在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息(7)按姓名查找,修改学生资料模块主要功能是用来修改学生资料。

在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这样就可以修改该学生的资料,成绩等信息。

(8)把数据保存至文件模块主要功能是用来把学生数据保存至txt文件。

这样一些资料可以用Word文档,进行编辑故在此模块中增加了导出数据的功能。

这样就便很多,不用把学生资料一个一个添加至word 文档,节省了很多时间精力。

代码编写分析在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关功能模块。

系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。

for(;;){switch(menu()){类中有两个成员函数一个用来输入是调用,一个是在修改的时候调用void Student1(char cla1[],double num1,char name1[],double chinese1,double math1,double english1,double wuli1)void Student2(double chinese1,double math1,double english1,double wuli1)void tot() //计算学生成绩的总分void ave() //计算学生成绩的平均分double getchinese() //将学生的语文成绩取出double getmath() //将学生的数学成绩取出double getenglish()//将学生的英语成绩取出double getwuli()//将学生的物理成绩取出double getnum() //将学生的学号取出double getzongfen()//将学生的总分取出double getaverage() //将学生的平均分取出char *getname()//将学生的名字取出char *getcla()//将学生的班级取出void pf()//用于学生的成绩输出ofstream fout("d:\\studentinformation.txt",ios::out); //用于打开文件将数据存入结构图:运行与测试程序调试:如图是系统的主界面如图是输入学生资料的界面如图是将学生资料保存至文件的界面如图是将学生成绩输出的界面如图是按照学号修改学生成绩如图是按照学号删除学生成绩如图是计算学生的总分和平均分如图是按条件查找学生成绩的界面如图是按照条件对成绩排序如图是按班级统计各个学科的总分平均分的界面如图是退出系统的提示界面三、课程设计总结这是一个综合性较强,很实际的一个编程实例。

刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。

可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。

单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。

有时候,一个错误得找好久,才能发现。

本系统的重点就是要会建立一个学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。

类里的各个功能的实现。

总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。

可见只有通过平时多加练习,才能有助于自己巩固知识点。

最后想说的是,调试程序真的很关键。

调试程序需要较大的耐心。

可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。

有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。

通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用面,也很老师给我的帮助。

四、源代码#include<iostream>#include<string>#include<stdio.h>#include<iomanip>#include<stdlib.h>#include<conio.h>#include <fstream>using namespace std;class Student{private:char cla[10];char name[10];double num;double chinese;double math;double english;double wuli;double sum;double average;double total;bool Status;public:void Student1(char cla1[],double num1,char name1[],double chinese1,double math1,double english1,double wuli1){chinese=chinese1;math=math1;english=english1;wuli=wuli1;num=num1;strcpy(name,name1);strcpy(cla,cla1);}void Student2(double chinese1,double math1,double english1,double wuli1){chinese=chinese1;math=math1;english=english1;wuli=wuli1;}void tot(){total=chinese+math+english+wuli;}void ave(){average=(chinese+math+english+wuli)/4; }double getchinese(){return chinese;}double getmath(){return math;}double getenglish() {return english; }double getwuli() {return wuli;}double getnum() {return num;}double getzongfen() {return total;}double getaverage() {return average; }char *getname() {}char *getcla(){return cla;}void pf(){cout<<setw(10)<<cla<<setw(7)<<num<<setw(9)<<name<< setw(6)<<chinese<<setw(6)<<math<<setw(6)<<english<<se tw(6)<<wuli<<setw(8)<<average<<setw(8)<<total<<endl;}void pf1(){cout<<setw(10)<<cla<<setw(7)<<num<<setw(9)<<name<< setw(6)<<chinese<<setw(6)<<math<<setw(6)<<english<<se tw(6)<<wuli<<endl;}bool IsEmpty(){}void Set(){Status=false;}void Clear(){Status=true;}};int menu(){char c;for(;c<'0'||c>'10';){system("cls");cout<<endl;cout<<endl;cout<<" 学生成绩管理系统"<<endl;cout<<"============================"<<endl;cout<<endl;cout<<" 1.输入学生成绩"<<endl;cout<<" 2.将学生信息写到文件中"<<endl;cout<<" 3.输出学生成绩"<<endl;cout<<" 4.修改学生成绩"<<endl;cout<<" 5.删除学生成绩"<<endl;cout<<" 6.计算每位学生的总分和平均分"<<endl;cout<<" 7.按学号或姓名或班级查询学生成绩"<<endl;cout<<" 8.成绩排序"<<endl;cout<<" 9.按班级统计学科总分、平均分"<<endl;cout<<" 0.存储并退出系统"<<endl;cout<<endl;cout<<"请选择(1~9,0:退出):"<<endl;cout<<"制作者:佘天豪"<<endl;c=getchar();}return (c-'0');}void main(){int t,i=0,j;int num;int k1=0,k2=0;double k3=0;double chinese,math,english,wuli;double sum=0;double sum1=0;double sum2=0;double sum3=0;double sum4=0;double sum5=0;int k=0;Student s1[80];char c1[10][10];char name[10];char cla[10];ofstream fout("d:\\studentinformation.txt",ios::out);for(;;){switch(menu()){case 1:{char sign;int flag;system("cls");cout<<setw(15)<<" "<<"输入学生资料"<<endl;while(sign!='n'&&sign!='N'){cout<<"班级:";cin>>cla;cout<<"学号:";cin>>num;cout<<"姓名:";cin>>name;do{flag=0;cout<<"语文成绩:";cin>>chinese;if(chinese>150||chinese<1)cout<<"对不起,请输入1-150之间的数字!!\n";elseflag=1;}while(flag==0);do{flag=0;cout<<"数学成绩:";cin>>math;if(math>150||math<1)cout<<"对不起,请输入1-150之间的数字!!\n";elseflag=1;}while(flag==0);do{flag=0;cout<<"英语成绩:";cin>>english;if(english>150||english<1)cout<<"对不起,请输入1-150之间的数字!!\n";elseflag=1;}while(flag==0);do{flag=0;cout<<"物理成绩:";cin>>wuli;if(wuli>150||wuli<1)cout<<"对不起,请输入1-150之间的数字!!\n";elseflag=1;}while(flag==0);s1[i].Student1(cla,num,name,chinese,math,english,wuli);cout<<"==>提示:是否继续写入学生成绩?(y/n)";cin>>sign;i++;}t=i;}system("pause");break;case 2:system("cls");cout<<"数据将写入D盘的studentinformation文件,若没有该文件则先建立文件"<<endl;fout<<setw(10)<<"班级"<<setw(8)<<"学号"<<setw(10)<<"姓名"<<setw(7)<<"语文"<<setw(7)<<"数学"<<setw(7)<<"英语"<<setw(7)<<"物理"<<endl;for(i=0;i<t;i++){fout<<setw(10)<<s1[i].getcla();fout<<setw(7)<<s1[i].getnum()<<setw(9)<<s1[i].getname()< <setw(7)<<s1[i].getchinese()<<setw(7)<<s1[i].getmath()<<setw(7)<<s1[i].getenglish()<<setw(7)<<s1[i].getwuli();fout<<endl;}fout.close();system("pause");break;case 3:system("cls");cout<<" 学生成绩如下:"<<endl;cout<<setw(10)<<"班级"<<setw(8)<<"学号"<<setw(10)<<"姓名"<<setw(6)<<"语文"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"物理"<<endl;for(i=0;i<t;i++)s1[i].pf1();system("pause");break;case 4:system("cls");cout<<"请输入你要修改的学号:";cin>>num;for(i=0;i<t;i++){if(s1[i].getnum()==num)break;}cout<<"请输入你要修改的成绩:";cin>>chinese>>english>>math>>wuli;s1[i].Student2(chinese,math,english,wuli);system("pause");break;case 5:system("cls");cout<<"请输入你要删除成绩的学号:";cin>>num;for(i=0;i<t;i++){if(s1[i].getnum()==num)break;}for(j=i;j<t;j++)s1[j]=s1[j+1];t=t-1;system("pause");break;case 6:system("cls");cout<<setw(15)<<" "<<"计算学生的总分和平均分"<<endl;cout<<setw(10)<<"班级"<<setw(7)<<"学号"<<setw(9)<<"姓名"<<setw(6)<<"语文"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"物理"<<setw(8)<<"平均分"<<setw(8)<<"总分"<<endl;for(i=0;i<t;i++){s1[i].tot();s1[i].ave();s1[i].pf();}system("pause");break;case 7:system("cls");int number;cout<<setw(15)<<" "<<"查找学生"<<endl;cout<<"请输入你要查询学生成绩的式(1按学号,2按姓名,其余数字均为按班级)"<<endl;cin>>number;if(number==1){cout<<"请输入你要查询成绩的学号:";cin>>num;}else if(number==2){cout<<"请输入你要查询成绩的姓名:";cin>>name;}else{cout<<"请输入你要查询的成绩的班级:";cin>>cla;}for(i=0;i<t;i++)if((num==s1[i].getnum())||(strcmp(s1[i].getname(),name)==0)| |(strcmp(s1[i].getcla(),cla)==0))break;cout<<setw(10)<<"班级"<<setw(7)<<"学号"<<setw(9)<<"姓名"<<setw(6)<<"语文"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"物理"<<setw(8)<<"平均分"<<setw(8)<<"总分"<<endl;for(i=0;i<t;i++)s1[i].pf();system("pause");break;case 8:system("cls");cout<<setw(15)<<" "<<"成绩排序"<<endl;int a;Student s2;cout<<"请输入你要成绩排序的式(1按总分,2按平均分):";cin>>a;if(a==1){for(i=0;i<t;i++){for(j=0;j<t-i-1;j++)if(s1[j].getzongfen()<s1[j+1].getzongfen()){s2=s1[j];s1[j]=s1[j+1];s1[j+1]=s2;}}}else{for(i=0;i<t;i++){for(j=0;j<t-i-1;j++)if(s1[j].getaverage()<s1[j+1].getaverage()){s2=s1[j];s1[j]=s1[j+1];s1[j+1]=s2;}}}cout<<setw(10)<<"班级"<<setw(7)<<"学号"<<setw(9)<<"姓名"<<setw(6)<<"语文"<<setw(6)<<"数学"<<setw(6)<<"英语"<<setw(6)<<"物理"<<setw(8)<<"平均分"<<setw(8)<<"总分"<<endl;for(i=0;i<t;i++)s1[i].pf();system("pause");break;case 9:system("cls");char c[10];cout<<setw(15)<<" "<<"按班级统计学科总分、平均分"<<endl;for(i=0;i<t;i++){for(j=0;j<t-i-1;j++)if(strcmp(s1[j].getcla(),s1[j+1].getcla())>0){strcpy(c,s1[j].getcla());strcpy(s1[j].getcla(),s1[j+1].getcla());strcpy(s1[j+1].getcla(),c);}}strcpy(c1[0],s1[0].getcla());for(i=1;i<t;i++){if(strcmp(s1[k1].getcla(),s1[i].getcla())!=0){strcpy(c1[++k2],s1[i].getcla());k1=i;}}for(i=0;i<=k2;i++){k3=0;sum=0;sum1=0;sum2=0;sum3=0;for(j=0;j<t;j++){if(strcmp(c1[i],s1[j].getcla())==0){sum+=s1[j].getchinese();sum1+=s1[j].getmath();sum2+=s1[j].getenglish();sum3+=s1[j].getwuli();k3++;}}cout<<c1[i]<<"的学科总分、平均分为"<<endl;cout<<"语文:"<<sum<<setw(5)<<sum/k3<<endl;cout<<"数学:"<<sum1<<setw(5)<<sum1/k3<<endl;cout<<"英语:"<<sum2<<setw(5)<<sum2/k3<<endl;cout<<"物理:"<<sum3<<setw(5)<<sum3/k3<<endl;}system("pause");break;case 0:system("cls");cout<<endl<<"================================<<感您使用学生成绩管理系统>>===============================\n"<<en dl;exit(0);}}}。

相关主题