如何编写一个学生考试信息管理程序

编写一个函数inGrade(),其功能是输入学生数据;编写函数aveGrade(),其功能是计算学生的平均成绩;编写函数maxGrade(),其功能是查找平均成绩最高的学生的数据;编写函数out Grade(),其功能是输出学生的成绩数据。现有15名学生的数据信息,每个学生的数据信息包括学号、姓名、4门课程(programmer、database、network、operat-system)的成绩。
要求:
(1)首先在主函数中调用函数inGrade()从键盘输入15个学生数据;
(2)其次在主函数中调用函数aveGrade()计算15名学生的4门课程的平均成绩。
(3)然后在主函数中调用maxGrade()查找平均成绩最高的学生的数据(包括学号、姓名、4门课的成绩、平均分)。
(4)最后在主函数中调用函数out Grade(),输出该学生的数据信息。
(5)修改程序,将函数maxGrade()的功能改为对所有学生按平均成绩进行排序。并在主函数中调用它,之后输出所有学生的已排序的数据表。
//输出最大平均分信息

#include`<iostream>`
#include`<cstring>`
using namespace std;
const int N=3;
void inGrade(struct Student *p,int n);
void aveGrade(struct Student *p,int n);
int maxGrade(struct Student *p,int n);
void outGrade(struct Student *p,int n);
struct Student
{
	char number[20];
	char name[20];
	float score[4];
	float average;
};
int main() 
{
	struct Student stu[N];
	int i;
	inGrade(stu,N);
	aveGrade(stu,N);
	i=maxGrade(stu,N);
	outGrade(stu,i);
	return 0;
}

void inGrade(struct Student *p,int n)
{
	int j;
	cout<<"请输入学生信息"<<endl; 
	for(j=0;j<N;j++)
	{
		cout<<"学号:"; 
		gets(p->number);
		cout<<"姓名:"; 
		gets(p->name );
		for(int i=0;i<4;i++)
		{
			if(i==0)   cout<<"该学生programmer成绩:";
			if(i==1)   cout<<"该学生database成绩:";
			if(i==2)   cout<<"该学生network成绩:" ;
			if(i==3)   cout<<"该学生operat-system成绩:";
			cin>>(p->score[i]);
			getchar();
		}
		p++;
	}
}

void aveGrade(struct Student *p,int n)
{
	int i,j;
	float sum;
	for(j=0;j<N;j++)
	{
		sum=0;  //每次初始化sum 
		for(i=0;i<4;i++)
		{
			sum+=(p->score[i]);  //求所有学生该门课程的成绩总和 
		}
		p->average=sum/4;   //计算该名学生成绩的平均分  
		p++; 
	}
}

int maxGrade(struct Student *p,int n)
{
	float max;
	max=p->average ;
	p++;
	int k=0;
	for(int i=1;i<N;i++)
	{
		if((p->average )>max)
		{
			max=p->average ;
			k=i;   //标记最高平均分学生 
		}
	}
	return k;  //返回标记值 
}

void outGrade(struct Student *p,int n)
{
	cout<<"平均分最高的学生学号为:"<<(p+n)->number<<endl;
	cout<<"姓名:"<<(p+n)->name<<endl;
	for(int i=0;i<4;i++)
	{
		if(i==0)   cout<<"该学生programmer成绩:"<<(p+n) ->score[i]<<endl;
		if(i==1)   cout<<"database成绩:"<<(p+n) ->score[i]<<endl;
		if(i==2)   cout<<"network成绩:" <<(p+n) ->score[i]<<endl;
		if(i==3)   cout<<"operat-system成绩:"<<(p+n) ->score[i]<<endl;
	}
	cout<<"平均分为:"<<(p+n)->average;
}








//进行排序
#include`<iostream>`
#include`<cstring>`
#include`<iomanip>`
using namespace std;
const int N=3;
void inGrade(struct Student *p,int n);
void aveGrade(struct Student *p,int n);
void sortGrade(struct Student *p,int n);
void outGrade(struct Student *p,int n);
struct Student
{
	char number[20];
	char name[20];
	float score[4];
	float average;
};
int main() 
{
	struct Student stu[N];
	inGrade(stu,N);
	aveGrade(stu,N);
	sortGrade(stu,N);
	outGrade(stu,N);
	return 0;
}

void inGrade(struct Student *p,int n)
{
	int j;
	cout<<"请输入学生信息"<<endl; 
	for(j=0;j<N;j++)
	{
		cout<<"学号:"; 
		gets(p->number);
		cout<<"姓名:"; 
		gets(p->name );
		for(int i=0;i<4;i++)
		{
			if(i==0)   cout<<"该学生programmer成绩:";
			if(i==1)   cout<<"该学生database成绩:";
			if(i==2)   cout<<"该学生network成绩:" ;
			if(i==3)   cout<<"该学生operat-system成绩:";
			cin>>(p->score[i]);
			getchar();
		}
		p++;
	}
}

void aveGrade(struct Student *p,int n)  //求每位学生平均成绩 
{
	int i,j;
	float sum;
	for(j=0;j<N;j++)
	{
		sum=0;  //每次初始化sum 
		for(i=0;i<4;i++)
		{
			sum+=(p->score[i]);  //求所有学生该门课程的成绩总和 
		}
		p->average=sum/4;   //计算该名学生成绩的平均分  
		p++; 
	}
}

void sortGrade(struct Student *p,int n)
{
	struct Student temp;
	for(int j=0;j<N-1;j++)   //进行N-1次排序
	{
		for(int i=0;i<N-j-1;i++)    
		{
			if(((p+i)->average )>((p+i+1)->average))  //若前一个学生平均成绩超过后一个学生 
			{
				temp=*(p+i);  //交换两者位置 
				*(p+i)=*(p+i+1);
				*(p+i+1)=temp;
			}
		} 
	} 
}

void outGrade(struct Student *p,int n)
{
	cout<<"排序后如下:"<<endl;
	cout<<"--------------------------------------------------------------------------------------------------"<<endl;
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(15)<<"programmer"<<setw(12)<<"database"<<setw(12)<<"network"<<setw(19)<<"operat-system"<<setw(12)<<"平均成绩"<<endl; 
	for(int i=0;i<N;i++)
	{
		cout<<setiosflags(ios::right)<<setw(12)<<(p+i)->number<<setw(8)<<(p+i)->name;
		cout<<setiosflags(ios::fixed)<<setprecision(2);
		for(int j=0;j<3;j++)
		{
			cout<<setw(12)<<(p+i)->score[j];
		}
		cout<<setiosflags(ios::fixed)<<setprecision(2)<<setw(8)<<(p+i)->average<<endl;
	}
	cout<<"--------------------------------------------------------------------------------------------------"<<endl;
}
发布了7 篇原创文章 · 获赞 0 · 访问量 224

猜你喜欢

转载自blog.csdn.net/TpeterH/article/details/103643003
今日推荐