Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ===++===
- //
- // 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
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement