PUCV - Escuela de Ingeniería Industrial EII 248, Estructuras de Datos Profesor: Claudio Cubillos Ayudantes: Luis Casanova – Constanza Hurtado – Carla Morales Segundo Semestre 2010 ________________________________________________________________________________________ Ayudantía N°4 Ejercicios tipo cátedra Una empresa dedicada al retail por departamentos (como Ripley, Falabella, Almacenes Paris, etc.) posee un sistema de gestión y control de las ventas para el mes en sus distintas sucursales. Dicho sistema utiliza una serie de clases que se detallan a continuación: Clase Retail: Posee el nombre de la empresa y una lista circular de sucursales. Clase Sucursal: Posee el nombre de la sucursal, la ciudad y dirección, además de un arreglo de departamentos. Se sabe que una sucursal no puede tener más de 12 departamentos. Clase Departamento: Posee el nombre del departamento, su código (entero), una lista simplemente enlazada de productos y una lista doblemente enlazada de vendedores. Clase Producto: El producto posee un SKU (código numérico), la marca, el modelo, además del precio unitario del producto (en CLP$). Clase Vendedor: Almacena el rut y nombre del vendedor, además de sus ventas en el mes. Para ello se maneja una matriz de ventas. La primera dimensión se refiere al día del mes (con max. 31 días) y la segunda almacena el orden de las ventas, de la primera a la última venta del día. Se sabe que muy raramente alguien realiza más de 35 ventas en un día y que ambas dimensiones se manejan de manera compactada (sin nulls entremedio). Venta: Contiene el SKU del producto vendido, su cantidad (o número de unidades) y provee un método que retorna el total de la venta (CLP$), llamado calcularTotal. Existen 2 tipos de venta: Normal: posee también un porcentaje de descuento; al calcularTotal multiplica el precio del producto por la cantidad, aplica el descuento y retorna el total. A Domicilio: posee además la dirección de quien compró los productos, costo de envío y su dirección; al calcularTotal suma el costo de envío al total de la compra y lo retorna. Desarrolle en java los siguientes métodos en la clase Retail. a) Implemente la jerarquía de herencia de Venta. b) public boolean realizarVenta(Vendedor v, Venta venta, int dia): agrega una venta al sistema, para esto recibe por parámetro una referencia a un vendedor, una venta y el día en que se realiza. De la venta obtiene el SKU del producto, con él verifica que tanto el vendedor como el producto pertenezcan al mismo departamento, si esta condición no se cumple se debe generar un error del tipo NoMatchFoundException, pero de cumplirse intenta agregar la venta al vendedor, si lo logra retorna true, si no (es decir no hay espacio suficiente) retorna true. Modularizar en al menos los siguientes métodos: buscar vendedor en departamento, buscar producto en departamento, agregar venta en vendedor. c) public InterfaceListaDepartamento obtenerMasVentasADomicilio(): busca en cada sucursal el departamento con más ventas a domicilio, y luego retorna una lista con estos departamentos. Modularizar en al menos los siguientes métodos: recorrer y contar ventas a domicilio en vendedor, recorrer y contar ventas a domicilio en departamento. d) public String sucursalConMenosUtilidades(): busca la sucursal con menor utilidad, y retorna el nombre de esta. Modularizar en al menos los siguientes métodos: recorrer ventas y calcular utilidad en vendedor, recorrer vendedores y calcular utilidad en departamento, recorrer departamentos y calcular utilidad en sucursal, y recorrer sucursales y calcular utilidad. Nota: - Puedes agregar los métodos que estimes convenientes, pero no agregar atributos nuevos. public class NodoGenerico { private Object data; private NodoGenerico next; … } public interface InterfaceListaGenerica { public void add(Object o); public void next(); public Object currValue(); public boolean eol(); public void setFirst(); } public class Retail { private String nombre; private InterfaceListaGenerica sucursales; … } public class Departamento { private String nombre; private int codigo; private InterfaceListaVendedor vendedores; private InterfaceListaGenerica productos; … } public class Producto { private int SKU,precio; private String marca,modelo; ... } public class NodoVendedor{ private Vendedor vendedor; private NodoVendedor next,prev; … } public interface InterfaceListaVendedor { public void agregarAlFinal(Vendedor v); public void avanzar(); public void retroceder(); public Vendedor recuperarVendedor(); public boolean esFinDeLista(); public void setearPrimero(); } public class Sucursal { private String nombre,ciudad,direccion; private Departamento[] departamentos; ... } public class Vendedor { private int rut; private String nombre; private Venta[][] ventas; ... }