using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ejercicio_04_Electrodomestico { class Program { static void Main(string[] args) { List electrodomesticos = new List(); electrodomesticos.Add(new Electrodomestico(150, "rojo", 'C', 45)); electrodomesticos.Add(new Electrodomestico(1000, 300)); electrodomesticos.Add(new Electrodomestico()); electrodomesticos.Add(new Lavadora(600, 90)); electrodomesticos.Add(new Lavadora(8)); electrodomesticos.Add(new Lavadora()); electrodomesticos.Add(new Lavadora(45)); electrodomesticos.Add(new Television(299, 25)); electrodomesticos.Add(new Television(27, true, 699, "gold", 'A', 32)); electrodomesticos.Add(new Television(45, true, 699, "negro", 'C', 55)); caculaTotales(electrodomesticos); Console.ReadLine(); } private static void caculaTotales (List electrodomesticos) { Dictionary totales = new Dictionary(); foreach (Electrodomestico elect in electrodomesticos) { elect.mostrarValores(); elect.calcularPrecioFinal(); string tipo = elect.GetType().Name; try { totales[tipo] += elect.Precio;} catch { totales[tipo] = elect.Precio; } } double totalFinal = 0; Console.WriteLine(); foreach (KeyValuePair total in totales) { Console.WriteLine("Total tipo {0}: {1}", total.Key, total.Value); totalFinal += total.Value; } Console.WriteLine("Total Final: {0} ", totalFinal); } class Electrodomestico { double defaultPrecio = 100.0; string defaultColor = "blanco"; char defaultConsumo = 'F'; double defaultPeso = 5.0; string[] coloresValidos = { "blanco", "negro", "rojo", "azul", "gris" }; public double Precio { get; set; } public string Color { get; set; } public char Consumo { get; set; } public double Peso { get; set; } public double PrecioFinal { get; set; } public Electrodomestico(double precio, string color, char consumo, double peso) { this.Precio = precio; this.Color = color; this.Consumo = consumo; this.Peso = peso; this.PrecioFinal = 0; comprobarConsumoEnergetico(this.Consumo); comprobarColor(this.Color); } public Electrodomestico(double precio, double peso) { this.Precio = precio; this.Peso = peso; this.Color = defaultColor; this.Consumo = defaultConsumo; this.PrecioFinal = 0; } public Electrodomestico() { this.Precio = defaultPrecio; this.Color = defaultColor; this.Consumo = defaultConsumo; this.Peso = defaultPeso; this.PrecioFinal = 0; } private void comprobarConsumoEnergetico(char letra) { if ("ABCDEF".IndexOf(this.Consumo) < 0) { this.Consumo = defaultConsumo; } } private void comprobarColor(String color) { bool valido = false; foreach (String c in coloresValidos) { if (c.Equals(color.ToLower())) { valido = true; } } if (!valido) { this.Color = defaultColor; } } public virtual void calcularPrecioFinal() { double incremento = 0; this.PrecioFinal = 0; if (this.Consumo == 'A') {incremento = 100;} else if (this.Consumo == 'B') {incremento = 80;} else if (this.Consumo == 'C') {incremento = 60;} else if (this.Consumo == 'D') {incremento = 50;} else if (this.Consumo == 'E') {incremento = 30;} else if (this.Consumo == 'F') {incremento = 10;} aplicarIncremento("Consumo", incremento); incremento = 0; if (this.Peso < 20) {incremento = 10;} else if (this.Peso < 50) {incremento = 50;} else if (this.Peso < 80) {incremento = 80;} else {incremento = 100;} aplicarIncremento("Peso", incremento); } public virtual void aplicarIncremento (String motivo, double incremento) { if (this.PrecioFinal == 0) { this.PrecioFinal = this.Precio; } this.PrecioFinal += incremento; Console.WriteLine("Por {0} +{1} : {2}", motivo, incremento, this.PrecioFinal); } public virtual void mostrarValores() { Console.WriteLine(); Console.WriteLine(this.GetType().Name); Console.WriteLine("Peso:\t\t{0}", this.Peso); Console.WriteLine("Color:\t\t{0}", this.Color); Console.WriteLine("Consumo:\t{0}", this.Consumo); Console.WriteLine("Precio:\t\t{0}", this.Precio); } } class Lavadora : Electrodomestico { double defaultCarga = 5; public double Carga { get; set; } public Lavadora() { this.Carga = defaultCarga; //calcularPrecioFinal(); } public Lavadora(double precio, double peso) { this.Precio = precio; this.Peso = peso; this.Carga = defaultCarga; //calcularPrecioFinal(); } public Lavadora(double carga) { this.Carga = carga; //calcularPrecioFinal(); } public override void calcularPrecioFinal() { base.calcularPrecioFinal(); double incremento = 0; if (this.Carga > 30) {incremento = 50;} aplicarIncremento("Carga", incremento); } public override void mostrarValores() { //TODO BUG no muestra la carga base.mostrarValores(); Console.WriteLine("Carga:\t\t{0}", this.Carga); } } class Television : Electrodomestico { double defaultResolucion = 20; bool defaultSintonizadorTDT = false; public double Resolucion; public bool sintonizadorTDT; public Television() { this.Resolucion = defaultResolucion; this.sintonizadorTDT = defaultSintonizadorTDT; } public Television(double precio, double peso) { this.Precio = precio; this.Peso = peso; this.Resolucion = defaultResolucion; this.sintonizadorTDT = defaultSintonizadorTDT; } public Television(double resolucion, bool sintonizadorTDT, double precio, string color, char consumo, double peso) : base(precio, color, consumo, peso) { this.Resolucion = resolucion; this.sintonizadorTDT = sintonizadorTDT; } public override void calcularPrecioFinal() { base.calcularPrecioFinal(); double incremento = 0; if (this.Resolucion > 40) {incremento = this.Precio*0.3;} aplicarIncremento("Resolucion", incremento); incremento = 0; if (this.sintonizadorTDT) {incremento = 50;} aplicarIncremento("TDT", incremento); } public override void mostrarValores() { base.mostrarValores(); Console.WriteLine("Resolucion:\t{0}", this.Resolucion); Console.WriteLine("TDT:\t\t{0}", this.sintonizadorTDT); } } } }