Created
July 2, 2015 16:29
-
-
Save Fhernd/c610d35b40693083827f to your computer and use it in GitHub Desktop.
Clase `Avion`.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ===++=== | |
// | |
// 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