# Proyectos - Biblioteca

El objetivo de este proyecto es crear una programa de gestión de bibliotecas muy elemental, que almacene datos sobre los usuarios, las obras disponibles y los préstamos realizados.

Un ejemplo de biblioteca puede probarse en la ventana siguiente:

Enlace a ejercicio Biblioteca

### Comentarios

- En la sección de soluciones tiene disponible una versión mínima del ejercicio que únicamente permite crear la base de datos, pero que puede utilizarse como base para el resto del ejercicio.
- Este proyecto se puede hacer a partir del proyecto Agenda.
- La tabla de préstamos contiene los valores de las columnas id de la obra y del usuario.
- Cada apartado (general, obras, usuarios y préstamos) tienen su propio "borrar todo". Al borrar todo en el apartado general se borran las tres tablas; al borrar todo en el apartado obras se borran las tablas de obras y préstamos pero no la de usuarios; al borrar todo en el apartado usuarios se borran las tablas de usuarios y préstamos, pero no la de obras; al borrar todo en el apartado préstamos, sólo se borra la tabla de préstamos.

Estas pueden ser las consultas de creación de tablas para este proyecto:

    // Tamaño de los campos en la tabla
    define('TAM_TITULO',        50);  // Tamaño del campo Obras > Título
    define('TAM_AUTOR',         50);  // Tamaño del campo Obras > Autor
    define('TAM_EDITORIAL',     50);  // Tamaño del campo Obras > Editorial
    define('TAM_NOMBRE',        50);  // Tamaño del campo Usuarios > Nombre
    define('TAM_APELLIDOS',     50);  // Tamaño del campo Usuarios > Apellidos
    define('TAM_DNI',           10);  // Tamaño del campo Usuarios > DNI
    define('TAM_FECHA',         10);  // Tamaño del campo Préstamo > Fecha

    // Consultas de creación de tablas en MySQL
    $consultaCreaTablaObras = "CREATE TABLE $dbObras (
        id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        autor VARCHAR(".TAM_AUTOR."),
        titulo VARCHAR(".TAM_TITULO."),
        editorial VARCHAR(".TAM_EDITORIAL."),
        PRIMARY KEY(id)
        )";
    $consultaCreaTablaUsuarios = "CREATE TABLE $dbUsuarios (
        id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        nombre VARCHAR(".TAM_NOMBRE."),
        apellidos VARCHAR(".TAM_APELLIDOS."),
        dni VARCHAR(".TAM_DNI."),
        PRIMARY KEY(id)
        )";
    $consultaCreaTablaPrestamos = "CREATE TABLE $dbPrestamos (
        id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        id_usuario INTEGER UNSIGNED,
        id_obra INTEGER UNSIGNED,
        prestado DATE,
        devuelto DATE,
        PRIMARY KEY(id)
        )";

    // Consultas de creación de tablas en SQLite
    $consultaCreaTablaObras = "CREATE TABLE $dbObras (
        id INTEGER PRIMARY KEY,
        autor VARCHAR(".TAM_AUTOR."),
        titulo VARCHAR(".TAM_TITULO."),
        editorial VARCHAR(".TAM_EDITORIAL.")
        )";
    $consultaCreaTablaUsuarios = "CREATE TABLE $dbUsuarios (
        id INTEGER PRIMARY KEY,
        nombre VARCHAR(".TAM_NOMBRE."),
        apellidos VARCHAR(".TAM_APELLIDOS."),
        dni VARCHAR(".TAM_DNI.")
        )";
    $consultaCreaTablaPrestamos = "CREATE TABLE $dbPrestamos (
        id INTEGER PRIMARY KEY,
        id_usuario INTEGER UNSIGNED,
        id_obra INTEGER UNSIGNED,
        prestado DATE,
        devuelto DATE
        )";

Y esta puede ser la consulta que enlaza las tres tablas:

    $consulta = "SELECT $dbPrestamos.id AS id, $dbUsuarios.nombre as nombre,
        $dbUsuarios.apellidos as apellidos, $dbObras.titulo as titulo,
        $dbPrestamos.prestado as prestado, $dbPrestamos.devuelto as devuelto
        FROM $dbPrestamos, $dbUsuarios, $dbObras
        WHERE $dbPrestamos.id_usuario=$dbUsuarios.id
        AND $dbPrestamos.id_obra=$dbObras.id
        ORDER BY $campo $orden";

## Biblioteca 1 - Menús

El programa de biblioteca tendrá un menú principal y tres submenús para Obras, Usuarios y Préstamos. mínimamente utilizable, la agenda debe permitir añadir registros, listarlos y borrar todos los registros.

# Biblioteca - Inicio

# Biblioteca - Obras

# Biblioteca - Usuarios

# Biblioteca - Préstamos

## Biblioteca 2 - Menús Obras y Usuarios

Los menús de Obras y Usuarios tienen las mismas opciones que la agenda de teléfonos.

Nota: Al borrar una obra o un usuario, deben borrarse también los préstamos correspondientes.

# Biblioteca - Obras - Añadir 1

Título: |
Autor: |
Editorial: |

# Biblioteca - Usuarios - Añadir 1

Nombre: |
Apellidos: |
DNI: |

## Biblioteca 3 - Menú préstamos

El menú de Préstamos permite crear un nuevo préstamo e indicar la fecha de devolución, así como listar todos los préstamos y borrarlos.

Notas:

- En la página de devolución de préstamos sólo deben mostrarse los préstamos pendientes.
- La fecha de devolución debe ser posterior a la fecha de préstamo.
- Al insertar una fecha vacía en MySQL se guarda el valor 0000-00-00, pero en SQLite se guarda en blanco. Para evitar problemas, es conveniente almacenar el valor 0000-00-00 en vez de guardarlo en blanco.

  No sé si esto daría problemas en otras bases de datos

- Cuando un préstamo todavía no se haya devuelto, la celda de la fecha de devolución debe mostrarse vacía (en vez de con 00-00-0000).

# Biblioteca - Préstamos - Nuevo préstamo 1

Seleccione obra y usuario e indique la fecha del préstamo:

Datos del nuevo préstamo
Usuario | Obra | Fecha de préstamo (dd-mm-aaaa)
--- | --- | ---

# Biblioteca - Préstamos - Listar

Listado de préstamos
Usuario | Título | Préstamo | Devolución
--- | --- | --- | ---
Pepito Conejo | La náusea | 01-0-/2005 | 02/02/2005
Bruce Kane | Novelas ejemplares | 03-03-2005 |
Clark Kent | El extranjero | 03-02-2005 |

# Biblioteca - Préstamos - Devolución 1

Seleccione el préstamo e indique la fecha de devolución:

Listado de préstamos pendientes
Usuario - Título - Préstamo | Devolución (dd-mm-aaaa)
--- | ---

# Biblioteca - Préstamos - Borrar 1

Listado de préstamos
Borrar | Usuario | Título | Préstamo | Devolución
--- | --- | --- | --- | ---
| Pepito Conejo | La náusea | 01-01-2005 | 02-02-2005
| Bruce Kane | Novelas ejemplares | 03-03-2005 | 10-03-2005
| Clark Kent | El extranjero | 03-02-2005 |

Esta obra está bajo una licencia de Creative Commons.