基于C++实现的高考成绩模拟录取系统

Smilelove

发布日期: 2018-11-15 14:39:49 浏览量: 240
评分:
star star star star star star star star_border star_border star_border
*转载请注明来自write-bug.com

一、原程序功能、结构

1.1 功能

定义一个学生类 包括:姓名、性别、年龄、准考证号、毕业学校、语文、数学、英语三门课的成绩、两门选测课及其等级:分为a+, a, b+, b, c+, c, d+, d

主要的类成员函数包括:

  • 采用动态分配,设计构造和析构函数

  • 计算某一门课的平均成绩

  • 对成绩排序,可以是升序也可以是降序

  • 根据分数,按照5分一个分数段,进行人数统计

  • 根据招生人数以及等级,来划定分数线。

所有结果,存入文件。 主程序中设计相应的菜单,以便调用相应的功能。

1.2 程序流程图

二、课程设计要求的实现

2.1 一些主要函数及其说明

2.1.1 文本读取函数(部分)

  1. char a[20],b[10],c[20],d[20],e[10],f[10],g;
  2. int m,n,o,p;
  3. while(i < 50)
  4. {
  5. infile.getline(a,20,',');
  6. infile.getline(b,10,',');
  7. infile>>m;
  8. infile>>g;
  9. infile.getline(c,20,',');
  10. infile.getline(d,20,',');
  11. infile>>n;
  12. infile>>g;
  13. infile>>o;
  14. infile>>g;
  15. infile>>p;
  16. infile>>g;
  17. infile.getline(e,10,',');
  18. infile.getline(f,10,'\n');
  19. t[i].setname(a);
  20. t[i].setsex(b);
  21. t[i].setage(m);
  22. t[i].setcnumber(c);
  23. t[i].setschoolname(d);
  24. t[i].setchinesescore(n);
  25. t[i].setmathscore(o);
  26. t[i].setenglishscore(p);
  27. t[i].seta1(e);
  28. t[i].seta2(f);
  29. i++;
  30. realsize++;

2.1.2 成绩排序函数

  1. //计算总成绩并排序
  2. void sortsum(Student *ss)
  3. {
  4. int num;
  5. int *sum=new int[num];
  6. for(int i=0;i<num;i++)
  7. {
  8. sum[i]=ss[i].mathscore+ss[i].chinesescore+ss[i].englishscore;
  9. }
  10. int temp; //冒泡排序
  11. for(int j=0;j<num;j++)
  12. for(int k=0;k<num-1-j;k++)
  13. if(sum[k]>sum[k+1])
  14. {
  15. temp=sum[k];
  16. sum[k]=sum[k+1];
  17. sum[k+1]=temp;
  18. }
  19. int lowmark,highmark; //按照5分一个分数段进行人数统计
  20. lowmark=sum[0];
  21. highmark=sum[num-1];
  22. for(int n=lowmark+5;n<=highmark;n+=5)
  23. {
  24. int size=0;
  25. for(int m=0;sum[m]<n;m++)
  26. {
  27. size++;
  28. }
  29. cout<<"分数范围为"<<n-5<<"~"<<n<<"的有:"<<size<<endl;
  30. }
  31. delete[]sum;
  32. }

2.1.3 主函数中用switch语句实现功能选择

  1. cout<<"1.计算某门科目平均成绩;"<<endl;
  2. cout<<"2.排序;"<<endl;
  3. cout<<"3.进行分数段人数统计;"<<endl;
  4. cout<<"4.划定高考录取分数线;"<<endl;
  5. cout<<"5.结束录取;"<<endl;
  6. cout<<"请输入需要实现的功能序号:";
  7. int p;
  8. cin>>p;
  9. //开关语句实现功能选择函数
  10. switch(p)
  11. {
  12. case 1:
  13. int k;
  14. cout<<"请输入所要计算平均值的科目的代码(具体代码表请参见表1):";
  15. cin>>k;
  16. s.Average(k,t); //通过类的对象作为借口访问类的公有成员函数
  17. break;
  18. case 2:
  19. s.sortsum(t);
  20. break;
  21. case 3:
  22. cout<<"在排序中已经实现分数段人数统计并保存!"<<endl;
  23. break;
  24. case 4:
  25. s.setmarkline(t);
  26. break;
  27. case 5:
  28. cout<<"谢谢使用!"<<endl;
  29. break;
  30. default:
  31. cout<<"Input P error!"<<endl;
  32. }

三、课程设计中所遇问题和解决

在函数中不能直接将文本文件中的信息录入到类的对应的成员中

解决办法是将文本信息的读取函数定义为类的友元函数,这样它就能访问类的私有数据成员了。

经常因为粗心出现下面这个错误

主要是因为在功能函数中少写了“}”,补上即可。

类对象的值不能直接赋值给int类型数组

将数组定义为学生类类型数组。

数组之间不能直接赋值

需要用字符串函数strcpy实现数组织间的数值传递。

代码上的不足:只能保存排序后的学生信息,而不能通过排序后的数组名称访问类中的私有成员,导致文件中的成绩信息不能与其相对应的考生符合

  1. //计算总成绩并排序
  2. void sortsum(Student *ss)
  3. {
  4. int num;
  5. int *sum=new int[num];
  6. for(int i=0;i<num;i++)
  7. {
  8. sum[i]=ss[i].mathscore+ss[i].chinesescore+ss[i].englishscore;
  9. }
  10. int temp; //冒泡排序
  11. for(int j=0;j<num;j++)
  12. for(int k=0;k<num-1-j;k++)
  13. if(sum[k]>sum[k+1])
  14. {
  15. temp=sum[k];
  16. sum[k]=sum[k+1];
  17. sum[k+1]=temp;
  18. }
  19. int lowmark,highmark; //按照5分一个分数段进行人数统计
  20. lowmark=sum[0];
  21. highmark=sum[num-1];
  22. char filename[256];
  23. cout<<"请输入保存分数段人数统计信息的文件名称:"<<endl;
  24. cin>>filename; //分数段人数统计信息存入文件
  25. ofstream outfile(filename,ios::out||ios::noreplace);
  26. while(!outfile)
  27. {
  28. cout<<"不能打开此文件!"<<endl;
  29. cout<<"请再次输入文件名:";
  30. cin>>filename;
  31. outfile.clear();
  32. outfile.open(filename,ios::out||ios::noreplace);
  33. }

改进方法是将sum数组定义为Student类数组。

四、设计的收获和体会

一开始拿到这个题目时,很懵,题目需要反复去看,反复斟酌隐含意思以及一些隐含的要求,例如对成绩排序后保存信息时,不仅仅要保存成绩的排序信息,还要把它对应的考生信息保存入文件中。

做课设有利于复习以前的知识,新学知识,很快用上,也会去请教别人。

对成绩的排序不仅可以从总成绩,也可以是按单门英语或语文或数学成绩排序。功能函数均定义为类的成员函数。仅仅一个程序突然停止运行的错误我就改了两天。文件里的内容不能直接赋给类的成员!文件由于没有选测课序号,不能分文理科,所以文理分科函数不能使用,但是是正确的函数。由于功能4调用了功能2里的排序文件,所以功能2必须先于功能4执行。先把功能函数的代码依次写好,可是后来写录入函数的时候出现问题,就发现改起来很复杂,应该先把录入函数写好,再去写功能函数,num的值先自己设置一个已知的值,最后再在主函数里实现人数统计,num由文本给出。

五、程序主界面

上传的附件 cloud_download 基于C++实现的高考成绩模拟录取系统.7z ( 139.93kb, 4次下载 )
error_outline 下载需要3点积分

发送私信

即使是不成熟的尝试,也胜于胎死腹中的策略

7
文章数
9
评论数
最近文章
eject