C語言課程設計——班級成績管理系統

C語言課程設計——班級成績管理系統

題目:

對一個有N個學生的班級,每個學生有M門課程。該系統實現對班級成績的錄入、顯示、修改、排序、保存等操作的管理。功能要求:
(1)本系統採用一個結構體數組,每個數據的結構應當包括:學號、姓名、M門課程名稱。
(2)本系統顯示這樣的菜單:
請選擇系統功能項:
a、成績錄入
b、成績顯示
c、成績保存
d、成績排序
e、成績修改(要求先輸入密碼)
f、成績統計
1)顯示每門課程成績最高的學生的基本信息
2)顯示每門課程的平均成績
3)顯示超過某門課程平均成績的學生人數
g、退出系統
1)執行一個具體的功能之後,程序將重新顯示菜單。
2)將學生成績保存到文件中。

代碼:

#include<vector>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章