Skip to content

Latest commit

 

History

History
313 lines (223 loc) · 13.4 KB

README.md

File metadata and controls

313 lines (223 loc) · 13.4 KB

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 😅.

No ha sido un proyecto fácil y, aunque el resultado no es atractivo visualmente, he aprendido muchas cosas y ha merecido 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

Nuestra aplicación ofrece al usuario un menú con las siguientes opciones:

+------------ MENÚ -------------+
|            Básico             |
|-------------------------------|
| [1] Insertar dato             |
| [2] Actualizar dato           |
| [3] Borrar dato               |
| [4] Consultar objet           |
|-------------------------------|
|           Avanzado            |
|-------------------------------|
| [5] Listar arrendadores nombre|
| [6] Listar prestamos nombre   |
| [7] Préstamos en un año       |
| [8] Estadísticas globales     |
| [9] Salir                     |
+-------------------------------+

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

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 (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

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)


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?

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.

Aplicación Boo-King

❗❗❗ Los ejecutables son sólo válidos si tus datos de acceso a la BD son: Usuario: root Contraseña: 123456 ❗❗❗

En el caso de que esto no sea así, salta al punto: Ejecución a través de IDE.

Linux

  1. Descargar el archivo Boo-King-linux.run en releases.
  2. Ejecútalo.
  3. (Si no funciona) Abrir terminal en el directorio del archivo y darle permisos de ejecución sudo chmod +x Boo-King.jar o probar a ejecutar con ./Boo-King*-linux.run

Windows

  1. Descargar el archivo Boo-King-windows.zip en releases.
  2. Ejecuta el launcher.

Si no lanzan los ejecutables

⚠️ Asegúrate de que has leido la advertencia de Aplicación Boo-King.

  1. Descarga el archivo Boo-King.jar en releases.
  2. Abre una terminal cmd o linux y navega a la carpeta dónde lo has descargado mediante el comando cd carpeta.
  3. Escribe el comando java -jar Boo-King.jar.

Ejecución a través de un IDE

Puedes usar esta opción si:

🔴 Tus datos de acceso no son root y 123456.

💔 Si las otras alternativas no funcionaron.

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

  1. Descargar código fuente del proyecto en releases.
  2. Impórtalo en tu IDE Java favorito.
  3. Configurar datos de acceso a BD en el archivo hibernate.cfg.xml.
  4. Ejecutar el Main.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

  • 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 renunciar a presentar 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 🚧



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: