Advertisement
Fhernd

Avion.cs

Jul 2nd, 2015
4,311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.63 KB | None | 0 0
  1. // ===++===
  2. //
  3. //    OrtizOL - xCSw
  4. //
  5. //  Proyecto: Cupi2.NET
  6. //
  7. // ===--===
  8. /*============================================================
  9. //
  10. // Clase(s): Avion.
  11. //
  12. // Propósito: Implementar y representar la entidad `Avion`
  13. // del modelo del mundo del problema (dominio).
  14. //
  15. // Original: http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-3/avion/visualizacion-codigo/avion
  16. //
  17. ============================================================*/
  18.  
  19. using System;
  20.  
  21. namespace ElAvión.Modelo
  22. {
  23.     /// <summary>
  24.     /// Clase que representa la entidad `Avion` del modelo del mundo del problema.
  25.     /// </summary>
  26.     public class Avion
  27.     {
  28.         #region Constantes
  29.         /// <summary>
  30.         /// Número de sillas económicas disponibles en esta avión.
  31.         /// </summary>
  32.         public const int SILLAS_ECONOMICAS = 42;
  33.         /// <summary>
  34.         /// Número de sillas ejecutivas disponibles en esta avión.
  35.         /// </summary>
  36.         public const int SILLAS_EJECUTIVAS = 8;
  37.         #endregion
  38.  
  39.         #region Campos
  40.         /// <summary>
  41.         /// Conjunto de sillas económicas.
  42.         /// </summary>
  43.         private Silla[] sillasEconomicas;
  44.         /// <summary>
  45.         /// Conjunto de sillas ejecutivas.
  46.         /// </summary>
  47.         private Silla[] sillasEjecutivas;
  48.         #endregion
  49.  
  50.         #region Constructores
  51.         /// <summary>
  52.         /// Crea una nueva instancia de la entidad `Avion`. Inicializad, además, las sillas económicas y ejecutivas.
  53.         /// </summary>
  54.         public Avion()
  55.         {
  56.             // Crea el arreglo de objetos Silla para sillas económicas:
  57.             sillasEconomicas = new Silla[SILLAS_ECONOMICAS];
  58.            
  59.             // Crea el arreglo de objetos Silla para sillas ejecutivas:
  60.             sillasEjecutivas = new Silla[SILLAS_EJECUTIVAS];
  61.  
  62.             // Inicio de creación de los objetos individuales Silla sobre el
  63.             // arreglo sillasEjecutivas:
  64.             sillasEjecutivas[0] = new Silla(1, Clase.Ejecutiva, UbicacionSilla.Ventana);
  65.             sillasEjecutivas[1] = new Silla(2, Clase.Ejecutiva, UbicacionSilla.Pasillo);
  66.             sillasEjecutivas[2] = new Silla(3, Clase.Ejecutiva, UbicacionSilla.Pasillo);
  67.             sillasEjecutivas[3] = new Silla(4, Clase.Ejecutiva, UbicacionSilla.Ventana);
  68.             sillasEjecutivas[4] = new Silla(5, Clase.Ejecutiva, UbicacionSilla.Ventana);
  69.             sillasEjecutivas[5] = new Silla(6, Clase.Ejecutiva, UbicacionSilla.Pasillo);
  70.             sillasEjecutivas[6] = new Silla(7, Clase.Ejecutiva, UbicacionSilla.Pasillo);
  71.             sillasEjecutivas[7] = new Silla(8, Clase.Ejecutiva, UbicacionSilla.Ventana);
  72.  
  73.             // Inicio de creación de los objetos individuales Silla sobre el
  74.             // areglo sillasEconomicas:
  75.             UbicacionSilla ubicacion;
  76.             for (int numeroSilla = 1 + SILLAS_EJECUTIVAS, j = 1; j <= SILLAS_ECONOMICAS; ++numeroSilla, ++j)
  77.             {
  78.                 // Sillas ventana:
  79.                 if (j % 6 == 1 || j % 6 == 0)
  80.                 {
  81.                     ubicacion = UbicacionSilla.Ventana;
  82.                 }
  83.                 // Sillas centrales:
  84.                 else if (j % 6 == 2 || j % 6 == 5)
  85.                 {
  86.                     ubicacion = UbicacionSilla.Central;
  87.                 }
  88.                 // Sillas pasillo:
  89.                 else
  90.                 {
  91.                     ubicacion = UbicacionSilla.Pasillo;
  92.                 }
  93.  
  94.                 sillasEconomicas[j - 1] = new Silla(numeroSilla, Clase.Economica, ubicacion);
  95.             }
  96.         }
  97.         #endregion
  98.  
  99.         #region Métodos
  100.         /// <summary>
  101.         /// Asigna una silla a un pasajero.
  102.         /// </summary>
  103.         /// <param name="clase">Clase en la que desea viajar el pasajero (`Clase.Ejecutiva` o `Clase.Economica`).</param>
  104.         /// <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>
  105.         /// <param name="pasajero">Pasajero que desea tomar un vuelo.</param>
  106.         /// <returns>La `Silla` asignada al pasajero. [En caso de no poderse asignar, se retorna `null`.]</returns>
  107.         public Silla AsignarSilla(Clase clase, UbicacionSilla ubicacionSilla, Pasajero pasajero)
  108.         {
  109.             // Busca una silla libre:
  110.             Silla silla = null;
  111.  
  112.             if (clase == Clase.Ejecutiva)
  113.             {
  114.                 silla = BuscarSillaEjecutivaLibre(ubicacionSilla);
  115.             }
  116.             else if (clase == Clase.Economica)
  117.             {
  118.                 silla = BuscarSillaEconomicaLibre(ubicacionSilla);
  119.             }
  120.  
  121.             if (silla != null)
  122.             {
  123.                 silla.AsignarAPasajero(pasajero);
  124.             }
  125.  
  126.             return silla;
  127.         }
  128.  
  129.         /// <summary>
  130.         /// Busca la silla donde está asignado un pasajero.
  131.         /// </summary>
  132.         /// <param name="pasajero">Pasajero del que se desea conocer sus datos del pasaje.</param>
  133.         /// <returns>Retorna la información de la silla (en caso de existir) asignada a un pasajero.</returns>
  134.         public Silla BuscarPasajero(Pasajero pasajero)
  135.         {
  136.             // Busca el pasajero en ejecutiva:
  137.             Silla silla = BuscarPasajeroEjecutivo(pasajero);
  138.  
  139.             // No estaba estaba en ejecutiva:
  140.             if (silla == null)
  141.             {
  142.                 silla = BuscarPasajeroEconomico(pasajero);
  143.             }
  144.  
  145.             return silla;
  146.         }
  147.  
  148.         /// <summary>
  149.         /// Busca la información asociada a un pasajero de clase económica.
  150.         /// </summary>
  151.         /// <param name="pasajero">Pasajero junto con su información.</param>
  152.         /// <returns>Silla que ocupa el pasajero. [En caso de no existir, se retorna `null`.</returns>
  153.         public Silla BuscarPasajeroEconomico(Pasajero pasajero)
  154.         {
  155.             bool encontrado = false;
  156.  
  157.             Silla silla = null;
  158.  
  159.             for (int i = 0; i < SILLAS_ECONOMICAS && !encontrado; ++i)
  160.             {
  161.                 silla = sillasEconomicas[i];
  162.  
  163.                 if (silla.SillaAsignada() && silla.Pasajero.EsIgual(pasajero))
  164.                 {
  165.                     encontrado = true;
  166.                 }
  167.             }
  168.  
  169.             if (encontrado)
  170.             {
  171.                 return silla;
  172.             }
  173.             else
  174.             {
  175.                 return null;
  176.             }
  177.         }
  178.  
  179.         /// <summary>
  180.         /// Busca la información asociada a un pasajero de clase ejecutiva.
  181.         /// </summary>
  182.         /// <param name="pasajero">Pasajero junto con su información.</param>
  183.         /// <returns>Silla que ocupa el pasajero. [En caso de no existir, se retorna `null`.</returns>
  184.         public Silla BuscarPasajeroEjecutivo(Pasajero pasajero)
  185.         {
  186.             bool encontrado = false;
  187.  
  188.             Silla silla = null;
  189.  
  190.             for (int i = 0; i < SILLAS_EJECUTIVAS && !encontrado; ++i)
  191.             {
  192.                 silla = sillasEjecutivas[i];
  193.  
  194.                 if (silla.SillaAsignada() && silla.Pasajero.EsIgual(pasajero))
  195.                 {
  196.                     encontrado = true;
  197.                 }
  198.             }
  199.  
  200.             if (encontrado)
  201.             {
  202.                 return silla;
  203.             }
  204.             else
  205.             {
  206.                 return null;
  207.             }
  208.         }
  209.  
  210.         /// <summary>
  211.         /// Busca la siguiente silla económica libre.
  212.         /// </summary>
  213.         /// <param name="ubicacionSilla">Ubicación de la silla.</param>
  214.         /// <returns>Siguiente silla disponible. [En caso de no existir, retorna `null`.</returns>
  215.         public Silla BuscarSillaEconomicaLibre(UbicacionSilla ubicacionSilla)
  216.         {
  217.             bool encontrado = false;
  218.  
  219.             Silla silla = null;
  220.  
  221.             for (int i = 0; i < SILLAS_ECONOMICAS && !encontrado; ++i)
  222.             {
  223.                 silla = sillasEconomicas[i];
  224.                
  225.                 if (!(silla.SillaAsignada()) && silla.Ubicacion == ubicacionSilla)
  226.                 {
  227.                     encontrado = true;
  228.                 }
  229.             }
  230.  
  231.             if (encontrado)
  232.             {
  233.                 return silla;
  234.             }
  235.             else
  236.             {
  237.                 return null;
  238.             }
  239.         }
  240.  
  241.         /// <summary>
  242.         /// Busca la siguiente silla ejecutiva libre.
  243.         /// </summary>
  244.         /// <param name="ubicacion">Ubicación de la silla.</param>
  245.         /// <returns>Siguiente silla disponible. [En caso de no existir, retorna `null`.</returns>
  246.         public Silla BuscarSillaEjecutivaLibre(UbicacionSilla ubicacion)
  247.         {
  248.             bool encontrado = false;
  249.  
  250.             Silla silla = null;
  251.  
  252.             for (int i = 0; i < SILLAS_EJECUTIVAS && !encontrado; ++i)
  253.             {
  254.                 silla = sillasEjecutivas[i];
  255.  
  256.                  if (!(silla.SillaAsignada()) && silla.Ubicacion == ubicacion)
  257.                 {
  258.                     encontrado = true;
  259.                 }
  260.             }
  261.  
  262.             if (encontrado)
  263.             {
  264.                 return silla;
  265.             }
  266.             else
  267.             {
  268.                 return null;
  269.             }
  270.         }
  271.  
  272.         /// <summary>
  273.         /// Calcula el porcentaje de ocupación de pasajeros actual.
  274.         /// </summary>
  275.         /// <returns>Porcentaje de ocupación.</returns>
  276.         public double CalcularPorcentajeOcupacion()
  277.         {
  278.             double porcentaje;
  279.             int totalSillas = SILLAS_ECONOMICAS + SILLAS_EJECUTIVAS;
  280.             int sillasOcupadas = ContarSillasEconomicasOcupadas() + ContarSillasEjecutivasOcupadas();
  281.             porcentaje = (double)sillasOcupadas / totalSillas * 100;
  282.  
  283.             return porcentaje;
  284.         }
  285.  
  286.         /// <summary>
  287.         /// Cuenta el número de sillas económicas ocupadas.
  288.         /// </summary>
  289.         /// <returns>Número de sillas económicas ocupadas.</returns>
  290.         public int ContarSillasEconomicasOcupadas()
  291.         {
  292.             int contador = 0;
  293.  
  294.             for (int i = 0; i < SILLAS_ECONOMICAS; ++i)
  295.             {
  296.                 if (sillasEconomicas[i].SillaAsignada())
  297.                 {
  298.                     ++contador;
  299.                 }
  300.             }
  301.  
  302.             return contador;
  303.         }
  304.  
  305.         /// <summary>
  306.         /// Cuenta el número de sillas ejecutivas ocupadas.
  307.         /// </summary>
  308.         /// <returns>Número de sillas ejecutivas ocupadas.</returns>
  309.         public int ContarSillasEjecutivasOcupadas()
  310.         {
  311.             int contador = 0;
  312.  
  313.             for (int i = 0; i < SILLAS_EJECUTIVAS; ++i)
  314.             {
  315.                 if (sillasEjecutivas[i].SillaAsignada())
  316.                 {
  317.                     ++contador;
  318.                 }
  319.             }
  320.  
  321.             return contador;
  322.         }
  323.  
  324.         /// <summary>
  325.         /// Anula/elimina la silla asignada a un determinado pasajero.
  326.         /// </summary>
  327.         /// <param name="pasajero">Pasajero a anular/elminar del viaje.</param>
  328.         /// <returns>`true` si se ha anulado/eliminado el pasajero; `false` en caso contrario.</returns>
  329.         public bool DesasignarSilla(Pasajero pasajero)
  330.         {
  331.             // Busca el pasajero en el avión:
  332.             Silla silla = BuscarPasajero(pasajero);
  333.  
  334.             // Si lo encontra desasigna:
  335.             if (silla != null)
  336.             {
  337.                 silla.DesasignarSilla();
  338.                 return true;
  339.             }
  340.             else
  341.             {
  342.                 return false;
  343.             }
  344.         }
  345.  
  346.         /// <summary>
  347.         /// Obtiene el conjunto de sillas económicas.
  348.         /// </summary>
  349.         /// <returns>Conjunto de sillas económicas.</returns>
  350.         public Silla[] ObtenerSillasEconomicas()
  351.         {
  352.             return sillasEconomicas;
  353.         }
  354.  
  355.         /// <summary>
  356.         /// Obtiene el conjunto de sillas ejecutivas.
  357.         /// </summary>
  358.         /// <returns>Conjunto de sillas ejecutivas.</returns>
  359.         public Silla[] ObtenerSillasEjecutivas()
  360.         {
  361.             return sillasEjecutivas;
  362.         }
  363.         #endregion
  364.  
  365.         #region Puntos de extensión
  366.         /// <summary>
  367.         /// Punto de extensión número 1.
  368.         /// </summary>
  369.         /// <returns>Respuesta.</returns>
  370.         public String PuntoExtension1()
  371.         {
  372.             return "Respuesta 1";
  373.         }
  374.  
  375.         /// <summary>
  376.         /// Punto de extensión número 2.
  377.         /// </summary>
  378.         /// <returns>Respuesta.</returns>
  379.         public String PuntoExtension2()
  380.         {
  381.             return "Respuesta 2";
  382.         }
  383.         #endregion
  384.     }
  385. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement