From 803c814d8257af60c4b6f974610f348fec3ece88 Mon Sep 17 00:00:00 2001 From: 1dam Date: Wed, 17 Jun 2026 09:43:56 +0200 Subject: [PATCH 1/5] =?UTF-8?q?Desacopla=20la=20aplicaci=C3=B3n=20seg?= =?UTF-8?q?=C3=BAn=20el=20principio=20de=20inversi=C3=B3n=20de=20dependenc?= =?UTF-8?q?ias,=20inyectando=20las=20dependencias=20de=20forma=20manual.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/biblioteca/Aplicacion.java | 24 +--------- .../org/biblioteca/AplicacionInterface.java | 26 ++++++++++ .../java/org/biblioteca/entidades/Libro.java | 15 +++++- .../biblioteca/entidades/LibroInterface.java | 38 +++++++++++++++ .../org/biblioteca/entidades/Prestamo.java | 17 ++++++- .../entidades/PrestamoInterface.java | 44 +++++++++++++++++ .../java/org/biblioteca/entidades/Socio.java | 13 ++++- .../biblioteca/entidades/SocioInterface.java | 34 +++++++++++++ .../org/biblioteca/herramientas/JsonUtil.java | 31 +----------- .../herramientas/JsonUtilInterface.java | 39 +++++++++++++++ .../biblioteca/interfaz/MenuPrincipal.java | 14 +++++- .../interfaz/MenuPrincipalInterface.java | 27 +++++++++++ .../org/biblioteca/negocio/GestionLibros.java | 7 ++- .../negocio/GestionLibrosInterface.java | 18 +++++++ .../biblioteca/negocio/GestionPrestamos.java | 6 ++- .../negocio/GestionPrestamosInterface.java | 16 +++++++ .../org/biblioteca/negocio/GestionSocios.java | 6 ++- .../negocio/GestionSociosInterface.java | 16 +++++++ .../biblioteca/repositorio/AlmacenLibros.java | 34 +++---------- .../repositorio/AlmacenLibrosInterface.java | 48 +++++++++++++++++++ .../repositorio/AlmacenPrestamos.java | 34 +++---------- .../AlmacenPrestamosInterface.java | 48 +++++++++++++++++++ .../biblioteca/repositorio/AlmacenSocios.java | 33 ++----------- .../repositorio/AlmacenSociosInterface.java | 46 ++++++++++++++++++ 24 files changed, 490 insertions(+), 144 deletions(-) create mode 100644 src/main/java/org/biblioteca/AplicacionInterface.java create mode 100644 src/main/java/org/biblioteca/entidades/LibroInterface.java create mode 100644 src/main/java/org/biblioteca/entidades/PrestamoInterface.java create mode 100644 src/main/java/org/biblioteca/entidades/SocioInterface.java create mode 100644 src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java create mode 100644 src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java create mode 100644 src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java create mode 100644 src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java create mode 100644 src/main/java/org/biblioteca/negocio/GestionSociosInterface.java create mode 100644 src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java create mode 100644 src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java create mode 100644 src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java diff --git a/src/main/java/org/biblioteca/Aplicacion.java b/src/main/java/org/biblioteca/Aplicacion.java index 3e3821a..3780947 100644 --- a/src/main/java/org/biblioteca/Aplicacion.java +++ b/src/main/java/org/biblioteca/Aplicacion.java @@ -4,31 +4,9 @@ import java.util.Scanner; -public class Aplicacion { +public class Aplicacion implements AplicacionInterface { private static final Scanner lector = new Scanner(System.in); private static final MenuPrincipal menu = new MenuPrincipal(lector); - public static void main(String[] args) { - boolean continuar = true; - while (continuar) { - System.out.println("\n╔════════════════════════════════════════╗"); - System.out.println("║ SISTEMA DE GESTIÓN BIBLIOTECARIA ║"); - System.out.println("╚════════════════════════════════════════╝"); - System.out.println("1) Gestión de Libros"); - System.out.println("2) Gestión de Socios"); - System.out.println("3) Gestión de Préstamos"); - System.out.println("0) Salir del sistema"); - System.out.print("Opción: "); - String opcion = lector.nextLine().trim(); - switch (opcion) { - case "1" -> menu.mostrarMenuLibros(); - case "2" -> menu.mostrarMenuSocios(); - case "3" -> menu.mostrarMenuPrestamos(); - case "0" -> continuar = false; - default -> System.out.println("Opción incorrecta"); - } - } - System.out.println("\n¡Gracias por usar el sistema!"); - } } diff --git a/src/main/java/org/biblioteca/AplicacionInterface.java b/src/main/java/org/biblioteca/AplicacionInterface.java new file mode 100644 index 0000000..70071d5 --- /dev/null +++ b/src/main/java/org/biblioteca/AplicacionInterface.java @@ -0,0 +1,26 @@ +package org.biblioteca; + +public interface AplicacionInterface { + static void main(String[] args) { + boolean continuar = true; + while (continuar) { + System.out.println("\n╔════════════════════════════════════════╗"); + System.out.println("║ SISTEMA DE GESTIÓN BIBLIOTECARIA ║"); + System.out.println("╚════════════════════════════════════════╝"); + System.out.println("1) Gestión de Libros"); + System.out.println("2) Gestión de Socios"); + System.out.println("3) Gestión de Préstamos"); + System.out.println("0) Salir del sistema"); + System.out.print("Opción: "); + String opcion = Aplicacion.lector.nextLine().trim(); + switch (opcion) { + case "1" -> Aplicacion.menu.mostrarMenuLibros(); + case "2" -> Aplicacion.menu.mostrarMenuSocios(); + case "3" -> Aplicacion.menu.mostrarMenuPrestamos(); + case "0" -> continuar = false; + default -> System.out.println("Opción incorrecta"); + } + } + System.out.println("\n¡Gracias por usar el sistema!"); + } +} diff --git a/src/main/java/org/biblioteca/entidades/Libro.java b/src/main/java/org/biblioteca/entidades/Libro.java index 8a43163..f7cbf0c 100644 --- a/src/main/java/org/biblioteca/entidades/Libro.java +++ b/src/main/java/org/biblioteca/entidades/Libro.java @@ -2,7 +2,7 @@ import java.util.Objects; -public class Libro { +public class Libro implements LibroInterface { private String isbn; private String titulo; private String autor; @@ -22,54 +22,67 @@ public Libro(String isbn, String titulo, String autor, String editorial, int eje this.ejemplaresDisponibles = ejemplaresDisponibles; } + @Override public String getIsbn() { return isbn; } + @Override public void setIsbn(String isbn) { this.isbn = isbn; } + @Override public String getTitulo() { return titulo; } + @Override public void setTitulo(String titulo) { this.titulo = titulo; } + @Override public String getAutor() { return autor; } + @Override public void setAutor(String autor) { this.autor = autor; } + @Override public String getEditorial() { return editorial; } + @Override public void setEditorial(String editorial) { this.editorial = editorial; } + @Override public int getEjemplaresDisponibles() { return ejemplaresDisponibles; } + @Override public void setEjemplaresDisponibles(int ejemplaresDisponibles) { this.ejemplaresDisponibles = ejemplaresDisponibles; } + @Override public int getEjemplaresTotales() { return ejemplaresTotales; } + @Override public void setEjemplaresTotales(int ejemplaresTotales) { this.ejemplaresTotales = ejemplaresTotales; } + @Override public boolean hayDisponibilidad() { return ejemplaresDisponibles > 0; } diff --git a/src/main/java/org/biblioteca/entidades/LibroInterface.java b/src/main/java/org/biblioteca/entidades/LibroInterface.java new file mode 100644 index 0000000..87c72f5 --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/LibroInterface.java @@ -0,0 +1,38 @@ +package org.biblioteca.entidades; + +public interface LibroInterface { + String getIsbn(); + + void setIsbn(String isbn); + + String getTitulo(); + + void setTitulo(String titulo); + + String getAutor(); + + void setAutor(String autor); + + String getEditorial(); + + void setEditorial(String editorial); + + int getEjemplaresDisponibles(); + + void setEjemplaresDisponibles(int ejemplaresDisponibles); + + int getEjemplaresTotales(); + + void setEjemplaresTotales(int ejemplaresTotales); + + boolean hayDisponibilidad(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/entidades/Prestamo.java b/src/main/java/org/biblioteca/entidades/Prestamo.java index d93b60b..f6f2443 100644 --- a/src/main/java/org/biblioteca/entidades/Prestamo.java +++ b/src/main/java/org/biblioteca/entidades/Prestamo.java @@ -3,7 +3,7 @@ import java.time.LocalDate; import java.util.Objects; -public class Prestamo { +public class Prestamo implements PrestamoInterface { private String identificador; private String isbnLibro; private String numeroSocio; @@ -25,62 +25,77 @@ public Prestamo(String identificador, String isbnLibro, String numeroSocio, this.activo = true; } + @Override public String getIdentificador() { return identificador; } + @Override public void setIdentificador(String identificador) { this.identificador = identificador; } + @Override public String getIsbnLibro() { return isbnLibro; } + @Override public void setIsbnLibro(String isbnLibro) { this.isbnLibro = isbnLibro; } + @Override public String getNumeroSocio() { return numeroSocio; } + @Override public void setNumeroSocio(String numeroSocio) { this.numeroSocio = numeroSocio; } + @Override public LocalDate getFechaPrestamo() { return fechaPrestamo; } + @Override public void setFechaPrestamo(LocalDate fechaPrestamo) { this.fechaPrestamo = fechaPrestamo; } + @Override public LocalDate getFechaDevolucionPrevista() { return fechaDevolucionPrevista; } + @Override public void setFechaDevolucionPrevista(LocalDate fechaDevolucionPrevista) { this.fechaDevolucionPrevista = fechaDevolucionPrevista; } + @Override public LocalDate getFechaDevolucionReal() { return fechaDevolucionReal; } + @Override public void setFechaDevolucionReal(LocalDate fechaDevolucionReal) { this.fechaDevolucionReal = fechaDevolucionReal; } + @Override public boolean isActivo() { return activo; } + @Override public void setActivo(boolean activo) { this.activo = activo; } + @Override public boolean estaRetrasado() { if (!activo) return false; return LocalDate.now().isAfter(fechaDevolucionPrevista); diff --git a/src/main/java/org/biblioteca/entidades/PrestamoInterface.java b/src/main/java/org/biblioteca/entidades/PrestamoInterface.java new file mode 100644 index 0000000..445a4cd --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/PrestamoInterface.java @@ -0,0 +1,44 @@ +package org.biblioteca.entidades; + +import java.time.LocalDate; + +public interface PrestamoInterface { + String getIdentificador(); + + void setIdentificador(String identificador); + + String getIsbnLibro(); + + void setIsbnLibro(String isbnLibro); + + String getNumeroSocio(); + + void setNumeroSocio(String numeroSocio); + + LocalDate getFechaPrestamo(); + + void setFechaPrestamo(LocalDate fechaPrestamo); + + LocalDate getFechaDevolucionPrevista(); + + void setFechaDevolucionPrevista(LocalDate fechaDevolucionPrevista); + + LocalDate getFechaDevolucionReal(); + + void setFechaDevolucionReal(LocalDate fechaDevolucionReal); + + boolean isActivo(); + + void setActivo(boolean activo); + + boolean estaRetrasado(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/entidades/Socio.java b/src/main/java/org/biblioteca/entidades/Socio.java index 6e80c6b..5a82b05 100644 --- a/src/main/java/org/biblioteca/entidades/Socio.java +++ b/src/main/java/org/biblioteca/entidades/Socio.java @@ -2,7 +2,7 @@ import java.util.Objects; -public class Socio { +public class Socio implements SocioInterface { private String numeroSocio; private String apellidos; private String nombre; @@ -20,46 +20,57 @@ public Socio(String numeroSocio, String apellidos, String nombre, String direcci this.telefono = telefono; } + @Override public String getNumeroSocio() { return numeroSocio; } + @Override public void setNumeroSocio(String numeroSocio) { this.numeroSocio = numeroSocio; } + @Override public String getApellidos() { return apellidos; } + @Override public void setApellidos(String apellidos) { this.apellidos = apellidos; } + @Override public String getNombre() { return nombre; } + @Override public void setNombre(String nombre) { this.nombre = nombre; } + @Override public String getDireccion() { return direccion; } + @Override public void setDireccion(String direccion) { this.direccion = direccion; } + @Override public String getTelefono() { return telefono; } + @Override public void setTelefono(String telefono) { this.telefono = telefono; } + @Override public String getNombreCompleto() { return nombre + " " + apellidos; } diff --git a/src/main/java/org/biblioteca/entidades/SocioInterface.java b/src/main/java/org/biblioteca/entidades/SocioInterface.java new file mode 100644 index 0000000..3086af9 --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/SocioInterface.java @@ -0,0 +1,34 @@ +package org.biblioteca.entidades; + +public interface SocioInterface { + String getNumeroSocio(); + + void setNumeroSocio(String numeroSocio); + + String getApellidos(); + + void setApellidos(String apellidos); + + String getNombre(); + + void setNombre(String nombre); + + String getDireccion(); + + void setDireccion(String direccion); + + String getTelefono(); + + void setTelefono(String telefono); + + String getNombreCompleto(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtil.java b/src/main/java/org/biblioteca/herramientas/JsonUtil.java index f340039..60d2040 100644 --- a/src/main/java/org/biblioteca/herramientas/JsonUtil.java +++ b/src/main/java/org/biblioteca/herramientas/JsonUtil.java @@ -6,40 +6,11 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; -public class JsonUtil { +public class JsonUtil implements JsonUtilInterface { private static Gson instancia = null; private JsonUtil() { } - public static Gson obtenerInstancia() { - if (instancia == null) { - instancia = crearGson(); - } - return instancia; - } - - private static Gson crearGson() { - GsonBuilder constructor = new GsonBuilder(); - constructor.setPrettyPrinting(); - - DateTimeFormatter formato = DateTimeFormatter.ISO_LOCAL_DATE; - - constructor.registerTypeAdapter(LocalDate.class, new JsonSerializer() { - @Override - public JsonElement serialize(LocalDate fecha, Type tipo, JsonSerializationContext contexto) { - return new JsonPrimitive(fecha.format(formato)); - } - }); - - constructor.registerTypeAdapter(LocalDate.class, new JsonDeserializer() { - @Override - public LocalDate deserialize(JsonElement elemento, Type tipo, JsonDeserializationContext contexto) throws JsonParseException { - return LocalDate.parse(elemento.getAsString(), formato); - } - }); - - return constructor.create(); - } } diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java new file mode 100644 index 0000000..2aa5203 --- /dev/null +++ b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java @@ -0,0 +1,39 @@ +package org.biblioteca.herramientas; + +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public interface JsonUtilInterface { + static Gson obtenerInstancia() { + if (JsonUtil.instancia == null) { + JsonUtil.instancia = crearGson(); + } + return JsonUtil.instancia; + } + + static Gson crearGson() { + GsonBuilder constructor = new GsonBuilder(); + constructor.setPrettyPrinting(); + + DateTimeFormatter formato = DateTimeFormatter.ISO_LOCAL_DATE; + + constructor.registerTypeAdapter(LocalDate.class, new JsonSerializer() { + @Override + public JsonElement serialize(LocalDate fecha, Type tipo, JsonSerializationContext contexto) { + return new JsonPrimitive(fecha.format(formato)); + } + }); + + constructor.registerTypeAdapter(LocalDate.class, new JsonDeserializer() { + @Override + public LocalDate deserialize(JsonElement elemento, Type tipo, JsonDeserializationContext contexto) throws JsonParseException { + return LocalDate.parse(elemento.getAsString(), formato); + } + }); + + return constructor.create(); + } +} diff --git a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java index c5fa648..85e6696 100644 --- a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java +++ b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java @@ -12,7 +12,7 @@ import java.util.Scanner; import java.util.UUID; -public class MenuPrincipal { +public class MenuPrincipal implements MenuPrincipalInterface { private final Scanner lector; private final GestionLibros gestionLibros; private final GestionSocios gestionSocios; @@ -25,6 +25,7 @@ public MenuPrincipal(Scanner lector) { this.gestionPrestamos = new GestionPrestamos(); } + @Override public void mostrarMenuLibros() { System.out.println("\n--- Gestión de Libros ---"); System.out.println("1) Añadir libro al catálogo"); @@ -43,6 +44,7 @@ public void mostrarMenuLibros() { } } + @Override public void añadirLibro() { System.out.print("ISBN: "); String isbn = lector.nextLine().trim(); @@ -68,6 +70,7 @@ public void mostrarMenuLibros() { } } + @Override public void eliminarLibro() { System.out.print("ISBN del libro a eliminar: "); String isbn = lector.nextLine().trim(); @@ -78,6 +81,7 @@ public void eliminarLibro() { } } + @Override public void verCatalogo() { List catalogo = gestionLibros.listarLibros(); if (catalogo.isEmpty()) { @@ -89,6 +93,7 @@ public void verCatalogo() { } } + @Override public void mostrarMenuSocios() { System.out.println("\n--- Gestión de Socios ---"); System.out.println("1) Registrar nuevo socio"); @@ -107,6 +112,7 @@ public void mostrarMenuSocios() { } } + @Override public void registrarSocio() { System.out.print("Nombre: "); String nombre = lector.nextLine().trim(); @@ -126,6 +132,7 @@ public void registrarSocio() { } } + @Override public void darDeBajaSocio() { System.out.print("Número de socio a dar de baja: "); String numeroSocio = lector.nextLine().trim(); @@ -136,6 +143,7 @@ public void darDeBajaSocio() { } } + @Override public void verListaSocios() { List socios = gestionSocios.listarSocios(); if (socios.isEmpty()) { @@ -147,6 +155,7 @@ public void verListaSocios() { } } + @Override public void mostrarMenuPrestamos() { System.out.println("\n--- Gestión de Préstamos ---"); System.out.println("1) Realizar préstamo"); @@ -165,6 +174,7 @@ public void mostrarMenuPrestamos() { } } + @Override public void realizarPrestamo() { System.out.print("ISBN del libro: "); String isbn = lector.nextLine().trim(); @@ -192,6 +202,7 @@ public void realizarPrestamo() { } } + @Override public void devolverLibro() { System.out.print("ID del préstamo: "); String identificador = lector.nextLine().trim(); @@ -202,6 +213,7 @@ public void devolverLibro() { } } + @Override public void verPrestamosActivos() { List prestamos = gestionPrestamos.listarPrestamos(); boolean hayActivos = false; diff --git a/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java b/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java new file mode 100644 index 0000000..45f0025 --- /dev/null +++ b/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java @@ -0,0 +1,27 @@ +package org.biblioteca.interfaz; + +public interface MenuPrincipalInterface { + void mostrarMenuLibros(); + + void añadirLibro(); + + void eliminarLibro(); + + void verCatalogo(); + + void mostrarMenuSocios(); + + void registrarSocio(); + + void darDeBajaSocio(); + + void verListaSocios(); + + void mostrarMenuPrestamos(); + + void realizarPrestamo(); + + void devolverLibro(); + + void verPrestamosActivos(); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionLibros.java b/src/main/java/org/biblioteca/negocio/GestionLibros.java index a45419f..f68c975 100644 --- a/src/main/java/org/biblioteca/negocio/GestionLibros.java +++ b/src/main/java/org/biblioteca/negocio/GestionLibros.java @@ -6,21 +6,24 @@ import java.util.List; import java.util.Optional; -public class GestionLibros { +public class GestionLibros implements GestionLibrosInterface { private final AlmacenLibros almacen; public GestionLibros() { this.almacen = new AlmacenLibros(); } + @Override public List listarLibros() { return almacen.consultarTodos(); } + @Override public Optional buscarLibro(String isbn) { return almacen.consultarPorIsbn(isbn); } + @Override public boolean añadirLibro(Libro libro) { if (libro.getIsbn() == null || libro.getIsbn().isBlank()) { return false; @@ -34,10 +37,12 @@ public Optional buscarLibro(String isbn) { return almacen.guardar(libro); } + @Override public boolean eliminarLibro(String isbn) { return almacen.borrar(isbn); } + @Override public void modificarLibro(Libro libro) { almacen.actualizar(libro); } diff --git a/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java b/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java new file mode 100644 index 0000000..23de88c --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java @@ -0,0 +1,18 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Libro; + +import java.util.List; +import java.util.Optional; + +public interface GestionLibrosInterface { + List listarLibros(); + + Optional buscarLibro(String isbn); + + boolean añadirLibro(Libro libro); + + boolean eliminarLibro(String isbn); + + void modificarLibro(Libro libro); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionPrestamos.java b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java index 45dd943..62027b0 100644 --- a/src/main/java/org/biblioteca/negocio/GestionPrestamos.java +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Optional; -public class GestionPrestamos { +public class GestionPrestamos implements GestionPrestamosInterface { private final AlmacenPrestamos almacenPrestamos; private final AlmacenLibros almacenLibros; private final AlmacenSocios almacenSocios; @@ -22,14 +22,17 @@ public GestionPrestamos() { this.almacenSocios = new AlmacenSocios(); } + @Override public List listarPrestamos() { return almacenPrestamos.consultarTodos(); } + @Override public Optional buscarPrestamo(String identificador) { return almacenPrestamos.consultarPorId(identificador); } + @Override public boolean realizarPrestamo(Prestamo prestamo) { if (prestamo.getIdentificador() == null || prestamo.getIdentificador().isBlank()) { return false; @@ -57,6 +60,7 @@ public boolean realizarPrestamo(Prestamo prestamo) { return almacenPrestamos.guardar(prestamo); } + @Override public boolean devolverLibro(String identificador) { Optional prestamoOpt = almacenPrestamos.consultarPorId(identificador); if (prestamoOpt.isEmpty()) { diff --git a/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java b/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java new file mode 100644 index 0000000..ea6f4cf --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java @@ -0,0 +1,16 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Prestamo; + +import java.util.List; +import java.util.Optional; + +public interface GestionPrestamosInterface { + List listarPrestamos(); + + Optional buscarPrestamo(String identificador); + + boolean realizarPrestamo(Prestamo prestamo); + + boolean devolverLibro(String identificador); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionSocios.java b/src/main/java/org/biblioteca/negocio/GestionSocios.java index ec9431e..f5ceafd 100644 --- a/src/main/java/org/biblioteca/negocio/GestionSocios.java +++ b/src/main/java/org/biblioteca/negocio/GestionSocios.java @@ -6,21 +6,24 @@ import java.util.List; import java.util.Optional; -public class GestionSocios { +public class GestionSocios implements GestionSociosInterface { private final AlmacenSocios almacen; public GestionSocios() { this.almacen = new AlmacenSocios(); } + @Override public List listarSocios() { return almacen.consultarTodos(); } + @Override public Optional buscarSocio(String numeroSocio) { return almacen.consultarPorNumero(numeroSocio); } + @Override public boolean registrarSocio(Socio socio) { if (socio.getNumeroSocio() == null || socio.getNumeroSocio().isBlank()) { return false; @@ -34,6 +37,7 @@ public boolean registrarSocio(Socio socio) { return almacen.guardar(socio); } + @Override public boolean darDeBajaSocio(String numeroSocio) { return almacen.borrar(numeroSocio); } diff --git a/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java b/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java new file mode 100644 index 0000000..8dea606 --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java @@ -0,0 +1,16 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Socio; + +import java.util.List; +import java.util.Optional; + +public interface GestionSociosInterface { + List listarSocios(); + + Optional buscarSocio(String numeroSocio); + + boolean registrarSocio(Socio socio); + + boolean darDeBajaSocio(String numeroSocio); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java index 2097951..47630d6 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenLibros { +public class AlmacenLibros implements AlmacenLibrosInterface { private final Path rutaArchivo; private final Type tipoListaLibros = new TypeToken>(){}.getType(); private List listaLibros = new ArrayList<>(); @@ -22,33 +22,7 @@ public AlmacenLibros() { leerDesdeArchivo(); } - private void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaLibros); - if (temporal != null) { - listaLibros = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer libros: " + excepcion.getMessage()); - } - } - - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaLibros, tipoListaLibros); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir libros: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +32,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorIsbn(String isbn) { leerDesdeArchivo(); for (Libro l : listaLibros) { @@ -68,6 +43,7 @@ public Optional consultarPorIsbn(String isbn) { return Optional.empty(); } + @Override public boolean guardar(Libro libro) { leerDesdeArchivo(); Optional existente = consultarPorIsbn(libro.getIsbn()); @@ -79,6 +55,7 @@ public boolean guardar(Libro libro) { return true; } + @Override public boolean borrar(String isbn) { leerDesdeArchivo(); boolean eliminado = false; @@ -95,6 +72,7 @@ public boolean borrar(String isbn) { return eliminado; } + @Override public void actualizar(Libro libro) { leerDesdeArchivo(); for (int indice = 0; indice < listaLibros.size(); indice++) { diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java new file mode 100644 index 0000000..93ef6a2 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java @@ -0,0 +1,48 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Libro; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenLibrosInterface { + default void leerDesdeArchivo() { + try { + if (Files.notExists(rutaArchivo.getParent())) { + Files.createDirectories(rutaArchivo.getParent()); + } + if (Files.notExists(rutaArchivo)) { + Files.writeString(rutaArchivo, "[]"); + } + String contenido = Files.readString(rutaArchivo); + List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaLibros); + if (temporal != null) { + listaLibros = temporal; + } + } catch (IOException excepcion) { + System.err.println("Error al leer libros: " + excepcion.getMessage()); + } + } + + default void escribirEnArchivo() { + try { + String json = JsonUtil.obtenerInstancia().toJson(listaLibros, tipoListaLibros); + Files.writeString(rutaArchivo, json); + } catch (IOException excepcion) { + System.err.println("Error al escribir libros: " + excepcion.getMessage()); + } + } + + List consultarTodos(); + + Optional consultarPorIsbn(String isbn); + + boolean guardar(Libro libro); + + boolean borrar(String isbn); + + void actualizar(Libro libro); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java index 05efd77..e98592e 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenPrestamos { +public class AlmacenPrestamos implements AlmacenPrestamosInterface { private final Path rutaArchivo; private final Type tipoListaPrestamos = new TypeToken>(){}.getType(); private List listaPrestamos = new ArrayList<>(); @@ -22,33 +22,7 @@ public AlmacenPrestamos() { leerDesdeArchivo(); } - private void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaPrestamos); - if (temporal != null) { - listaPrestamos = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer préstamos: " + excepcion.getMessage()); - } - } - - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaPrestamos, tipoListaPrestamos); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir préstamos: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +32,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorId(String identificador) { leerDesdeArchivo(); for (Prestamo p : listaPrestamos) { @@ -68,6 +43,7 @@ public Optional consultarPorId(String identificador) { return Optional.empty(); } + @Override public boolean guardar(Prestamo prestamo) { leerDesdeArchivo(); Optional existente = consultarPorId(prestamo.getIdentificador()); @@ -79,6 +55,7 @@ public boolean guardar(Prestamo prestamo) { return true; } + @Override public boolean borrar(String identificador) { leerDesdeArchivo(); boolean eliminado = false; @@ -95,6 +72,7 @@ public boolean borrar(String identificador) { return eliminado; } + @Override public void actualizar(Prestamo prestamo) { leerDesdeArchivo(); for (int indice = 0; indice < listaPrestamos.size(); indice++) { diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java new file mode 100644 index 0000000..e7896b4 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java @@ -0,0 +1,48 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Prestamo; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenPrestamosInterface { + default void leerDesdeArchivo() { + try { + if (Files.notExists(rutaArchivo.getParent())) { + Files.createDirectories(rutaArchivo.getParent()); + } + if (Files.notExists(rutaArchivo)) { + Files.writeString(rutaArchivo, "[]"); + } + String contenido = Files.readString(rutaArchivo); + List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaPrestamos); + if (temporal != null) { + listaPrestamos = temporal; + } + } catch (IOException excepcion) { + System.err.println("Error al leer préstamos: " + excepcion.getMessage()); + } + } + + default void escribirEnArchivo() { + try { + String json = JsonUtil.obtenerInstancia().toJson(listaPrestamos, tipoListaPrestamos); + Files.writeString(rutaArchivo, json); + } catch (IOException excepcion) { + System.err.println("Error al escribir préstamos: " + excepcion.getMessage()); + } + } + + List consultarTodos(); + + Optional consultarPorId(String identificador); + + boolean guardar(Prestamo prestamo); + + boolean borrar(String identificador); + + void actualizar(Prestamo prestamo); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java index 0ebeaca..4429110 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenSocios { +public class AlmacenSocios implements AlmacenSociosInterface { private final Path rutaArchivo; private final Type tipoListaSocios = new TypeToken>(){}.getType(); private List listaSocios = new ArrayList<>(); @@ -22,33 +22,7 @@ public AlmacenSocios() { leerDesdeArchivo(); } - private void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaSocios); - if (temporal != null) { - listaSocios = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer socios: " + excepcion.getMessage()); - } - } - - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaSocios, tipoListaSocios); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir socios: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +32,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorNumero(String numeroSocio) { leerDesdeArchivo(); for (Socio s : listaSocios) { @@ -68,6 +43,7 @@ public Optional consultarPorNumero(String numeroSocio) { return Optional.empty(); } + @Override public boolean guardar(Socio socio) { leerDesdeArchivo(); Optional existente = consultarPorNumero(socio.getNumeroSocio()); @@ -79,6 +55,7 @@ public boolean guardar(Socio socio) { return true; } + @Override public boolean borrar(String numeroSocio) { leerDesdeArchivo(); boolean eliminado = false; diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java new file mode 100644 index 0000000..0e164a3 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java @@ -0,0 +1,46 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Socio; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenSociosInterface { + default void leerDesdeArchivo() { + try { + if (Files.notExists(rutaArchivo.getParent())) { + Files.createDirectories(rutaArchivo.getParent()); + } + if (Files.notExists(rutaArchivo)) { + Files.writeString(rutaArchivo, "[]"); + } + String contenido = Files.readString(rutaArchivo); + List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaSocios); + if (temporal != null) { + listaSocios = temporal; + } + } catch (IOException excepcion) { + System.err.println("Error al leer socios: " + excepcion.getMessage()); + } + } + + default void escribirEnArchivo() { + try { + String json = JsonUtil.obtenerInstancia().toJson(listaSocios, tipoListaSocios); + Files.writeString(rutaArchivo, json); + } catch (IOException excepcion) { + System.err.println("Error al escribir socios: " + excepcion.getMessage()); + } + } + + List consultarTodos(); + + Optional consultarPorNumero(String numeroSocio); + + boolean guardar(Socio socio); + + boolean borrar(String numeroSocio); +} From 8aab938ea50c46d88c819a82c13a0f9c3f65a864 Mon Sep 17 00:00:00 2001 From: 1dam Date: Wed, 17 Jun 2026 09:45:01 +0200 Subject: [PATCH 2/5] Correccion menor --- .idea/material_theme_project_new.xml | 10 +++++++++ .../repositorio/AlmacenLibrosInterface.java | 21 ------------------- 2 files changed, 10 insertions(+), 21 deletions(-) create mode 100644 .idea/material_theme_project_new.xml diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..b81c6a4 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java index 93ef6a2..7a08c56 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java @@ -10,30 +10,9 @@ public interface AlmacenLibrosInterface { default void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaLibros); - if (temporal != null) { - listaLibros = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer libros: " + excepcion.getMessage()); - } } default void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaLibros, tipoListaLibros); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir libros: " + excepcion.getMessage()); - } } List consultarTodos(); From 6ea82445da47809c5d33f5992714af9edad475de Mon Sep 17 00:00:00 2001 From: 1dam Date: Wed, 17 Jun 2026 09:45:26 +0200 Subject: [PATCH 3/5] Correcciones menores --- .../AlmacenPrestamosInterface.java | 23 ++----------------- .../repositorio/AlmacenSociosInterface.java | 23 ++----------------- 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java index e7896b4..4348ee4 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java @@ -10,30 +10,11 @@ public interface AlmacenPrestamosInterface { default void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaPrestamos); - if (temporal != null) { - listaPrestamos = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer préstamos: " + excepcion.getMessage()); - } + } default void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaPrestamos, tipoListaPrestamos); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir préstamos: " + excepcion.getMessage()); - } + } List consultarTodos(); diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java index 0e164a3..5dd99c4 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java @@ -10,30 +10,11 @@ public interface AlmacenSociosInterface { default void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaSocios); - if (temporal != null) { - listaSocios = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer socios: " + excepcion.getMessage()); - } + } default void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaSocios, tipoListaSocios); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir socios: " + excepcion.getMessage()); - } + } List consultarTodos(); From da3c4ef397fcfcc15fdc95c7ecdc6fca8a47c928 Mon Sep 17 00:00:00 2001 From: 1dam Date: Wed, 17 Jun 2026 10:07:32 +0200 Subject: [PATCH 4/5] Mensaje --- src/main/java/org/biblioteca/Aplicacion.java | 27 +++++++++++++-- .../org/biblioteca/AplicacionInterface.java | 26 --------------- .../org/biblioteca/herramientas/JsonUtil.java | 31 +++++++++++++++++- .../herramientas/JsonUtilInterface.java | 2 +- .../biblioteca/repositorio/AlmacenLibros.java | 18 ++++++++++ .../repositorio/AlmacenLibrosInterface.java | 2 +- .../org/biblioteca/entidades/Libro.class | Bin 3066 -> 3113 bytes .../org/biblioteca/entidades/Prestamo.class | Bin 3705 -> 3755 bytes .../org/biblioteca/entidades/Socio.class | Bin 2883 -> 2930 bytes .../biblioteca/herramientas/JsonUtil.class | Bin 1337 -> 1390 bytes .../biblioteca/interfaz/MenuPrincipal.class | Bin 8963 -> 9017 bytes .../biblioteca/negocio/GestionLibros.class | Bin 1699 -> 1752 bytes .../biblioteca/negocio/GestionPrestamos.class | Bin 3241 -> 3297 bytes .../biblioteca/negocio/GestionSocios.class | Bin 1558 -> 1611 bytes .../repositorio/AlmacenLibros.class | Bin 5274 -> 5031 bytes .../repositorio/AlmacenPrestamos.class | Bin 5349 -> 3360 bytes .../repositorio/AlmacenSocios.class | Bin 4981 -> 2997 bytes 17 files changed, 74 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/org/biblioteca/AplicacionInterface.java diff --git a/src/main/java/org/biblioteca/Aplicacion.java b/src/main/java/org/biblioteca/Aplicacion.java index 3780947..2a56ad0 100644 --- a/src/main/java/org/biblioteca/Aplicacion.java +++ b/src/main/java/org/biblioteca/Aplicacion.java @@ -4,9 +4,30 @@ import java.util.Scanner; -public class Aplicacion implements AplicacionInterface { +public class Aplicacion { private static final Scanner lector = new Scanner(System.in); private static final MenuPrincipal menu = new MenuPrincipal(lector); -} - + public static void main(String[] args) { + boolean continuar = true; + while (continuar) { + System.out.println("\n╔════════════════════════════════════════╗"); + System.out.println("║ SISTEMA DE GESTIÓN BIBLIOTECARIA ║"); + System.out.println("╚════════════════════════════════════════╝"); + System.out.println("1) Gestión de Libros"); + System.out.println("2) Gestión de Socios"); + System.out.println("3) Gestión de Préstamos"); + System.out.println("0) Salir del sistema"); + System.out.print("Opción: "); + String opcion = lector.nextLine().trim(); + switch (opcion) { + case "1" -> menu.mostrarMenuLibros(); + case "2" -> menu.mostrarMenuSocios(); + case "3" -> menu.mostrarMenuPrestamos(); + case "0" -> continuar = false; + default -> System.out.println("Opción incorrecta"); + } + } + System.out.println("\n¡Gracias por usar el sistema!"); + } +} \ No newline at end of file diff --git a/src/main/java/org/biblioteca/AplicacionInterface.java b/src/main/java/org/biblioteca/AplicacionInterface.java deleted file mode 100644 index 70071d5..0000000 --- a/src/main/java/org/biblioteca/AplicacionInterface.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.biblioteca; - -public interface AplicacionInterface { - static void main(String[] args) { - boolean continuar = true; - while (continuar) { - System.out.println("\n╔════════════════════════════════════════╗"); - System.out.println("║ SISTEMA DE GESTIÓN BIBLIOTECARIA ║"); - System.out.println("╚════════════════════════════════════════╝"); - System.out.println("1) Gestión de Libros"); - System.out.println("2) Gestión de Socios"); - System.out.println("3) Gestión de Préstamos"); - System.out.println("0) Salir del sistema"); - System.out.print("Opción: "); - String opcion = Aplicacion.lector.nextLine().trim(); - switch (opcion) { - case "1" -> Aplicacion.menu.mostrarMenuLibros(); - case "2" -> Aplicacion.menu.mostrarMenuSocios(); - case "3" -> Aplicacion.menu.mostrarMenuPrestamos(); - case "0" -> continuar = false; - default -> System.out.println("Opción incorrecta"); - } - } - System.out.println("\n¡Gracias por usar el sistema!"); - } -} diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtil.java b/src/main/java/org/biblioteca/herramientas/JsonUtil.java index 60d2040..a40beee 100644 --- a/src/main/java/org/biblioteca/herramientas/JsonUtil.java +++ b/src/main/java/org/biblioteca/herramientas/JsonUtil.java @@ -7,10 +7,39 @@ import java.time.format.DateTimeFormatter; public class JsonUtil implements JsonUtilInterface { - private static Gson instancia = null; + public static Gson instancia = null; private JsonUtil() { } + public static Gson obtenerInstancia() { + if (instancia == null) { + instancia = crearGson(); + } + return instancia; + } + + private static Gson crearGson() { + GsonBuilder constructor = new GsonBuilder(); + constructor.setPrettyPrinting(); + + DateTimeFormatter formato = DateTimeFormatter.ISO_LOCAL_DATE; + + constructor.registerTypeAdapter(LocalDate.class, new JsonSerializer() { + @Override + public JsonElement serialize(LocalDate fecha, Type tipo, JsonSerializationContext contexto) { + return new JsonPrimitive(fecha.format(formato)); + } + }); + + constructor.registerTypeAdapter(LocalDate.class, new JsonDeserializer() { + @Override + public LocalDate deserialize(JsonElement elemento, Type tipo, JsonDeserializationContext contexto) throws JsonParseException { + return LocalDate.parse(elemento.getAsString(), formato); + } + }); + + return constructor.create(); + } } diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java index 2aa5203..0df9d26 100644 --- a/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java +++ b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java @@ -7,7 +7,7 @@ import java.time.format.DateTimeFormatter; public interface JsonUtilInterface { - static Gson obtenerInstancia() { + public static Gson obtenerInstancia() { if (JsonUtil.instancia == null) { JsonUtil.instancia = crearGson(); } diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java index 47630d6..678f2b4 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java @@ -22,6 +22,24 @@ public AlmacenLibros() { leerDesdeArchivo(); } + private void leerDesdeArchivo() { + try { + if (Files.notExists(rutaArchivo.getParent())) { + Files.createDirectories(rutaArchivo.getParent()); + } + if (Files.notExists(rutaArchivo)) { + Files.writeString(rutaArchivo, "[]"); + } + String contenido = Files.readString(rutaArchivo); + List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaLibros); + if (temporal != null) { + listaLibros = temporal; + } + } catch (IOException excepcion) { + System.err.println("Error al leer libros: " + excepcion.getMessage()); + } + } + @Override public List consultarTodos() { leerDesdeArchivo(); diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java index 7a08c56..be5f2c5 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java @@ -9,7 +9,7 @@ import java.util.Optional; public interface AlmacenLibrosInterface { - default void leerDesdeArchivo() { + private void leerDesdeArchivo() { } default void escribirEnArchivo() { diff --git a/target/classes/org/biblioteca/entidades/Libro.class b/target/classes/org/biblioteca/entidades/Libro.class index bccae87196b1b823bc3e83784837ab0b7f6f2004..ee2ef8dccf4cade7ec277fd86e7e96a2198162f0 100644 GIT binary patch delta 1202 zcmZ{jT~8B16o%i~Zf9Zp34!uunl`33v_Ng4A}TG2D9DFG`Bc#ufrNy3VZ5(b{(<=w zCSFLC#2BOZ-e|)A@CT?dp4lC{n`L^@nc34b=Y94)dw%u3>9@cA{qzOEEcQ<9-;7%r zVaSV`k?vf4{_^0(;nQaa@54sJVE4tYc@$r_(ZGg<%_xSkC4QJ^<}O1{{4sMO3lGKj za5=6EcfpCEA?|g%7aaQNVzd;ZAT!D^bN2b-6~_5{DOxr?5_1w_V5#!DO8Z zDK|?&0$m&thn!*3B@th(RMQjAX@#%qg=0bC0tpwj!W;>uJ9XZHCRvaST2RuGT+@>z zgCr9~Qf))htw^r_ClO~IJ$cWADXsDiS6Re6`y9Vqt81iFZ==(zbf!^LZS(hh@NKJW zZqMhmvUSXy>v?nN6obJxULcaiHY67?Kt&i$h>j!`Bw5jt+-#AEi*`@dn~8N&ZnRPE zSITp^C0|1v+v$qu^tMkZrasbnvLy^7G9!Vrxb0l~Y**IgwQd?e;1Lbg9+G&BUOaJ1 zWDufww)LH7afe2a(f?60rA$*G%bGB(4vOA&Z4mWH#@F_JA5213VpvjR@;XwQ_rQ;Q gxoMRf!ZK+XSivgoQfG~R_pnV*Hl23xfXD~_0YhqIvH$=8 delta 1174 zcmZ{j%Tg0T6o&t9k{Or~5-A7}H4+!3Opw4RMA1Zo+{6nIZr)zN4X==$FVIV$z$&Yh z(rjG#0PZXw!i7~nfVcARnKqdkI*au5bWWe|n{&EfPyU?nKL7pr2|yFiPQ72^y)XBr zc%)t?UX1K|*h9<3{xGiKK>bO4702pJvMipc-^m35HSg3#MV&ag$}BT@kQ~!UU<6k= z8;0PR#2l)83eM&^R@7UkCT7()rnN^O`3y3YKfry*1qqFD zg2lWQaShka<_4p+j#I95;GTAOhmr-#TnaMe!YCsNoO6&0%mo%h6ZON*wR_;pR`8M? zoQ{KM2rgN{4l;&YJ6nM^OOTD1plmg{VK>RfP3CA)?PD@(Om6-+QF3Uk)T@DSB`=3$ zRUeuN>J^rHiJV#=&bZ;+!fn&GXwUO+x?KxqFUbAqOMn1gAI~5`;aFMxrtT%8S0f+@Ozcsj)2nUkltn9BxGtu z3m35#Z2Ru{dwSa_uOG0(OSOwEukScoL5gV%aJ|?)=S8ezgFAH#HhB;vblL=@JIK|o zung)XH63aDaYQC#G6~!>*QArGuJ^>BM`8;mb^zOCNZiK*J~d~DzlS*Fo5$G^9^)yd F{sDW*U1Ist21wOg#7jysC*eFP=T?#rVw5YRfu%*xA|1^UVJ@|7Z63)%CjD`uO|(2LO5O z)U9FNFmaY4$Divxp~=miQgv;4rPQ$X&l-EcQ^t#fk1RY!*~EGnquAgL<5OUZAZJ4Srg}z!Y7o%MYV9m zD}0iK`<225IVT)rxb(jRwcIXZUJC}5B$w4BF)zswkqrBgw7Vo%a9rBS8&A{Fn zc?Pp0n*Xp;j$iUVulyXjr8~fjS(+LweS*NnaMtD%i#obo>E3Qh+1? delta 1393 zcmZ{k-A)rh7>3{3mfdzKv_NT7r448*vBVJY7b8%L70Ztb2#P48_=BPrNj$Z8;K>|& z1$rP+qA}46@XW{^com))-`QDdvzeyp?(DbUeD5>w&V28(e|p>>f4_bQFoB(2_gv`X zPH5i}59O5orv0&tO+0b%G=@=Z$=~*`@C$*wj5~ST!L~q-!(4}eJzK4Az1l_}BCr6N zij+&^ta%cGKcJ=X8Df_M3q@XCm4rCLNKh7t=_Hge$tQspT;z3JzKxs_MY$j8kE^UP z*u3UdmUN?MYh_$gS&R+xu4O*K`M`jdvAtl{C^3c0{^T)cD;&Epum>jy*+-ZoUWJs- z@*#l^8?7F>Kt+?tpV3r*QI+z9^G4xmEiBvJbWP=IFOE~DV3e`xlk!Jk#<<=@aJ?st zva^Qu*0|tAaKS?)8E!(->66Uim~URA^Ibub(?*gjxav=qM_ZE(9*j`=d=uqvq&yF< z8I{vPKr|v=%-5zAUZ*f!Wau3h&XsGj-lwEC^ zQ}tcFgeaC9IFkP1Sz&GnBFagFxTS#PdfTuE-^r!`tir)8vy-p2;-is2Fe5AcjnE=SK%#Y<%V0V(=-LjV8( diff --git a/target/classes/org/biblioteca/entidades/Socio.class b/target/classes/org/biblioteca/entidades/Socio.class index 697b6d859c66a2d3e4e209b822a2adf056500182..82708553ada93388aa1ceb7d009cde863b8e204d 100644 GIT binary patch delta 1087 zcmZ{jOKTHR6vzK}p2;;Y`WUT3noyydM;~d^_(-CyTCK5a`fkC6eJxWc*>~p`xI01c zBUn@fK{rAd1vmN~`~Ys;iRa!KCgU(+;6Bfs-|t?|{pS33`1#+@UjfWx=aiQ;%SMr5 zTpVfH_)@2PaD4c3@8JEMc2(mo2A$l?1L}Rh$_=*@k#+7K|;1 ztaxK)#V<3XGZe%hv${|s#0(gHfLZtic1i;cWokL~KmrDmm{21Xgh@=%jKRb-wI$K9 zrde6MwZ_sistJqQoQx7bteRa>=}RJGJL58|rBEZ08D~*d8JF#gCq08Kkw#U#ql_%i zK<2tYeo}tUrBMD!HJ69^faE(`a1Y~R$0D&c7fZ2Cik64A3Ma*nNQUp?8kt=0W0Lkv zZbX`7!Y1WNlbgPY*o_SZ?w~^CnLgwJk9;eVJQya|BFVRX^8a@*7`}r#nKb&C40|T^ zNE0V)G9PKu@J&QFK2+`1!6K0#_90*L$W50lzQjiZ)z%7tQhxpBaYt2~&MR$68K6oB zy&W5EWUzu^tg8QV&}lvIS6v===~Xh?Phf%Gf`)svZ$PtSw0a*8RMuBK7ckfg7^HoJ uMbGv-FSdGb<3%9$vKOn<$z>@&!V>i<8a*Y-W7R&v8m)1fuVWM282JaLfLjXy delta 1081 zcmZ{jO-~a+7{~v!ZFiTEw#v(jim;7T&9=N%DhSA%iYTD+B6#=c0WX~U4M@zKJ^2MB zN=!I#@#cjCU&9kz4e>v-OS{=@v&m#;^33!5J+sf8d%r#T=koXjz#={z%BuC_qcvp7 zR{|N~3m2>EOLn`kF7XC$9lYzr9c-wJ>{)hOpsWUSW!u4yzyPNMHw5gpy}eKSpHYGf z3sCp%`clB;k0AH~x!@PXAtx3p9HkCIC$h++YGx(~!x-U8Acs+of%x60g;9}{&VG%? zx}1rS%N*L$m^Xr-$baWfSYK%3r<&B$P4Y>TA)1uim=q(E$5$q5%k6p4x`T(QB9S=-Q*E_OQb0uGjO z9WT*~6?4ub_Mfb* mw)$c-7JEC2&CpBt?J~W90%vQateEjNHn}Ic-oktA;?{rFu2nt& diff --git a/target/classes/org/biblioteca/herramientas/JsonUtil.class b/target/classes/org/biblioteca/herramientas/JsonUtil.class index f402af074de76207d995aed23235320cf4b0c705..c2bdf1b60086f36b79122f3ff94b6cdd8e4e45ff 100644 GIT binary patch delta 305 zcmX|*OD;q~7=^#TZr$6rOQV}aVjxd@vydP2G_`sw`Q2crWVUH||9 delta 266 zcmXYrOHRW;5JcaM$H*BBI3Rf!*(d@j2ni?Q6GK2^!Im}mvT~5X0+B@ykSpX4a08SY zJG1Dj>Zz{oU;pF%=6|&YUU^yiPy6*}WAgz9&mpNk9F~{^b#A1lLL-c?zA;M?OQq_C z$nH2|+_KihL<7*{mMjD`@9z9E_>YNHGsX5bb;g}kgh>^2vbQeWo2ilIz)#{!$A>`Ldz5Lwrd$t@+^L;ZYd0J)WHsUs}~{w diff --git a/target/classes/org/biblioteca/interfaz/MenuPrincipal.class b/target/classes/org/biblioteca/interfaz/MenuPrincipal.class index d80296423aa5e70a9a71bfc7751c9c4a0dd6d191..0d96f8e76970c8362a88741dfe973f8f7bdc59e5 100644 GIT binary patch delta 1726 zcmZ{k`EOKJ6vw}3X4+{-LW?stQ)p)aMs2l)F4JX7fq^nmy3sT~yK(zm>C@7jUfHD0b7oJ!-ys7sXqN}3;Sm|qqRua6tCsJ|wQU!8 zv;vn$8*`;wMdoRHT{%ew5GmBox)w;0_J_+GC}u4guyDOcf>OeNMz{^rAlzAsWVJtZ z$MyCiz6oJER}WI)MLK+N!_Rd#?#3L<$6Qn(fJxkm^SBEi@abjb;#21P3VCu<>1#u& z0tci_%Bc|2d|t0TYN#E~xHPV-)x*iPfNF(|iZBbs%pF8NN>Gkcgi(e%M$N1%hD!8e zA;z!>k7F_RVF_M91P4)tLs*8RSgtB)Ln`+Lr9u`^Z47gyQWnC_Jt?wC7V{Z!OoC;~ z3MckUSTB&WkI5277Rn9FQbtxvcSsc@8^u@3GDb;k#N#fe!K>X%*XS+GR0(U?LM>aU zqjmMj!74V@WHO}CFvJP(l%9n6Z7M8(BFBy@I}6xgcyq(uq)2#JGq9G4*I@=)kcB8+ zSx*<**nNje?qiW9u&WNO+#NP#Qcx}tSx(PfXCaUt7nUumeF$ux8C8EUk@@7xM)Dfv6935g@Y8mMe8>Nns z4zW_|8QGXEC=KZhlbAFhtE3Uh-%Zh37e==d^4y&!?GqA9+4Qp8Lt}S@JwUp3mRHQ!nkGJe&T-vq@Gbc&;(ju4S8f z9;Dh!dJ`!7+SH<;(o?6Q$h) z2fu5VW=^n;U$@9wSx0D5)JqGaWM+y;t3IuECJahc*0X@)NL2%FBZ7Q{CO=1-1} zdA9l;fqu`hZ_?xSXE>@Wv{OF8gYN#mL65`R&;JSk@OYnZer_8#qa$RCS%zh+BHN;{ zL;S)0mTSgq^OyT>jF+eTahaqze(+`H`i6bY*d;2oG>gf(gl30y}JQ@Gk|AU>P#89K}e*2XNw3 zJcKXtFfJnv-(v-?BVF!B`Z*M-7>6ZK@)@BZn3Z5xIz!QJ#9o?Gqt(O0brqv!(#k>t zvgtPm8OTK;Tqr{x>X45%6u`sSgDAlyO7Q|#;}xvIQB>eK*5WOc;}j~j3^pQ?=Uh@K zMT|Cy3UL)nS z!dXbGEtdjM+sa$j65=(7RV<;JCDc&1b(Exz#Wd&y$qor(fqfyK6!2~&47ZV{ph95+ zJt1uzam^ZuWabPs({T%8(27K?ryA|7zJrx_YR(-@G7pMYVHi)Bg~FInC>2sk-QE1E zl3w`oxJKeioK2|;MY|cN=ibG0-Q>QB+OQ(BxV zO_i4x<$O}AiABZdl^R+qz9v~mOT||zwX}@%=90Q4G{foCDfQBT2$I~Hn9kJBCYG1p zCAo{K?PhAvljI(fe32xlbtURa*3qNd+8If)^i!Fn2e+4g_7U8Ef;&J+GX!^#;9mY0 zI5m_1f@}OAxJGGO1lJq_XGzwBdzH}+5!`D8cbMRg5Zvnoca-4XAh=@$cbwqfB)GQ; z?gYWTqpRxP;OxrHP_$?5S9Jq>lF?34qtnFq9;H7+d}k^AEPMZbG-3{&_>hhB5y5_f zDV)PzoM#T7;az;eTNilabM9W$G8llF_qwEo18d~%4r!G(lIldgtfv)0Pi|>f2T`Fz zmvqPmCU6Fk+B_TC;U6#d!->Ulo)Hy~+7Hi3C#^7ox<93jp!!nWy3xJFG5iWve9hPH z8@`N}`SyILlg1VDZAFT-F92smZFE<1bWLo&zd|bgoie1Ul+BR?eqfSUSld-Tmp|fB z{KNw}_qmHONNkfRz|nAG{IQg77xTL)!? N`)2NKmr)r<+&}MD8^-_u diff --git a/target/classes/org/biblioteca/negocio/GestionLibros.class b/target/classes/org/biblioteca/negocio/GestionLibros.class index 57497779dd112619869af468898a6dfee404927f..cd97df2c71ba42ead304e071ca43df0ec62a633a 100644 GIT binary patch delta 490 zcmZ{f%Su8~6o$WjQqP4f%}AtsSp&mP6qH(4r@LJqBEkj@f}&yIGsJmp$MYN(l z#xMmnLXuH294E^JvrLg^8kd<4Y$3!J*kfN{2huc&CRIXN@~p5Z=U=++Lzix@$-Uw~ iU&SHI0n6+9`cflgIr_UU77HDocIasbo{A&gIsOIy^DmYF delta 467 zcmZ{gO-=$)5QM)sGB8X82aFPl|1m5eYNCk)Dk%P=Tf=oc#2ml{7m!F;XyO4pflE(f ztoMc}iE&e1J@u-lyFUtpLiqmm@&x?kskRw&YG4puD;(O|>7Suv~wm-O$d=3Hir6>6-p%{sem zPNg<~Qkz_Gsgx@@bND3_nLzEeTQE*K*{VBEx>Ri{;_qOF8xHJ1it5_6RP**cjWPQ} WHR*jqC)5dO{1cZ>Wav4Mx%~!ft|qep diff --git a/target/classes/org/biblioteca/negocio/GestionPrestamos.class b/target/classes/org/biblioteca/negocio/GestionPrestamos.class index 39a7724d9399718d7ead2485e9f8a9b4a8163cd1..0cc1ce2ef304bd8fe94d1a5eb2d27b1138798a81 100644 GIT binary patch delta 652 zcmYk2TTc^F6otR(&`w)OC|5Hz1}~vpMG_$uFHKOR7*G)ig!rI_KqMv_Diu(n3Id{n z!suTx@eQN#!3TeUf52z|M>VWD(-dCL+2`!F)?RCWasRsU-~WI90($xMHU2pqahSE} z+|D<}u05Qc%ud~#nEbXIPT97_WA9J2(aL%MqUrP#QR)fntf7orDybu>pGFQbr{4-J zohjy7&~5RQV}!_g4`OcK=SEEb@BwVJh<&DRi0A4rN=+QSFX#^GjUQWr#bnG{p#y7&F%UaP;pQOJQ{r#*rUqrW9wUxWyRv*=BWA_L8Fe8EuK5 nG|9?JAp+QrP(g1~S+^uui(R1Fp{GE?p{YQ>YK8LD3-NIe))igZ delta 608 zcmYL_OG{gE5XFBt$u-_o@QIKJN?X+816zrPAc<&8wN|T8P=X5uL3B}y#&@ex5gA|=i5@VLQ*_xDYm@jOdXOk^$spBo%WTh#p zJv%~v&1qqmJp!Z#2(!-tHlIZIq~{2S1;UXC$EIeNTQ^h%iQmPFAbnc#nJ>o9;e%~s zr#zmUN`+3Kf_R}%kPnL)iFMrCY*VWws7y(D|b?3_-9LI5(a#Tu)e$=dm;6fcuEla0ATDxd1Vw<2vv<$k281Oobq=gGF zK=)lv^v-e60XgvfobNmjA7^AOEOY)hodM|L{>$u3J%*}4>GQo1e|UKtzCQH_!|!J~ z5fOokm(_NJpBn{|EVe_!RL0P#M(Y^9|vtr1xxtYK% HEfRPCninOS delta 381 zcmYk1TTa427=^zX+6qmrpeTWOkKqAh42U-rm8vT+(Py7s1bfiLN7tZ{_@Idk&^-~) z6ojV9`RAWG=gaAD^c;mh!_RM^$MsuyZ{J_+z*N96Pt2Sie4Tv)Y3u31+t}UHT})0I z;V~;uOgr6-w8%aOnubFbu*!US)xOI(0+ce|{MdV>d&{xjJ5*dodsowH78(P>?GMVY zsc8yYOhHQ{(-C!7j2LUwgJV~3pUe(T@dx%etG(yE%&)Nq+CR;aV4zU%6+nZYI# oY{EGgg7uWl6O>F*pZ0{NwDlO&n$u?W45BbW{5LaPrhjtv2k_h;_y7O^ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenLibros.class b/target/classes/org/biblioteca/repositorio/AlmacenLibros.class index 6c2b47223b4a19b0c9dc7c244c1c2d4aa3821964..ddfb76437005e626c08d71982ae82e76d28ada58 100644 GIT binary patch delta 1553 zcmY*YYj6`)7(F*hcawCRLeWZTNJGb3+NQLC(8AD>R@+jiU=?QSpflQ(wMJ_ro3vF> zgUU;^0^ZMgfxWFYyPcVl--ZpRNSs%4c3|^YN@>+cWSr`5p#v=wcRb? zF;8TBk{{ixVLdjOyH)R;b=ag~Gr9!SEp1@iGM@~;i#RdB`?8jab zGW1)5eY#wILBkMUH0L?06%{WF%-(*o9( z?dbM)>$>6X4)~2=XrWi+D)`ZfllV!+&l+yRFQzr;xb2iciCL9X!n&uWZB;p*dT!ks z4Bp&(D`rrR1p+U@iab=n$ByLTJe<#`1%+^P?Lab)L1ml;h4+J|-_<0B&Hb*T!b4ou zm;>hF6~vR+sx<19Yk;WLxi!~FR5@%|f~j~FBgD7EfduPYunM_2jMtJi!s!~Xr>mw= zF{0jJ#)+&83yT_5T$@Yu5xmL#L37_EPs9*d>Pw(cU=ULo+#&E5)-9{3OyC|1+N0yA zE2In?hIyYxdO#)LW|4Xo%218jye`HZNTObvQ3g9Jyv+!hpC+YI!aGSzCg`OyF+@a? zp9_|=$XBsaMgJJ4r=2@Wt{f@JmBn`QY2&lDJdVopLnuh#T=L%k$XCX(u_BK924Sxp z!2<`P<0nV3UCOYYBcq1ZY9nmq0yb|URV<>8x{Qt)n3T~`o7Tb2@ousS(o_xBGjNe{ z@ffM4n*AOrzmE@imy~xgFMTLYQYNL1aXhlr7sucrvaCZC5hmH-I99B-C4+H zyo}VZ;JCE$L|jROuR;x$)9MwpxsAfw(S)mUIZyD!gxe$R!l(Ew=~!za4Uj!PNbIL7a#=grb{Yn?kaDM@MbW$gaHGxZua7N zE83+Xsn9}&M`Iab#dHq1j>4|T6m;+$_$jE9GqVbdnQKB@+_%(5JE%*lCGO)?U;5$Za6;AN~J$~g|9?QwGkiXyXJN`hyzuyo(2><{9 delta 1671 zcmY+Di*plI6vls>q}eoVn?j*e+O(vMSld!4D9;f^KoBkHjAE5RnL;BLD;<-9ifBMZ zR0OfBV!;=nMg^5Zi7g0L@de@&UnuxOeBwWVAby*K2%YKX?z!il{e9m#H(tJ`!oT<5 z?Yn@B_`BV|%p34Cji^Nn^9{T$&30K|KklA_t`;nK;V9h2YArHUEk1P(8q2!dk>rLXDJU^ ztYD6TIVapQIXY{epME@SvC2vIhHsf)-xT%Jif!_!MLCbzZRR*%E2}M@pv^vP4)CtE zc#@~=T;JGWE6-Rw%VLA<#^@E1a5Oxx#ZOPxTWqlB`ie@Pw|IfLfhXFyFf5vLDkeKx zUb1+ZjrKZU|GuwSyvjy>I}*ORc|q9O-E7g$7W<&DX6yLuQX|VVH`+XJ>rDS3m+`&5 z(kdG2<41$yizAWdNT|Lk6pqf0G|p;_gqj*>MVh0dLq@>M&wdW`i^&m-x%_H(S^JGY z>=ikcp1%xA?NvFY_JN!{1N&%BasF2I!$k)^d7Xt<&uw;5?nEPD*XQ;teqFnkVla$O zx{|qr(^+eCS179@Fe2t;RpQ|i3fayM<=2tT8w6FkfdD(%m8{W{uJLBNYAUNkS>1~G z$vUgJ-#C*Q0Yx^XzM}YQ+u6@_Xc4HDcC?F=SFjh;hsM1+(VAcwb-B0{I3*QC+Am1W|Z znWQv$o87ovvTR47Gf$GlRBhIA&uJ*b^fp`$ zkD!8)0vg46jLx7`s4MUAuAop>%705vzbANuQ!b_=9h5ttgIruEC@`6BvgjBkq#FFb z4rp>^QYOc|Kq={B<5 zo1Dg1rF^VRu+FndWl~0#svl_dJWN*SE~Ph@QNR@8O=SR=XRy$XPFd)z_Q_U5`9*xh z$6`2TW-9UtuEM05x)sMAGh3DXDW4_b4)!dLJ!i0<8V9PRix-{wU7B$&KONqro_of` z$-dWZ#82)CwqZKxK?gnM<{)}#eWlQ^(qK-b4_C|4I!(hhnuKdPU$Jo--icf%VKb9b zoO|YrX-Gb2e{wKtGpcIS7JGHz3%-=9Zk4z2oWN%o=N===lz^}J+L581cAa-dYm%_4 z-D83dcNa-%!<}{TOlfL}=Ayvai3Qb**WA=Of*ge|Dcs$zS}9@uHMlTas14*3){VPC zg61%W8#Ocy;=3u+7q24UNQ-mDCuOuuN_VJRQ9qg%uQ5sjRPlf!qg;H;cUpKP#pIw? c8hd`y+o9z12YyqmmtxLvIDfzMCr9b~A2tA7!2kdN diff --git a/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class b/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class index 87f8483dc08e0ee9ac7126e9fc0b03955a2ee56c..dc129e74e930834bf504e41875b8625650adbc7e 100644 GIT binary patch delta 1467 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 Date: Wed, 17 Jun 2026 10:07:39 +0200 Subject: [PATCH 5/5] Mensaje --- .../biblioteca/entidades/LibroInterface.class | Bin 0 -> 599 bytes .../biblioteca/entidades/PrestamoInterface.class | Bin 0 -> 745 bytes .../biblioteca/entidades/SocioInterface.class | Bin 0 -> 520 bytes .../herramientas/JsonUtilInterface$1.class | Bin 0 -> 1531 bytes .../herramientas/JsonUtilInterface$2.class | Bin 0 -> 1657 bytes .../herramientas/JsonUtilInterface.class | Bin 0 -> 1235 bytes .../interfaz/MenuPrincipalInterface.class | Bin 0 -> 467 bytes .../negocio/GestionLibrosInterface.class | Bin 0 -> 589 bytes .../negocio/GestionPrestamosInterface.class | Bin 0 -> 551 bytes .../negocio/GestionSociosInterface.class | Bin 0 -> 529 bytes .../repositorio/AlmacenLibrosInterface.class | Bin 0 -> 850 bytes .../repositorio/AlmacenPrestamosInterface.class | Bin 0 -> 869 bytes .../repositorio/AlmacenSociosInterface.class | Bin 0 -> 793 bytes 13 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 target/classes/org/biblioteca/entidades/LibroInterface.class create mode 100644 target/classes/org/biblioteca/entidades/PrestamoInterface.class create mode 100644 target/classes/org/biblioteca/entidades/SocioInterface.class create mode 100644 target/classes/org/biblioteca/herramientas/JsonUtilInterface$1.class create mode 100644 target/classes/org/biblioteca/herramientas/JsonUtilInterface$2.class create mode 100644 target/classes/org/biblioteca/herramientas/JsonUtilInterface.class create mode 100644 target/classes/org/biblioteca/interfaz/MenuPrincipalInterface.class create mode 100644 target/classes/org/biblioteca/negocio/GestionLibrosInterface.class create mode 100644 target/classes/org/biblioteca/negocio/GestionPrestamosInterface.class create mode 100644 target/classes/org/biblioteca/negocio/GestionSociosInterface.class create mode 100644 target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class create mode 100644 target/classes/org/biblioteca/repositorio/AlmacenPrestamosInterface.class create mode 100644 target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class diff --git a/target/classes/org/biblioteca/entidades/LibroInterface.class b/target/classes/org/biblioteca/entidades/LibroInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..07b05a085131e09e70cb749e4571780c0a2d4631 GIT binary patch literal 599 zcmZuuOHRWu5FMA&q@_ShQz*YR$%Y)DtBQ{lsS=A;EZ8}TNnM$^I1Un5W5EG96k?pZ zKm;4lyf<$?p85EEdk26CoIB7Ua3NI|#yl2WYL?KD<(j87WkopUv64})nR=uNbD&9} zx1=vL6g1DmyLibGO~A>Rj*2)Z;Q7JyCqC1P=h+wq#YQmn|HgxR0&OfY=eiUUeN=CJ z7x_u4r6S-WZQU-iHz`M&Q$e7Mkza6RqD%I)5>&C`ningX0T}Io9-{@>!uACW_4Ak2LdhjTvCCJYyV#FZ5*J$UC?52B~ym3mg|KP z=*(oP5_Zc4@`L&jF3o;h1h5635TJ)Q*@hOF+c@A>wrz38;vI{-7VlcTXYoGts=PiN dRCZvoXYmjYEB**Zl|8oc6H^B#ImNdDXJ6bbkm~>d literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/entidades/PrestamoInterface.class b/target/classes/org/biblioteca/entidades/PrestamoInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..b85c93ccbdeebfb06621938926f6791597ad9361 GIT binary patch literal 745 zcmZuv%T5A85bQzZr69f#-+Eg-xF6ujNK8nG8b~~No1JZ7$g&e>2R_b&AK*tBdxlw! z;$=J4RozqD-5;NC?*MQMmt`n0xKer?MlwpIGAMY6sgW^{F$Ws<4sugQ&M@pN!ILgG=zaYWx4o}F zT5IhnZ{5X(O6K%_N{=igO^Zk};#&PjwpJ?#$P)&w)v6^?k=d;pwT>|=`$$d>zpSUgI}{Kzn*W*2p f_o3x<2heu$(BmUGcK8HNT|Bezkh6387U1FwPw2iC literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/entidades/SocioInterface.class b/target/classes/org/biblioteca/entidades/SocioInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..65f5b970e67ac8baeeb2f7c72b02048e8df564c2 GIT binary patch literal 520 zcmZXROHRWu5QfJE`X;or<#7U<4LLwpRS{Ap1dAdT?3`qpx^gqcaX1_c4#1%hlf4H_!-0)}J%VJBNyqtax;y6lf`H2yF1Uj%eH;dF~ytC%uI z_U&P-C`X&npnz79(wz&}oiZ44&uQh_!w%m*qsAqrB%s5-9rb@R&Stq6KGEy^Q{)#IvR!WFn~vMz%3;V?_j#8aN_K=18jUAh ziCtQ620nDMq9KF+G_)MD$T8@_5sTX`<7H!Cn2O=jinOI#Wk?o^^)xOsOqx!|XgN;H z5=M(~1YmYt*^x?ig$5m0(iqBN7*`pFPe4>1lUqIn3K{}pST6hv%3|mg;HoKC+ARV; zfKeay7{f>uB)(s)YeeU@942s`q2Cj(IDO}OCsCHxb-GQi7dsSPD z!f_=Xd)*-s-l|Hmr|X6#I;2@8jY)>7^MVPNVI~glOx22YhSa*VN7W2gr7gA(I}PFP z@`gp0p`fNZr-Er68B?k)J%)wq1us>FxU0#Q&DEhxvHP0BY;$5frrHUG1WL&Rx_aYh zk;#xTL$=7P)RV8C)G~N+jl;Y7-zB4dcp+5V+1ugNd4l?dDBOzG_8Z6fs;=}TYn7X_cUpAa6$F7;e#+3*I%{#vNMa=}81O>Q>tEBfUn7{($}!18>TuPhdwFJjTd} zz;~L)Fy2HEuN3-5@#qxp;$DzL#|#PqCLKkTkkr@cn@}c;pJge^k}Z|LL!X^H!ua0_ u;()VJf>}B`K$Yt>M^9f=#T@3zn1F%%G^enDhj2N76g`usO_~}SS}03dLJ2fY7qf4vkg8Ci5DHR4-zV-gHFE4So}j{4fy5>r z_y9f%aqL)WfKcECOZLoM&zyVinS1ZoZ=b&aSi$lrQW(l0ZDANA0(PKVcGGQoZeWxn z?QNyCY`e-gGPECtf&a|7-kNWe-ja?gUKSX8DZS!Wpxe>}0>#>M`BK`(Z7aKLwC_rz z8eHFt_wZyThb%@j$XOVJC6JGgc+zj#Pnyq_V+2N)UEei#1cpj;8#x@rcm{b3hcF>9 z?F4PR6$C9$*)1}PX{~yyO_HS3Qf4Kr8}0fnfy1S_E}^0oFv~(6)NpY&wWjA zyQSJb(Iqb9ShU*mD3#rKwL>a{4&ChmOXCK9HQ=r7n#y2G8Jrd<><^=~z-%JN{ueyA zA&{;Hn~Z3@=K5;A({3u=kWG)4iCBmY$)LGTjA^s&h60yr|CoOjfzi6#@}=o$VrNx1 z515Ik28xp836G_XyTfhA`mXl}O$p|7CF8DzfndK;SRl8$>!_Vb^)Q1aftf+VK8+Hr zw^5+;-|oJz)F?#$u`=7iCh5qwVtMi!9`%XREy+Knn9|FA^{|)fcjzEj4?5aW_uT0A zr+#T7OHutXQC5A&3qqD{mrn-Q1s4A)9W30$EhdDcmDKmy8hE{I06&W#{UNRFx(dyM zAY{|9)_h;-swcxxg($E*vtR~6#}vn0dHy{_`6DuKxk}+I zzau;eoW=~lRy@z)9Ex0>=bMUctbEQ2TsJtTIa>1{aG?AS;u9v{#QXNJ&c;~f?!E*o z!oGmn7~et(bHs^kWz3W70_SP|TgGnV~$iJdVIbEZs5Nj literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/herramientas/JsonUtilInterface.class b/target/classes/org/biblioteca/herramientas/JsonUtilInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..09af02c237f44f81170281db675399098cd69fb1 GIT binary patch literal 1235 zcmb7ETTc@~6#k~gE^U`vk%HWc2vV*qh}RO63Sz3|l7JAN$aER%;C7eHPEAPsQ3ew* zlK5)kk20QVi}+9@?8D4_XJ*cK&YAD*&tKoZ1IS}3jtHU_T5Q}xjA1NLWv3)do(!~b zx$|Bq#VbZcuT`K~VODQ>G)%YZ`J%v?6XHVIv8f zVfH$X3%(ZWkh_8yTqU?No*4SFlg&9Sv@;AeqkmbI-hogFw4u{R7g7wdCFx83f+3on z+%X%sZS)|`&=m^3sf5-in@ajx`ela9KPVf1b8+nm^qh&=nhk>ea z?W}Muwh6D+Af?67Uf9~$FK#U7i~B42?N?On;{UJZEDSSrUmYw4F87Rg3nL89jmkPU zpFjqqrXcqiCbHMzuh(ka#(hjsAWD>FNa<{!9ET7>Tg-^ZRLEiItd;Js2*?zawD5&0T#2}4 zIXEEIbrhv9)~l5gCCE!2S=zQVcR#H0;|5OE>c7L4H2V!>(hbO!s=7L$cOGgg*2@eT zthz)3hQwA-Rjyc-hADm7UVpk^&VAll+1IQW3u;(Kqd;O1QB6itgc{TI#{E zfpLx%#tw@teoAt(rGd%DZ%aX`T}w{HZw(w>T|XO$@be8*mPR!&B*z;ru&oCb$t{-X zeCGeQS$oTMn~_k)P4h-kAw{{P8_cm4w8v7f9BQ@9eoeCy(i0VQZXtBMM`<-3C#A}} z#;-#gnCiAY-7aj&Rc-9A{Z1_1vm*nS|0grAL+KjOe`~w|kp^`FU8n==1)c_;1@;36 Xfl=Tva1?kRI1ZfD)R!)F?ZEU0LdbWr literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/negocio/GestionLibrosInterface.class b/target/classes/org/biblioteca/negocio/GestionLibrosInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..96c58374f8165c3d83713560324350eb3bdd3677 GIT binary patch literal 589 zcma))KTpFj5XGMhZE2g9@^4~fNe9TnR)oX?0!8XjiGj^Y+~_LTMvlYxVr5`q<3k~? zDJlpmk;!`UySv}{`TgVN6~Gk^+h_=!T9-!&C7P^Psf>)uZAvz}QH3XKVoIDXZjD!N zCR5eMw!m;MpJb$^$)ia!SE&~WG!zQGE$t`+GS)^ZM1j2ANq#~JmMDGN*)o!rfWQ`i n0HDcPHqm0;X4SwB>khhW-D4e~k7ecq>{jOxd+g%7Q0bCY#e2PpfT|;o94dXjd;&kIK;Vrkmrq z!yfZ{0pkK2XBzY=<=zQ6{L342qs-M_;}sb`+tI(-oUG105FlWSBL?VmRNF9M9kJ@c Z4(lO|)_Rxq9*h~}lfr}H1rPzDlsv#qyuWQqJW7tb;Piu10mTs`ZE|7rZO{N$e<-Q4u?u_M2oop`RyglzgfPft?6QIw%?81O`!m0;*tcNgK U>oMyI>@&zl;D8zKu_KSZ0E%>*6951J literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class b/target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..083613945c0bc2e295629a247017c0419b92b421 GIT binary patch literal 850 zcmb7CO>Yx15Pc3Ip@Ft(pnR1ZmyIg1Lgf~O6!9Sytte8e9=O?Fvz^Mdt66Uk{a0K$ z@B{c!h}kWQ5Utd3@K|p=Z|2GKe*XIY1Hc^5hUh80j9lf0jHj5K)j7MfSW}8jF`xTW zZCxnHaIE)3a{N{B5PgO5i9Xl4*P+S}%!#u}QrNHewgPqLqmsaDu4{#)2gVawH)$q>H}OA#A3hPv@d^IsXU` z@A45N+!dq*-$)!^C5oBXu_5$LY0|@3@D?UZd|&VbY@;>(LpfjN5FIbehAz;Lh4L+qC@Um#L2y`vwBkdm6lkTbdf+y3hIA^gU5%X{_*Yyx z@B{c!h)D_sQ4lK*p5%?^&AiwzU%r0&3;=Vum%+fm;~-5@apgE9vRDWmhsY@ihhpxQ zXvyyh#e~ZccYGpwuc-`%1~!lI1Ph10DR!$PvPn~pNM2H`X)gAVPlAC9`SifR@I|P} zz(&cQ-nPq%WFIT1nMoNex&svM@b}~}9db1Ar2HRkGXq-`t#HNi%Ae_2x53BOC6xV8 z2kkz|r)B>IZDLoH9FsEF7TkDDt*Er8=L(+vE{J^M8f%Khk29J**DgP2?FHGX4dnUh zsQ$1PN!T~DU#IULCk`H+a^I|2x~i6}X;Eqv0}t{QTKJWq`h3|~`x9k!wS32wm6{&@>-_XF?rjJw|e Da|h_x literal 0 HcmV?d00001 diff --git a/target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class b/target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..87eb5399b3817c5c416a822de1ab3be7e4887ea9 GIT binary patch literal 793 zcmb7CO;6lF4E1c6-9mvvD5aDmm#mN)Rpqu7(yAX)tEeC?;=pY(F~O^0jGPJoi)#=4 z0sT=`olvb1pq3uS%JV$iFP``F*Y_U)FoD-Y=oxs+Qe_1do;aejncyYY6j_L~iNCN8 z!;~Fy{Ut<{GsQ#b8(5p!E1P*6s_d|sp^KXGi1HEZ5+~x$>52_JNk=CJ`X9JN1J82` z_^r7pP>yZkHIwA*tUs|rE&h}2$8)L;yvzSv*x0~2)=sD(`4r|NRvm}B@zKgLm#nRm zbd-1Un@B#(sg7E?IHfAs*of-dzejj~R}F?pr7f|}y6ub)v_&!>bi|@RilQq>)0