Skip to content

elmoteroloco/Pre-Entrega_JavaBE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

>> Registro de Cambios >>

Índice

Características principales

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.

Vista del Menú Principal
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).

Aplicación de Encapsulamiento
Encapsulamiento

______________________________________________________

Aplicación de Herencia en clases Bebida y Cafeteria
Herencia en clases Bebida y Cafeteria
Aplicación de Herencia en jerarquía de excepciones
Herencia en jerarquía de excepciones

______________________________________________________

Aplicación de Polimorfismo en clases Bebida y Cafeteria
Polimorfismo en clases Bebida y Cafeteria
Aplicación de Polimorfismo en `toString` y `equals`
Polimorfismo en `toString` y `equals`

_____________________________________________________

Aplicación de Sobrecarga de Métodos
Sobrecarga de Métodos
Aplicación de Sobrecarga de Constructores
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.

Lógica de Pedidos y Descuentos
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.

Implementación de enums
Entidad que implementa el enum

Uso del 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.

Uso del java.nio
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.

Ejemplo de excepción personalizada
Excepción personalizada para la entrada de nombres de productos implementada mediante el principio de Herencia

Validación heredada desde Runtime Exception
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

Estructura del Proyecto

/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"

Ejecución

Desde el directorio raíz en el que se instaló el sistema:

Compilar:

javac -d bin src/**/*.java

Ejecutar:

java -cp bin main.Main

Diagrama de Clases del Sistema

classDiagram
    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
Loading

Licencia

Este proyecto está bajo la Licencia MIT. Para más detalles, consultá el archivo LICENSE.

Talento Tech

Desarrollado como parte de la cursada de Java Backend 26138 como ensayo de estudio, sin fines comerciales - 2026.

About

Sistema de Gestión de Inventario y Pedidos - Pre-Entrega T.P. Java BE, Comisión 26138 - Talento Tech

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages