// estudios.cpp - Definición de los métodos de la clase CEstudios
#include <iostream>
#include "estudios.h"

CEstudios::CEstudios(int id, string nom): ID(id), nombre(nom)
{
  asignarID(id);
  alumnos.reserve(1000); // reservar espacio
  // Cargar lista de asignaturas
  for (int id = 1; id < 100; id++)
  {
    // Simulación de la carga de la lista de asignaturas
    // Los códigos 71 a 99 inclusives son optativas
    char nombre_asig[30];
    sprintf(nombre_asig, "%s%.2d", "asignatura", id);
    asignatura[id] = string(nombre_asig);
  }
}

void CEstudios::asignarID(int id)
{
  if (id < 1)
  {
    cerr << "error: Id no válido\n";
    ID = 1;
  }
  ID = id;
}

int CEstudios::obtenerID()
{
  return ID;
}

void CEstudios::asignarNombre(string nom)
{
  nombre = nom;
}

string CEstudios::obtenerNombre()
{
  return nombre;
}

void CEstudios::anyadirAlumno(CAlumno& al)
{
  alumnos.push_back(al);
}

CAlumno& CEstudios::alumno(int i)
{
  if (i < 0 || i > alumnos.size())
    throw "índice fuera de límites\n";
  return alumnos[i];
}

string CEstudios::nombreAsignatura(int id)
{
  return asignatura[id];
  // si id no existe se devuelve una cadena vacía
}

size_t CEstudios::numeroAlumnos()
{
  return alumnos.size();
}

CEstudios& CEstudios::operator<<(CAlumno& al)
{
  alumnos.push_back(al);
  return *this;
}

bool CEstudios::operator!()
{
  return alumnos.size() == 0;
}

