Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ===++===
  2. //
  3. //    OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: Alcancia.
  9. //
  10. // Original en: http://goo.gl/uztrer
  11. //
  12. // Propósito: Implementar la clase Alcancia del modelo.
  13. //
  14. ============================================================*/
  15.  
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21.  
  22. namespace Alcancia.Modelo
  23. {
  24.     /// <summary>
  25.     /// Entidad Alcancia del modelo del mundo del problema.
  26.     /// </summary>
  27.     public class Alcancia
  28.     {
  29.         #region Campos
  30.         /// <summary>
  31.         /// Los contadores de las denominaciones.
  32.         /// </summary>
  33.         private int[] contadoresDenominacion;
  34.         /// <summary>
  35.         /// Representa el estado de la alcancia (rota o nueva).
  36.         /// </summary>
  37.         private bool estadoAlcancia;
  38.         #endregion
  39.  
  40.         #region Propiedades
  41.         /// <summary>
  42.         /// Recupera el estado de la alcancía.
  43.         /// </summary>
  44.         public bool EstadoAlcancia
  45.         {
  46.             get
  47.             {
  48.                 return estadoAlcancia;
  49.             }
  50.         }
  51.         #endregion
  52.  
  53.         #region Constructores
  54.         /// <summary>
  55.         /// Crea una instancia de la alcancía.
  56.         /// </summary>
  57.         public Alcancia()
  58.         {
  59.             contadoresDenominacion = new int[5];
  60.  
  61.             // Inicializa todos los contadores en 0:
  62.             for (int i = 0; i < contadoresDenominacion.Length; ++i)
  63.             {
  64.                 contadoresDenominacion[i] = 0;
  65.             }
  66.  
  67.             // La alcancía no está rota a la hora de su creación:
  68.             estadoAlcancia = false;
  69.         }
  70.         #endregion
  71.  
  72.         #region Métodos
  73.         /// <summary>
  74.         /// Agrega una moneda de una determinada denominación.
  75.         /// </summary>
  76.         /// <param name="denominacion">Denominación (20, 50, 100, 200, 500) de la moneda.</param>
  77.         public void AgregarMoneda(Moneda denominacion)
  78.         {
  79.             switch (denominacion)
  80.             {
  81.                 case Moneda.Veinte:
  82.                     ++contadoresDenominacion[0];
  83.                     return;
  84.  
  85.                 case Moneda.Cincuenta:
  86.                     ++contadoresDenominacion[1];
  87.                     return;
  88.  
  89.                 case Moneda.Cien:
  90.                     ++contadoresDenominacion[2];
  91.                     return;
  92.  
  93.                 case Moneda.Doscientos:
  94.                     ++contadoresDenominacion[3];
  95.                     return;
  96.  
  97.                 case Moneda.Quinientos:
  98.                     ++contadoresDenominacion[4];
  99.                     return;
  100.             }
  101.         }
  102.         /// <summary>
  103.         /// Calcula la cantidad de dinero que haya en la alcancía.
  104.         /// </summary>
  105.         /// <returns>Total dinero en la alcancía.</returns>
  106.         public decimal CalcularTotalDinero()
  107.         {
  108.             decimal totalDinero = 0.0M;
  109.  
  110.             totalDinero = 20 * contadoresDenominacion[0] + 50 * contadoresDenominacion[1] + 100 * contadoresDenominacion[2] +
  111.                           200 * contadoresDenominacion[3] + 500 * contadoresDenominacion[4];
  112.  
  113.             return totalDinero;
  114.         }
  115.         /// <summary>
  116.         /// Cuenta la cantidad de monedas de una determinada denominación.
  117.         /// </summary>
  118.         /// <param name="denominacion">Denominación (20, 50, 100, 200, 500) de la moneda.</param>
  119.         /// <returns>Cantidad de monedas de la denominación dada.</returns>
  120.         public int ContarMonedas(Moneda denominacion)
  121.         {
  122.             switch (denominacion)
  123.             {
  124.                 case Moneda.Veinte:
  125.                     return contadoresDenominacion[0];
  126.  
  127.                 case Moneda.Cincuenta:
  128.                     return contadoresDenominacion[1];
  129.  
  130.                 case Moneda.Cien:
  131.                     return contadoresDenominacion[2];
  132.  
  133.                 case Moneda.Doscientos:
  134.                     return contadoresDenominacion[3];
  135.  
  136.                 default:
  137.                     return contadoresDenominacion[4];
  138.             }
  139.         }
  140.         /// <summary>
  141.         /// Rompe la alcancía y cambia su estado a rota.
  142.         /// </summary>
  143.         public void RomperAlcancia()
  144.         {
  145.             estadoAlcancia = true;
  146.         }
  147.         #endregion
  148.  
  149.         #region Métodos de extensión
  150.         /// <summary>
  151.         /// Método de extensión no. 1.
  152.         /// </summary>
  153.         /// <returns>Mensaje de demostración.</returns>
  154.         public string MetodoExtension1()
  155.         {
  156.             return "Respuesta 1";
  157.         }
  158.         /// <summary>
  159.         /// Método de extensión no. 2.
  160.         /// </summary>
  161.         /// <returns>Mensaje de demostración.</returns>
  162.         public string MetodoExtension2()
  163.         {
  164.             return "Respuesta 2;";
  165.         }
  166.         #endregion
  167.     }
  168. }