暑假作业:学生成绩管理程序

今天先不学java了,先把学生成绩管理系统的题目搞定了。
实现代码如下:

include

include

include

using namespace std;

class student
{

public:
student() {}
student(string number, string name, int grade_Chinese, int grade_Math, int grade_English) :m_number(number), m_name(name), m_grade_Chinese(grade_Chinese), m_grade_Math(grade_Math), m_grade_English(grade_English) {}

void Setm_number(string number)
{
	this->m_number = number;
}

void Setm_name(string name)
{
	this->m_name = name;
}

void Setm_grade_Chinese(int grade_Chinese)
{
	this->m_grade_Chinese = grade_Chinese;
}

void Setm_grade_Math(int grade_Math)
{
	this->m_grade_Math = grade_Math;
}

void Setm_grade_English(int grade_English)
{
	this->m_grade_English = grade_English;
}

string Getm_number()
{
	return this->m_number;
}

string Getm_name()
{
	return this->m_name;
}

int Getm_grade_Chinese()
{
	return this->m_grade_Chinese;
}

int Getm_grade_Math()
{
	return this->m_grade_Math;
}

int Getm_grade_English()
{
	return this->m_grade_English;
}

student& self()
{
	return *this;
}

void printstudent()
{
	cout << "学号:" << this->Getm_number()
		<< " 姓名:" << this->Getm_name()
		<< " 语文:" << this->Getm_grade_Chinese()
		<< " 数学:" << this->Getm_grade_Math()
		<< " 英语:" << this->Getm_grade_English() << endl;
}

int getTotalScore() {
	return m_grade_Chinese + m_grade_Math + m_grade_English;
}

private:

string m_number;
string m_name;
int m_grade_Chinese = 0;
int m_grade_Math = 0;
int m_grade_English = 0;

};

bool compareByTotalScore(student& a, student& b) {
return a.getTotalScore() > b.getTotalScore();
}

int main()
{
student* s = new student[100];
int count = 0;
int m;

while (1)
{
	cout << "学生成绩管理系统" << endl;
	cout << "	1.创建" << endl;
	cout << "	2.添加" << endl;
	cout << "	3.汇总" << endl;
	cout << "	4.排序" << endl;
	cout << "	5.查询" << endl;
	cout << "	6.显示" << endl;
	cout << "	7.文件导入" << endl;
	cout << "	8.文件导出" << endl;
	cout << "	9.退出" << endl;
	cout << "请选择操作: ";

	// 验证输入是否为数字
	while (!(cin >> m)){
		cin.clear();
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		cout << "输入无效,请输入数字: ";
	}

	switch (m)
	{
	case 1:
	{
		cout << "系统已初始化" << endl;
		delete[] s;
		s = new student[100];
		count = 0;
		break;
	}
	case 2:
	{
		if (count >= 99) {
			cout << "学生数量已达到上限" << endl;
			break;
		}

		cout << "请依次输入学号、姓名、语文成绩、数学成绩、英语成绩" << endl;
		string number;
		string name;
		int grade_Chinese;
		int grade_Math;
		int grade_English;

		cin >> number;
		cin >> name;

		// 验证成绩输入
		while (!(cin >> grade_Chinese) || grade_Chinese < 0 || grade_Chinese > 100) {
			cin.clear();
			cin.ignore(numeric_limits<streamsize>::max(), '\n');
			cout << "语文成绩无效,请输入0-100之间的数字: ";
		}

		while (!(cin >> grade_Math) || grade_Math < 0 || grade_Math > 100) {
			cin.clear();
			cin.ignore(numeric_limits<streamsize>::max(), '\n');
			cout << "数学成绩无效,请输入0-100之间的数字: ";
		}

		while (!(cin >> grade_English) || grade_English < 0 || grade_English > 100) {
			cin.clear();
			cin.ignore(numeric_limits<streamsize>::max(), '\n');
			cout << "英语成绩无效,请输入0-100之间的数字: ";
		}

		s[count] = student(number, name, grade_Chinese, grade_Math, grade_English);
		cout << "学生添加成功" << endl;
		count++;
		break;
	}

	case 3:
	{
		cout << "共有 " << count << " 名学生" << endl;
		for (int i = 0; i < count; i++)
		{
			s[i].printstudent();
		}
		break;
	}

	case 4:
	{
		if (count == 0) {
			cout << "没有学生数据" << endl;
			break;
		}

		sort(s, s + count, compareByTotalScore);
		cout << "学生已按总分从高到低排序" << endl;
		break;
	}

	case 5:
	{
		cout << "请输入要查询的学生学号: ";
		string queryNumber;
		cin >> queryNumber;

		bool found = false;
		for (int i = 0; i < count; i++) {
			if (s[i].Getm_number() == queryNumber) {
				s[i].printstudent();
				found = true;
				break;
			}
		}

		if (!found) {
			cout << "未找到该学生" << endl;
		}

		break;
	}

	case 6:
	{
		cout << "所有学生信息:" << endl;
		for (int i = 0; i < count; i++) {
			cout << "学生 #" << (i + 1) << endl;
			s[i].printstudent();
			cout << "总分: " << s[i].getTotalScore() << endl;
			cout << "------------------------" << endl;
		}
		break;
	}

	case 7:
	{
		cout << "文件导入功能尚未实现" << endl;
		break;
	}

	case 8:
	{
		cout << "文件导出功能尚未实现" << endl;
		break;
	}

	case 9:
	{
		cout << "欢迎下次使用" << endl;
		delete[] s;
		system("pause");
		return 0;
	}

	default:
		cout << "请输入1-9之间的数字" << endl;
	}

	cout << endl;
	system("pause");
	system("cls");
}

}

这一串代码没有实现文件的操作,同时利用了一些以前不知道的函数
这个程序以后可以多看看,有很多思路可以多借鉴

不熟悉的操作:

cin.clear();
cin.ignore(numeric_limits::max(), '\n');

clear()函数用于清空容器或字符串中的内容。
应用场景:
1.清空std::string:
std::string str="Hello World";
str.clear(); //清空字符串,str变为空字符串

2.清空标准容器:
std::vector numbers = {1, 2, 3, 4, 5};
number.clear(); //清空所有元素,size变为0

目前常用的场景就是这两个,另外还有和ignore函数的连用:

清除错误标志并忽略缓冲区内容
当输入流遇到错误时,会设置错误标志并阻塞后续输入,此时需要:
clear():清除错误标志,恢复流的正常状态
ignore():忽略缓冲区中可能残留的无效字符

示例:处理非整数输入
int num;
while(true)
{
if(std::cin>>num) //输入成功
{
break;
}
else //输入失败
{
std::cin.clear(); //清除错误标志
std::cin.ignore(std::numeric_limitsstd::streamsize);
}
}

这个就是上面的陌生部分使用的代码。
ok!!搞定了!!
这是经过豆包改正过的代码部分,自己写的代码漏洞太多:(
算是搞定了
明天继续学习java。

posted @ 2025-07-12 21:56  暗神酱  阅读(4)  评论(0)    收藏  举报