import java.util.Scanner; /** * Replace this JavaDoc comment for the purpose of this class */ public class Solution { /** * Gets data from standard input */ private Scanner input; /** * Start the execution of the solution * @param args Command line arguments */ public static void main(String args[]) { Solution solution = new Solution(); solution.run(); } /** * Run the solution. This method is called from main() */ public void run() { // Create object to read data from standard input input = new Scanner(System.in); //Crea un objeto del tipo Tienda Tienda carrillo= new Tienda(); // Asigna a la tienda el nombre "Carrillo" carrillo.setNombre("Carrillo"); //Crea un objeto del tipo Tienda Tienda sardinal= new Tienda(); // Asigna a la tienda el nombre "Carrillo" sardinal.setNombre("Sardinal"); //Crea un objeto del tipo Tienda Tienda liberia= new Tienda(); // Asigna a la tienda el nombre "Carrillo" liberia.setNombre("Liberia"); // Mientras en la entrada aún hayan registros de cierres por leer while ( input.hasNext() ) { //Leer fecha String fecha= input.next(); //Leer tienda String tienda= input.next(); //Leer cierre de caja double cierre= input.nextDouble(); //Promediar las ventas para cada tienda según la temporada if(tienda.equals("Carrillo")) { // Ingresa a la tienda Carrillo el cierre de una fecha carrillo.cierreDeCaja(fecha, cierre); } else if(tienda.equals("Sardinal")) { // Ingresa a la tienda Sardinal el cierre de una fecha sardinal.cierreDeCaja(fecha, cierre); } else if(tienda.equals("Liberia")) { // Ingresa a la tienda Liberia el cierre de una fecha liberia.cierreDeCaja(fecha, cierre); } } //Imprime el encabezado de la tabla final de resultados System.out.printf("TIENDA BAJA ALTA%n"); System.out.printf("=============== =============== ===============%n"); //Imprimir los promedios para cada tienda según la temporada carrillo.printPromedio(); liberia.printPromedio(); sardinal.printPromedio(); // Close the standard input input.close(); } } /** *Esta clase representa a una tienda que puede cambiar de nombre, actualizar su ingreso total para *temporada alta y temporada baja */ class Tienda { // Nombre de la tienda private String nombre= null; //Cierre total en temporada baja private double cierreTotalBaja= 0.0; //Cierre total en temporada alta private double cierreTotalAlta= 0.0; //Número de cierres para la temporada baja private int fechasBaja= 0; //Número de cierres para la temporada alta private int fechasAlta= 0; /** *Este método le asigna el nombre a imprimir para la tienda * *@param nombre de tipo String será el nombre a imprimir de la tienda y se obtiene del Scanner */ public void setNombre(String nombre) { this.nombre= nombre; } /** *Este método actualiza el monto vendido total (cierreTotal) y la cantidad de cierres para la tienda (fechas) *@param fecha posee el formato día/mes/año *@param cierre es un número real que equivale al cierre para la fecha ingresada */ public void cierreDeCaja(String fecha, double cierre) { String[] fechaSeparada= fecha.split("/"); int mes= Integer.parseInt(fechaSeparada[1]); if (mes == 12 || mes <= 04 || mes == 07) { this.cierreTotalAlta+= cierre; this.fechasAlta++; } else { this.cierreTotalBaja+= cierre; this.fechasBaja++; } } /** *Este método imprime en fila el nombre de la tienda, su promedio para temporada baja *su promedio para temporada alta */ public void printPromedio() { Impresor impresor= new Impresor(); impresor.printTienda(this.nombre); impresor.printTemporadaBaja(this.cierreTotalBaja, this.fechasBaja); impresor.printTemporadaAlta(this.cierreTotalAlta, this.fechasAlta); } } /** *Esta clase funciona como impresor de promedios por temporada *para la tienda */ class Impresor { //Promedio de ventas en temporada alta private double promedioAlta= 0.0; //Promedio de ventas en temporada baja private double promedioBaja= 0.0; /** *Este método imprime el nombre de la tienda en el formato correspondiente para cada tienda *@param nombre es el nombre que lleva la tienda */ public void printTienda(String nombre) { if (nombre.equals("Liberia")) { System.out.printf("%s ", nombre); } else { System.out.printf("%s ", nombre); } } /** *Este método imprime el promedio de ventas en temporada baja según el formato requerido *@param total es el total vendido por la tienda en temporada baja *@param fechas es el número de cierres o fechas de cierres en temporada baja para la tienda */ public void printTemporadaBaja(double total, int fechas) { if (fechas != 0) { this.promedioBaja= (total / fechas); System.out.printf("%,15.2f", this.promedioBaja); } else { double zero= 0.0; System.out.printf("%,15.2f", zero); } } /** *Este método imprime el promedio de ventas en temporada alta según el formato requerido *@param total es el total vendido por la tienda en temporada alta *@param fechas es el número de cierres o fechas de cierres en temporada alta para la tienda */ public void printTemporadaAlta(double total, int fechas) { if (fechas != 0) { this.promedioAlta= (total / fechas); //DecimalFormat formato= new DecimalFormat("#,###.00"); System.out.printf(" %,15.2f%n", this.promedioAlta); } else { double zero= 0.0; System.out.printf(" %,15.2f%n", zero); } } }