Vous êtes sur la page 1sur 26

KABA FANTA Ibrahima

ROUVIERE Aude
MERCIER Julien
FOATA Adrian
PHILIPPON-DAUDEL Mathias

Mini Projet UML

Bibliothèque universitaire

Année universitaire 2007 / 2008

Second semestre
SOMMAIRE

I Présentation

1.1 Présentation du sujet


1.2 Présentation globale du système

II Cas d'utilisation

2.1 Adhérent
2.2 Emprunt
2.3 Relance
2.4 Retour d'un emprunt
2.5 Commande d'un livre
2.6 Réception d'une commande

III Diagrammes de classe

3.1 Présentation des classes


3.2 Vue globale du système
3.3 Les classes

IV Diagrammes de séquence

4.1 Emprunt
4.2 Relance
4.3 Rendre
4.4 Commande
4.5 Réception commande

V Diagrammes de machine d'état

5.1 Etat emprunt


5.2 Etat commande
5.3 Etat exemplaire

VI Spécifications et invariants OCL

6.1 Invariants
6.2 Spécifications

~2~
I Présentation

1.1 Présentation du sujet

Ce mini projet a pour objectif de modéliser le système d'information d'une bibliothèque


universitaire. Il comprend la modélisation des emprunts de livres effectués par les étudiants et
les enseignants ainsi que les achats de livres pour la bibliothèque. En revanche, le système ne
gèrera pas la réservation d'un document (livres et revues).

1.2 Présentation globale du système

L'emprunt d'un livre (et sa restitution) ainsi que l'achat d'un livre sont les deux scénarios
principaux gérés par le système.

Lorsqu'un étudiant (ou un enseignant) veut emprunter un livre, le système vérifie en


premier lieu que la personne en a le droit : les étudiants peuvent avoir des pénalités (en cas de
retard lors du retour de l'emprunt), les professeurs n'ont, quant a eux, aucunes pénalités
applicables. Dans un second temps, le système vérifie le nombre d'emprunts en cours de la
personne. Ce nombre ne peut en aucun cas excéder 3. Si les conditions d'emprunt sont
respectées, l'exemplaire du livre emprunté ainsi que la personne l'empruntant sont enregistrés
dans le système. La durée maximale d'emprunt est fixée à 15 jours pour un étudiant et 30 jours
pour un enseignant. Si, une fois ce délai atteint, le livre n'est pas encore rendu, le système
relance automatiquement la personne concernée (par mail pour les enseignants et par courrier
pour les étudiants). A noter qu'une seule relance est effectuée. Si un mois après la relance le
livre n'a toujours pas été rendu, il est considéré comme perdu.

Lors de la restitution du livre, le système vérifie si ce dernier n'a pas été rendu en retard,
et, le cas échéant, calcule la pénalité applicable à la personne concernée (seuls les étudiants
peuvent être pénalisés). La pénalité est égale au nombre de jours de retard par rapport à la date
de retour d'emprunt prévue (date d'emprunt + durée maximale d'emprunt).

~3~
L'achat d'un livre requiert deux acteurs : les enseignants, qui, via une interface web,
auront accès aux différents éditeurs et livres présents dans le système d'information de la
bibliothèque et pourront ainsi commander des livres. Une fois leur commande effectuée, la
bibliothécaire la consulte et doit soit la valider, soit la refuser. Lorsque la commande est refusée,
elle est automatiquement annulée. Si la commande est validée, la bibliothécaire l'envoie à
l'éditeur.

Lors de la réception de la commande, chaque exemplaire des livres commandés est


ajouté au système.

D'autres fonctionnalités sont également disponibles telles que la recherche d'un livre,
etc...

II Cas d'utilisation

2.1 L'adhérent

Un adhérent est soit un étudiant soit un enseignant. Le choix de l'acteur (adhérent, étudiant
ou enseignant) dans les prochains cas d'utilisation dépendra du ou des acteurs concernés.

~4~
2.2 L'emprunt

C'est la bibliothécaire qui s'occupe d'enregistrer l'emprunt. Avant de valider ou refuser un


emprunt, le système vérifie les pénalités et le nombre d'emprunts de la personne concernée.

~5~
2.3 La relance

La relance est automatique, elle est donc déclenchée par l'horloge. Lorsque la date de
retour prévue plus 2 jours est atteinte, le système envoie un message de relance à l'emprunteur
(par mail pour un enseignant ou par courrier pour un étudiant).

~6~
2.4 Le retour d'un emprunt

Tout comme pour l'emprunt, c'est la bibliothécaire qui enregistre le retour d'un emprunt. En
fonction du retard constaté, une pénalité est calculée s'il s'agit d'un étudiant. Si cet étudiant a déjà
une pénalité, elles s'accumulent. De plus, les différents emprunts d'un adhérent seront archivés.

~7~
2.5 La commande d'un livre

La commande est effectuée par un enseignant, qui, après avoir recherché le livre
qui l'intéresse, l'ajoute a sa commande. La commande est créée lors de l'ajout du premier livre
commandé. Une fois la commande effectuée, la bibliothécaire doit valider la commande ou la
refuser. On suppose alors que les livres que les éditeurs nous proposent sont enregistrés dans
notre système à la réception de leurs catalogues de livres.

~8~
2.6 La réception de la commande

Lors de la réception de la commande, autant d'exemplaires de livres sont crées que la


quantité de livres commandés.

~9~
III Diagrammes de classe
3.1 Présentation des classes

La classe 'Adhérent' : elle regroupe toutes les informations d'un adhérent à la


bibliothèque. Cet adhérent est soit un enseignant, soit un étudiant.

La classe 'Enseignant' : l'enseignant étant un adhérent, cette classe hérite de


'Adhérent', tout en ajoutant les informations propres à un enseignant.

La classe 'Etudiant' : tout comme la classe 'Enseignant', elle hérite de 'Adhérent', avec,
en plus, des informations spécifiques à l'étudiant.

La classe 'Livre' : Elle est héritée de 'Ouvrage'. On y retrouve également le prix du livre.

La classe 'Exemplaire' : Héritée de 'Document', la classe 'Exemplaire' a une côte, une


disponibilité et un état ('Comme neuf', 'Bon etat', 'Partiellement abime', 'Tres abime',
'En reparation').

La classe 'Document' : Classe mère de 'Exemplaire' et 'No Revue', elle ne contient que
la cote.

La classe 'NumeroRevue' : Elle correspond à un numéro de revue, avec également son


sommaire.

La classe 'Ouvrage' : Classe mère de 'Revue' et 'Livre', un ouvrage a un numéro et un


titre.

La classe 'Emprunt' : C'est une classe d'association entre 'Adherent' et 'Exemplaire'. Un


emprunt correspond à un exemplaire de livre et un adhérent. Les cardinalités de
cette association permettent de garder l'historique de tous les emprunts d'un
adhérent.

La classe 'Relance' : Permet d'effectuer une relance sur un emprunt rendu en retard.
C'est la classe mère de 'Relance Mail' et 'Relance Courrier', deux types de relance
en fonction de l'adhérent concerné.

La classe 'Commande' : Un professeur peut effectuer une commande, cette classe


contient donc un numéro de commande et une date.

La classe 'LigneCommande' : Une commande est constituée de lignes de commande.


Une ligne de commande correspond à un livre et une quantité, le tout commandé
par un enseignant, c'est pour cela que cette classe est une classe d'association
entre 'Enseignant' et 'Livre'.

La classe 'Editeur' : Elle regroupe toutes les informations utiles sur un éditeur. Un
éditeur peut proposer un à plusieurs livres, mais un livre n'est édité que par un
éditeur.

3.2 Vue globale du système

~ 10 ~
3.3 Les classes ~ 11 ~
3.3 Les classes

3.3.1 La classe 'Adherent'

3.3.1.1 Attributs
nom : Nom de l'adhérent
prenom : Prénom de l'adhérent
dureeMaxEmprunt: Durée maximale d'un emprunt

3.3.1.2 Méthodes
Adherent (N: String; P : String): Constructeur redéfini de la classe
CaculPenalite (Nbjours : Integer): Calcule la pénalité d'un adhérent
Emprunter (cote : Integer) : Permet à un adhérent d'emprunter un livre
Rendre (cote : Integer) : Permet à un adhérent de rendre un livre emprunté
Rechercher (doc : Ouvrage) : Permet à un adhérent de rechercher un ouvrage
(livre ou revue)

3.3.2 La classe 'Enseignant'

3.3.2.1 Attributs
departement : Département dans lequel il enseigne
email: Adresse électronique de l'enseignant

3.3.2.2 Méthodes
Enseignant (Dep: String; email: String): Constructeur redéfini de la classe
Commander (li : Livre, quantite : Integer) : Permet de commander un livre avec
une certaine quantité d'exemplaires
Consulter () : Permet de consulter les livres

3.3.3 La classe 'Etudiant'

3.3.3.1 Attributs
adresse : Adresse de l'etudiant
codePostal: Code postal de la ville dans laquelle l'étudiant se trouve
ville : Ville de l'étudiant
dateFinPenalite: Date à laquelle un étudiant ne sera plus pénalisé

3.3.3.2 Méthodes
Etudiant (Adr: String; CP : Integer; V: String): Constructeur redéfini la classe

~ 12 ~
3.3.4 La classe 'Livre'

3.3.4.1 Attributs
prixUnitaire : Prix d'achat du livre

3.3.4.2 Méthodes
Livre( Titre : String, prix : Integer) : Constructeur redéfini de la classe
GetLivre ():Livre : Renvoie toutes les informations du livre en cours
SetPrixUnitaire(prix : Double) : Modifie le prix du livre

3.3.5 La classe 'Exemplaire'

3.3.5.1 Attributs
disponible: Donne la disponibilité du livre ( disponible ou pas )
etatExemplaire : Etat de l'exemplaire (CommeNeuf, BonEtat, Abime,
TresAbime)

3.3.5.2 Méthodes
Exemplaire() : Constructeur de la classe.
Detruire() : Supprime l'exemplaire courant de la bibliothèque
SetEtatExemplaire(etat : String) : Modifie l'état d'exemplaire
Reparer() : Change l'état de l'exemplaire à 'En réparation'
GetDisponible():Boolean : Retourne la disponibilité de l'exemplaire
SetDisponible(dispo : Boolean) : Modifie la disponibilité

3.3.6 La classe 'Document'

3.3.6.1 Attributs
cote: Identifie de façon unique un document

3.3.6.2 Méthodes
Document() : Constructeur de la classe

3.3.7 La classe 'NumeroRevue'

3.3.7.1 Attributs
numeroRevue : Identifie une revue dans la bibliothèque
sommaire : Sommaire du contenu de la revue

3.3.7.2 Méthodes
NumeroRevue() : Constructeur de la classe.

3.3.8 La classe 'Ouvrage'


~ 13 ~
3.3.8.1 Attributs
titre: Titre de l'ouvrage (Livre ou Revue)

3.3.8.2 Méthodes
Ouvrage() : Constructeur de la classe

3.3.9 La classe 'Emprunt'

3.3.9.1 Attributs
dateEmprunt : Date à laquelle l'emprunt a eu lieu
dateRetourPrevu : Date calculée du retour prévu du livre
dateEffective : Date de retour réelle de l'emprunt
etatEmprunt : Etat de l'emprunt (EnCours, Relance ou Perdu)

3.3.9.2 Méthodes
Emprunt(ex : Exemplaire, adh : Adherent) : Constructeur redéfini de la classe
Relancer () : Permet de relancer un adhérent
GetEtatEmprunt():String : Retourne l'état d'un emprunt.
SetEtatEmprunt (etat : String) : Permet de modifier l'état d'un emprunt.

3.3.10 La classe 'Relance'

3.3.10.1 Attributs
dateRelance : C'est la date à laquelle un adhérent est relancé

3.3.10.2 Méthodes
Relance() : Constructeur de la classe

3.3.11 La classe 'Commande'

3.3.11.1 Attributs
etatCommande : Renseigne sur la situation de la commande(EnCours,
Proposee, Validee ou Recue)
dateCommande : Date à laquelle la commande a été passée

3.3.11.2 Méthodes
Commande() : Constructeur de la classe
Valider (): Elle permet de valider une commande
AjouterProduit ( li: Livre; quantite: Integer) : Permet d'ajouter un livre à la
commande
Refuser() : Permet de refuser une commande
Recevoir(): Permet de mettre à jour le système suite à la réception d'une
commande
Proposer() : Permet à un enseignant de proposer une commande

~ 14 ~
3.3.12 La classe 'LigneCommande'

3.3.12.1 Attributs
nbExemplaires: Nombre de livres que l'on veut commander

3.3.12.2 Méthodes
LigneCommande() : Constructeur de la classe
GetLigneCommande():LigneCommande : Retourne la ligne courante

3.3.13 La classe 'Editeur'

3.3.13.1 Attributs
nomEditeur : nom de l'éditeur
adresse : adresse de l'éditeur
ville : Ville de l'éditeur
CP : Code Postal de l'éditeur

3.3.13.2 Méthodes
Editeur(nom : String) : Constructeur redéfini de la classe
Editeur(nom : String, adr : String, cp : Integer, ville : String) : Constructeur
redéfini de la classe

3.3.1.4 La classe 'Auteur'

3.3.14.1 Attributs
nom: Nom de l'auteur

3.3.14.2 Méthodes
Auteur(nom : String) : Constructeur redéfini de la classe

~ 15 ~
IV Diagrammes de séquence
4.1 Emprunt

Ce diagramme de séquence représente l'enregistrement d'un emprunt de livre dans le


systeme. La bibliothécaire, étant l'acteur qui interagi avec le systeme, enregistre l'emprunt qu'un
adhérent effectue. Le systeme créé alors l'objet emprunt et modifie la disponibilité de l'exemplaire
emprunté.

4.2 Relance

Ce diagramme de séquence représente l'exécution par le système d'une relance lorsqu'un


emprunt n'a pas été rendu deux jours après la date limite d'emprunt. C'est donc l'horloge qui
déclenche l'envoi d'un message pour lancer la relance, le système parcourt les classes afin de
déterminer le type d'adhérent et créera ainsi l'objet relance adéquat de l'emprunteur.

~ 16 ~
4.3 Rendre

~ 17 ~
Ce diagramme de séquence représente l'enregistrement d'un retour d'exemplaire emprunté.
La bibliothécaire, étant l'acteur qui interagi avec le systeme, enregistre le retour de l'exemplaire. Le
systeme vérifie si l'adhérent à rendu l'exemplaire avec du retard et calcul la pénalité cela doit être
fait. Le systeme modifie ensuite la disponibilité de l'exemplaire, enregistre la date de retour réelle
et modifie l'état de l'exemplaire. Puis si besoin est, si l'état de l'exemplaire est très abime il propose
de l'envoyé en réparation ou de le détruire.

~ 18 ~
4.4 Commande
Ce diagramme de séquence représente l'enregistrement d'une commande lancée par un
enseignant. L’enseignant crée ca commande et tant qu'il ne propose pas ca commande à la
bibliothécaire il peut y rajouter des livres. Une foi ca commande proposé elle est soit validée par la
bibliothécaire, et passe à l'état 'validee', soit refusé et passe à l'état 'refuse'.

~ 19 ~
4.5 Réception commande

Ce diagramme de séquence décrit l'enregistrement de la réception d'une commande. La


bibliothécaire reçoit la commande et le système récupère les quantités de livres commandé pour
créer à chaque livre le nombre correspondant d'exemplaire.

~ 20 ~
V Diagrammes de machine d'état
5.1 Etat Emprunt

L'emprunt a différents états comme décrit ci-dessous. L'état 'Rendu' est obligatoire
dans notre système pour calculer la pénalité ainsi que pour garder un historique des exemplaires
empruntés par un adhérent.

~ 21 ~
5.2 Etat Commande

Les différents états de la commande sont présentés ci-après. L'état 'annule'


n'apparait pas car nous avons supposé qu'une commande annulée est automatiquement
supprimée du système d'information. L'historique des commandes ne comprend donc que des
commandes qui ont été validé par la bibliothécaire.

5.3 Etat Exemplaire

Diagramme de machine d'état mettant en évidence les différents états d'un exemplaire : sa
disponibilité ainsi que son état de détérioration.

On prend pour hypothèse qu'un exemplaire revient de réparation à l'état 'Comme neuf'.

~ 22 ~
VI Spécifications et invariants OCL
~ 23 ~
4.1. Invariants:

4.1.1 Classe Emprunt


inv : dateRetourPrevu > DateEmprunt

4.1.2 Classe Etudiant


inv: inherit Adherent redefine dureeMaxEmprunt
dureeMaxEmprunt = 15

4.1.3 Classe Enseignant


inv: inherit Adherent redefine dureeMaxEmprunt
dureeMaxEmprunt = 30

4.1.4 Classe Relance


inv: dateRelance = monEmprunt.dateRetourPrevu +2

4.1.5 Classe LigneCommande


inv: nbExemplaire > 0

4.1.6 Classe Commande


inv: Valider() implies mesLigneCommandes -> notEmpty()

4.1.5 Classe Livre


inv: PrixUnitaire > 0

4.2.Spécifications

4.2.1 Context Adherent::Emprunter(cote : Integer):


pre: if( this = Etudiant) then
dateFinPenalite < DateJour
endif
select(EtatExemplaire = 'EnCours').size() <3

post: MonEmprunt.Exemplaire.GetDisponible() = false


DateEmprunt = DateJour
select(EtatExemplaire='EnCours').size()=
select(EtatExemplaire='EnCours').size()@pre + 1

~ 24 ~
4.2.2 Context Emprunt::Relancer():
pre: DateJour > dateRetourPrevu + 2
etatEmprunt = 'EnCours'

post: etatEmprunt = 'Relance'

4.2.3 Context Adherent::Rendre(cote : Integer):


pre: mesEmprunts -> count(select(mesEmprunts.getEtat() ='EnCours') and
select(mesExemplaires.cote = cote)) = 1

post :if (select(mesExemplaires.cote = cote).etatExemplaire = 'Tres Abime')


then
select(mesExemplaires.cote = cote).disponible = false
else
select(mesExemplaires.cote = cote).disponible = true
end if

4.2.4 Context etudiant::CalculPenalite(nb : integer) :


pre: nb = dateJour - monEmprunt.dateRetourPrevu
this = Etudiant

post : if (dateFinPenalite@pre > DateJour)


dateFinPenalite = dateFinPenalite@pre + nbjour
else
dateFinPenalite = dateJour + nbjour
endif

4.2.5 Context Exemplaire::Reparer():


pre : etatExemplaire ='En Reparation'
disponible = false

post : etatExemplaire = 'Comme Neuf'


disponible = true

4.2.6 Context Exemplaire::Detruire():

~ 25 ~
pre : etatExemplaire ='Tres Abime'
ou etatExemplaire ='Perdu'

post : mesExemplaires.count() = mesExemplaires.count()@pre - 1

4.2.7 Context Enseignent::Commander(li : Livre, quantite : entier):


pre : quantite > 0

post : etatCommande = 'Propose'

4.2.8 Context Commande::Recevoir():


pre : etatCommande= 'Valide'

post : mesLigneCommandes -> forall(Ligne |


Ligne.mesLigneCommandes.mesExemplaires.size()=
Ligne.mesLIgneCommandes.mesExemplaire.size()@pre +
nbExemplaires)
etatCommande = 'Reçu'

4.2.9 Context Commande::Valider():


pre : etatCommande='Propose'

post : etatCommande='Valide'

4.2.10 Context Commande::Refuser():

pre : etatCommande='Propose'

post : etatCommande='Refuse'

~ 26 ~

Vous aimerez peut-être aussi