Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ===++===
  2. //
  3. //    OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: Encuesta.cs
  9. //
  10. // Original en: http://goo.gl/8RVFMg
  11. //
  12. // Propósito: Implementar la entidad Encuesta.
  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 N1_Encuesta.Modelo
  23. {
  24.     /// <summary>
  25.     /// Representa la entidad Encuesta del modelo del mundo del problema.
  26.     /// </summary>
  27.     public class Encuesta
  28.     {
  29.         #region Campos:
  30.         /// <summary>
  31.         /// Los rangos (edad) para la encuesta.
  32.         /// </summary>
  33.         RangoEncuesta[] rangosEncuesta;
  34.         #endregion
  35.  
  36.         #region
  37.         /// <summary>
  38.         /// Recupera el número total de opiniones.
  39.         /// </summary>
  40.         public int NumeroTotalOpiniones
  41.         {
  42.             get
  43.             {
  44.                 int totalOpiniones = 0;
  45.  
  46.                 foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  47.                 {
  48.                     totalOpiniones += rangoEncuesta.NumeroOpiniones;
  49.                 }
  50.  
  51.                 return totalOpiniones;
  52.             }
  53.         }
  54.         #endregion
  55.  
  56.         #region Constructores
  57.         /// <summary>
  58.         /// Inicializa una instancia de Encuesta.
  59.         /// </summary>
  60.         public Encuesta()
  61.         {
  62.             // 3 rangos de encuesta:
  63.             rangosEncuesta = new RangoEncuesta[3];
  64.  
  65.             rangosEncuesta[0] = new RangoEncuesta();
  66.             rangosEncuesta[1] = new RangoEncuesta();
  67.             rangosEncuesta[2] = new RangoEncuesta();
  68.         }
  69.         #endregion
  70.  
  71.         #region Métodos
  72.         /// <summary>
  73.         /// Agrega una opinión a la encuesta.
  74.         /// </summary>
  75.         /// <param name="idRango">ID (1, 2, o 3) del rango de edad.</param>
  76.         /// <param name="opinion">Valor (0-10) de la opinión.</param>
  77.         /// <param name="estadoCivil">Estado civil del encuestado(a).</param>
  78.         public void AgregarOpinion(int idRango, int opinion, EstadoCivil estadoCivil)
  79.         {
  80.             switch(estadoCivil)
  81.             {
  82.                 case EstadoCivil.Casado:
  83.                     rangosEncuesta[idRango - 1].AgregarOpinion(estadoCivil, opinion);
  84.                     break;
  85.                 case EstadoCivil.Soltero:
  86.                     rangosEncuesta[idRango - 1].AgregarOpinion(estadoCivil, opinion);
  87.                     break;
  88.             }
  89.         }
  90.         /// <summary>
  91.         /// Calcula el promedio total de las opiniones del curso.
  92.         /// </summary>
  93.         /// <returns>Promedio total de las opiniones del curso.</returns>
  94.         public double CalcularPromedio()
  95.         {
  96.             double totalEncuesta = 0.0;
  97.             double promedioEncuesta;
  98.  
  99.             foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  100.             {
  101.                 totalEncuesta += rangoEncuesta.TotalOpiniones;
  102.             }
  103.  
  104.             promedioEncuesta = totalEncuesta / NumeroTotalOpiniones;
  105.  
  106.             return promedioEncuesta;
  107.         }
  108.         /// <summary>
  109.         /// Calcula el promedio para un estado civil particular.
  110.         /// </summary>
  111.         /// <param name="estadoCivil">Estado civil (casado(a) o soltero(a).</param>
  112.         /// <returns>El promedio parcial para un estado civil.</returns>
  113.         public double CalcularPromedio(EstadoCivil estadoCivil)
  114.         {
  115.             double totalEncuesta = 0;
  116.             double promedio;
  117.  
  118.             switch (estadoCivil)
  119.             {
  120.                 case EstadoCivil.Casado:
  121.                     foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  122.                     {
  123.                         totalEncuesta += rangoEncuesta.TotalOpinionCasados;
  124.                     }
  125.  
  126.                     promedio = totalEncuesta / TotalCasados();
  127.  
  128.                     return promedio;
  129.                default:
  130.                     foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  131.                     {
  132.                         totalEncuesta += rangoEncuesta.TotalOpinionSolteros;
  133.                     }
  134.  
  135.                     promedio = totalEncuesta / TotalSolteros();
  136.  
  137.                     return promedio;
  138.             }
  139.         }
  140.         /// <summary>
  141.         /// Muestra resultados de un rango y estado civil específicos.
  142.         /// </summary>
  143.         /// <param name="idRango">ID (1, 2, o 3) del rango.</param>
  144.         /// <param name="estadoCivil">Estado civil del encuestado(a).</param>
  145.         /// <returns>Total de opiniones.</returns>
  146.         public double MostrarResultado(int idRango, EstadoCivil estadoCivil)
  147.         {
  148.             return rangosEncuesta[idRango - 1].CalcularPromedio(estadoCivil);
  149.         }
  150.         private int TotalCasados()
  151.         {
  152.             int total = 0;
  153.  
  154.             foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  155.             {
  156.                 total += rangoEncuesta.NumeroCasados;
  157.             }
  158.  
  159.             return total;
  160.         }
  161.         /// <summary>
  162.         /// Calcula el número total de solteros(as) que que han realizado la encuesta.
  163.         /// </summary>
  164.         /// <returns>Número total de soltero(s).</returns>
  165.         private int TotalSolteros()
  166.         {
  167.             int total = 0;
  168.  
  169.             foreach (RangoEncuesta rangoEncuesta in rangosEncuesta)
  170.             {
  171.                 total += rangoEncuesta.NumeroSolteros;
  172.             }
  173.  
  174.             return total;
  175.         }
  176.         #endregion
  177.  
  178.         #region Métodos de Extensión
  179.         /// <summary>
  180.         /// Método de extensión no. 1.
  181.         /// </summary>
  182.         /// <returns>Cadena de resultado.</returns>
  183.         public string Metodo1()
  184.         {
  185.             return "Respuesta 1";
  186.         }
  187.         /// <summary>
  188.         /// Método de extensión no. 2.
  189.         /// </summary>
  190.         /// <returns>Cadena de resultado.</returns>
  191.         public string Metodo2()
  192.         {
  193.             return "Respuesta 2";
  194.         }
  195.         #endregion
  196.     }
  197. }