C++学生信息管理系统(纯代码)

学生成绩分析系统

设计一个对学生成绩进行分析的程序程序,实现一个班级的学生成绩进行排序、求平均分, 求最高分、最低分以及个分数段的人数进行统计等功能。并实现输出分析结果。

实现的功能:

1.实现学生成绩录入功能

2.实现成绩排序功能,显示排序结果

3.分别计算并显示最高分、最低分和平均分

4.显示各个分数段的人数信息

5.显示所有学生信息

6.清空所有学生信息

7.退出程序

使用说明:

在使用本程序时,根据菜单选项通过键盘输入对应的序号,每次操作完成按下回车返回菜单。在输入多个数据时,将每个数据用空格隔开,并且根据提示信息输入。如果用户输入数据错误,会将该信息设置未默认值,需要清空数据重新输入

废话不多说,直接放代码吧,后序更新代码讲解。(大家复制完代码记得点赞收藏哦,后序有时间会有C/C++和java等语言,数据结构和算法基础等方面的更新)

#include<iostream>
#include<string>
#include<Windows.h>
#include<vector>
#include<algorithm>
#include<map>
#include<utility>
using namespace std;
#define IF_STUDENT_IS_NULL 	if (class1.empty() == true){cout << T << "请先添加学生信息后在进行此操作!" << endl; Sleep(2000); return;}
#define T "\t\t\t\t\t\t"
#define ENT cout << T <<"请按任意键继续……" << endl;  lj = getchar();
//学生成绩分析系统
class Student
{
private:
	string id;//学号
	string name;//姓名
	int age;//年龄
	double score;//成绩
public:
	//构造器

	Student(string id, string name, int age, double score)
	{
		setId(id);
		setName(name);
		setAge(age);
		setScore(score);
	}
	//get
	string getId()
	{
		return id;
	}
	string getName()
	{
		return name;
	}
	int getAge()
	{
		return age;
	}
	double getScore()
	{
		return score;
	}
	//set
	void setId(string id)
	{
		this->id = id;
	}
	void setName(string name)
	{
		this->name = name;
	}
	void setAge(int age)
	{
		if (age >= 0 && age <= 100)
		{
			this->age = age;
		}
	}
	void setScore(double score)
	{
		if (score >= 0 && score <= 100)
		{
			this->score = score;
		}
	}
 };


//存储学生信息 - 班级1
vector<Student> class1;
//存储最高分和最低分
double maxScore = INT_MIN;
double minScore = INT_MAX;
//存储平均分
double averScore = -1;
//各个分数段人数统计
pair<string,int> statistics[5];
char lj;//为了不警告
//菜单
void menu()
{
	cout << T << "\t菜单" << endl;
	cout << T << "1.录入学生信息" << endl;
	cout << T << "2.成绩排序" << endl;
	cout << T << "3.获取最高分信息" << endl;
	cout << T << "4.获取最低分信息" << endl;
	cout << T << "5.获取平均分信息" << endl;
	cout << T << "6.显示各个分数段的人数" << endl;
	cout << T << "7.显示所有学生信息" << endl;
	cout << T << "8.清空学生信息" << endl;
	cout << T << "9.退出程序" << endl;
	cout << T << "请输入你的选择:>";
}

void countTheNumberOfPeople(double score)
{
	//优秀
	if (score >= 90)
	{
		statistics[0].second++;
	}
	//良好
	else if (score >= 80)
	{
		statistics[1].second++;
	}
	//及格
	else if (score >= 60)
	{
		statistics[2].second++;
	}
	//不及格
	else
	{
		statistics[3].second++;
	}
}
//清空缓冲区
void ReCin() 
{
	char ch;
	while ((ch = getchar()) != '\n' && ch != EOF);
}
void studentInit()
{
	int n;
	cout << T << "请输入需要添加几个学生:";
	cin >> n;
	cout << T << "学号\t姓名\t年龄\t成绩" << endl;
	double sumScore = 0;
	for (int i = 0; i < n; i++)
	{
		string id;
		string name;
		int age;
		double score;
		cout << T ;
		cin >> id >> name >> age >> score;
		Student newStudent = { id,name,age,score };
		class1.push_back(newStudent);
		sumScore += score;
		//判定最高分和最低分
		maxScore = max(maxScore, score);
		minScore = min(minScore, score);
		//统计各个分数段的人数
		countTheNumberOfPeople(score);
	}
	//计算平均分
	averScore = sumScore / class1.size();
	//初始化分数段
	statistics[0].first = "100~90";
	statistics[1].first = "89~80";
	statistics[2].first = "79~60";
	statistics[3].first = "59~0";
	//清除缓存区
	ReCin();
}
bool cmp(Student& stu1, Student& stu2)
{
	//根据成绩排序
	return stu1.getScore() > stu2.getScore();
}
void sortStudentScore()
{
	//判定是否添加学生
	IF_STUDENT_IS_NULL;
	//用sort函数实现按成绩排序
	sort(class1.begin(), class1.end(), cmp);
}
void getMaxScore()
{
	//判定是否添加学生
	IF_STUDENT_IS_NULL;
	//输出最高分
	cout << T << "最高分是:" << maxScore << endl;
}
void getMinScore()
{
	//判定是否添加学生
	IF_STUDENT_IS_NULL;
	//输出最高分
	cout << T << "最低分是:" << minScore << endl;
}
void getAverageScore()
{
	//判定是否添加学生
	IF_STUDENT_IS_NULL;
	cout << T << "平均分是:" << averScore << endl;
}
void getTheNumberOfPeopleInEachScoreSegment()
{
	for (int i = 0;i < 4;i++)
	{
		cout << T << "分数段:" << statistics[i].first << "的人数:" << statistics[i].second << "人" << endl;
	}
}
void printStudent()
{
	cout << T << "学号\t姓名\t年龄\t成绩" << endl;
	for (int i = 0; i < class1.size(); i++)
	{
		cout << T << class1[i].getId() << "\t" << class1[i].getName() << "\t" << class1[i].getAge() << "\t" << class1[i].getScore() << endl;
	}
}
void test()
{
	cout << T << "欢迎使用学生成绩分析系统!" << endl;
	Sleep(2000);//延时
	system("cls");//清屏

	char flag;//存储选项
	do
	{
		system("cls");
		//显示菜单
		menu();
		//输入选择
		cin >> flag;
		//清除缓存区
		ReCin();
		switch (flag)
		{
		case '1':
			//录入学生成绩
			studentInit();
			cout << T << "添加成功!" << endl;
			ENT;
			break;
		case '2':
			//学生成绩排序
			sortStudentScore();
			cout << T << "排序成功!" << endl;
			printStudent();
			ENT;
			break;
		case '3':
			//获取最高分信息
			getMaxScore();
			ENT;
			break;
		case '4':
			//获取最低分信息
			getMinScore();
			ENT;
			break;
		case '5':
			//获取平均分信息
			getAverageScore();
			ENT;
			break;
		case '6':
			//获取各个分数段人数统计
			getTheNumberOfPeopleInEachScoreSegment();
			ENT;
			break;
		case '7':
			printStudent();
			ENT;
			break;
		case '8':
			//清空信息
			class1.clear();
			cout << T << "清空成功!" << endl;
			ENT;
			break;
		case '9':
			return;
		default:
			cout << T << "请输入正确的选项!" << endl;
			ENT;
			break;
		}
	} while (true);
	

}
int main()
{
	test();
	return 0;
}

这个代码是前段时间顺手写的,比较简陋,有什么不妥可以交流讨论。

 

 

  • 15
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangyanping987

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值