计算机与软件工程学院 C++课程设计报告
选题:学生成绩管理系统
专业班级:
时间:2016/6/20——2016/6/29
指导教师:
完成日期:2016/6/27
一、课题描述
管理内容包括:学号、姓名、班级、五门课成绩。
word范文
.
主要功能有:添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等。
编写代码,运行程序后,显现下面的参考界面:
成绩管理 ============ 1.输入学生成绩 2.修改学生成绩 3.删除学生成绩 4.计算每位学生的总分 5.计算每位学生的平均分 6.按学号或姓名查询学生成绩 7.按班级查询学生成绩 8.成绩排序
9.按班级统计学科总分、平均分等 请选择(1~9,0:退出):
二、需求分析
开发一个学生成绩管理系统的目的,主要是对查询学生成绩过程中的所有信息进行更加
科学、规范和有效的综合管理,是为了让同学们能在任何时候都能查阅到有关自己学科成绩有关的信息,也有利于让他们充分了解有关自己在大学期间所有课程的学习情况,提高查询速度。该学生成绩管理系统主要包括期末成绩管理、具体的查询等。本系统还提供学生相关的基本信息统计、汇总、查询,这样便于辅助学校领导的学生管理工作,改善管理质量、提高管理效率包括本班的每一位学生在校期间的基本情况与课程绩汇总。
本系统利用C++面向对象的功能,实现对学生成绩的管理。主要功能为管理有关学生基本信息、成绩课程等,对每个学生的基本信息、专业成绩信息、选修课成绩信息、课程信息的查询、修改和删除。本系统的结构分为学生基本情况管理模块、学生成绩管理模块、学生课程管理模块。
这是一个很实际的编程实例。编程要求很详细,内容也比较多,有一定难度。首先,学
word范文
.
生成绩记录是一个复杂的数据结构,至少应包括学号,姓名,性别和成绩。所以,必须建立一个类student,用来记录班级,学号,姓名和成绩。此外还得建立一个类对象数组s1[80],用来记录多个学生的成绩记录。 模块设计与分析
(1)输入学生资料模块:
主要功能用来对学生的成绩进行收集和输入。在学生信息保存在系统中的前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。在准确输入学生资料后,就可以对该学生的各科成绩进行录入。该学生各科成绩输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入y,不想再输入学生成绩的话就输入n,再输入n之后,系统返回到主菜单。
(2)输出学生资料模块:
主要功能用来对学生的成绩进行输出。在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生的信息,资料等等。具体包括学生的班级,学号,姓名和各科成绩。在查看学生的资料,成绩各方面的信息后,按任意键就可以返回到主菜单。 (3)按条件进行排列模块
主要功能是用来对学生的资料进行排序。在系统保存学生资料,成绩的前提下, 使用此功能可以对学生的资料进行排序,这样就方便查找同一类同学的资料。 (4)添加学生资料模块
主要功能是用来添加学生资料,成绩。如果系统有保存学生资料的情况下,想录入学生成绩的话,就不用添加学生资料这模块。如果系统没有保存该学生信息的话,就要使用此模块,在成功添加学生资料后,就可以对该学生进行其他的操作。 (5)按姓名查找,删除该学生资料模块
主要功能是用来删除学生资料。在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化 (6)查找并显示学生资料模块
主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息 (7)按姓名查找,修改学生资料模块
主要功能是用来修改学生资料。在系统保存了某学生资料的前提下,想要查找该学生 资料,可以输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这样就可以 修改该学生的资料,成绩等信息。 (8)把数据保存至文件模块
主要功能是用来把学生数据保存至txt文件。这样一些资料可以用Word文档,进行编辑故在此模块中增加了导出数据的功能。这样就方便很多,不用把学生资料一个一个添加至word文档,节省了很多时间精力。
代码编写分析
在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关功能模块。系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才 会跳出永真循环,并退出程序。
for(;;)
word范文
.
{ 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\ //用于打开文件将数据存入
结构图:
学生成绩管理系统 输入学生成绩将学生信息写入文件中输出学生成绩修改学生成绩删除学生成绩计算每位学生总分和平均分 按条件查询学生成绩成绩排序按班级统学科总分平均分退出系统 word范文
.
运行与测试程序调试:
如图是系统的主界面
如图是输入学生资料的界面
word范文
.
如图是将学生资料保存至文件的界面
如图是将学生成绩输出的界面
word范文
.
如图是按照学号修改学生成绩
如图是按照学号删除学生成绩
word范文
.
如图是计算学生的总分和平均分
如图是按条件查找学生成绩的界面
word范文
.
如图是按照条件对成绩排序
如图是按班级统计各个学科的总分平均分的界面
word范文
.
如图是退出系统的提示界面
三、课程设计总结
这是一个综合性较强,很实际的一个编程实例。刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。有时候,一个错误得找好久,才能发现。本系统的重点就是要会建立一个学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。类里的各个功能的实现。总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存这三个功能就需要花点心思了,可能 是平时用的比较少吧,生疏了。可见只有通过平时多加练习,才能有助于自己巩固知识点。最后想说的是,调试程序真的很关键。调试程序需要较大的耐心。可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。
四、源代码
#include word范文 . #include bool Status; public: void Student1(char cla1[],double num1,char chinese1,double math1,double english1,double wuli1) word范文 name1[],double . { chinese=chinese1; math=math1; english=english1; wuli=wuli1; num=num1; strcpy(name,name1); strcpy(cla,cla1); } void Student2(double chinese1,double english1,double wuli1) { chinese=chinese1; math=math1; english=english1; wuli=wuli1; } void tot() { total=chinese+math+english+wuli; } word范文 math1,double . word范文 void ave() { } double getchinese() { } double getmath() { } double getenglish() { } double getwuli() { } double getnum() { return wuli; return english; return math; return chinese; average=(chinese+math+english+wuli)/4; . } return num; double getzongfen() { } double getaverage() { } char *getname() { } char *getcla() { } void pf() { return cla; return name; return average; return total; cout< . hinese< } void pf1() { } bool IsEmpty() { } void Set() { } void Clear() { } Status=true; Status=false; return Status; . }; int menu() { char c; for(;c<'0'||c>'10';) { system(\"cls\"); cout< \"< cout<<\" 7.按学号或姓名或班级查询学生成 . 绩\"< \"< 制作者:佘天豪\"< void main() { word范文 } c=getchar(); return (c-'0'); 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]; word范文 char cla[10]; ofstream fout(\"d:\\\\studentinformation.txt\for(;;) { switch(menu()) { case 1: { char sign; int flag; system(\"cls\"); cout< { cout<<\"班级:\"; cin>>cla; cout<<\"学号:\"; !\\n\"; word范文 cin>>num; cout<<\"姓名:\"; cin>>name; do { flag=0; cout<<\"语文成绩:\"; cin>>chinese; if(chinese>150||chinese<1) cout<<\"对不起,请输入1-150之间的数 else flag=1; }while(flag==0); do { 字! . flag=0; cout<<\"数学成绩:\"; cin>>math; if(math>150||math<1) !\\n\"; !\\n\"; word范文 cout<<\"对不起,请输入1-150之间的数 else flag=1; }while(flag==0); do { flag=0; cout<<\"英语成绩:\"; cin>>english; if(english>150||english<1) cout<<\"对不起,请输入1-150之间的数 else flag=1; }while(flag==0); 字!字! . do { flag=0; cout<<\"物理成绩:\"; cin>>wuli; if(wuli>150||wuli<1) cout<<\"对不起,请输入1-150之间的数 字!!\\n\"; else flag=1; }while(flag==0); s1[i].Student1(cla,num,name,chinese,math,english,wuli); (y/n)\"; word范文 cout<<\"==>提示:是否继续写入学生成绩? } } cin>>sign; i++; t=i; system(\"pause\"); . break; case 2: system(\"cls\"); cout<<\"数据将写入D盘的studentinformation文件,若 没有该文件则先建立文件\"< 级 \"< 号 \"< fout< . case 3: system(\"cls\"); cout<<\" 学生成绩如下:\"< 级 \"< 号 \"< system(\"pause\"); break; case 4: system(\"cls\"); cout<<\"请输入你要修改的学号:\"; cin>>num; for(i=0;i cout<<\"请输入你要修改的成绩:\"; cin>>chinese>>english>>math>>wuli; s1[i].Student2(chinese,math,english,wuli); word范文 . system(\"pause\"); break; case 5: system(\"cls\"); cout<<\"请输入你要删除成绩的学号:\"; cin>>num; for(i=0;i if(s1[i].getnum()==num) break; t=t-1; system(\"pause\"); break; case 6: system(\"cls\"); cout< 级 \"< 号 \"< . \"< s1[i].ave(); s1[i].pf(); } system(\"pause\"); break; case 7: system(\"cls\"); int number; cout< )\"< } . else if(number==2) { } else { } for(i=0;i cout<<\"请输入你要查询成绩的姓名:\"; cin>>name; if((num==s1[i].getnum())||(strcmp(s1[i].getname(),name)==0)||(strcmp(s1[i].getcla(),cla)==0)) break; 班 级 \"< 号 cout< for(i=0;i system(\"pause\"); . break; case 8: system(\"cls\"); 均分):\"; word范文 cout< cin>>a; if(a==1) { for(i=0;i } } . else { } cout< 级 \"< 号 for(i=0;i \"< for(i=0;i system(\"pause\"); break; case 9: \"< . system(\"cls\"); char c[10]; cout< strcpy(s1[j].getcla(),s1[j+1].getcla()); strcpy(s1[j+1].getcla(),c); } } strcpy(c1[0],s1[0].getcla()); for(i=1;i . } for(i=0;i<=k2;i++) { word范文 k3=0; sum=0; sum1=0; sum2=0; sum3=0; for(j=0;j } cout< cout<<\"英语:\"< case 0: system(\"cls\"); cout< 绩 管 理 系 统>>===============================\\n\"< } } exit(0); word范文 因篇幅问题不能全部显示,请点此查看更多更全内容