Proyecto Tema 4 – Sistema de gestión de Reservas
📌 Contexto
Una biblioteca municipal qué digitalizar la gestión de sus libros y préstamos. Para ello se desarrolla una aplicación sencilla en Java basada en programación orientada a objetos, utilizando clases, objetos y enumerados.
🎯 Objetivos del proyecto
- Aplicar los conceptos de programación orientada a objetos.
- Utilizar enumerados para representar estados.
- Trabajar con referencias entre objetos.
- Comprobar cómo los cambios en un objeto afectan a otros.
📦 Enumerado EstadoPrestamo
El enumerado EstadoPrestamo representa el estado en el qué puede encontrarse un libro dentro del sistema.
package Proyecto;
public enum EstadoPrestamo {
DISPONIBLE,
PRESTADO,
RETRASADO
}
📘 Clase Libro
La clase Libro representa un libro de la biblioteca. Sus atributos son privados y solo se accede a ellos mediante métodos.
package Proyecto;
public class Libro {
private String isbn;
private String titulo;
private String autor;
private int annoPublicacion;
private EstadoPrestamo estado;
// Constructor
public Libro(String isbn, String titulo, String autor, int annoPublicacion, EstadoPrestamo estado) {
this.isbn = isbn;
this.titulo = titulo;
this.autor = autor;
this.annoPublicacion = annoPublicacion;
this.estado = estado;
}
public void mostrarInformacion() {
System.out.println("ISBN: " + isbn);
System.out.println("Título: " + titulo);
System.out.println("Autor: " + autor);
System.out.println("Año de publicación: " + annoPublicacion);
System.out.println("Estado: " + estado);
}
public boolean esAntiguo() {
return (2024 - annoPublicacion) > 20;
}
public void cambiarEstado(EstadoPrestamo nuevoEstado) {
this.estado = nuevoEstado;
}
public EstadoPrestamo getEstado() {
return estado;
}
}
🔍 Aspectos destacados
- Uso de atributos privados (Encapsulación).
- Método para cambiar el estado del libro.
- Método para comprobar si el libro es antiguo.
👤 Clase Usuario
Representa a un usuario de la biblioteca qué puede realizar préstamos.
package Proyecto;
public class Usuario {
private String dni;
private String nombre;
private int edad;
public Usuario(String dni, String nombre, int edad) {
this.dni = dni;
this.nombre = nombre;
this.edad = edad;
}
public void mostrarDatos() {
System.out.println("DNI: " + dni);
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
}
}
📄 Clase Prestamo
La clase Prestamo relaciona un libro con un usuario. Al crear un préstamo, el estado del libro cambia automáticamente a PRESTADO.
package Proyecto;
public class Prestamo {
private Libro libro;
private Usuario usuario;
private int diasPrestamo;
public Prestamo(Libro libro, Usuario usuario, int diasPrestamo) {
this.libro = libro;
this.usuario = usuario;
this.diasPrestamo = diasPrestamo;
libro.cambiarEstado(EstadoPrestamo.PRESTADO);
}
public void mostrarDetalle() {
System.out.println("DETALLE DEL PRÉSTAMO");
libro.mostrarInformacion();
System.out.println("Usuario:");
usuario.mostrarDatos();
System.out.println("Días de préstamo: " + diasPrestamo);
}
public void marcarRetraso() {
libro.cambiarEstado(EstadoPrestamo.RETRASADO);
}
}
▶️ Clase Main
En la clase principal se crean los libros, los usuarios y los préstamos, comprobando cómo el cambio de estado del libro se refleja en todas sus referencias.
package Proyecto;
public class Main {
public static void main(String[] args) {
Libro libro1 = new Libro("111", "El qué "Cervantes", 1605, EstadoPrestamo.DISPONIBLE);
Usuario usuario1 = new Usuario("12345678A", "Angustias", 58);
System.out.println("ESTADO INICIAL");
libro1.mostrarInformacion();
Prestamo prestamo1 = new Prestamo(libro1, usuario1, 15);
System.out.println("\nDESPUÉS DEL PRÉSTAMO");
libro1.mostrarInformacion();
System.out.println();
prestamo1.mostrarDetalle();
prestamo1.marcarRetraso();
System.out.println("\nDESPUÉS DE MARCAR RETRASO");
libro1.mostrarInformacion();
}
}
✅ Conclusiones
- Se ha trabajado correctamente con clases, objetos y enumerados.
- Se comprueba el uso de referencias entre objetos.
- El estado del libro cambia automáticamente según el préstamo.
- El proyecto simula un sistema real de gestión bibliotecaria.