c++ 声明学生类,按总分排序,查询最高分的姓名和成绩

仅声明student类(包含学生学号,姓名,3门成绩信息),对若干名学生进行信息输入、输出、按总分排序、查询每门课程最高分的学生姓名和成绩的操作。
要求:建立student类的对象数组。
要求:排序和查询操作为应用函数,是非成员函数!

以下是我写了“输入,输出”的代码,接着的“按总分排序,查询每门课程最高分的学生姓名和成绩”的代码就没思路了。

//student.h#pragma once
#include
#include
using namespace std;
class student
{
private:
    int number;
    string name;
    int mark1, mark2,mark3;
public:
    student();
    void get();
    void show();
    friend void paixu(student&);
};
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;
}
void paixu(student& s)
{
    //这个部分是打算写“按总分排序”的,但是我不知道该怎么写
}
//main.cpp
#include"student.h"
int main()
{
    student s;
    s.get();
    s.show();
        //这部分也不知道该怎么按照题目要求输入“若干名”学生。
}

我想知道该怎么“按总分排序,查询每门课程最高分的学生姓名和成绩”以及“输入若干名学生的信息”,非常感谢!谢谢!

基于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;
}