Skip to content

Sodi0/inventario-fifo-fefo-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Inventario FEFO/FIFO con Control de Vencimientos

Este repositorio contiene una aplicación de escritorio desarrollada en Java (AWT/Swing) para la gestión de inventarios basada en lotes y fechas de vencimiento.
El sistema implementa principalmente la lógica FEFO (First Expired, First Out) —una extensión práctica del modelo FIFO— priorizando la salida de productos próximos a caducar para reducir mermas y optimizar la rotación de stock.

Este proyecto corresponde al proyecto final de la asignatura Programación Orientada a Objetos (POO) y fue diseñado para demostrar la aplicación práctica de conceptos de diseño orientado a objetos, arquitectura en capas, persistencia con bases de datos relacionales y reglas de negocio reales.


📋 Características Principales

📦 Gestión de Inventario por Lotes

A diferencia de un inventario tradicional que solo maneja cantidades totales, este sistema gestiona lotes individuales, permitiendo un control detallado de cada producto:

  • Entradas por Lote
    Registro de nuevos productos con identificación de lote, fecha de vencimiento, cantidad y costo.

  • Lógica FEFO / FIFO
    El sistema sugiere y prioriza automáticamente el retiro del lote más próximo a vencer, respetando el orden de ingreso cuando las fechas son equivalentes.

  • Control de Caducidad
    Visualización explícita de:

    • productos vencidos
    • productos próximos a vencer
    • stock disponible priorizado

⚙️ Funcionalidades Core

  • Autenticación de Usuarios
    Sistema de login con roles (Administrador / Empleado) gestionados desde la base de datos.

  • Entradas (Compras)
    Registro detallado de ingresos de stock: proveedor, lote, fecha de vencimiento, cantidad y costo.

  • Salidas (Ventas / Retiros / Merma)
    Descuento inteligente de stock.
    Al solicitar una cantidad, el sistema debita automáticamente de los lotes correspondientes siguiendo la prioridad FEFO.

  • Alertas Visuales
    Indicadores para:

    • lotes vencidos
    • productos próximos a vencer
    • stock bajo
  • Reportes
    Historial de movimientos de entradas y salidas para control y trazabilidad.


🛠️ Arquitectura y Tecnologías

El proyecto sigue una arquitectura en capas, separando claramente la interfaz de usuario, la lógica de negocio y el acceso a datos.

  • Lenguaje: Java 20
  • Interfaz de Usuario: Java Swing (JFrames, JDialogs)
  • Base de Datos: MySQL 8.0+
  • Acceso a Datos: JDBC (Java Database Connectivity)
  • Gestión de Construcción: Apache Ant

📁 Estructura del Proyecto

  • src/Class
    Contiene la lógica de negocio y acceso a datos:

    • Conexion.java: Utilidad / Singleton para la gestión de la conexión JDBC.
    • Entradas.java, Salidas.java, Productos.java:
      Implementan las reglas de negocio (cálculo de stock, validaciones, lógica FEFO).
  • src/View
    Interfaz gráfica:

    • frm_Login.java: Punto de entrada de la aplicación.
    • Formularios y diálogos para gestión del sistema.
  • src/Other

    • Script.sql: Script de creación y carga inicial de la base de datos.
  • config

    • Archivos de configuración externos (db.properties).

🚀 Instalación y Ejecución

Requisitos Previos

  • JDK 20 o superior
  • MySQL Server en ejecución
  • NetBeans IDE (opcional, recomendado para edición de UI)

Capturas del Sistema

Pantalla de Login

alt text

Gestión de Entradas

alt text

Gestión de Salidas (Lógica FEFO)

alt text

Menu principal

alt text

Inventario productos

alt text

Registro empleados

alt text


¿Qué hace este sistema?

A diferencia de un inventario tradicional que solo cuenta cantidades, este sistema controla lotes individuales con sus fechas de vencimiento. Cuando se realiza una venta, automáticamente descuenta del lote más próximo a vencer.

Características principales

  • Entradas: Registro de compras con proveedor, costo, lote y fecha de vencimiento
  • Salidas: Descuento automático desde los lotes que vencen primero
  • Alertas: Notificaciones de productos con stock bajo o lotes vencidos
  • Reportes: Historial de entradas y salidas
  • Autenticación: Control de usuarios con roles (Administrador/Empleado)

Tecnologías

  • Java 20 - Lenguaje principal
  • Java Swing - Interfaz gráfica
  • MySQL 8.0+ - Base de datos
  • JDBC - Conexión a base de datos
  • Apache Ant - Compilación

Instalación

1. Requisitos previos

  • Java JDK 20 o superior
  • MySQL Server 8.0+
  • NetBeans (opcional)

2. Descargar dependencias

Descarga estos archivos JAR y colócalos en la carpeta lib/:

JCalendar 1.4

MySQL Connector/J 8.0.33

Nota: Las librerías externas no se incluyen en el repositorio para mantener buenas prácticas de versionado.

3. Configurar base de datos

Ejecuta el script SQL:

mysql -u root -p < src/Other/Script.sql

Esto crea la base de datos supermercado y las tablas necesarias.

4. Configurar conexión

Edita el archivo config/db.properties:

db.name=supermercado
db.url=jdbc:mysql://localhost:3306/supermercado
db.user=root
db.password=tu_contraseña

5. Ejecutar

Desde NetBeans:

  1. Abrir proyecto
  2. Ejecutar frm_Login.java

Desde terminal:

ant run

Estructura del proyecto

src/
├── Class/              # Lógica de negocio
│   ├── Conexion.java   # Gestión de BD
│   ├── Productos.java
│   ├── Entradas.java
│   └── Salidas.java
│
├── View/               # Interfaz gráfica
│   ├── frm_Login.java
│   ├── frm_Principal.java
│   ├── frm_Entradas.java
│   └── frm_Salidas.java
│
└── Other/
    └── Script.sql      # Base de datos

config/
└── db.properties       # Configuración

lib/                    # Librerías externas
├── jcalendar-1.4.jar
└── mysql-connector-j-8.0.33.jar

Conceptos de POO aplicados

Encapsulamiento

Las conexiones a la base de datos y la lógica de negocio están protegidas. Solo se exponen métodos públicos necesarios.

public class Conexion {
    private static Connection conexion; // Privado

    public static Connection establecerConexion() { // Público
        // Lógica protegida
    }
}

Abstracción

Separación clara entre capas: la interfaz gráfica no conoce detalles de SQL, solo trabaja con objetos.

Modularidad

Cada clase tiene una responsabilidad única. Cambios en la lógica de negocio no afectan la interfaz.


Algoritmo FEFO

Cuando se solicita una salida de 50 unidades y hay:

  • Lote A: 30 unidades (vence el 15/01)
  • Lote B: 40 unidades (vence el 22/01)

El sistema automáticamente:

  1. Descuenta 30 del Lote A (queda en 0)
  2. Descuenta 20 del Lote B (quedan 20)

About

Desktop inventory management system with batch tracking and expiration control. FEFO/FIFO algorithm implementation. Java Swing + MySQL + JDBC. OOP final project.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages