基于Monster 组和GPT的调写:
//student.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
class student
{
private:
int number;
string name;
int mark1, mark2, mark3;
public:
student();
void get();
void show();
int total() const; // 计算总分
friend bool compare(const student& s1, const student& s2); // 总分比较
friend void paixu(student* students, int n); // 按总分排序
friend void query_max(const student* students, int n); // 查询每门课程最高分的学生姓名和成绩
};
student::student()
{
number = 0;
name = "无";
mark1 = 0;
mark2 = 0;
mark3 = 0;
}
void student::get()
{
cin >> number >> name >> mark1 >> mark2 >> mark3;
}
void student::show()
{
cout << number << " " << name << " " << mark1 << " " << mark2 << " " << mark3 << endl;
}
int student::total() const
{
return mark1 + mark2 + mark3;
}
bool compare(const student& s1, const student& s2)
{
return s1.total() > s2.total();
}
void paixu(student* students, int n)
{
sort(students, students + n, compare);
}
void query_max(const student* students, int n)
{
int max_mark1 = -1, max_mark2 = -1, max_mark3 = -1; // 分别记录每门课程的最高分
string max_name1, max_name2, max_name3; // 分别记录每门课程最高分的学生姓名
for (int i = 0; i < n; i++) {
if (students[i].mark1 > max_mark1) {
max_mark1 = students[i].mark1;
max_name1 = students[i].name;
}
if (students[i].mark2 > max_mark2) {
max_mark2 = students[i].mark2;
max_name2 = students[i].name;
}
if (students[i].mark3 > max_mark3) {
max_mark3 = students[i].mark3;
max_name3 = students[i].name;
}
}
cout << "语文最高分的学生是:" << max_name1 << ",成绩是:" << max_mark1 << endl;
cout << "数学最高分的学生是:" << max_name2 << ",成绩是:" << max_mark2 << endl;
cout << "英语最高分的学生是:" << max_name3 << ",成绩是:" << max_mark3 << endl;
}
int main()
{
const int n = 3; // 学生数量,这里假设为3
student students[n]; // 学生对象数组
// 输入学生信息
for (int i = 0; i < n; i++) {
cout << "请输入第" << i+1 << "名学生的信息:";
students[i].get();
}
// 输出学生信息
cout << "学生信息如下:" << endl;
for (int i = 0; i < n; i++) {
students[i].show();
}
// 按总分排序
paixu(students, n);
// 输出按总分排序后的学生信息
cout << "按总分排序后的学生信息如下:" << endl;
for (int i = 0; i < n; i++) {
students[i].show();
}
// 查询每门课程最高分的学生姓名和成绩
query_max(students, n);
return 0;
}