Ayudantia_04_-_Ejercicio_Retail

Anuncio
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;
...
}
Descargar