9  Projet : Biblio-Drive

9.1      Contexte

Suite aux dernières fermetures pour raisons sanitaires, la bibliothèque de la ville de Moulinsart souhaite mettre en place en système d’emprunt via une application en ligne.

9.2      Modèle relationnel

Une rapide discussion avec Monsieur Nestor, responsable de la bibliothèque, conduit à la réalisation du modèle relationnel suivant :

image

9.3        Cas d’utilisations

Monsieur Nestor identifie par ailleurs un certain nombre de cas d’utilisation de la future application.

Vous trouverez ci-après ces cas mis en forme, accompagnés de maquettes d’écran, approuvées par M. Nestor.

9.3.1Diagramme de Cas d’Utilisation (UC = Use Case)

image

9.3.2UC0 : Page d’accueil.

Accessible aux membres, comme aux visiteurs.

 

image

HTML, sauf carrousel, alimenté par les 2 dernières acquisitions (pour récupérer les deux dernières acquisitions vous travaillerez sur le champs « dateajout ».

9.3.3UC 1 : Liste des livres d’un auteur

 

image

 

Le visiteur, ou membre, saisit un nom d’auteur dans la zone de saisie (barre de menu), une validation de  cette saisie affiche les titres disponibles de l’auteur indiqué. Les titres sont cliquables et un clic sur un des titres affichera une description détaillé de ce livre.

9.3.4UC2 : Détail d’un livre (visiteur, sans identification).

L’affichage de cette vue n’est pas conditionnée a authentification.

 

image

 

Si l’utilisateur n’est pas authentifié, il a toute la description du « titre cliqué », mais ne peut ajouter de livre à son panier (pour les sites marchands, la chose est généralement possible).

Pour connaître la disponibilité d’un livre, vous vérifierez qu’il n’y a pas d’emprunt en cours (présence d’un emprunt, dans table « emprunter » avec « dateretour » à null).

9.3.5UC3 : Se connecter

Si le visiteur veut emprunter, il devra posséder un compte de membre, créée par un administrateur. Bouton « Connexion », cadre sur la droite.

9.3.6UC4. Détail livre (profil membre, après identification)

Idem UC 2, mais cette fois le bouton « emprunter » est disponible et ainsi que les informations sur le membre connecté.

 

image

 

Un clic sur « Emprunter » ajoutera le numéro du livre souhaité dans un tableau « Panier », tableau lui-même stocké dans le tableau associatif $_SESSION (une entrée pour le « tableau panier », une entrée pour le mél utilisateur, pour son profil, son adresse…). Voir cours pour la gestion des sessions.

9.3.7UC5 : Voir panier.

Suite a clic sur « Emprunter », ou sur « Panier », dans la barre de menu.

 

image

 

Nota Bene : pas plus de 5 emprunts à la fois possible (il faudra compter les « emprunts » en cours pour le membre connecté.

Sur « Valider panier », le tableau Panier stocké dans $_SESSION sera parcouru et pour chaque n° de livre dans le Panier on ajoutera une livre dans la table « emprunter ». Puis le panier est vidé (voir cours Sessions)

9.3.8UC7 : Ajouter un livre.

Ce UC est associé exclusivement au profil « Administrateur ».

 

image

 

Notez la barre de menu, spécifique à ce profil, « Administrateur ».

Le n° du livre sera généré automatiquement, ainsi que la date d’ajout (date courante, voir fonction PHP).

Les auteurs seront proposés via une liste (HTML select), alimentée par la table « auteur ».

9.3.9UC8 : Créer un membre.

Idem UC7. Accessible uniquement par un utilisateur avec le profil « Administrateur ».

 

image

9.4      Travail à faire

Vous coderez les Use Cases présentés ci-dessus.

Les accès à la base de données devront être réalisés via des requêtes préparées.

Les mots de passe encryptés … (voir cours PHP).

Pour la gestion des styles vous utiliserez Bootstrap.

 

9.5      Annexe – Le script BDD Biblio-Drive

 

-- phpMyAdmin SQL Dump

-- version 5.0.2

-- https://www.phpmyadmin.net/

--

-- Host: 127.0.0.1

-- Generation Time: Nov 22, 2020 at 02:36 PM

-- Server version: 10.4.11-MariaDB

-- PHP Version: 7.4.5

 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

START TRANSACTION;

SET time_zone = "+00:00";

--

-- Database: `bibliodrive`

--

-- Table structure for table `auteur`

--

CREATE TABLE `auteur` (

  `noauteur` int(11NOT NULL,

  `nom` varchar(40NOT NULL,

  `prenom` varchar(40NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

--

-- Table structure for table `emprunter`

--

CREATE TABLE `emprunter` (

  `mel` varchar(40NOT NULL,

  `nolivre` int(11NOT NULL,

  `dateemprunt` date NOT NULL,

  `dateretour` date DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

--

-- Table structure for table `livre`

--

CREATE TABLE `livre` (

  `nolivre` int(11NOT NULL,

  `noauteur` int(11NOT NULL,

  `titre` varchar(128NOT NULL,

  `isbn13` char(13NOT NULL,

  `anneeparution` int(11NOT NULL,

  `resume` text NOT NULL,

  `dateajout` date DEFAULT NULL,

  `image` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

--

-- Table structure for table `utilisateur`

--

 

CREATE TABLE `utilisateur` (

  `mel` varchar(40NOT NULL,

  `motdepasse` varchar(40NOT NULL,

  `nom` varchar(40NOT NULL,

  `prenom` varchar(40NOT NULL,

  `adresse` varchar(255NOT NULL,

  `ville` varchar(40NOT NULL,

  `codepostal` int(11NOT NULL,

  `profil` varchar(15NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

ALTER TABLE `auteur`

  ADD PRIMARY KEY (`noauteur`);

 

ALTER TABLE `emprunter`

  ADD PRIMARY KEY (`mel`,`nolivre`,`dateemprunt`),

  ADD KEY `fk_emprunter_livre` (`nolivre`);

 

ALTER TABLE `livre`

  ADD PRIMARY KEY (`nolivre`),

  ADD KEY `fk_livre_auteur` (`noauteur`);

 

ALTER TABLE `utilisateur`

  ADD PRIMARY KEY (`mel`);

 

ALTER TABLE `auteur`

  MODIFY `noauteur` int(11NOT NULL AUTO_INCREMENT;

 

ALTER TABLE `livre`

  MODIFY `nolivre` int(11NOT NULL AUTO_INCREMENT;

 

ALTER TABLE `emprunter`

  ADD CONSTRAINT `fk_emprunter_livre` FOREIGN KEY (`nolivre`REFERENCES `livre` (`nolivre`),

  ADD CONSTRAINT `fk_emprunter_utilisateur` FOREIGN KEY (`mel`REFERENCES `utilisateur` (`mel`);

 

ALTER TABLE `livre`

  ADD CONSTRAINT `fk_livre_auteur` FOREIGN KEY (`noauteur`REFERENCES `auteur` (`noauteur`);

COMMIT;