// Clase GradeBook: registro de notas de estudiantes. Notas de 0 a 20.
// Es el módulo de c/grade_book.h, como clase. Mismas reglas, sin memoria a mano.
#ifndef GRADE_BOOK_H
#define GRADE_BOOK_H

#include <cstddef>
#include <string>

class GradeBook {
public:
    // Agrega un estudiante al final. Devuelve true si pudo, y false si el nombre está
    // vacío o repetido, o si la nota no es válida. En ese caso, no cambia nada.
    bool add(const std::string& name, int grade);

    // Cambia la nota. Devuelve true si pudo, y false si no está o si la nota no es válida.
    bool set_grade(const std::string& name, int grade);

    // Devuelve la nota de un estudiante, o -1 si no está.
    int grade_of(const std::string& name) const;

    // Borra un estudiante, sin cambiar el orden de los demás. Devuelve true si estaba.
    bool remove(const std::string& name);

    // Devuelve cuántos estudiantes hay.
    std::size_t size() const;

    // Devuelve el nombre en la posición index. Exige: index < size().
    // La referencia es del registro: deja de servir si se modifica el registro.
    const std::string& name_at(std::size_t index) const;

    // Paso 5: declaren aquí average y best.

private:
    // Paso 3: reemplacen este campo por los datos del registro.
    std::string placeholder_;
};

#endif
