发布时间 : 星期四 文章成绩统计系统(C++课程设计)更新完毕开始阅读a40910d7720abb68a98271fe910ef12d2af9a966
标准文档
//类主要函数
int Totalscore(){return Math+English+Cjj;}; //计算学生总分成绩 void input(); //输入学生信息 };
//主要功能函数
int FindMaxscore(定义一个数组为形参) //求最高分函数 {for(i=0;i if(数组某成员大于定义的最大值) } int FindMinscore(定义一个数组为形参) //求最低分 { for(i=0;i if(数组某成员小于定义的最小值) } int Averagescore(定义一个数组为形参) //求平均分 { for(i=1;i void Datasort(定义一个数组为形参) //分数由最高到最低排序 { 采用交换排序法,依次比较数组相邻成员的大小,较大的成员排在前面,较小的成员排在后面; } 定义的最小值=数组某成员; return 定义的最小值; 定义的最大值=数组某成员; return 定义的最大值; 2、main()函数中主要功能伪代码 int main() { cout<<\请输入添加的学生人数n(无学生信息添加请输入0):\ cin>>n; Student stu[N]; //定义一个Student类数组 for(int m=0;m stu[m].input();//调用Student类添加学生信息函数,添加学生信息 ofstream out(\定义输出文件流对象out,打开输出文件f1.text并添加学生信息 for(int s=0;s 标准文档 out< out.close(); ifstream in(\定义输入文件流对象in,打开输入文件f1.text int j=0; while(!in.eof())//直到文件末尾跳出循环 { in>>stu2[j].name>>stu2[j].sno>>stu2[j].Math>>stu2[j].English>>stu2[j].Cjj;//依次读入学生信息 score1[j]=stu2[j].getMath(); score2[j]=stu2[j].getEnglish(); score3[j]=stu2[j].getCjj(); score4[j]=stu2[j].Totalscore();//分别将学生数学成绩、英语成绩、C++成绩、总分成绩放入一个数组中 j++; } int t; do{ cout<<\请输入菜单相应功能数字:\ cin>>t; if(t等于1) { 调用求取最高分函数,显示学生各科及总分最高分; } if(t等于2) { 调用求取最低分函数,输出学生各科及总分最低分; } if(t等于3) { 调用求取平均分函数,输出学生各科及总分平均分; } if(t等于4) { 调用排序函数并输出学生成绩总分排名及全体成员各科信息; 标准文档 } if(t等于5) { cout<<\学生成绩总分分数段统计情况****\ int Total1[N]={0},Total2[N]={0},Total3[N]={0}; //定义三个数组,数组成员并初始化为零,存放各个分数段学生总分成绩 for(j=0;j if(某学生总分大于290分) Total1[j]=某学生总分; else if(某学生总分大于280分) Total2[j]=某学生总分; else if(某学生总分大于等于270分) } cout< {if(Total1[j])//如果Total1[j]不为零则执行if内语句 Total3[j]=某学生总分; cout<< for(j=0;j { if(Total2[j])//如果Total2[j]不为零则执行if内语句 cout<< Total2[j]< cout< {if(Total3[j]) //如果Total3[j]不为零则执行if内语句 cout< cout<<\欢迎使用成绩统计系统!\break; 标准文档 } if(t!=1&&t!=2&&t!=3&&t!=4&&t!=5&&t!=6) //错误判断 cout<<\输入错误!\ }while(t); in.close();//关闭文件f1.text return 0; } 五 调试分析 在调试过程中,令我印象最深刻的是在定义Student类对象并初始化时,其中部分输入使用了中文字符,导致在调试检查时花了很长时间才发现这个错误。 其次,在调用求取最高分、最低分、平均分函数时,由于一个学生有多个信息,在使用相应学生信息作为实参来调用函数时,我用类似stu2.getMath()这样的形式作为数组名,结果一直显示错误,最后通过score1[j]=stu2[j].getMath();这一语句来转换,成功解决了这一错误。 其中,在实现总分排名这一功能时,我是使用了一个排序函数,然后取用在数组中相应位置数作为排名成绩,在操作调试过程中因为排序函数定义成void或者int型错误以及在使用for循环逻辑错误,使得结果一直无法输出学生总分成绩以及排名信息。不过,经过耐心的调试和修改,最后成功解决了这一问题。 最后,最重要的是文件操作部分的内容,这是本次课程设计中的难点。当时,我是依据课本上的一个例子仿照编写的,直接在main函数里定义文件,向文件里编写数据,然后读取。后面功能函数实现所调用的实参均是按照文件读取中格式输入,结果导致每次运行添加的学生信息在下一次运行时无法保留。我自己在百度上参考了一些例子,也参照了班里同学的例子。由于在编写程序初设计程序整体功能结构框架没有重视文件操作这一功能,导致在修改源程序达到永久保存添加学生信息功能时,修改时有点繁琐。不过,经过和同学讨论和书本上相关例子,最终解决了文件添加学生信息的功能。 六 测试结果 以下是我编写成绩统计系统过程中使用的初步学生成绩信息,其中总分、最高分、最低分、平均分均是经过实际验证得到的数据。 姓名 王 李 赵 柳 洪 梁 学号 2011 2012 2013 2014 2015 2016 数学成绩 90 95 95 96 94 97 英语成绩 91 92 98 97 95 98 C++成绩 92 94 99 98 96 99 总分 273 281 292 291 285 294