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

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;
		}
};//Student

class 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;
			}			
		}
};//Sscience

void 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");
	}
	else
		cout<<"删除成功!"<<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
			}//do
			while(control==0);
		}//if
	}//for
	cout<<"操作完成!!"<<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;
}