Problema de Programación

Problema de Programación en Java: Sistema de Gestión de Inventario de una Librería

Objetivo:

Desarrollar una aplicación en Java que permita gestionar el inventario de libros de una librería, haciendo uso adecuado de estructuras de datos, algoritmos de ordenamiento y técnicas de persistencia.


🧱 Requisitos funcionales

📌 1. Datos a almacenar por libro:

  • String titulo

  • String autor

  • String isbn (único)

  • int anioPublicacion

  • String genero

  • double precio

  • int stock

📌 2. Funciones a implementar:

  • Agregar un libro al inventario.

  • Editar los datos de un libro (identificado por ISBN).

  • Eliminar un libro.

  • Buscar libro por:

    • Título

    • Autor

    • ISBN (debe ser búsqueda rápida, preferiblemente con estructura como HashMap o Árbol)

  • Ordenar la lista de libros por:

    • Título

    • Autor

    • Año de publicación

  • Mostrar listado de todos los libros.

  • Generar reporte de libros con stock bajo (menor a 5).

  • Guardar y cargar los datos en archivo (puede ser .csv o .txt).


🛠️ Requisitos técnicos

  • Uso de ArrayList, HashMap, o TreeMap para almacenar los datos en memoria.

  • Implementar algoritmos de ordenamiento (ej. QuickSort, MergeSort, o usar Collections.sort() con Comparator).

  • Implementar al menos una forma de persistencia de los datos (guardado/carga desde archivos con BufferedReader y BufferedWriter o FileReader/FileWriter).

  • Aplicación tipo consola (opcional: interfaz gráfica con Swing para alumnos avanzados).


📚 Ejemplo de estructura de clases

java
class Libro { private String titulo; private String autor; private String isbn; private int anioPublicacion; private String genero; private double precio; private int stock; // Constructor, getters y setters }
java
class Inventario { private List<Libro> libros; // Métodos para agregar, buscar, eliminar, ordenar, guardar, cargar, etc. }

Aprendizajes esperados

  • Implementación y manejo de estructuras de datos en Java.

  • Ordenamiento y búsqueda eficiente de información.

  • Organización de datos persistentes mediante archivos.

  • Diseño modular de clases y métodos.

  • Buenas prácticas de encapsulamiento y separación de responsabilidades.