Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ===++===
  2. //
  3. //  OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: EmpresaJuegos.cs
  9. //
  10. // Original en: http://goo.gl/JYQzkf
  11. //
  12. // Propósito: Representa una emprea de venta de videojuegos.
  13. //
  14. ============================================================*/
  15.  
  16. using System;
  17.  
  18. namespace JuegosCelulares.Modelo
  19. {
  20.     public class EmpresaJuegos
  21.     {
  22.         #region Campos
  23.         /// <summary>
  24.         /// Arreglo que representa las cantidades vendidas de cada juego.
  25.         /// </summary>
  26.         private int[] cantidadesVendidas;
  27.         /// <summary>
  28.         /// Conjunto de juegos que vende la empresa de juegos.
  29.         /// </summary>
  30.         private Juego[] juegos;
  31.         #endregion
  32.  
  33.         #region Constantes
  34.         /// <summary>
  35.         /// Constate que representa un juego que no existe.
  36.         /// </summary>
  37.         public const string NINGUNO = "Ninguno";
  38.         /// <summary>
  39.         /// Constante que representa el nombre del juego `Car Racer 2`.
  40.         /// </summary>
  41.         public const string NOMBRE_JUEGO1 = "Car Racer 2";
  42.         /// <summary>
  43.         /// Constante que representa el nombre del juego `Air Attack`.
  44.         /// </summary>
  45.         public const string NOMBRE_JUEGO2 = "Air Attack";
  46.         /// <summary>
  47.         /// Constante que representa el nombre del juego `Mini Golf 2`.
  48.         /// </summary>
  49.         public const string NOMBRE_JUEGO3 = "Mini Golf 2";
  50.         /// <summary>
  51.         /// Constante que representa el nombre del juego `Aztec Warrior`.
  52.         /// </summary>
  53.         public const string NOMBRE_JUEGO4 = "Aztec Warrior";
  54.         #endregion
  55.  
  56.         #region Constructores
  57.         /// <summary>
  58.         /// Crea una nueva empresa de venta de juegos.
  59.         /// </summary>
  60.         public EmpresaJuegos()
  61.         {
  62.             // Crea el arrego de juegos:
  63.             juegos = new Juego[4];
  64.  
  65.             // Crea juego por juego con valores arbitrarios y haciendo uso de las
  66.             // constantes definidas arriba:
  67.             juegos[0] = new Juego(NOMBRE_JUEGO1, CategoriaJuego.Velocidad, 30000, 300, 50);
  68.             juegos[1] = new Juego(NOMBRE_JUEGO2, CategoriaJuego.Accion, 55000, 2500, 15);
  69.             juegos[2] = new Juego(NOMBRE_JUEGO3, CategoriaJuego.Deporte, 15000, 150, 22);
  70.             juegos[3] = new Juego(NOMBRE_JUEGO4, CategoriaJuego.Aventura, 20000, 1000, 36);
  71.  
  72.             // Inicialia todas las cantidades en 0:
  73.             cantidadesVendidas = new int[4];
  74.             cantidadesVendidas[0] = 0;
  75.             cantidadesVendidas[1] = 0;
  76.             cantidadesVendidas[2] = 0;
  77.             cantidadesVendidas[3] = 0;
  78.         }
  79.         #endregion
  80.  
  81.         #region Métodos:
  82.         /// <summary>
  83.         /// Calcula el descuento por la venta de varios juegos en diferentes cantidades.
  84.         /// </summary>
  85.         /// <param name="cantidadJuego1">Cantidad del juego `Car Racer 2`.</param>
  86.         /// <param name="cantidadJuego2">Cantidad del juego `Air Attack`.</param>
  87.         /// <param name="cantidadJuego3">Cantidad del juego `Mini Golf 2`.</param>
  88.         /// <param name="cantidadJuego4">Cantidad del juego `Aztec Warrior`.</param>
  89.         /// <returns></returns>
  90.         public string CalcularDescuento (int cantidadJuego1, int cantidadJuego2, int cantidadJuego3, int cantidadJuego4)
  91.         {
  92.             decimal totalVenta = 0.0M;
  93.  
  94.             // Areglo de categorías:
  95.             CategoriaJuego[] categoriasJuegos = new CategoriaJuego[4];
  96.             categoriasJuegos[0] = CategoriaJuego.Ninguna;
  97.             categoriasJuegos[1] = CategoriaJuego.Ninguna;
  98.             categoriasJuegos[2] = CategoriaJuego.Ninguna;
  99.             categoriasJuegos[3] = CategoriaJuego.Ninguna;
  100.             cantidadesVendidas[0] = cantidadJuego1;
  101.             cantidadesVendidas[1] = cantidadJuego2;
  102.             cantidadesVendidas[2] = cantidadJuego3;
  103.             cantidadesVendidas[3] = cantidadJuego4;
  104.  
  105.             for (int i = 0; i < juegos.Length; ++i)
  106.             {
  107.                 if (juegos[i] != null)
  108.                 {
  109.                     totalVenta += juegos[i].Precio * cantidadesVendidas[i];
  110.                     categoriasJuegos[i] = juegos[i].Categoria;
  111.                 }
  112.             }
  113.  
  114.             decimal descuento = 0.0M;
  115.             // Calcula el descuento para juegos de acción:
  116.             if ((cantidadesVendidas[0] >= 25 && categoriasJuegos[0] == CategoriaJuego.Accion) || (cantidadesVendidas[1] >= 25 && categoriasJuegos[1] == CategoriaJuego.Accion) ||
  117.                 (cantidadesVendidas[2] >= 25 && categoriasJuegos[2] == CategoriaJuego.Accion) || (cantidadesVendidas[3] >= 25 && categoriasJuegos[3] == CategoriaJuego.Accion))
  118.             {
  119.                 descuento = totalVenta * 0.15M;
  120.             }
  121.             else if ( (cantidadesVendidas[3] >= 32) ||
  122.                       ((( cantidadesVendidas[0] >= 12 && categoriasJuegos[0] == CategoriaJuego.Deporte) || (cantidadesVendidas[1] >= 12 && categoriasJuegos[1] == CategoriaJuego.Deporte) ||
  123.                          (cantidadesVendidas[2] >= 12 && categoriasJuegos[2] == CategoriaJuego.Deporte) || (cantidadesVendidas[3] >= 12 && categoriasJuegos[3] == CategoriaJuego.Deporte))) &&
  124.                       ((cantidadesVendidas[0] >=  15 && categoriasJuegos[0] == CategoriaJuego.Velocidad) || (cantidadesVendidas[1] >= 15 && categoriasJuegos[1] == CategoriaJuego.Velocidad) ||
  125.                       (cantidadesVendidas[2] >= 55 && categoriasJuegos[2] == CategoriaJuego.Velocidad) || (cantidadesVendidas[3] >= 15 && categoriasJuegos[3] == CategoriaJuego.Velocidad)))
  126.             {
  127.                 descuento = totalVenta * 0.10M;
  128.             }
  129.             else
  130.             {
  131.                 descuento = 0.0M;
  132.             }
  133.  
  134.             decimal totalConDescuento = totalVenta - descuento;
  135.  
  136.             string mensaje = String.Format("El valor total de su venta es: {0}\nEl descuento por su compra es: {1}\nEl valor total de su compra es: {2}",
  137.                                            totalVenta.ToString("C"), descuento.ToString("C"), totalConDescuento.ToString("C"));
  138.  
  139.             return mensaje;
  140.         }
  141.         /// <summary>
  142.         /// Compra un juego para la venta en la empresa.
  143.         /// </summary>
  144.         /// <param name="nombreJuego">Nombre del juego a comprar.</param>
  145.         /// <param name="cantidad">Cantidad del juego a comprar.</param>
  146.         public void ComprarJuego(string nombreJuego, int cantidad)
  147.         {
  148.             if (nombreJuego.Equals (NOMBRE_JUEGO1))
  149.             {
  150.                 if (juegos[0] == null)
  151.                 {
  152.                     juegos[0] = new Juego(NOMBRE_JUEGO1, CategoriaJuego.Velocidad, 30000, 300, cantidad);
  153.                 }
  154.                 else
  155.                 {
  156.                     juegos[0].ComprarJuego(cantidad);
  157.                 }
  158.             }
  159.             else if (nombreJuego.Equals(NOMBRE_JUEGO2))
  160.             {
  161.                 if (juegos[1] == null)
  162.                 {
  163.                     juegos[1] = new Juego(NOMBRE_JUEGO2, CategoriaJuego.Accion, 55000, 2500, cantidad);
  164.                 }
  165.                 else
  166.                 {
  167.                     juegos[1].ComprarJuego(cantidad);
  168.                 }
  169.             }
  170.             else if (nombreJuego.Equals(NOMBRE_JUEGO3))
  171.             {
  172.                 if (juegos[2] == null)
  173.                 {
  174.                     juegos[2] = new Juego(NOMBRE_JUEGO3, CategoriaJuego.Deporte, 15000, 150, cantidad);
  175.                 }
  176.                 else
  177.                 {
  178.                     juegos[2].ComprarJuego(cantidad);
  179.                 }
  180.             }
  181.             else if (nombreJuego.Equals(NOMBRE_JUEGO4))
  182.             {
  183.                 if (juegos[3] == null)
  184.                 {
  185.                     juegos[3] = new Juego(NOMBRE_JUEGO4, CategoriaJuego.Aventura, 20000, 1000, cantidad);
  186.                 }
  187.                 else
  188.                 {
  189.                     juegos[3].ComprarJuego(cantidad);
  190.                 }
  191.             }
  192.         }
  193.         /// <summary>
  194.         /// Obtiene la cantidad disponible de un juego en la empresa.
  195.         /// </summary>
  196.         /// <param name="nombreJuego">Nombre del juego del que se desea conocer su cantidad.</param>
  197.         /// <returns>Cantidad actual vendida del juego.</returns>
  198.         public int ObtenerCantidadActual(string nombreJuego)
  199.         {
  200.             Juego juego = ObtenerJuego(nombreJuego);
  201.  
  202.             if (juego != null)
  203.             {
  204.                 return juego.CantidadActual;
  205.             }
  206.             else
  207.             {
  208.                 return 0;
  209.             }
  210.         }
  211.         /// <summary>
  212.         /// Busca un juego por su nombre.
  213.         /// </summary>
  214.         /// <param name="nombreJuego">Nombre del juego a buscar.</param>
  215.         /// <returns>Juego más vendido.</returns>
  216.         public Juego ObtenerJuego(string nombreJuego)
  217.         {
  218.             if (nombreJuego.Equals(NOMBRE_JUEGO1))
  219.             {
  220.                 return juegos[0];
  221.             }
  222.             else if (nombreJuego.Equals(NOMBRE_JUEGO2))
  223.             {
  224.                 return juegos[1];
  225.             }
  226.             else if (nombreJuego.Equals(NOMBRE_JUEGO3))
  227.             {
  228.                 return juegos[2];
  229.             }
  230.             else if (nombreJuego.Equals(NOMBRE_JUEGO4))
  231.             {
  232.                 return juegos[3];
  233.             }
  234.             else
  235.             {
  236.                 return null;
  237.             }
  238.         }
  239.         /// <summary>
  240.         /// Obtiene el juego más vendido.
  241.         /// </summary>
  242.         /// <returns>Juego más vendido en la empresa.</returns>
  243.         public string ObtenerJuegoMasVendido()
  244.         {
  245.             if (cantidadesVendidas[0] == 0 && cantidadesVendidas[1] == 0 && cantidadesVendidas[2] == 0 && cantidadesVendidas[3] == 0)
  246.             {
  247.                 return NINGUNO;
  248.             }
  249.             else if (cantidadesVendidas[0] >= cantidadesVendidas[1] && cantidadesVendidas[0] >= cantidadesVendidas[2] && cantidadesVendidas[0] >= cantidadesVendidas[3])
  250.             {
  251.                 return NOMBRE_JUEGO1;
  252.             }
  253.             else if (cantidadesVendidas[1] >= cantidadesVendidas[0] && cantidadesVendidas[1] >= cantidadesVendidas[2] && cantidadesVendidas[1] >= cantidadesVendidas[3])
  254.             {
  255.                 return NOMBRE_JUEGO2;
  256.             }
  257.             else if (cantidadesVendidas[2] >= cantidadesVendidas[0] && cantidadesVendidas[2] >= cantidadesVendidas[1] && cantidadesVendidas[2] >= cantidadesVendidas[3])
  258.             {
  259.                 return NOMBRE_JUEGO3;
  260.             }
  261.             else if (cantidadesVendidas[3] >= cantidadesVendidas[0] && cantidadesVendidas[3] >= cantidadesVendidas[1] && cantidadesVendidas[3] >= cantidadesVendidas[2])
  262.             {
  263.                 return NOMBRE_JUEGO4;
  264.             }
  265.             else
  266.             {
  267.                 return NINGUNO;
  268.             }
  269.         }
  270.         /// <summary>
  271.         /// Determina qué juegos puede comprar de acuerdo a su cantidad y su precio.
  272.         /// </summary>
  273.         /// <param name="capacidad">Capacidad de memoria del dispositivo. En KB.</param>
  274.         /// <param name="precio">Presupuesto.</param>
  275.         /// <returns>Resumen de los juegos que puede comprar.</returns>
  276.         public string SeleccionarJuego(int capacidad, decimal precio)
  277.         {
  278.             string respuesta = "Los juegos apropiados para usted son: ";
  279.  
  280.             if (juegos[0] != null && juegos[0].Precio <= precio && juegos[0].TamanioKB <= capacidad)
  281.             {
  282.                 respuesta += String.Format("\n{0}", juegos[0].Nombre);
  283.             }
  284.             if (juegos[1] != null && juegos[1].Precio <= precio && juegos[1].TamanioKB <= capacidad)
  285.             {
  286.                 respuesta += String.Format("\n{0}", juegos[1].Nombre);
  287.             }
  288.             if (juegos[2] != null && juegos[2].Precio <= precio && juegos[2].TamanioKB <= capacidad)
  289.             {
  290.                 respuesta += String.Format("\n{0}", juegos[2].Nombre);
  291.             }
  292.             if (juegos[3] != null && juegos[3].Precio <= precio && juegos[3].TamanioKB <= capacidad)
  293.             {
  294.                 respuesta += String.Format("\n{0}", juegos[3].Nombre);
  295.             }
  296.             if (respuesta.Equals("Los juegos apropiados para usted son: "))
  297.             {
  298.                 respuesta = "Ninguno de los juegos es apropiado para usted.";
  299.             }
  300.  
  301.             return respuesta;
  302.         }
  303.         /// <summary>
  304.         /// Vende un juego.
  305.         /// </summary>
  306.         /// <param name="nombreJuego">Nombre del juego a vender.</param>
  307.         /// <param name="cantidad">Cantidad del juego a vender.</param>
  308.         /// <returns></returns>
  309.         public bool VenderJuego(string nombreJuego, int cantidad)
  310.         {
  311.             bool vendio = false;
  312.  
  313.             if (juegos[0] != null && juegos[0].Nombre.Equals(nombreJuego) && juegos[0].CantidadActual >= cantidad)
  314.             {
  315.                 cantidadesVendidas[0] = cantidadesVendidas[0] + cantidad;
  316.                 juegos[0].VenderJuego(cantidad);
  317.                 if (juegos[0].CantidadActual == 0)
  318.                 {
  319.                     juegos[0] = null;
  320.                 }
  321.                 vendio = true;
  322.             }
  323.             else if (juegos[1] != null && juegos[1].Nombre.Equals(nombreJuego) && juegos[1].CantidadActual >= cantidad)
  324.             {
  325.                 cantidadesVendidas[1] = cantidadesVendidas[1] + cantidad;
  326.                 juegos[1].VenderJuego(cantidad);
  327.                 if (juegos[1].CantidadActual == 0)
  328.                 {
  329.                     juegos[1] = null;
  330.                 }
  331.                 vendio = true;
  332.             }
  333.             else if (juegos[2] != null && juegos[2].Nombre.Equals(nombreJuego) && juegos[2].CantidadActual >= cantidad)
  334.             {
  335.                 cantidadesVendidas[2] = cantidadesVendidas[2] + cantidad;
  336.                 juegos[2].VenderJuego(cantidad);
  337.                 if (juegos[2].CantidadActual == 0)
  338.                 {
  339.                     juegos[2] = null;
  340.                 }
  341.                 vendio = true;
  342.             }
  343.             else if (juegos[3] != null && juegos[3].Nombre.Equals(nombreJuego) && juegos[3].CantidadActual >= cantidad)
  344.             {
  345.                 cantidadesVendidas[3] = cantidadesVendidas[3] + cantidad;
  346.                 juegos[3].VenderJuego(cantidad);
  347.                 if (juegos[3].CantidadActual == 0)
  348.                 {
  349.                     juegos[3] = null;
  350.                 }
  351.                 vendio = true;
  352.             }
  353.  
  354.             return vendio;
  355.         }
  356.         #endregion
  357.  
  358.         #region Puntos de extensión
  359.         /// <summary>
  360.         /// Punto de extensión no. 1.
  361.         /// </summary>
  362.         /// <returns>Respuesta del punto de extensión.</returns>
  363.         public string PuntoExtension1()
  364.         {
  365.             return "Respuesta";
  366.         }
  367.         /// <summary>
  368.         /// Punto de extensión no. 2.
  369.         /// </summary>
  370.         /// <returns>Respuesta del punto de extensión.</returns>
  371.         public string PuntoExtension2()
  372.         {
  373.             return "Respuesta";
  374.         }
  375.         #endregion
  376.     }
  377. }