C语言课程设计——班级成绩管理系统

C语言课程设计——班级成绩管理系统

题目:

对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能要求:
(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
1)显示每门课程成绩最高的学生的基本信息
2)显示每门课程的平均成绩
3)显示超过某门课程平均成绩的学生人数
g、退出系统
1)执行一个具体的功能之后,程序将重新显示菜单。
2)将学生成绩保存到文件中。

代码:

#include
#include
#include
#include
#include
#include
#include
using namespace std;


typedef struct Student{
     
	int ID;								/*学生学号*/
	char name[15];						/*学生姓名*/ 
	vector<double> subject;				/*因未知课程数量,所以课程数量采用动态数组vector*/
	double sum;							/*学生各科成绩总分*/
}Student;


struct Rule{
     							/*排序规则*/ 
	bool operator()(const Student &stu1,const Student &stu2)const
	{
     
		if(stu1.sum!=stu2.sum)			/*总分不相等按照总分从大到小排序*/ 
			return stu1.sum>stu2.sum;
		return stu1.ID>stu2.ID;			/*总分相等按照学号从大到小排序*/ 
	}
};


int N,M,i,j;							/*N为学生人数,M为课程数量*/
double score;							/*临时变量*/
Student temp;							/*临时变量*/
vector<Student> Stu;					/*本课设采用动态数组vector,防止浪费内存空间*/
bool condition=true;					/*系统运行状态*/
char choice;							/*用于输入来选择功能*/


/*---------------------------------------------a.成绩录入---------------------------------------------*/
void InsertScore(){
     
	cout<<"请输入班级学生数量和课程数量:";
	cin>>N>>M;
	cout<<endl<<"现在请依次输入每个学生的学号、姓名和"<<M<<"门课程的成绩:"<<endl<<endl;
	for(i=0;i<N;++i){
     
		cin>>temp.ID>>temp.name;
		for(j=0;j<M;++j){
     
			cin>>score;
			temp.subject.push_back(score);
		}
		Stu.push_back(temp);
		/*------------------------------这一行很重要------------------------------*/
		/*------------------------------这一行很重要------------------------------*/
		vector<double>().swap(temp.subject);
		/*------------------------------这一行很重要------------------------------*/
		/*------------------------------这一行很重要------------------------------*/	
	}
	cout<<endl<<"成绩录入成功!"<<endl; 
}


/*---------------------------------------------b.成绩显示---------------------------------------------*/
void ShowScore(){
     
	cout<<"学号\t\t"<<"姓名\t\t";
	for(i=0;i<M;++i)
		cout<<"课程"<<i+1<<"\t";
	cout<<endl;
	for(i=0;i<N;++i){
     
		cout<<Stu[i].ID<<"\t"<<Stu[i].name<<"\t";
		for(int j=0;j<M;++j)
			cout<<Stu[i].subject[j]<<"\t";
		cout<<endl;
	}
}


/*---------------------------------------------c.成绩保存---------------------------------------------*/
void SaveScore(){
     
	   FILE *fp;
	   if((fp=fopen("stu.dat","wb"))==NULL){
     
			cout<<"文件打开错误";
			return; 
	   }
	   for(i=0;i<N;++i){
     
	   		if(fwrite(&Stu[i],sizeof(Student),1,fp)!=1)
	   			cout<<"写入错误!"<<endl; 
	   }
	   fclose(fp);
	   cout<<"成绩保存成功!"<<endl; 
}


/*---------------------------------------------d.成绩排序---------------------------------------------*/
void SortScore(){
     
	for(i=0;i<N;++i){
     							/*计算每个人的总成绩*/
		Stu[i].sum=0;
		for(j=0;j<M;++j)
			Stu[i].sum+=Stu[i].subject[j];
	}
	sort(Stu.begin(),Stu.end(),Rule()); 			/*使用排序函数排序*/
	cout<<"成绩排序成功!"<<endl;
}


/*---------------------------------------------e.成绩修改---------------------------------------------*/
void ModifyScore(){
     
	string password;
	int id,no;
	cout<<"请输入密码开启成绩修改权限:";
	cin>>password;
	
	/*------------------------------密码输入错误------------------------------*/
	while(password!="GUXUNMEI"){
     
		cout<<endl<<"密码错误,请重新输入,若输入Q则中止进入成绩修改功能:";
		cin>>password;
		if(password=="Q")
			return;
	}
	
	/*------------------------------密码输入正确------------------------------*/
	cout<<endl<<"成功进入成绩修改功能,若学号输入-1则退出成绩修改功能!"<<endl; 
	while(1){
     
		cout<<endl<<"请输入需要修改成绩的学生的学号,第几门课程以及修改后的分数:";
		cin>>id;
		if(id==-1){
     
			cout<<endl<<"已成功退出成绩修改功能!"<<endl;
			return; 
		}
		cin>>no>>score;
		if(no>M){
     								/*课程不存在*/ 
			cout<<endl<<"不存在此课程!"<<endl;
			continue;
		}
		for(i=0;i<N;++i){
     
			if(Stu[i].ID==id){
     
				Stu[i].subject[no-1]=score;
				break;
			}
		}
		if(i==N){
     									/*学生不存在*/ 
			cout<<endl<<"不存在此学生!"<<endl;
			continue; 
		}
		cout<<endl<<"修改成功!"<<endl; 
	}
}


/*---------------------------------------------f.成绩统计---------------------------------------------*/
void CountScore(){
     
	int maxn[M],count[M];
	double k,average[M]; 
	memset(maxn,0,sizeof(maxn));
	
	/*--------------------显示每门课程成绩最高的学生的基本信息--------------------*/ 
	for(i=0;i<N;++i){
     
		for(j=0;j<M;++j){
     
			if(Stu[i].subject[j]>Stu[i].subject[maxn[j]])
				maxn[j]=i;
		}
	}
	for(i=0;i<M;++i){
     
		cout<<"课程"<<i+1<<"成绩最高分学生信息:"<<Stu[i].ID<<"\t"<<Stu[i].name<<"\t";
		for(j=0;j<M;++j)
			cout<<Stu[i].subject[j]<<"\t";
		cout<<endl;
	}
	cout<<endl;
	
	/*---------------------------显示每门课程的平均成绩---------------------------*/
	for(j=0;j<M;++j){
     
		k=0;
		for(i=0;i<N;++i)
			k+=Stu[i].subject[j];
		average[j]=k/N;
		cout<<"课程"<<j+1<<"的平均成绩为:"<<average[j]<<endl; 
	}
	cout<<endl;
	
	/*---------------------显示超过某门课程平均成绩的学生人数---------------------*/
	for(j=0;j<M;++j){
     
		count[j]=0;
		for(i=0;i<N;++i){
     
			if(Stu[i].subject[j]>average[j])
				++count[j];
		}
		cout<<"超过课程"<<j+1<<"平均成绩的学生人数为:"<<count[j]<<endl; 
	}
}


/*---------------------------------------------g.退出系统---------------------------------------------*/
void ExitSystem(){
     
	condition=false;		/*全局变量condition控制程序运行*/
	cout<<"已退出班级成绩管理系统"<<endl; 
}

 
int main()
{
     
	while(condition){
     
		/*-----------------------------------系统菜单-----------------------------------*/
		cout<<"                                                          "<<endl;
		cout<<"-------------------------系统菜单-------------------------"<<endl;
		cout<<"                                                          "<<endl;
		cout<<"          请选择系统功能项:                              "<<endl;
		cout<<"                           a.成绩录入                     "<<endl;
		cout<<"                           b.成绩显示                     "<<endl;
		cout<<"                           c.成绩保存                     "<<endl;
		cout<<"                           d.成绩排序                     "<<endl;
		cout<<"                           e.成绩修改                     "<<endl;
		cout<<"                           f.成绩统计                     "<<endl;
		cout<<"                           g.退出系统                     "<<endl;
		cout<<"                                                          "<<endl;
		cout<<"----------------------------------------------------------"<<endl;
		cout<<"                                                          "<<endl;
	
		/*-----------------------------------选择系统功能项-----------------------------------*/
		cout<<"请输入选项:";
		cin>>choice;
		cout<<endl;
		switch(choice){
     
			case 'a':InsertScore();	break;
			case 'b':ShowScore();	break;
			case 'c':SaveScore();	break;
			case 'd':SortScore();	break;
			case 'e':ModifyScore();	break;
			case 'f':CountScore();	break;
			case 'g':ExitSystem();	break;
			default:cout<<"不存在此项功能!"<<endl;
		} 
	}
	return 0;
}

你可能感兴趣的:(C语言课程设计——班级成绩管理系统)