C学生成绩统计管理系统 增删减修改统计 继承派生1_第1页
C学生成绩统计管理系统 增删减修改统计 继承派生1_第2页
C学生成绩统计管理系统 增删减修改统计 继承派生1_第3页
C学生成绩统计管理系统 增删减修改统计 继承派生1_第4页
C学生成绩统计管理系统 增删减修改统计 继承派生1_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第页南昌大学C++选修课课程设计报告题目:C++学生成绩统计管理系统学院:机电工程学院专业:15级动力工程专业姓名:梁帅帅学号:4电话:2019年6月17日目录1.需求分析…………32.概要设计…………33.程序实现思路……44.设计总结…………45.参考文献…………56.源代码……………6一、需求分析经过研一下学期C++选修课的学习,对C++基于对象的程序设计有了一定的认识,根据所学的知识,设计学生成绩管理系统。学生成绩统计管理系统是为某班级成绩统计管理的一个系统。为方便班级的管理人员对学生的信息进行管理,该系统中包括学号、姓名、大学物理、高数、C++语言,各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例,学生的总成绩、平均成绩及成绩排名。通过仔细研究借鉴众多相关毕业设计研究等文献资料(见参考文献一),学习书籍谭浩强《面向对象的C++程序设计》编写了该成绩管理系统。主要的功能有学生数据的增加、删除、修改、查询,另外实现一些统计的功能,例如:成绩的输入、成绩统计、总成绩统计、成绩的统计结果显示。二、概要设计1、本程序所用到的所有抽象数据类型的定义如下:序号成员名数据类型含义1numlong学号2namestring姓名3sumdouble总分4rangeint排名5avedouble平均分6score[]double记录数组2、各程序模块的功能voidinput();//输入voidcount();//计算voidsort();//按学号升序排列 voidselectsort();//按总成绩降序排列voidinsert();//增加intdel();//删除voidstudent::Exit();//修改voidsearch();//查询voiddisplay();//显示以下为统计模块:voidcount();//计算成员函数voidaverage();//计算平均值成员函数voiddisplay();//显示成员函数三、程序实现思路1.设计菜单实现功能①成绩的输入(学号、姓名、大学物理、高数、C++语言)。②成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例)。③总成绩统计(学生的总成绩、平均成绩及成绩排名)。④成绩的统计结果显示。⑤学生数据的增加、修改、及删除。⑥学生数据的读取及存储。2.设计类及对象classstudent//建立学生student类,目的是存储学生个人信息public: longnum;//学号 stringname;//姓名 doublescore[n];//学生科目成绩doublesum;//总成绩 doubleave;//平均成绩 intrange;//排名voidinsert();//增加intdel();//删除voidsearch();//查询voidstudent::Exit();//修改 voiddisplay();//显示voidinput();//输入 voidcount();//计算 voidsort();//按学号升序排列 voidselectsort();//按总成绩降序排列}stu[N];classall//建立整体all类,目的是存放学生整体信息public: doubleave;//每学科的平均成绩 intpeople[5];//每学科的各等级人数doublepercent[5];//每学科的各等级人数比例voidcount();//计算成员函数 voidaverage();//计算平均值成员函数 voiddisplay();//显示成员函数}al[n];3.通过类的调用实现功能设计case0: cout<<"*******************"<<endl; cout<<"高数科统计结果为"<<endl; cout<<"*******************"<<endl; cout<<endl; break;case1: cout<<"*******************"<<endl; cout<<"大学物理科统计结果为"<<endl; cout<<"*******************"<<endl; cout<<endl; break;case2: cout<<"*******************"<<endl; cout<<"C++统计结果为"<<endl; cout<<"*******************"<<endl; cout<<endl; break;case3: if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl; else cout<<"学生信息为:"<<endl; stu[total].count(); stu[total].display();//显示cout<<endl;break;case4: if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl; else cout<<"各科学生成绩为:"<<endl; al[n].average(); al[n].count();al[n].display(); cout<<endl; break;case5: if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl; else do stu[total].search(); cout<<"查询成功,继续查询请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar(); while(ch=='Y'||ch=='y');break;case6: if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl; else dostu[total].Exit();//修改cout<<"修改成功,继续修改请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar(); while(ch=='Y'||ch=='y'); break;case7: if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl; elsedosystem("cls");stu[total].insert();//增加total++;cout<<"增加成功,继续增加请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar();cout<<endl;while(ch=='Y'||ch=='y');break;case8:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsedosystem("cls"); if(stu[total].del())//删除 total--;//人数-1system("cls");elsecout<<"该学号不存在"<<endl;system("pause");system("cls");cout<<"删除成功,继续删除请输入Y/y:"<<endl;cout<<"退出该选择请按其他键"<<endl;fflush(stdin);ch=getchar();cout<<endl; while(ch=='Y'||ch=='y');break;case9:cout<<"此操作将删除所有记录"<<endl;cout<<"继续该操作请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar();if(ch=='Y'||ch=='y')total=0;break;default: cout<<"确定要退出吗?"<<endl;cout<<"退出请输入Y/y:"<<endl;fflush(stdin);ch=getchar();cout<<endl;if(ch=='y'||ch=='Y')exit(0);break;system("pause");}while(1);四、设计总结通过为期两周的努力,挑战程序设计的难度,终于将程序正确地运行。虽说只是一个简单的程序,但它却见证了我从编写、调试、修改、运行、再修改等一系列的过程,收录了我努力后的小小成果。从不断调试中遇到的错误中,我发现了自己的不足,同时也学会让自己如何面对挑战。运用结构体、类等新学的内容让我再次感受到了学习的重要性。都说“万变不离其宗”,书本是我们课后学习的参照。因为没有重视书本,让我在编译时不断翻看,这也坚定了我努力学好这门课程的决心。五、参考文献1.谭浩强《C++程序设计》清华出版社2019,5六、源代码学生成绩统计管理程序#include<iostream>//引用库函数#include<iomanip>//引用控制符处理#include<string>//字符串usingnamespacestd;#defineN100//宏定义#definen3classstudent//建立学生类,用于存储学生个人信息public:longnum;//学号stringname;//姓名doublescore[n];//学生科目成绩doublesum;//总成绩doubleave;//平均成绩intrange;//排名voidinput();//输入voidcount();//计算voidsort();//按学号升序排列voidselectsort();//按总成绩降序排列voidsearch();//查询voidinsert();//增加intdel();//删除voidstudent::Exit();//修改数据voiddisplay();//显示}stu[N];classall//建立整体类,用来存放学生整体信息public:doubleave;//每学科的平均成绩intpeople[5];//每学科的各等级人数doublepercent[5];//每学科的各等级人数比例voidcount();//计算成员函数voidaverage();//计算平均值成员函数voiddisplay();//显示成员函数}al[n];inttotal=0;//定义全局变量voidstudent::input()//输入学生个人信息cout<<"请输入学生信息:"<<endl;cout<<"学号"<<setw(8)<<"姓名"<<setw(12)<<"高数成绩"<<setw(10)<<"大学物理成绩"<<setw(10)<<"C++成绩"<<endl;cin>>setw(10)>>stu[total].num;cin>>setw(10)>>stu[total].name;for(intj=0;j<n;j++)cin>>setw(10)>>stu[total].score[j];voidstudent::selectsort()//按总成绩降序排列studentaa;inti,j;for(i=0;i<total-1;i++)for(j=i+1;j<total;j++)if(stu[i].sum<stu[j].sum){aa=stu[j];stu[j]=stu[i];stu[i]=aa;voidstudent::count()//计算总成绩、平均成绩stu[total].selectsort();for(inti=0;i<total;i++)stu[i].sum=0;for(intj=0;j<n;j++)stu[i].sum+=stu[i].score[j];stu[i].ave=stu[i].sum/n;voidstudent::sort()//按学号升序排列studentabc;inti,j;for(i=0;i<total-1;i++)for(j=i+1;j<total;j++)if(stu[i].num>stu[j].num)abc=stu[j];stu[j]=stu[i];stu[i]=abc;voidstudent::display()//显示学生个人信息selectsort();//调用按总成绩降序排列函数cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"高数成绩"<<setw(10)<<"大学物理成绩"<<setw(10)<<"C++成绩"<<setw(10)<<"平均成绩"<<setw(10)<<"总成绩"<<setw(10)<<"排名"<<endl;for(inti=0;i<total;i++)stu[i].range=i+1;cout<<setw(10)<<stu[i].num<<setw(10)<<stu[i].name;for(intj=0;j<n;j++)cout<<setw(10)<<stu[i].score[j];cout<<setw(10)<<stu[i].ave<<setw(10)<<stu[i].sum<<setw(10)<<stu[i].range<<endl;voidall::average()//计算各科的平均成绩for(intj=0;j<n;j++)longdoublea=0;for(inti=0;i<total;i++){a+=stu[i].score[j];al[j].ave=a/double(total);voidall::count()//计算各科的各等级人数及其比例for(intj=0;j<n;j++)inta=0,b=0,c=0,d=0,e=0;for(inti=0;i<total;i++)if(stu[i].score[j]<60)a++;elseif(stu[i].score[j]<70)b++;elseif(stu[i].score[j]<80)c++;elseif(stu[i].score[j]<90)d++;elsee++;al[j].people[0]=a;//高数科不及格人数al[j].people[1]=b;//高数科及格人数al[j].people[2]=c;//高数科中等人数al[j].people[3]=d;//高数科良好人数al[j].people[4]=e;//高数科优秀人数al[j].percent[0]=a/double(total);//高数科不及格人数所占的比例al[j].percent[1]=b/double(total);//高数科及格人数所占的比例al[j].percent[2]=c/double(total);//高数科中等人数所占的比例al[j].percent[3]=d/double(total);//高数科良好人数所占的比例al[j].percent[4]=e/double(total);//高数科优秀人数所占的比例voidall::display()//输出整体信息for(intj=0;j<n;j++)switch(j)case0:cout<<"*******************"<<endl;cout<<"高数科统计结果为"<<endl;cout<<"*******************"<<endl;cout<<endl;break;case1:cout<<"*******************"<<endl;cout<<"大学物理科统计结果为"<<endl;cout<<"*******************"<<endl;cout<<endl;break;case2:cout<<"*******************"<<endl;cout<<"C++统计结果为"<<endl;cout<<"*******************"<<endl;cout<<endl;break;cout<<"平均成绩为:"<<al[j].ave<<endl;cout<<endl;cout<<"不及格人数为:"<<al[j].people[0]<<endl;cout<<"及格人数为:"<<al[j].people[1]<<endl;cout<<"中等人数为:"<<al[j].people[2]<<endl;cout<<"良好人数为:"<<al[j].people[3]<<endl;cout<<"优秀人数为:"<<al[j].people[4]<<endl;cout<<"不及格人数为:"<<al[j].percent[0]<<endl;cout<<"及格人数比为:"<<al[j].percent[1]<<endl;cout<<"中等人数为:"<<al[j].percent[2]<<endl;cout<<"良好人数比为:"<<al[j].percent[3]<<endl;cout<<"优秀人数比为:"<<al[j].percent[4]<<endl;cout<<endl;voidstudent::search()//查询intfind_num;boolflag=false;cout<<"请输入要查找的学生的学号"<<endl;cin>>find_num;for(inti=0;i<total;i++)if(stu[i].num==find_num)//如果要找的学号及其中某一个学生的学号相同cout<<setw(10)<<stu[i].num<<endl;;cout<<"已经找到该学生信息,他的有关信息是:"<<endl;cout<<setw(10)<<stu[i].name;for(intj=0;j<n;j++)cout<<setw(10)<<stu[i].score[j];cout<<setw(10)<<stu[i].ave<<setw(10)<<setw(10)<<stu[i].sum<<setw(10)<<stu[i].range<<endl;//输出学生信息flag=true;break;if(flag==false)cout<<"找不到该学生的学号"<<endl;//如找不到输出"找不到"信息}voidstudent::Exit()//修改intID;boolflag=false;stringname1;cout<<"请输入要修改的学生的信息"<<endl;cout<<setw(12)<<"学号:"<<setw(12)<<endl;cout<<"姓名:"<<setw(12)<<endl;cout<<"高数成绩:"<<setw(12)<<endl;cout<<"大学物理成绩:"<<setw(12)<<endl;cout<<"C++成绩:"<<endl;cin>>ID;cin>>name1;for(inti=0;i<total;i++)if(stu[i].num==ID)stu[i].num=ID;stu[i].name=name1;flag=true;break;if(flag==false)cout<<"找不到该学生的学号"<<endl;voidstudent::insert()//增加inta;stringaa;doublex,y,z;stu[total].sort();//调用按学号升序排列函数cout<<"请输入要增加的学生的信息"<<endl;//输入要增加学生的信息cout<<setw(12)<<"学号"<<setw(12)<<"姓名"<<setw(12)<<"高数成绩"<<setw(12)<<"大学物理成绩"<<setw(12)<<"C++成绩"<<endl;cin>>a>>aa>>x>>y>>z;stu[total].num=a;stu[total].name=aa;stu[total].score[0]=x;stu[total].score[1]=y;stu[total].score[2]=z;intstudent::del()//删除inti,j,abc;cout<<"请输入要删除的学号:"<<endl;cin>>abc;stu[total].sort();//调用按学号升序排列函数for(i=0;i<total;i++)if(abc==stu[i].num)//如果某一个学生的学号及要删除的学生的学号相同break;if(i<total)for(j=i;j<total;j++)stu[j]=stu[j+1];return1;elsereturn0;voidmenu();//显示主菜单classstudent;classall;voidstudent::display();voidall::display();//显示学生信息voidstudent::insert();//增加学生(自动排序)intstudent::del();//删除学生voidstudent::search();//按学号查询intmain()//主函数classstudentstu[N];classallal[n];charch;intselect;//total为学生总数,select为选择dosystem("cls");menu();cout<<"请输入你的选择:"<<endl;fflush(stdin);cin>>select;system("cls");switch(select)case1:dosystem("cls");stu[total].input();total++;//人数+1cout<<"输入成功,继续输入请输入Y/y:"<<endl;cout<<"退出请输入其他键"<<endl;fflush(stdin);ch=getchar();while(ch=='Y'||ch=='y');cout<<endl;break;case2:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsecout<<"学生信息为:"<<endl;stu[total].count();stu[total].display();//显示cout<<endl;break;case3:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsecout<<"各科学生成绩为:"<<endl;al[n].average();al[n].count();al[n].display();cout<<endl;break;case4:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsedostu[total].search();cout<<"查询成功,继续查询请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar();while(ch=='Y'||ch=='y');break;case5:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsedostu[total].Exit();//修改cout<<"修改成功,继续修改请输入Y/y:"<<endl;cout<<"退出请按其他键"<<endl;fflush(stdin);ch=getchar();while(ch=='Y'||ch=='y');break;case6:if(total==0)cout<<"数组为空,请在主菜单中选择1增加数据"<<endl;elsedosystem("cls");stu[total].insert();//增加total++;cout<<"增加成功,继续增加请输入Y/y:"<<endl;cout<<"退出请按其他键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论