En el post de hoy vamos a resolver un ejercicio de programación con Java en donde simulamos una biblioteca en donde se prestan libros.

Usaremos programación orientada a objetos (clases) y archivos de texto para que los datos permanezcan guardados aunque la aplicación sea detenida. Todo será por consola.

Descripción del ejercicio

La solicitud dice así:

A continuación se le presenta la definición de un sistema de información muy simplificado de una biblioteca. En ella aparecen socios, que se dan de alta en la biblioteca y a partir de ese momento pueden tomar prestados libros de la misma.

Un socio está caracterizado por un número de socio, un nombre y una dirección; además, en cada momento se puede saber el número de libros que un socio tiene prestados, y si tiene más de diez libros.

Por su parte, de cada libro se conoce su código, título, autor y si está o no disponible; además se puede saber en cualquier momento la localización del libro en la biblioteca, así como la signatura del mismo.

Un libro puede ser cambiado de lugar, y se le puede cambiar igualmente su signatura; de hecho, siempre que se cambia la signatura de un libro es porque se cambia de lugar.

Los libros se prestan a los socios, y como consecuencia aparece la noción de préstamo; un préstamo estará caracterizado, además de por el código del libro prestado y el número de socio, por la fecha del mismo.

Por otra parte también se va a llevar control de los socios que tengan prestados más de 10 libros, de lo cual se encargará la aplicación, haciendo que estos socios pasen a especializarse temporalmente en socios no fiables.

Clases de Java

Para este ejercicio de sistema de biblioteca primero hay que ver las 3 clases que interactúan, y son la clase Libro, Socio y Préstamo.

Quedan definidas así, con los getters, setters y constructores:

Y cada clase tiene su respectivo controlador que se va a encargar de hacer todas las operaciones como prestar un libro, registrar un socio, etcétera.

Controlador de Socios

Comencemos viendo el controlador de los socios. Va a tener todas las operaciones que tengan que ver con la clase del mismo nombre.

Cuenta con varios métodos como el de registrar un nuevo socio que recibe una instancia de la clase Socio, abre el archivo en modo append y lo guarda. También cuenta con una función que solicita datos por teclado, crea el objeto y luego lo guarda.

Para el caso de obtener la lista de socios lo que se hace es leer un archivo y convertirlo a ArrayList. Ese archivo es el que se modifica cada que se registra un nuevo socio.

Otro método interesante y que se va a repetir en los siguientes controladores es el de imprimir una tabla con datos que no tienen un ancho fijo.

En este caso estoy usando el poder de printf que aprendí desde C para imprimir tablas dejando el espacio, mismo que es compatible con Java:

Imprimir tabla de socios para programa de biblioteca en Java

Imprimir tabla de socios para programa de biblioteca en Java

Y finalmente otra función que vale la pena resaltar es la de buscar un socio a partir de un ArrayList.

Controlador de libros

Ya vimos los socios, ahora veamos los libros. Recordemos que en este programa de Java para gestionar una biblioteca necesitamos llevar el control de los libros.

Registrar nuevo libro en librería gestionada con Java y archivos

Registrar nuevo libro en librería gestionada con Java y archivos

Existe el controlador de los libros que es muy parecido al de los socios pero ahora para la clase Libro.

Aquí el método que me parece más interesante es el que marca un libro como prestado, ya que lee todo el archivo, modifica el libro usando un setter y luego escribe ese ArrayList de vuelta al archivo.

Controlador de préstamos

Finalmente echemos un vistazo al controlador de los préstamos. Este es el puente entre los libros y los socios ya que permite registrar los préstamos, ver los socios no fiables, etcétera.

Realmente no tiene tantos métodos ya que solo se encarga de invocar a los otros controladores. Queda así:

Una función que hay que reconocer es la que lee el archivo de texto y convierte la fecha como cadena a un LocalDateTime, ya que permite seguir trabajando con el objeto aunque la fecha haya sido serializada.

Por cierto, todo está validado para que un libro no pueda ser prestado si no está disponible. Hablando de la disponibilidad, hace falta el método que se encargaría de devolver el libro, pero no lo programé porque el ejercicio no lo pide.

Librería con Java – Gestionar libros, socios y préstamos

Mostrar socios no fiables - Biblioteca con Java

Mostrar socios no fiables – Biblioteca con Java

Es momento de ver el menú y la manera en la que funciona este pequeño ejercicio de simulación de biblioteca con Java.

Debido a que los métodos de los controladores son estáticos podemos invocarlos en cualquier momento sin tener que crear instancias:

Es un simple menú de opciones con Java que actúa dependiendo de la elección del usuario.

Poniendo todo junto

A continuación te dejo el código completo. Recuerda que los archivos se crean automáticamente así que no tienes que hacer nada más que compilar.

Por cierto, esto funciona compilando nativamente y también en NetBeans o cualquier otro IDE. Tú decides la forma de compilar y eres libre de modificar el código, separar las clases, etcétera:

Para terminar te dejo con más tutoriales de Java en mi blog.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 5,522 suscriptores

parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

A %d blogueros les gusta esto: