Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created July 2, 2015 16:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fhernd/c610d35b40693083827f to your computer and use it in GitHub Desktop.
Save Fhernd/c610d35b40693083827f to your computer and use it in GitHub Desktop.
Clase `Avion`.
// ===++===
//
// OrtizOL - xCSw
//
// Proyecto: Cupi2.NET
//
// ===--===
/*============================================================
//
// Clase(s): Avion.
//
// Propósito: Implementar y representar la entidad `Avion`
// del modelo del mundo del problema (dominio).
//
// Original: http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-3/avion/visualizacion-codigo/avion
//
============================================================*/
using System;
namespace ElAvión.Modelo
{
/// <summary>
/// Clase que representa la entidad `Avion` del modelo del mundo del problema.
/// </summary>
public class Avion
{
#region Constantes
/// <summary>
/// Número de sillas económicas disponibles en esta avión.
/// </summary>
public const int SILLAS_ECONOMICAS = 42;
/// <summary>
/// Número de sillas ejecutivas disponibles en esta avión.
/// </summary>
public const int SILLAS_EJECUTIVAS = 8;
#endregion
#region Campos
/// <summary>
/// Conjunto de sillas económicas.
/// </summary>
private Silla[] sillasEconomicas;
/// <summary>
/// Conjunto de sillas ejecutivas.
/// </summary>
private Silla[] sillasEjecutivas;
#endregion
#region Constructores
/// <summary>
/// Crea una nueva instancia de la entidad `Avion`. Inicializad, además, las sillas económicas y ejecutivas.
/// </summary>
public Avion()
{
// Crea el arreglo de objetos Silla para sillas económicas:
sillasEconomicas = new Silla[SILLAS_ECONOMICAS];
// Crea el arreglo de objetos Silla para sillas ejecutivas:
sillasEjecutivas = new Silla[SILLAS_EJECUTIVAS];
// Inicio de creación de los objetos individuales Silla sobre el
// arreglo sillasEjecutivas:
sillasEjecutivas[0] = new Silla(1, Clase.Ejecutiva, UbicacionSilla.Ventana);
sillasEjecutivas[1] = new Silla(2, Clase.Ejecutiva, UbicacionSilla.Pasillo);
sillasEjecutivas[2] = new Silla(3, Clase.Ejecutiva, UbicacionSilla.Pasillo);
sillasEjecutivas[3] = new Silla(4, Clase.Ejecutiva, UbicacionSilla.Ventana);
sillasEjecutivas[4] = new Silla(5, Clase.Ejecutiva, UbicacionSilla.Ventana);
sillasEjecutivas[5] = new Silla(6, Clase.Ejecutiva, UbicacionSilla.Pasillo);
sillasEjecutivas[6] = new Silla(7, Clase.Ejecutiva, UbicacionSilla.Pasillo);
sillasEjecutivas[7] = new Silla(8, Clase.Ejecutiva, UbicacionSilla.Ventana);
// Inicio de creación de los objetos individuales Silla sobre el
// areglo sillasEconomicas:
UbicacionSilla ubicacion;
for (int numeroSilla = 1 + SILLAS_EJECUTIVAS, j = 1; j <= SILLAS_ECONOMICAS; ++numeroSilla, ++j)
{
// Sillas ventana:
if (j % 6 == 1 || j % 6 == 0)
{
ubicacion = UbicacionSilla.Ventana;
}
// Sillas centrales:
else if (j % 6 == 2 || j % 6 == 5)
{
ubicacion = UbicacionSilla.Central;
}
// Sillas pasillo:
else
{
ubicacion = UbicacionSilla.Pasillo;
}
sillasEconomicas[j - 1] = new Silla(numeroSilla, Clase.Economica, ubicacion);
}
}
#endregion
#region Métodos
/// <summary>
/// Asigna una silla a un pasajero.
/// </summary>
/// <param name="clase">Clase en la que desea viajar el pasajero (`Clase.Ejecutiva` o `Clase.Economica`).</param>
/// <param name="ubicacionSilla">Ubicación de la silla que desea tomar el pasajero (`UbicacionSilla.Ventana`, `UbicacionSilla.Centro` (Sólo `Clase.Economica`), y `UbicacionSilla.Pasillo`.</param>
/// <param name="pasajero">Pasajero que desea tomar un vuelo.</param>
/// <returns>La `Silla` asignada al pasajero. [En caso de no poderse asignar, se retorna `null`.]</returns>
public Silla AsignarSilla(Clase clase, UbicacionSilla ubicacionSilla, Pasajero pasajero)
{
// Busca una silla libre:
Silla silla = null;
if (clase == Clase.Ejecutiva)
{
silla = BuscarSillaEjecutivaLibre(ubicacionSilla);
}
else if (clase == Clase.Economica)
{
silla = BuscarSillaEconomicaLibre(ubicacionSilla);
}
if (silla != null)
{
silla.AsignarAPasajero(pasajero);
}
return silla;
}
/// <summary>
/// Busca la silla donde está asignado un pasajero.
/// </summary>
/// <param name="pasajero">Pasajero del que se desea conocer sus datos del pasaje.</param>
/// <returns>Retorna la información de la silla (en caso de existir) asignada a un pasajero.</returns>
public Silla BuscarPasajero(Pasajero pasajero)
{
// Busca el pasajero en ejecutiva:
Silla silla = BuscarPasajeroEjecutivo(pasajero);
// No estaba estaba en ejecutiva:
if (silla == null)
{
silla = BuscarPasajeroEconomico(pasajero);
}
return silla;
}
/// <summary>
/// Busca la información asociada a un pasajero de clase económica.
/// </summary>
/// <param name="pasajero">Pasajero junto con su información.</param>
/// <returns>Silla que ocupa el pasajero. [En caso de no existir, se retorna `null`.</returns>
public Silla BuscarPasajeroEconomico(Pasajero pasajero)
{
bool encontrado = false;
Silla silla = null;
for (int i = 0; i < SILLAS_ECONOMICAS && !encontrado; ++i)
{
silla = sillasEconomicas[i];
if (silla.SillaAsignada() && silla.Pasajero.EsIgual(pasajero))
{
encontrado = true;
}
}
if (encontrado)
{
return silla;
}
else
{
return null;
}
}
/// <summary>
/// Busca la información asociada a un pasajero de clase ejecutiva.
/// </summary>
/// <param name="pasajero">Pasajero junto con su información.</param>
/// <returns>Silla que ocupa el pasajero. [En caso de no existir, se retorna `null`.</returns>
public Silla BuscarPasajeroEjecutivo(Pasajero pasajero)
{
bool encontrado = false;
Silla silla = null;
for (int i = 0; i < SILLAS_EJECUTIVAS && !encontrado; ++i)
{
silla = sillasEjecutivas[i];
if (silla.SillaAsignada() && silla.Pasajero.EsIgual(pasajero))
{
encontrado = true;
}
}
if (encontrado)
{
return silla;
}
else
{
return null;
}
}
/// <summary>
/// Busca la siguiente silla económica libre.
/// </summary>
/// <param name="ubicacionSilla">Ubicación de la silla.</param>
/// <returns>Siguiente silla disponible. [En caso de no existir, retorna `null`.</returns>
public Silla BuscarSillaEconomicaLibre(UbicacionSilla ubicacionSilla)
{
bool encontrado = false;
Silla silla = null;
for (int i = 0; i < SILLAS_ECONOMICAS && !encontrado; ++i)
{
silla = sillasEconomicas[i];
if (!(silla.SillaAsignada()) && silla.Ubicacion == ubicacionSilla)
{
encontrado = true;
}
}
if (encontrado)
{
return silla;
}
else
{
return null;
}
}
/// <summary>
/// Busca la siguiente silla ejecutiva libre.
/// </summary>
/// <param name="ubicacion">Ubicación de la silla.</param>
/// <returns>Siguiente silla disponible. [En caso de no existir, retorna `null`.</returns>
public Silla BuscarSillaEjecutivaLibre(UbicacionSilla ubicacion)
{
bool encontrado = false;
Silla silla = null;
for (int i = 0; i < SILLAS_EJECUTIVAS && !encontrado; ++i)
{
silla = sillasEjecutivas[i];
if (!(silla.SillaAsignada()) && silla.Ubicacion == ubicacion)
{
encontrado = true;
}
}
if (encontrado)
{
return silla;
}
else
{
return null;
}
}
/// <summary>
/// Calcula el porcentaje de ocupación de pasajeros actual.
/// </summary>
/// <returns>Porcentaje de ocupación.</returns>
public double CalcularPorcentajeOcupacion()
{
double porcentaje;
int totalSillas = SILLAS_ECONOMICAS + SILLAS_EJECUTIVAS;
int sillasOcupadas = ContarSillasEconomicasOcupadas() + ContarSillasEjecutivasOcupadas();
porcentaje = (double)sillasOcupadas / totalSillas * 100;
return porcentaje;
}
/// <summary>
/// Cuenta el número de sillas económicas ocupadas.
/// </summary>
/// <returns>Número de sillas económicas ocupadas.</returns>
public int ContarSillasEconomicasOcupadas()
{
int contador = 0;
for (int i = 0; i < SILLAS_ECONOMICAS; ++i)
{
if (sillasEconomicas[i].SillaAsignada())
{
++contador;
}
}
return contador;
}
/// <summary>
/// Cuenta el número de sillas ejecutivas ocupadas.
/// </summary>
/// <returns>Número de sillas ejecutivas ocupadas.</returns>
public int ContarSillasEjecutivasOcupadas()
{
int contador = 0;
for (int i = 0; i < SILLAS_EJECUTIVAS; ++i)
{
if (sillasEjecutivas[i].SillaAsignada())
{
++contador;
}
}
return contador;
}
/// <summary>
/// Anula/elimina la silla asignada a un determinado pasajero.
/// </summary>
/// <param name="pasajero">Pasajero a anular/elminar del viaje.</param>
/// <returns>`true` si se ha anulado/eliminado el pasajero; `false` en caso contrario.</returns>
public bool DesasignarSilla(Pasajero pasajero)
{
// Busca el pasajero en el avión:
Silla silla = BuscarPasajero(pasajero);
// Si lo encontra desasigna:
if (silla != null)
{
silla.DesasignarSilla();
return true;
}
else
{
return false;
}
}
/// <summary>
/// Obtiene el conjunto de sillas económicas.
/// </summary>
/// <returns>Conjunto de sillas económicas.</returns>
public Silla[] ObtenerSillasEconomicas()
{
return sillasEconomicas;
}
/// <summary>
/// Obtiene el conjunto de sillas ejecutivas.
/// </summary>
/// <returns>Conjunto de sillas ejecutivas.</returns>
public Silla[] ObtenerSillasEjecutivas()
{
return sillasEjecutivas;
}
#endregion
#region Puntos de extensión
/// <summary>
/// Punto de extensión número 1.
/// </summary>
/// <returns>Respuesta.</returns>
public String PuntoExtension1()
{
return "Respuesta 1";
}
/// <summary>
/// Punto de extensión número 2.
/// </summary>
/// <returns>Respuesta.</returns>
public String PuntoExtension2()
{
return "Respuesta 2";
}
#endregion
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment