コード例 #1
0
        public static string Imprimir(List <IFormaGeometrica> formas, EnumIdiomas idioma)
        {
            var       sb        = new StringBuilder();
            Traductor traductor = new Traductor();

            if (formas.Count == 0)
            {
                sb.Append("<h1>" + traductor.Traducir(idioma, "Sin_Formas") + "</h1>");
            }
            else
            {
                sb.Append("<h1>" + traductor.Traducir(idioma, "Inicio_Reporte") + " </h1>");
                bool esPlural = formas.Count > 1;

                //Body
                Dictionary <EnumFormas, Contador> DiccionarioContador = LlenarDiccionario(formas);
                bool hayMasDeUno;

                foreach (EnumFormas item in DiccionarioContador.Keys.ToList())
                {
                    hayMasDeUno = DiccionarioContador[item].NumeroFormas > 1;
                    string formaKey = formas.First(x => x.Tipo == item).obtenerKey(hayMasDeUno);
                    sb.Append($"{DiccionarioContador[item].NumeroFormas} {traductor.Traducir(idioma, formaKey)} | " + traductor.Traducir(idioma, "Area_Key") + $" {DiccionarioContador[item].TotalArea:#.##} | " + traductor.Traducir(idioma, "Perimetro_Key") + $" {DiccionarioContador[item].TotalSuperficie:#.##} <br/>");
                }

                //footer
                sb.Append(traductor.Traducir(idioma, "Total_Key").ToUpper() + ":<br/>");
                sb.Append(formas.Count().ToString() + " " + traductor.Traducir(idioma, "Formas_Key") + " ");
                sb.Append(traductor.Traducir(idioma, "Perimetro_Key") + " " + DiccionarioContador.Values.Sum(x => x.TotalSuperficie).ToString("#.##") + " ");
                sb.Append(traductor.Traducir(idioma, "Area_Key") + " " + DiccionarioContador.Values.Sum(x => x.TotalArea).ToString("#.##"));
            }
            return(sb.ToString());
        }
コード例 #2
0
        private static string TraducirForma(string figura, int cantidad, Traductor traductor)
        {
            switch (figura)
            {
            case "Cuadrado":
                return(cantidad == 1 ? traductor.getDescCuadrado() : traductor.getDescCuadradoPlural());

            case "Circulo":
                return(cantidad == 1 ? traductor.getDescCirculo() : traductor.getDescCirculoPlural());

            case "Triangulo":
                return(cantidad == 1 ? traductor.getDescTriangulo() : traductor.getDescTrianguloPlural());

            case "Trapecio":
                return(cantidad == 1 ? traductor.getDescTrapecio() : traductor.getDescTrapecioPlural());

            case "Rectangulo":
                return(cantidad == 1 ? traductor.getDescRectangulo() : traductor.getDescRectangulosPlural());
            }
            return(string.Empty);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: alanrivas/CodingChallenge
        public static string Imprimir(List <IFormaGeometrica> formas, IdiomaEnum idioma)
        {
            var sb = new StringBuilder();

            if (!formas.Any())
            {
                if (idioma == IdiomaEnum.Castellano)
                {
                    sb.Append("<h1>Lista vacía de formas!</h1>");
                }
                else
                {
                    sb.Append("<h1>Empty list of shapes!</h1>");
                }
            }
            else
            {
                sb.Append(Traductor.traducirEncabezado(idioma));

                var listaFiguras   = Enum.GetValues(typeof(FormaGeometricaEnum)).Cast <FormaGeometricaEnum>();
                var resultadoTotal = new Resultado();
                resultadoTotal.Idioma = idioma;

                foreach (var figura in listaFiguras)
                {
                    var resultado = calcularSegunTipo(formas, figura);
                    resultado.Idioma = idioma;
                    sb.Append(Idiomas.traducirLinea(resultado));
                    resultadoTotal.Cantidad       += resultado.Cantidad;
                    resultadoTotal.PerimetroTotal += resultado.PerimetroTotal;
                    resultadoTotal.AreaTotal      += resultado.AreaTotal;
                }

                // FOOTER
                sb.Append(Traductor.traducirFooter(resultadoTotal));
            }

            return(sb.ToString());
        }
コード例 #4
0
        public string Imprimir(List <Figura> listaFiguras, string idioma)
        {
            Traductor traductor = new Traductor(idioma);

            var sb = new StringBuilder();


            foreach (Figura figura in listaFiguras)
            {
                CrearFigura(figura);
            }
            int cantCuadrados   = listaCuadrados != null ? listaCuadrados.Count : 0;
            int cantCirculos    = listaCirculos != null ? listaCirculos.Count : 0;
            int cantTriangulos  = listaTriangulos != null ? listaTriangulos.Count : 0;
            int cantTrapecios   = listaTrapecios != null ? listaTrapecios.Count : 0;
            int cantRectangulos = listaRectangulos != null ? listaRectangulos.Count : 0;
            int cantFiguras     = cantCuadrados + cantCirculos + cantTriangulos + cantTrapecios + cantRectangulos;

            if (cantFiguras == 0)
            {
                sb.Append("<h1>" + traductor.getDescListaVacia() + "</h1>");
            }
            else
            {
                sb.Append("<h1>" + traductor.getDescReporte() + "</h1>");

                decimal areaCuadrados        = 0;
                decimal areaCirculos         = 0;
                decimal areaTriangulos       = 0;
                decimal areaTrapecios        = 0;
                decimal areaRectangulos      = 0;
                decimal areaTotal            = 0;
                decimal perimetroCuadrados   = 0;
                decimal perimetroCirculos    = 0;
                decimal perimetroTriangulos  = 0;
                decimal perimetroTrapecios   = 0;
                decimal perimetroRectangulos = 0;
                decimal perimTotal           = 0;

                if (cantCuadrados != 0)
                {
                    areaCuadrados      = listaCuadrados.Sum(x => x.Area());
                    perimetroCuadrados = listaCuadrados.Sum(x => x.Perimetro());
                }
                if (cantCirculos != 0)
                {
                    areaCirculos      = listaCirculos.Sum(x => x.Area());
                    perimetroCirculos = listaCirculos.Sum(x => x.Perimetro());
                }
                if (cantTriangulos != 0)
                {
                    areaTriangulos      = listaTriangulos.Sum(x => x.Area());
                    perimetroTriangulos = listaTriangulos.Sum(x => x.Perimetro());
                }
                if (cantTrapecios != 0)
                {
                    areaTrapecios      = listaTrapecios.Sum(x => x.Area());
                    perimetroTrapecios = listaTrapecios.Sum(x => x.Perimetro());
                }
                if (cantRectangulos != 0)
                {
                    areaRectangulos      = listaRectangulos.Sum(x => x.Area());
                    perimetroRectangulos = listaRectangulos.Sum(x => x.Perimetro());
                }
                areaTotal  = areaCuadrados + areaCirculos + areaRectangulos + areaTrapecios + areaTriangulos;
                perimTotal = perimetroCuadrados + perimetroCirculos + perimetroTriangulos + perimetroTrapecios + perimetroRectangulos;

                sb.Append(ObtenerLinea(cantCuadrados, areaCuadrados, perimetroCuadrados, "Cuadrado", traductor));
                sb.Append(ObtenerLinea(cantCirculos, areaCirculos, perimetroCirculos, "Circulo", traductor));
                sb.Append(ObtenerLinea(cantTriangulos, areaTriangulos, perimetroTriangulos, "Triangulo", traductor));
                sb.Append(ObtenerLinea(cantTrapecios, areaTrapecios, perimetroTrapecios, "Trapecio", traductor));
                sb.Append(ObtenerLinea(cantRectangulos, areaRectangulos, perimetroRectangulos, "Rectangulo", traductor));

                // FOOTER
                sb.Append("TOTAL:<br/>");
                sb.Append(cantFiguras + " " + (cantFiguras > 1 ? traductor.getDescFormasPlural() : traductor.getDescForma()) + " ");
                sb.Append((traductor.getDescPerimetro()) + " " + (perimTotal).ToString("#.##") + " ");
                sb.Append(traductor.getDescArea() + " " + (areaTotal).ToString("#.##"));
            }
            return(sb.ToString());
        }
コード例 #5
0
        private static string ObtenerLinea(int cantidad, decimal area, decimal perimetro, string figura, Traductor traductor)
        {
            if (cantidad > 0)
            {
                return($"{cantidad} {TraducirForma(figura, cantidad, traductor)} | {traductor.getDescArea()} {area:#.##} | {traductor.getDescPerimetro()} {perimetro:#.##} <br/>");
            }

            return(string.Empty);
        }
コード例 #6
0
        /// <summary>
        /// Genera un reporte de formas en el idioma especificado
        /// </summary>
        /// <param name="formas">Lista de formas</param>
        /// <param name="idioma">Idioma</param>
        /// <returns></returns>
        public static string Imprimir(List <FormaGeometrica> formas, Idioma idioma)
        {
            StringBuilder sb           = new StringBuilder();
            string        codigoIdioma = ObtenerCodigoIdioma(idioma);

            List <FormaModel>        datosDeFormasEnLista = new List <FormaModel>();
            Dictionary <string, int> cantidadDeFormas     = new Dictionary <string, int>();

            try
            {
                //No hay formas
                if (!formas.Any())
                {
                    return(string.Format("<h1>{0}</h1>", Traductor.Traducir("Lista vacía de formas!", codigoIdioma)));
                }

                //Hay al menos una forma
                sb.Append(string.Format("<h1>{0}</h1>", Traductor.Traducir("Reporte de Formas", codigoIdioma)));

                foreach (IForma forma in formas)
                {
                    //Obtengo el dato de una forma y lo guardo en un modelo
                    FormaModel unaForma = new FormaModel();
                    unaForma.TipoForma = forma.GetType().Name;   //Nombre
                    unaForma.Perimetro = forma.ObtenerPerimetro; //Perímetro
                    unaForma.Area      = forma.ObtenerArea;      //Área

                    //Busco el índice de la forma en la lista por tipo
                    int index = datosDeFormasEnLista.FindIndex(a => a.TipoForma == unaForma.TipoForma);

                    //Si existe, sumo su perimetro y area para obtener el total de ese tipo de forma
                    if (index > -1)
                    {
                        datosDeFormasEnLista[index].Perimetro += unaForma.Perimetro;
                        datosDeFormasEnLista[index].Area      += unaForma.Area;
                    }
                    //Sino, la agrego a la lista
                    else
                    {
                        datosDeFormasEnLista.Add(unaForma);
                    }
                    //Verifico si la key con el tipo de forma no exista y la agrego.
                    if (!cantidadDeFormas.ContainsKey(unaForma.TipoForma))
                    {
                        cantidadDeFormas.Add(unaForma.TipoForma, 1);
                    }
                    //Si existe, sumo uno en esa key (+1 forma)
                    else
                    {
                        cantidadDeFormas[unaForma.TipoForma] += 1;
                    }
                }

                //Armo el detalle del reporte
                foreach (FormaModel forma in datosDeFormasEnLista)
                {
                    sb.Append(
                        string.Format("{0} {1} | {2}: {3} | {4}: {5} |<br/>",
                                      cantidadDeFormas[forma.TipoForma],
                                      cantidadDeFormas[forma.TipoForma] > 1 ? Traductor.Traducir(forma.TipoForma + "s", codigoIdioma) : Traductor.Traducir(forma.TipoForma, codigoIdioma),
                                      Traductor.Traducir("Perímetro", codigoIdioma),
                                      forma.Perimetro.ToString("#.##"),
                                      Traductor.Traducir("Área", codigoIdioma),
                                      forma.Area.ToString("#.##")
                                      )
                        );
                }


                // FOOTER
                sb.Append(string.Format("{0} :<br/>", Traductor.Traducir("total", codigoIdioma).ToUpper()));
                sb.Append(
                    string.Format("{0} {1}",
                                  cantidadDeFormas.Sum(x => x.Value),
                                  cantidadDeFormas.Sum(x => x.Value) > 1 ? Traductor.Traducir("Formas", codigoIdioma) : Traductor.Traducir("Forma", codigoIdioma)
                                  )
                    );
                sb.Append(Traductor.Traducir(" Perímetro", codigoIdioma) + ": " + formas.Where(x => x is IForma).Sum(x => ((IForma)x).ObtenerPerimetro).ToString("#.##"));
                sb.Append(Traductor.Traducir(" Área", codigoIdioma) + ": " + formas.Where(x => x is IForma).Sum(x => ((IForma)x).ObtenerArea).ToString("#.##"));

                return(sb.ToString());
            }
            catch (Exception e)
            {
                throw e;
            }
        }