C++實現學生成績資訊登記表

heifengli6666發表於2020-10-05

C++實現學生成績資訊登記表

學生成績資訊登記表:
每個學生的資料包括:學號,姓名,和語數英三門的成績
實現效果:
1.從鍵盤輸入3名學生的資料
2.顯示每個學生的三門課的平均分
3.顯示每門課的全班平均分
4.按平均分高低排名,並按名次降序輸出學生的所有資料

//學生成績資訊登記表
//每個學生的資料包括:學號,姓名,和語數英三門的成績
//實現效果:
//1.從鍵盤輸入3名學生的資料
//2.顯示每個學生的三門課的平均分
//3.顯示每門課的全班平均分
//4.按平均分高低排名,並按名次降序輸出學生的所有資料
#include <iostream>
using namespace std;
#define STU 3   //設定學生的人數
 
//定義學生結構體
struct Student {
	int num;//學號
	string name;//姓名
	int gradeChinese;//語文成績
	int gradeMath;//數學成績
	int gradeEnglish;//英語成績
};
//得到輸入的學生的資訊
void getStudentInfo(Student a[STU]) {
	for (int i = 0;i < STU;i++)
	{
		cout << "請輸入第" << i + 1 << "個同學的" << "學號:" ;
		cin >> a[i].num;
		cout << "請輸入第" << i + 1 << "個同學的" << "姓名:" ;
		cin >> a[i].name;
		cout << "請輸入第" << i + 1 << "個同學的" << "語文成績:" ;
		cin >> a[i].gradeChinese;
		cout << "請輸入第" << i + 1 << "個同學的" << "數學成績:" ;
		cin >> a[i].gradeMath;
		cout << "請輸入第" << i + 1 << "個同學的" << "英語成績:"  ;
		cin >> a[i].gradeEnglish;
	}
	cout << endl;
}
//計算每個學生的三門平均分
void averageStudent(Student a[STU]) {
	for (int i = 0;i < STU;i++) 
	{
		cout << "第" << i + 1 << "名同學的語數英平均分為:"
			<< (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3
			<< endl;
	}
	cout << endl;
}
 
//計算每門課的全班平均分
void averageClass(Student a[STU]) {
	int a_math = 0;//全班數學總分
	for (int i = 0;i < STU;i++)
	{
		a_math = a_math + a[i].gradeMath;
	}
	int a_chinese = 0;//全班語文總分
	for (int i = 0;i < STU;i++)
	{
		a_chinese = a_chinese + a[i].gradeChinese;
	}
	int a_english = 0;//全班英語總分
	for (int i = 0;i < STU;i++)
	{
		a_english = a_english + a[i].gradeEnglish;
	}
	cout << "全班語文的平均分為:"<<a_chinese/STU<<endl;
	cout << "全班數學的平均分為:"<<a_math/STU<<endl;
	cout << "全班英語的平均分為:"<<a_english/STU<<endl;
	cout << endl;
}
 
//按平均分降序排名
void rankStudentGrade(Student a[STU]) {
	int b[STU];//定義b陣列存放每個人的平均分
	for (int i = 0;i < STU;i++)
	{
		b[i] = (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3;
	}
	//把b陣列資料存一份資料給c陣列
	//b陣列中存放的是未排序的平均分,c陣列中存放的是排序過後的平均分
	int c[STU];
	for (int i = 0;i < STU;i++)
	{
		c[i] = b[i];
	}
	//氣泡排序
	for (int i = 0;i < STU - 1;i++)
	{
		for (int j = 0;j < STU - 1 - i;j++) 
		{
			int temp = 0;
			if (c[j] < c[j + 1]) 
			{
				temp = c[j + 1];
				c[j + 1] = c[j];
				c[j] = temp;
			}
		}
	}
	//測試輸出
	//for (int i = 0;i < STU;i++)
	//{
	//	cout << "按平均分降序排名為:" << c[i] << endl;
	//}
 
	//比較b和c陣列,輸出對應平均分同學的成績
	for (int i = 0;i < STU;i++)
	{
		for (int j = 0;j < STU;j++)
		{
			if (c[i] == b[j])
			{
				cout << "第" << i + 1 << "名是:" << a[j].name << "  平均分為:" << b[j] 
					<<"  學號為:"<<a[j].num
					<< "  語文成績為:" << a[j].gradeChinese
					<< "  數學成績為:" << a[j].gradeMath
					<< "  英語成績為:" << a[j].gradeEnglish
					<< endl;
			}
		}
	}
 
}
 
int main()
{
	Student a[STU];
 
	getStudentInfo(a);//得到輸入的學生的資訊
 
	//cout << "第三位同學的英語成績為:" << a[STU - 1].gradeEnglish << endl;//測試是否接收成功
 
	averageStudent(a);//計算每個學生的三門平均分
 
	averageClass(a);//計算每門課的全班平均分
 
	rankStudentGrade(a);//按平均分降序排名
 
	system("pause");
	return 0;
 
 
}

在這裡插入圖片描述
轉載自:黑鳳梨の部落格

相關文章