面向对象的课程设计——成绩管理系统

el/2023/10/1 3:59:18

c++面向对象的课程设计

题目:学生成绩管理系统
输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5) 要求 用户录入每个学生每门课程的分数; 能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息; 显示每门科目中,成绩在90分以上的学生信息。另外还输出每门科目中不及格的学生信息; 能按姓名或者学号查找,增加,删除和保存各个学生的信息。
程序基本功能
1.能够连续的录入学生的基本信息(包括学号,姓名,性别,各科成绩)
2能够计算出统计的每个学生的各门科目成绩的总分和平均分,并按总分排序
3显示每门科目中成绩在90分以上同学的相关信息
4显示每门科目中成绩在60分以下同学的相关信息
5能够按照学号查找,增加,删除和保存各个学生的信息
6.计算全班各门科目成绩的平均分,显示低于平均分同学的相关信息
程序设计方案和原理
1.设计student基类与science派生类,包含学号、姓名、性别,与各科成绩
2.以菜单的形式呈现以上程序功能,输入命令能够连续执行。
结构图如下:
在这里插入图片描述
详细代码如下

#include <iostream>
#include <string>
#include <ctime>
#include <windows.h>
using namespace std;
# define N 5	//班级原始人数
# define increment 5 		//班级人数增量
class Student
{protected:int number;				//学号string name;			//姓名string sex;				//性别int chinese;			//语文成绩int math;				//数学成绩int english;			//英语成绩int Total_score;		//总分int Total_score_order;	//总分顺序public:Student(int number=1705110001,string name="noname",string sex="nosex",int chinese=0,int math=0,int english=0,int Total_score=0){this->number=number; this->name=name; this->sex=sex;this->chinese=chinese; this->math=math; this->english=english;}Student(Student &s){this->number=s.number; this->name=s.name; this->sex=s.sex;this->chinese=s.chinese; this->math=s.math; this->english=s.english;}virtual ~Student(){}virtual void display(){cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"性别:"<<sex<<endl<<"语文成绩:"<<chinese<<endl<<"英语成绩:"<<english<<endl;}
};//Studentclass Sscience:public Student
{protected:int physics;		//物理成绩int chemistry;		//化学成绩public:Sscience(){this->physics=0;this->chemistry=0;}Sscience(int number,string name,string sex,int chinese,int math,int english,int Total_score,int physics,int chemistry):Student(number,name,sex,chinese,math,english,Total_score){this->physics=physics; this->chemistry=chemistry;}Sscience(Sscience &s):Student(s){this->physics=s.physics;this->chemistry=s.chemistry; }virtual ~Sscience(){}void display(){cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"性别:"<<sex<<endl<<"语文成绩:"<<chinese<<endl<<"数学成绩:"<<math<<endl<<"英语成绩:"<<english<<endl<<"物理成绩:"<<physics<<endl<<"化学成绩:"<<chemistry<<endl;}void setall();int getnumber(){return this->number;}string getname(){return this->name;}int getchinese(){return this->chinese;}int getmath(){	return this->math;}int getenglish(){return this->english;}int getphysics(){return this->physics;}int getchemistry(){return this->chemistry;}int getTotal_score(){this->Total_score=this->math+this->chinese+this->english+this->chemistry+this->physics;return this->Total_score;}void resetname(){string n;cout<<"请输入新的名字:"<<endl;cin>>n;this->name=n;}void findname(){string n;cout<<"请输入需要查找的姓名:"<<endl;cin>>n;int flag = 0;		 // 0表示未找到 if(n==this->name){flag = 1;cout << "该同学在成绩管理系统中存在" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该同学在成绩管理系统中不存在" << endl;}			}void resetsex(){string s;cout<<"请输入新的性别:"<<endl;cin>>s;this->sex=s;}void findsex(){string s;cout<<"请输入需要查找的性别:"<<endl;cin>>s;int flag = 0;		 // 0表示未找到 if(s==this->sex){flag = 1;cout << "该同学在成绩管理系统中存在" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该同学在成绩管理系统中不存在" << endl;}			}void resetchinese(){int c;cout<<"请输入新的语文成绩:"<<endl;cin>>c;this->chinese=c;}void findchinese(){int c;cout<<"请输入需要查找的语文成绩:"<<endl;cin>>c;int flag = 0;		 // 0表示未找到 if(c==this->chinese){flag = 1;cout << "该成绩与成绩管理系统中存在的语文成绩匹配" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该成绩与成绩管理系统中存在的语文成绩不匹配" << endl;}			}void resetmath(){int m;cout<<"请输入新的数学成绩:"<<endl;cin>>m;this->math=m;}void findmath(){int m;cout<<"请输入需要查找的数学成绩:"<<endl;cin>>m;int flag = 0;		 // 0表示未找到 if(m==this->math){flag = 1;cout << "该成绩与成绩管理系统中存在的数学成绩匹配" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该成绩与成绩管理系统中存在的数学成绩不匹配!" << endl;}			}void resetenglish(){int e;cout<<"请输入新的英语成绩:"<<endl;cin>>e;this->english=e;}void findenglish(){int e;cout<<"请输入需要查找的英语成绩:"<<endl;cin>>e;int flag = 0;		 // 0表示未找到 if(e==this->english){flag = 1;cout << "该成绩与成绩管理系统中存在的英语成绩匹配" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该成绩与成绩管理系统中存在的英语成绩不匹配" << endl;}			}void resetchemistry(){int ch;cout<<"请输入新的化学成绩:"<<endl;cin>>ch;this->chemistry=ch;}void findchemistry(){int ch;cout<<"请输入需要查找的化学成绩:"<<endl;cin>>ch;int flag = 0;		 // 0表示未找到 if(ch==this->chemistry){flag = 1;cout << "该成绩与成绩管理系统中存在的化学成绩匹配" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该成绩与成绩管理系统中存在的化学成绩不匹配" << endl;}			}void resetphysics(){int p;cout<<"请输入新的物理成绩:"<<endl;cin>>p;this->physics=p;}void findphysics(){int p;cout<<"请输入需要查找的物理成绩:"<<endl;cin>>p;int flag = 0;		 // 0表示未找到 if(p==this->physics){flag = 1;cout << "该成绩与成绩管理系统中存在的物理成绩匹配" << endl;} // 判断是否未找到该元素 if(flag==0){cout << "该成绩与成绩管理系统中存在的物理成绩不匹配" << endl;}			}
};//Ssciencevoid Sscience::setall()
{cout<<"输入学号:"; cin>>number;cout<<"输入姓名:"; cin>>name;cout<<"输入性别:"; cin>>sex;cout<<"输入语文成绩:"; cin>>chinese;cout<<"输入数学成绩:"; cin>>math;cout<<"输入英语成绩:"; cin>>english;cout<<"输入物理成绩:"; cin>>physics;cout<<"输入化学成绩:"; cin>>chemistry;
}void informationentry(Sscience *headptr/*对象指针*/,int &count,int &capacity)
{if(count==capacity){capacity+=increment;Sscience *p=headptr;Sscience *newheadptr = new Sscience[capacity];Sscience *q=newheadptr;for(int i=0;i<count;i++){*q=*p;p++;q++;}p=headptr;headptr=newheadptr;delete[] p;}(headptr+count)->setall();count++;
}void informationmodify(Sscience *headptr,int count)
{int x=0,control=0;cout<<"请输入所要修改学生信息的学号:"<<endl;cin>>x;for(int i=0;i<count;i++){if((headptr+i)->getnumber()==x){do{cout<<"选择要修改的信息编号:"<<endl<<"\t1.姓名\n"<<"\t2.性别\n"<<"\t3.语文成绩\n"<<"\t4.数学成绩\n"<<"\t5.英语成绩\n"<<"\t6.物理成绩\n"<<"\t7.化学成绩\n"<<"\t0.放弃本次修改\n\t";cout<<"请输入你的指令"<<endl;cin>>control;switch(control){case 1:(headptr+i)->resetname();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 2:(headptr+i)->resetsex();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 3:(headptr+i)->resetchinese();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 4:(headptr+i)->resetmath();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 5:(headptr+i)->resetenglish();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 6:(headptr+i)->resetphysics();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 7:(headptr+i)->resetchemistry();cout<<"修改成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 0:cout<<"放弃修改!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;default:cout<<"输入错误!请重新输入:"<<endl;Sleep(1000);system("cls");}}while(control==0);}}cout<<"操作完成!"<<endl;Sleep(1000);
}void informationdelete(Sscience *headptr,int &count)
{int x=0,ctrl=0;cout<<"请输入要删除学生信息的学号:";cin>>x;for(int i=0;i<count;i++){if((headptr+i)->getnumber()==x){for(int j=1;j<count-i;j++){*(headptr+i+j-1)=*(headptr+i+j);}count--;ctrl++;}}if(ctrl==0){	cout<<"没有找到该条信息!返回主界面";Sleep(1000);system("cls");}elsecout<<"删除成功!"<<endl;
}void informationfind(Sscience *headptr,int count)
{int x=0,control=0;cout<<"请输入所要查找学生信息的学号:"<<endl;cin>>x;for(int i=0;i<count;i++){if((headptr+i)->getnumber()==x){do{cout<<"选择要查找的信息编号:"<<endl<<"\t1.姓名\n"<<"\t2.性别\n"<<"\t3.语文成绩\n"<<"\t4.数学成绩\n"<<"\t5.英语成绩\n"<<"\t6.物理成绩\n"<<"\t7.化学成绩\n"<<"\t0.放弃本次查找\n\t";cout<<"请输入你的指令"<<endl;cin>>control;switch(control){case 1:(headptr+i)->findname();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 2:(headptr+i)->findsex();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 3:(headptr+i)->findchinese();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 4:(headptr+i)->findmath();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 5:(headptr+i)->findenglish();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 6:(headptr+i)->findphysics();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 7:(headptr+i)->findchemistry();cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;case 0:cout<<"查找成功!一秒后返回主界面"<<endl;Sleep(1000);system("cls");break;default:cout<<"查找错误!请重新输入:"<<endl;Sleep(1000);system("cls");}//switch}//dowhile(control==0);}//if}//forcout<<"操作完成!!"<<endl;Sleep(1000);
}
void display_Total_score_ranking(Sscience *headptr,int count)
{int t[N],o[N];int i,j,Temporary,Temporary_Total_score;	for(i=0;i<count;i++){t[i]=(headptr+i)->getTotal_score();o[i]=i;}for(j=0;j<count-1;j++){for(i=0;i<count-1;i++){if(t[i]>t[i+1]){Temporary=t[i];Temporary_Total_score=o[i];t[i]=t[i+1];o[i]=o[i+1];t[i+1]=Temporary;o[i+1]=Temporary_Total_score;}}}cout<<"以下是成绩管理系统中各同学的总分排序(从低到高)"<<endl;for(i=0;i<count;i++){     cout<<(headptr+o[i])->getnumber()<<"  "<<(headptr+o[i])->getname()<<"  "<<t[i]<<endl;    }cout<< endl;
}void display_Average_score(Sscience *headptr,int count)				//计算各科平均分并查看低于平均分学生信息
{float chinese_Average_score=0;float math_Average_score=0;float english_Average_score=0;float physics_Average_score=0;float chemistry_Average_score=0;for(int i=0;i<count;i++){chinese_Average_score+=(headptr+i)->getchinese();math_Average_score+=(headptr+i)->getmath();english_Average_score+=(headptr+i)->getenglish();physics_Average_score+=(headptr+i)->getphysics();chemistry_Average_score+=(headptr+i)->getchemistry();}cout<<"各位同学语文学科平均分为:"<<chinese_Average_score/count<<endl;cout<<"各位同学数学学科平均分为:"<<math_Average_score/count<<endl;cout<<"各位同学英语学科平均分为:"<<english_Average_score/count<<endl;cout<<"各位同学物理学科平均分为:"<<physics_Average_score/count<<endl;cout<<"各位同学化学学科平均分为:"<<chemistry_Average_score/count<<endl;for(int j=0;j<count;j++){if((headptr+j)->getchinese() < chinese_Average_score/count){cout<<(headptr+j)->getname()<<"同学低于语文平均分,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;}if((headptr+j)->getmath() < math_Average_score/count){cout<<(headptr+j)->getname()<<"同学低于数学平均分,该同学语文分数为:"<<(headptr+j)->getmath()<<endl;}if((headptr+j)->getenglish() < english_Average_score/count){cout<<(headptr+j)->getname()<<"同学低于英语平均分,该同学语文分数为:"<<(headptr+j)->getenglish()<<endl;}if((headptr+j)->getphysics() < physics_Average_score/count){cout<<(headptr+j)->getname()<<"同学低于物理平均分,该同学语文分数为:"<<(headptr+j)->getphysics()<<endl;}if((headptr+j)->getchemistry() < chemistry_Average_score/count){cout<<(headptr+j)->getname()<<"同学低于化学平均分,该同学语文分数为:"<<(headptr+j)->getchemistry()<<endl;}}
}void dispaly_90(Sscience *headptr,int count)
{for(int j=0;j<count;j++){if((headptr+j)->getchinese() > 90){cout<<(headptr+j)->getname()<<"同学语文高于90分值得鼓励,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;}if((headptr+j)->getmath() > 90){cout<<(headptr+j)->getname()<<"同学数学高于90分值得鼓励,该同学数学分数为:"<<(headptr+j)->getmath()<<endl;}if((headptr+j)->getenglish() > 90){cout<<(headptr+j)->getname()<<"同学英语高于90分指得鼓励,该同学英语分数为:"<<(headptr+j)->getenglish()<<endl;}if((headptr+j)->getphysics() > 90){cout<<(headptr+j)->getname()<<"同学物理高于90分值得鼓励,该同学物理分数为:"<<(headptr+j)->getphysics()<<endl;}if((headptr+j)->getchemistry() > 90){cout<<(headptr+j)->getname()<<"同学化学高于90分值得鼓励,该同学化学分数为:"<<(headptr+j)->getchemistry()<<endl;}}
}void dispaly_60(Sscience *headptr,int count)
{for(int j=0;j<count;j++){if((headptr+j)->getchinese() < 60){cout<<(headptr+j)->getname()<<"同学语文低于60分需要加油,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;}if((headptr+j)->getmath() < 60){cout<<(headptr+j)->getname()<<"同学数学低于60分需要加油,该同学数学分数为:"<<(headptr+j)->getmath()<<endl;}if((headptr+j)->getenglish() < 60){cout<<(headptr+j)->getname()<<"同学英语低于60分需要加油,该同学英语分数为:"<<(headptr+j)->getenglish()<<endl;}if((headptr+j)->getphysics() < 60){cout<<(headptr+j)->getname()<<"同学物理低于60分需要加油,该同学物理分数为:"<<(headptr+j)->getphysics()<<endl;}if((headptr+j)->getchemistry() < 60){cout<<(headptr+j)->getname()<<"同学化学低于60分需要加油,该同学化学分数为:"<<(headptr+j)->getchemistry()<<endl;}}
}void displayall(Sscience *headptr,int count)
{for(int i=0;i<count;i++){(headptr+i)->display();}
}int count=0,capacity=5;//全局变量int main()
{time_t Time;time(&Time);int control;Sscience *headptr = new Sscience[capacity];do{cout << "欢迎进入武汉轻工大学数计学院成绩管理系统"<<endl;cout <<  "当前系统时间是:" << ctime(&Time) <<endl;cout<<"|========================学生成绩管理系统===========================|"<<endl<<"|                        *1.学生信息录入	                    |"<<endl<<"|                        *2.学生信息修改                            |"<<endl<<"|                        *3.删除学生信息                            |"<<endl<<"|                        *4.查找学生信息                            |"<<endl<<"|                        *5.查看总分排名                            |"<<endl<<"|                        *6.计算各科平均分并查看低于平均分学生信息  |"<<endl<<"|                        *7.显示每门成绩在90分以上学生的信息	    |"<<endl<<"|                        *8.显示每门成绩在60分以下学生的信息        |"<<endl<<"|                        *9.显示所有学生信息                        |"<<endl<<"|                        *0.退出                                    |"<<endl<<endl;cout<<"请输入你的指令:";cin>>control;switch(control){case 1: system("cls");cout<<"(信息录入函数)"<<endl;informationentry(headptr,count,capacity);break;case 2: system("cls");cout<<"(信息修改函数)"<<endl;informationmodify(headptr,count);break;case 3: system("cls");cout<<"(信息删除函数)"<<endl;informationdelete(headptr,count);break;case 4: system("cls");cout<<"(信息查找函数)"<<endl;informationfind(headptr,count);break;case 5: system("cls");cout<<"(总分排序函数)"<<endl;display_Total_score_ranking(headptr,count);break;case 6: system("cls");cout<<"(各门功课平均分函数)"<<endl;display_Average_score(headptr,count);break;case 7: system("cls");cout<<"(90分以上函数)"<<endl;dispaly_90(headptr,count);break;case 8: system("cls");cout<<"(显示不及格函数)"<<endl;dispaly_60(headptr,count);break;case 9: system("cls");cout<<"(显示所有信息)"<<endl;displayall(headptr,count);cout<<"已将所有信息显示完毕"<<endl;break;case 0: cout<<"                         感谢使用! 3秒后程序结束"<<endl;Sleep(3000);break;default:cout<<"                         输入错误!请重新输入:";Sleep(1000);system("cls");}}while(control!=0);delete[] headptr;return 0;
}

http://www.ngui.cc/el/3419308.html

相关文章

python网络爬虫与信息提取实例

目录1.百度/360搜索关键词提交2.网络图片的爬取和存储3.中国大学排名定向爬虫1.百度/360搜索关键词提交 搜索引擎关键词提交接口 百度的关键词接口&#xff1a; http://www.baidu.com/s?wdkeyword 360的关键词接口&#xff1a; http://www.so.com/s?qkeyword 功能描述&#…

数学建模之预测模型简要分析

以下对数学建模常用的几种预测方法进行归纳总结&#xff1a; 1.灰色预测模型&#xff1a; 1.1 GM&#xff08;1,1&#xff09;预测模型实际操作 1&#xff09;数据检验与处理&#xff0c;判断数据列的级比是否都落在可容覆盖内&#xff0c;从而判断已知该数据列是否可进行灰色预…

MATLAB学习与使用:向量及其运算

1.MATLAB向量及其运算 (1)直接输入向量&#xff1a;a [1,2,3,4],b [2 1 4 5],c [1;2;3;4] a为行向量 b为行向量 c为列向量 (2)利用冒号表达式生成向量&#xff1a;a 1:2:12,b 1:5 默认间距为1 (3)线性等分向量的生成&#xff1a; y linspace(x1,x2)%默认生成100维的行向…

MATLAB学习与使用:使用矩阵绘制三维图形

MATLAB绘制三维图形 1.基本的绘图命令 1&#xff09;plot3函数 plot3(x,y,z)%x,y,z为向量或者矩阵 注意x,y,z全为向量时向量长度必须相同 plot3(x,y,z,b.,MarkerSize,0.5) % MarkerSize 表示点的大小&#xff0c;b.表示绿色的点。 eg.绘制三维螺旋线&#xff08;向量为参数&…

opencv学习与使用:图像边缘算法

图像边缘算法 numpy使用指南[菜鸟教程]http://www.runoob.com/numpy/numpy-tutorial.html opencv使用指南[官方文档]http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html 完整代码如下&#xff08;python3&#xff09; #-*- coding:utf-8 -*- #code…

opencv学习与使用:图像匹配

1.差分矩阵求和 numpy使用指南[菜鸟教程]http://www.runoob.com/numpy/numpy-tutorial.html opencv使用指南[官方文档]http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html 实现差分矩阵的算法 差分矩阵求和算法的核心在于差分矩阵&#xff0c;实质为…

LeetCode 初级算法数组篇

从排序数组中删除重复项 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1…

C语言中fscanf函数读取double型浮点数的问题

在C语言里面, 将一个浮点数输出到文件中, 可以使用符号%f, 如 double a 0.0;fprintf(fp, "a %f", a);而如果要从文件中读取一个double类型的浮点数, 就不能用%f, 而要用%lf才可以. 如 double a;float b;fscanf(fp, "%f", &a); // 这里得到的a的数…

操作系统课程设计-页式虚拟存储管理页面置换算法-c++描述

1&#xff0e;目的和要求 存储管理的主要功能之一是合理的分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是&#xff1a;通过编写和调试请求页式存储管理中页面置换算法的模拟程序以加深对存储管理方案的理解&#xff0c;了解虚拟存储技术的特点&#xff0…

java Swing GUI程序中文显示乱码解决方法

Run As Run Configuration&#xff0c;在VM options中增加下面这句&#xff1a; -Dfile.encodinggbk