Sistema de Gestión de Inventario y Pedidos - Pre-Entrega T.P. Java BE, Comisión 26138 - Talento Tech
Es una aplicación de consola desarrollada en Java 17 para gestionar un inventario de productos y procesar pedidos de venta. El sistema sigue una arquitectura modular de responsabilidad única, separando la lógica de negocio, la persistencia de datos y la interfaz de usuario.
- Sistema de Gestión de Inventario y Pedidos - Pre-Entrega T.P. Java BE, Comisión 26138 - Talento Tech
Gestión de Inventario (CRUD): Permite listar, agregar, buscar, modificar, eliminar (desactivar y reactivar) productos, realizar, listar, entregar y cancelar pedidos y realiza un reporte de ventas mostrando el capital efectivo (pedidos entregados) y el crédito (pedidos pendientes) de las actividades realizadas. Se utiliza una eliminación "lógica" (desactivación booleana o "soft-delete"), que permite la reactivación de los productos, consiguiendo también con esto mantener la integridad del historial de pedidos mediante la identidad única de los productos.
Interfaz del Menú Principal (CRUD)
Arquitectura Basada en POO:
> **Encapsulamiento** (validaciones en setters)
> **Herencia** (clases `Bebida` y `Cafeteria`; jerarquía de "exceptions")
> **Polimorfismo** (se aplica en relación al booleano que selecciona las clases `Bebida` y `Cafeteria` y en los @Override de `toString` y `equals`)
> **Sobrecarga** (múltiples constructores para creación y persistencia).
Herencia en clases Bebida y Cafeteria
Herencia en jerarquía de excepciones
Polimorfismo en clases Bebida y Cafeteria
Polimorfismo en `toString` y `equals`
Sobrecarga de Métodos
Sobrecarga de Constructores
Sistema de Pedidos y Lógica de Negocio: Gestión de pedidos con actualización de estado interactiva, cálculo automático de descuentos progresivos (10% y 20%) y recupero autonomo de stock ante cancelación.
Recupero autónomo de Stock en la cancelación de pedidos
Arquitectura Modular: Separación de responsabilidades mediante servicios especializados (ProductoService, PedidoService, PersistenceService), un Controlador central (MenuController) para la orquestación y una Vista desacoplada (ConsoleView). Esta estructura garantiza la responsabilidad única, facilitando el mantenimiento y la escalabilidad del sistema.
Control de Flujo con Enums: Uso de EstadoPedido para manejar el ciclo de vida de las ventas y generar reportes de caja.
Entidad que implementa el enum
Aplicación de enums en el sistema
Persistencia de Datos: Almacenamiento en archivos CSV mediante la API java.nio, consiguiendo que la identidad de los productos se mantenga consistente.
Parte de la implementación de persistencia en el sistema
Experiencia de Usuario (UX): Interfaz de consola mejorada con validaciones de entrada, manejo de excepciones personalizadas y resaltado de errores mediante códigos de color ANSI.
Excepción personalizada para la entrada de nombres de productos implementada mediante el principio de Herencia
Ejemplo de uso de validación, en este caso, usando polimorfismo en la jerarquia de excepciones de dominio, basada en Runtime Exception, implementada en el sistema
/Pre-Entrega_JavaBE"
|
|___ "/src"
| |
| |___ "/assets"
| | |
| | |___"enum1.png"
| | |___"enum2.png"
| | |___"herencia1.png"
| | |___"herencia2.png"
| | |___"logicaPedidos.png"
| | |___"menuCRUD.png"
| | |___"nioPersist.png"
| | |___"polimorfismo1.png"
| | |___"polimorfismo2.png"
| | |___"sobrecargaConstructor.png"
| | |___"sobrecargaMetodo.png"
| | |___"ux1.png"
| | |___"ux2.png"
| | |___"validacionSetter.png"
| |
| |___ "/controller"
| | |
| | |___"MenuController.java"
| |
| |___ "/exceptions"
| | |
| | |___"NombreInvalidoException.java"
| | |___"PrecioInvalidoException.java"
| | |___"StockInsuficienteException.java"
| | |___"StockInvalidoException.java"
| | |___"ValidacionProductoException.java"
| |
| |___ "/main"
| | |
| | |___"Main.java"
| |
| |___ "/model"
| | |
| | |___"Bebida.java"
| | |___"Cafeteria.java"
| | |___"EstadoPedido.java"
| | |___"LineaPedido.java"
| | |___"Pedido.java"
| | |___"Producto.java"
| |
| |___ "/service"
| | |
| | |___"PedidoService.java"
| | |___"PersistenceService.java"
| | |___"ProductoService.java"
| |
| |___ "/view"
| |
| |___"ConsoleView.java"
|
|___".gitignore"
|___"changelog.md"
|___"inventario.csv"
|___"LICENSE"
|___"pedidos.csv"
|___"pedidos_detalle.csv"
|___"README.md"
Desde el directorio raíz en el que se instaló el sistema:
Compilar:
javac -d bin src/**/*.javaEjecutar:
java -cp bin main.MainclassDiagram
class Producto {
<<abstract>>
#int id
#String nombre
#double precio
#int stock
#boolean activo
+getDetalleTipo() String*
+toString() String
+equals(Object) boolean
}
class Bebida {
-boolean esAlcoholica
+getDetalleTipo() String
}
class Cafeteria {
+getDetalleTipo() String
}
class Pedido {
-int idPedido
-List~LineaPedido~ lineas
-double total
-double totalSinDescuento
-EstadoPedido estado
+agregarProducto(Producto, int, double) void
+getAhorroTotal() double
}
class LineaPedido {
-Producto producto
-int cantidad
-double precioAplicado
}
class EstadoPedido {
<<enumeration>>
PENDIENTE
ENTREGADO
CANCELADO
}
class PedidoService {
-ArrayList~Pedido~ historialPedidos
+getHistorialPedidos() ArrayList~Pedido~
+agregarPedidoAlHistorial(Pedido) void
+actualizarEstadoPedido(List, int, EstadoPedido) void
+calcularDatosReporte() double[]
}
class ProductoService {
+agregarProducto(List, String, double, int, boolean) void
+buscarProducto(List, String) Producto
+buscarProducto(List, int) Producto
+modificarProducto(List, int, String, double, int) void
+eliminarProducto(List, int) void
+reactivarProducto(List, int) void
+procesarItemVenta(List, Pedido, int, int) double
}
class PersistenceService {
+guardarInventarioCSV(List) void
+cargarInventarioCSV(List) boolean
+guardarPedidosCSV(List) void
+cargarPedidosCSV(List, List) boolean
}
class ConsoleView {
+mostrarMensaje(String) void
+mostrarError(String) void
+mostrarAviso(String) void
+mostrarExito(String) void
+mostrarMenuPrincipal() void
+mostrarCatalogo(List) void
+mostrarInactivos(List) void
+mostrarHistorialPedidos(List) void
+mostrarReporte(double, double, int) void
}
class MenuController {
-ProductoService productoService
-PedidoService pedidoService
-PersistenceService persistence
-ConsoleView view
-ArrayList~Producto~ inventario
+iniciar() void
+CancelarException
}
class StockInsuficienteException {
+StockInsuficienteException(String mensaje)
}
class ValidacionProductoException {
+ValidacionProductoException(String mensaje)
}
class RuntimeException {
<<Java Library>>
}
class IOException {
<<Java Library>>
}
class NombreInvalidoException {
+NombreInvalidoException(String mensaje)
}
class PrecioInvalidoException {
+PrecioInvalidoException(String mensaje)
}
class StockInvalidoException {
+StockInvalidoException(String mensaje)
}
Producto <|-- Bebida : Herencia
Producto <|-- Cafeteria : Herencia
Pedido "1" *-- "*" LineaPedido : Composición
LineaPedido "1" --> "1" Producto : Referencia
Pedido "1" --> "1" EstadoPedido : Usa
PedidoService "1" o-- "*" Pedido : Gestiona historial
Producto ..> NombreInvalidoException : lanza
Producto ..> PrecioInvalidoException : lanza
Producto ..> StockInvalidoException : lanza
ValidacionProductoException <|-- NombreInvalidoException : Herencia
ValidacionProductoException <|-- PrecioInvalidoException : Herencia
ValidacionProductoException <|-- StockInvalidoException : Herencia
RuntimeException <|-- ValidacionProductoException : Herencia
RuntimeException <|-- CancelarException : Herencia
ProductoService ..> Producto : opera
ProductoService ..> StockInsuficienteException : lanza
ProductoService ..> ValidacionProductoException : lanza
PersistenceService ..> IOException : maneja
Main ..> MenuController : inicia
MenuController "1" --> "1" ProductoService : orquesta productos
MenuController "1" --> "1" PedidoService : orquesta pedidos
MenuController "1" --> "1" PersistenceService : persiste
MenuController "1" --> "1" ConsoleView : muestra
MenuController "1" o-- "*" Producto : maneja inventario
Este proyecto está bajo la Licencia MIT. Para más detalles, consultá el archivo LICENSE.
Desarrollado como parte de la cursada de Java Backend 26138 como ensayo de estudio, sin fines comerciales - 2026.
