// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: Estudiante.cs
//
// Original en: http://goo.gl/icjgjg
//
// Propósito: Implementar la clase Estudiante del modelo
// del mundo.
//
============================================================*/
using System;
namespace ElEstudiante.Modelo
{
/// <summary>
/// Representa la entidad Estudiante.
/// </summary>
public class Estudiante
{
#region Campos
/// <summary>
/// Apellido del estudiante.
/// </summary>
private String apellido;
/// <summary>
/// Código académico del estudiante.
/// </summary>
private int codigo;
/// <summary>
/// Conjunto de cursos en los que está matriculado el estudiante.
/// </summary>
private Curso[] cursos;
/// <summary>
/// Nombre del estudiante.
/// </summary>
private String nombre;
#endregion
#region Propiedades
/// <summary>
/// Establece y obtiene el apellido del estudiante.
/// </summary>
public String Apellido
{
get
{
return apellido;
}
set
{
apellido = value;
}
}
/// <summary>
/// Establece y obtiene el código del estudiante.
/// </summary>
public int Codigo
{
get
{
return codigo;
}
set
{
codigo = value;
}
}
/// <summary>
/// Establece y obtiene el nombre del estudiante.
/// </summary>
public String Nombre
{
get
{
return nombre;
}
set
{
nombre = value;
}
}
#endregion
#region Constructor
/// <summary>
/// Crea una instancia de estudiante con datos básicos.
/// </summary>
/// <param name="nombre">Nombre del estudiante.</param>
/// <param name="apellido">Apellido del estudiante.</param>
/// <param name="codigo">Código académico del estudiante.</param>
public Estudiante(string nombre, string apellido, int codigo)
{
this.nombre = nombre;
this.apellido = apellido;
this.codigo = codigo;
cursos = new Curso[5];
}
#endregion
#region Métodos
/// <summary>
/// Asigna un curso al estudiante.
/// </summary>
/// <param name="curso">Curso a asignar al estudiante.</param>
/// <returns>true si el curso fue asignado; en caso contrario, false.</returns>
public bool AsignarCurso(Curso curso)
{
for (int c = 0; c < cursos.Length; ++c)
{
if (cursos[c] == null)
{
cursos[c] = curso;
return true;
}
}
return false;
}
/// <summary>
/// Busca un curso a través de su código.
/// </summary>
/// <param name="codigoCurso">Código del curso.</param>
/// <returns>Instancia del curso encontrado.</returns>
public Curso BuscarCurso(string codigoCurso)
{
for (int c = 0; c < cursos.Length; ++c)
{
if (cursos[c] != null && cursos[c].CodigoCurso.Equals(codigoCurso))
{
return cursos[c];
}
}
return null;
}
/// <summary>
/// Obtiene el curso a través de su ID.
/// </summary>
/// <param name="id">ID del curso.</param>
/// <returns>Instancia del curso.</returns>
public Curso BuscarCurso(int id)
{
return cursos[id - 1];
}
/// <summary>
/// Calcula el promedio de notas del estudiante.
/// </summary>
/// <returns>Promedio de notas de los cursos del estudiante.</returns>
public double CalcularPromedioEstudiante()
{
double acumuladorCursos = 0.0;
int totalCreditos = 0;
for (int c = 0; c < cursos.Length; ++c)
{
if (cursos[c] != null)
{
if (cursos[c].Nota != 0.0)
{
totalCreditos += cursos[c].Creditos;
acumuladorCursos += cursos[c].Nota * cursos[c].Creditos;
}
}
}
if (totalCreditos != 0)
{
return (acumuladorCursos / totalCreditos);
}
else
{
return acumuladorCursos;
}
}
/// <summary>
/// Determina si el estudiante se haya en prueba académica.
/// </summary>
/// <returns>true si el estudiante está en prueba académica; false en caso contrario.</returns>
public bool EnPrueba()
{
if (CalcularPromedioEstudiante() < 3.25)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// Determina si un determinado curso se haya en el pénsum.
/// </summary>
/// <param name="codigoCurso">Código del curso a buscar.</param>
/// <returns>true si el curso se haya en el pénsum; false en caso contrario.</returns>
public bool PensumIncluyeCurso(string codigoCurso)
{
if (BuscarCurso(codigoCurso) != null)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// Determina si el estudiante tiene cupo diponible para matricular más cursos.
/// </summary>
/// <returns>true si el estudiante puede matricular otro curso, false en caso contrario.</returns>
public bool TieneCursosCompletos()
{
for (int i = 0; i < cursos.Length; ++i)
{
if (cursos[i] == null)
{
return false;
}
}
return true;
}
#endregion
#region Puntos de extensión
/// <summary>
/// Punto de extensión no. 1.
/// </summary>
/// <returns>Respuesta del mensaje.</returns>
public String PuntoExtension1()
{
return "Respuesta 1";
}
/// <summary>
/// Punto de extensión no. 2.
/// </summary>
/// <returns>Respuesta del mensaje.</returns>
public String PuntoExtension2()
{
return "Respuesta 2";
}
#endregion
}
}