/Boo-King

Aplicación de préstamo de libros

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

Descripción


Boo-King es una aplicación de préstamo de libros entre personas que permite almacenar datos de libros, arrendadores y préstamos en una base de datos MySQL. La aplicación nos permitirá manipular estos datos de una forma mucho más user-friendly. Los receptores de préstamos se han obviado para simplificar un poco el proyecto 😅.

Este proyecto ha supuesto mucho trabajo pero como resultado, ha valido la pena 💃


Navegación


:octocat: Repositorio GitHub
🌐 Página del proyecto
📜 Historial de versiones
⬇️ Descargas
📝 Tareas y mejoras propuestas



Índice




1. Funcionamiento de la aplicación

La aplicación de Boo-King ofrece al usuario una interfaz agradable con la que administrar la base de datos de nuestra aplicación de préstamo de libros. Dicha aplicación ofrece una interfaz como la siguiente:

Tras elegir una opción, el programa interactuará con el usuario para pedirle los datos necesarios para operar y ofrecer los resultados.

Base de datos MySQL

El servidor MySQL será responsable de almacenar y establecer las relaciones entre los datos de nuestra aplicación.

La base de datos necesaria para la aplicación se encuentra en el archivo BaseDatos.sql.

En nuestro caso nos hemos servido de PHPMyAdmin para crear los elementos necesarios para el proyecto, los cuáles son los siguientes.

Tablas

Nombre Descripción
Arrendador Datos de la persona que realizará préstmos de libros
Libro Datos de un libro
Préstamo Préstamo realizado por un arrendador
Stack Tabla intermedia préstamo-libro que almacena la cantidad para cada libro en un préstamo

Relaciones

Tablas Relación
Arrendador-Préstamo 1-N
Préstamo-Stack 1-N
Stack-Libro N-1
(Préstamo-Libro) N-M

Aplicación Java

Java es el encargado de realizar las operaciones lógicas correspondientes según la opción de menú elegida. Éste tendrá que manipular datos y hacer uso las librerías que harán de interfaz entre él y la base de datos.

La clase principal CLI (ejecutable) es Main.java.

Estructuración en paquetes

El código del proyecto está organizado en paquetes de forma que su estructura queda de la siguiente forma:

Paquete Descripción
ejecutable Paquete con los archivos que serán ejecutados
persistencia Clases que definen los objetos que manipularemos
modelo Clases con utilidades recurridas
dao Clases que definen la interacción con la BD

Interfaz gráfica

La graphic user interface (GUI) ha sido realizada mediante la librería JavaFX y la aplicación java SceneBuilder. La combinación de estas dos herramientas nos permite realizar interfaces de forma potente y aplicarles hojas de estilo (css) para dotar a nuestras aplicaciónes de un aspecto atractivo y colorido 🌈.

La clase principal (ejecutable) de la interfaz es MainGui.java. Podemos encontrar todo lo relativo a la visualización en el paquete vista.

Hibernate

Para conectar nuestro programa Java con MySQL hacemos uso de la librería Hibernate, que nos permitirá abstraernos de SQL y trabajar con objetos de forma que el proyecto se agiliza mucho más. También hacemos uso de Hibernate validator, que nos ayudará a validar los datos de entrada ahorrándonos el trabajo de programar validaciones en Java. Cabe destacar que Hibernate a su vez hace uso de la librería JDBC para conectarse con la base de datos, una librería que podría conectar por sí sola Java con la BD pero de forma mucho más primitiva.

Para ello nos hemos basado en la ayuda de la profesora @Fátima y la wiki curso de Hibernate.

Diagrama de clases

Consultas realizadas

En las clases Java del paquete dao, realizamos consultas en varios métodos.

Método Clase Tipo de consulta
guardar GenericDAO Básica
borrar GenericDAO Básica
actualizar GenericDAO Básica
obtener GenericDAO Básica
obtenerPorNombre ArrendadorDAO HQL
totalArrendadores ArrendadorDAO HQL
obtenerPorNombre PrestamoDAO HQL
prestamosEnUnAno PrestamoDAO HQL
librosPrestadosEnUnAno PrestamoDAO HQL
totalPrestamos PrestamoDAO HQL
fechaPrimerPrestamo PrestamoDAO HQL
mediaLibrosPrestados PrestamoDAO HQL
totalLibrosPrestados StackDAO HQL

Eliminación en cascada

Se ha aplicado la eliminación en cascada en las clases siguientes.

Clase Clase víctima del cascada Razón
Arrendador Préstamo Naturaleza de la relación (préstamo no puede existir sin arrendador)
Préstamo Stack Naturaleza de la relación (no puede haber pilas de libros prestados sin su préstamo)

Validaciones

Se han implementado validaciones en los objetos con hibernate validator, tales validaciones incluyen:

  • Introducción de números, máximos y mínimos.
  • Limitación de cadenas de carácteres.
  • Patrones
  • Condiciones definidas en métodos
  • Tipo fecha
  • Objetos válidos


2. Documentación

ℹ️ La información y documentación se encuentra en la carpeta doc incluyendo los siguientes documentos.

Manual del proyecto

Se trata de un white paper o manual dónde se explica el proyecto Boo-King.

Es el documento actual README.md.

Documentación JavaDoc

Es la documentación web generada a partir de los comentarios JavaDoc en código, principalmente para desarrolladores y colaboradores.

Puedes acceder a ella a través del Index JavaDoc.

Diagrama de clases

Es el esquema UML que representa las clases persistencia de Hibernate y sus relaciones entre sí.

Diagrama de clases

Historial de versiones

Es un representación gráfica de todas las versiones (commits) por las que ha pasado el proyecto. Te recomiendo que le eches un vistazo.

Puedes ver el árbol de versiones en este enlace.



3. ¿Cómo ejecutar la aplicación?

Manual de instalación y uso

Base de datos

  1. Deberemos instalar la base de datos MySQL con PHPMyAdmin.
  2. Desde PHPMyAdmin, crear la base de datos 'booking'.
  3. Importar el archivo BaseDatos.sql en la base de datos que acabamos de crear.

Linux

  1. Dirígete a releases y descarga el instalador .jar.
  2. Abre el instalador con doble click o abrir con JVM.
  3. (Si no funcionó) Abre una terminal y navega a la carpeta dónde lo has descargado mediante el comando cd carpeta.
  4. Abre el instalador mediante java -jar Boo-King4.1-install.jar y sigue los pasos.

Windows

  1. Dirígete a releases y descarga el instalador .exe.
  2. Abre el instalador mediante doble click.
  3. Sigue los pasos.

Configuración

La aplicación mostrará una barra de menús y 3 botones con los que podremos acceder a todas las funcionalidades.

  • El menú Archivo muestra opciones de configuración de la aplicación.
  • El menú Administrar da acceso a los paneles de administración de arrendadores, libros y préstamos, al igual que los botones que aparecen en pantalla.
  • El menú Informes ofrece opciones para generar informes (reportes) en pdf sobre los datos de nuestra aplicación.
  • El resto de menús ofrece fuentes de información adicionales al usuario.

Administración y uso

✋ Antes de empezar a usar nuestra aplicación, deberemos configurar las credenciales de acceso a la base de datos. Para ello abrimos el menú Archivo -> Configurar BBDD. Si no realizamos este paso los valores por defecto serán root y 123456. Ahora podremos operar con nuestra aplicación.

Cualquiera de las opciones de administrar que abramos, contiene una tabla con los datos en cuestión, extraídos de la base de datos, y una serie de botones que nos ofrecerán diferentes operaciones como añadir, editar y borrar tuplas de la tabla. Tan sólo tenemos que seleccionar la tupla que queremos alterar y pulsar sobre editar o borrar para manipularla o simplemente pulsar sobre añadir y en cualquier caso nos aparecerá un diálogo adicional solicitando los datos que sean necesarios.

Nuestra aplicación ofrece una función para generar reportes. Estos reportes consisten en informes PDF con los datos de la tabla, estadísticas, gráficas y su fecha de emisión. Para generarlos, tendremos que volver al menú principal y pulsar sobre Informes y la opción que deseemos. Se generará un PDF en la carpeta de instalación y se abrirá automáticamente una ventana para visualizarlo, ¡pero tendrás que ser paciente! 🐢

Recursos adicionales

Algunos problemas son:

  • Los recursos usados por la aplicación se encuentran incluidos en ella, aún así no podemos instalar la fuente usada para los títulos sin tu permiso.

    Para ello se incluye la fuente en la carpeta resources, dentro de la carpeta de instalación.

  • El programa ha sido desarrollado sobre windows 10. Por lo tanto la experiencia visual puede verse alterada en otros sistemas operativos.

    • En sistemas Linux, la vista principal queda ligeramente desplazada.
  • La zona de administración de préstamos no funciona plenamente, debido a la complejidad para introducir una fecha tipo Date (clase obsoleta en java).

Ejecución a través de un IDEE

Puedes usar esta opción si:

🔴 Quieres configurar en profundidad la base de datos.

💔 Si las otras alternativas no funcionaron.

👍 Si deseas ver y modificar el código fuente.

  1. Descargar código fuente del proyecto mediante clone o en releases.
  2. Impórtalo en tu IDE Java favorito.
  3. Configurar datos de acceso a BD en el archivo hibernate.cfg.xml.
  4. Ejecuta Main.java o bien MainGui.java.


4. Objetivos

Acceso a Datos

  • Requisitos mínimos

    • La BD debe constar de al menos tres tablas relacionadas entre si
    • Deben existir relaciones 1:N (al menos 1)
    • Debe existir algún campo autonumérico
    • Tipo enumerado en alguna tabla
    • Validaciones con Hibernate Validator
    • Deben poder realizarse operaciones de inserción en todas las tablas de la BD (>= 3)
    • Deben poder realizarse operaciones de consultas HQL de todas las tablas de la BD (>= 3)
    • Deben poder realizarse operaciones de modificación de al menos una tabla de la BD
    • Deben poder realizarse operaciones de baja de al menos una tabla de la BD
    • Utilización del patrón DAO
    • Gestión de transacciones ❔
  • Aspiras alto, amigo

    • Existencia de una relación N:M implementada como dos relaciones y 1:N
    • Existencia de relación 1:N ordenada
    • Tipo fecha en alguna tabla
    • Paginación
    • Métodos java de validación
    • Existencia de claves únicas
    • Complejidad de la aplicación, de las consultas y operaciones realizadas
    • Calidad de software y estilo de programación. YEA
    • Calidad de la documentación

Desarrollo de interfaces

🚧 This is work in progress my frienderino! 🚧



5. Especificaciones de desarrollo

Acceso a datos

Cosas que caben destacar

  • Validaciones realizadas en métodos, ver Validaciones.

  • En todo momento he deseado superarme programando este proyecto, a nivel de organización, documentación, control de versiones y presentación. Sé que no he hecho un proyecto atractivo por fuera, pero he intentado que por dentro sea adorable 🐨.

    La verdad es que estoy tan muerto fuera de combate que no quiero ni saber qué nota tendrá.

  • He invertido la mayoría del tiempo en re-escribir código y documentar la aplicación para que sea mantenible.

  • He tenido dificultades puntuales con alguna consulta HQL.

  • He aprendido cómo conectar lenguajes lógicos con bases de datos de forma muy práctica.

  • He aprendido mazo de Git & GitHub :octocat: con mucho esfuerzo, pero porque yo he decido que así sea ❤️.

    Creo que ha valido mucho la pena.

  • A mi pesar he tenido que retrasar la interfaz gráfica y funcionalidades como la paginación en los plazos.

Desarrollo de interfaces

🚧 Estamos repartiendo alquitrán por aquí, vuelve más tarde 🚧

sudo apt-get install openjfx



6. Agradecimientos

Agradecimientos especiales a las siguientes personas sin las cuales el proyecto no podría haber acabado:

  • Profesora Fátima Olías que ha transmitido sus conocimientos y me ha salvado de obstáculos importantes 😍
  • Compañeros de clase que, aunque algo pillos, siempre están ahí 😝
  • StackOveflow, cuna de programadores 💻
  • GitHub, plataforma en la que se basa estas páginas :octocat:

Hasta el siguiente!! :kissing_closed_eyes: