Skip to content

Instantly share code, notes, and snippets.

@AntonyMRuiz
Created September 25, 2025 23:44
Show Gist options
  • Save AntonyMRuiz/43d7a459d66e7768d2da3c9ca3ac7f93 to your computer and use it in GitHub Desktop.
Save AntonyMRuiz/43d7a459d66e7768d2da3c9ca3ac7f93 to your computer and use it in GitHub Desktop.

Proyecto grupal: Sistema de Préstamos de Biblioteca

Objetivo

Construir un sistema de préstamos de biblioteca que permita registrar usuarios, administrar materiales (libros y revistas), realizar préstamos y devoluciones, y consultar la información de distintas formas. El núcleo debe funcionar en memoria usando clases abstractas, interfaces, ArrayList y HashMap. De manera opcional, el grupo podrá conectar el sistema a una base de datos utilizando JDBC.


Alcance funcional

  1. Usuarios

    • Registrar usuarios.
    • Consultar usuarios por ID.
    • Listar todos los usuarios.
  2. Materiales (abstracto)

    • Clase abstracta Item con atributos comunes (ejemplo: id, título, autor).
    • Subclases: Libro y Revista.
    • Consultar materiales por ID.
    • Listar todos los materiales.
  3. Préstamos

    • Registrar un préstamo de un material a un usuario, si el material está disponible.
    • Registrar la devolución de un material.
  4. Búsquedas

    • Por ID: buscar usuario, material o préstamo específico.
    • Personalizadas: obtener todos los préstamos activos o históricos de un usuario.
    • Búsquedas complejas (alcanzables): combinar criterios sobre materiales (ejemplo: título contiene “java” + tipo Libro + disponible).

Base de datos (opcional con JDBC)

  • Crear una base de datos con al menos tres tablas: usuarios, materiales, prestamos.
  • Conectar desde Java con JDBC para guardar y consultar información.
  • Mantener las mismas operaciones: registrar, buscar por id, listar, etc.

Diagramas obligatorios

  • Diagrama de caso de uso: mostrar las acciones principales (gestionar usuarios, gestionar materiales, registrar préstamo, registrar devolución, consultar información).
  • Diagrama de clases: incluir clases abstractas, interfaces, entidades (Usuario, Item, Libro, Revista, Prestamo) y servicios.
  • Diagrama de base de datos: tablas con sus relaciones (un usuario puede tener muchos préstamos, un préstamo corresponde a un material).

Entregables

  • Documento corto con requerimientos y criterios de aceptación.

  • Diagramas UML: caso de uso, clases y base de datos.

  • Código Java con:

    • Modelo de dominio (usuarios, materiales, préstamos).
    • Manejo de datos en memoria con ArrayList y HashMap.
    • Servicios para registrar, consultar y buscar.
    • Programa principal (main) que muestre las funciones básicas.
    • Conexión opcional a la base de datos con JDBC.
  • README con instrucciones de ejecución, supuestos y ejemplos de uso.


Criterios de aceptación

  • Modelo con abstracción y herencia

    • Dado un modelo con Item como clase abstracta y Libro y Revista como subclases
    • Cuando creo materiales de distinto tipo
    • Entonces todos pueden tratarse como Item y mostrar su información específica.
  • Operaciones en memoria con colecciones

    • Dado listas y mapas en memoria
    • Cuando agrego, consulto y recorro usuarios y materiales
    • Entonces obtengo la información correcta en consola.
  • Reglas de préstamo

    • Dado un material disponible y un usuario válido
    • Cuando registro un préstamo
    • Entonces el material queda no disponible y el préstamo se registra como activo.
  • Devoluciones

    • Dado un préstamo activo
    • Cuando registro la devolución
    • Entonces el material vuelve a estar disponible y el préstamo queda cerrado.
  • Búsquedas por ID

    • Dado entidades registradas en memoria
    • Cuando busco un usuario, material o préstamo por su id
    • Entonces obtengo la entidad correcta o un mensaje claro si no existe.
  • Búsquedas personalizadas

    • Dado un usuario con préstamos activos e históricos
    • Cuando consulto su historial
    • Entonces veo la lista separada en activos e históricos.
  • Búsquedas complejas

    • Dado un catálogo de materiales variado
    • Cuando aplico criterios combinados (ejemplo: título contiene “java”, tipo = Libro, disponible = true)
    • Entonces obtengo únicamente los materiales que cumplen todos los filtros.
  • Conexión a la base de datos (opcional)

    • Dado una base de datos configurada
    • Cuando ejecuto las operaciones de registrar, consultar y listar con JDBC
    • Entonces los datos se guardan y recuperan desde la base de datos correctamente.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment