Proyecto¶
En una tienda se desea almacenar la siguiente información sobre los productos:
- Un identificador
- El nombre del producto
- La marca del producto
- El modelo del producto, si éste tuviese
- Precio individual del producto
- Cantidad de stock
- Fecha de caducidad, si el producto lo require
- Peso del producto en gramos
El identificador se forma con las dos primeras letras del nombre del producto, seguido de las 3 siguientes de la marca, seguido del hashCode de ambas.
La cesta de la compra estará formada por una colección de productos y la cantidad de éstos que contiene. Cada vez que se añade un producto, se deberá comprobar si éste ya existe en la cesta. Si es así, aumentará la cantidad de producto que hay en la cesta, por el contrario añadirá el producto a la cesta con la cantidad de 1.
Una vez que se realice la compra se guardará la información en las Facturas, de cada factura se desea conocer:
- El identificador de la factura (será una hash de la fecha de la factura)
- Fecha de la factura
- Detalle de la factura (compuesta por el producto, cantidad y precio)
- Descuentos
- Precio total
Realiza una aplicación Java teniendo en cuenta lo siguiente:
- Cuando un usuario va a comprar el contenido de la cesta, ésta se quedará vacía, además se deberá decrementar la cantidad de stock del producto comprado.
- Se realizará un descuento del 5% si supera un precio total de 100€ en la factura o si tiene más de 10 productos diferentes
La aplicación tendrá las siguientes opciones:
- Mostrar lista de productos
- Localizar producto por marca, nombre o identificador.
- Añadir producto a la cesta (solo haciendo uso del identificador, en caso de que no encuentre dicho producto mostrará un mensaje de error)
- Mostrar la cesta
- Eliminar producto de la cesta
- Realizar compra (si la cesta está vacía mostrará un mensaje de error)
- Mostrar facturas
- Filtrar factura por fechas (mes, año y día) o por nombre.
Para realizar este proyecto se tendrá en cuenta:
- Se deberá entregar un diagrama de clase que represente las relaciones entre las clases y las interfaces.
- Todo las operaciones posibles se hará haciendo uso de streams
- Se podrá usar la librería common realiza en proyectos anteriores, haciendo uso de JARs.
- El nombre de las funciones será en inglés y deberán ser lo suficiente claras para poder identificarlas con facilidad.
- El código se comentará haciendo uso de los comentarios JavaDoc además, de comentarios normales para dar una explicación a la parte del código más importante.
- El repositorio de GitHub tendrá el siguiente nombre pr13java-NOMBRE-streams siendo NOMBRE el nombre del alumno.
- Se declarará aquellas variables que sean necesarias inicializándolas si es necesario, indicando el tipo correspondiente.
- Se hará uso de funciones y procedimientos donde sea oportuno.
- La entrega de este proyecto se realizará a través de un enlace a un repositorio de GitHub, realizando siempre más de un commit.
- Se valorará la limpieza, la claridad, y la estructura del proyecto.