@@ -11,7 +12,7 @@ Dans cet énoncé, nous abordons deux concepts fondamentaux de la programmation
Dans ce BE, il s'agit de concevoir et de réaliser un programme _simple_ de gestion d'une bibliothèque, intégrant des lecteurs, des livres et des emprunts.
_Remarque_ : Cet énoncé part d'un problème simple et connu qui permet d'en faire la conception et la réalisation dans le temps qui nous est imparti. Les choix de conception et de réalisation sont donc orientés par ces contraintes et par les objectifs pédagogiques, à savoir : apprendre la POO en Python. Il est clair que le même problème dans un cadre professionnel serait traité d’une autre manière et une solution basée sur des bases de données émergerait naturellement, solution que nous écartons a priori car en dehors du périmètre de ce cours.
_Remarque_ :Cet énoncé part d'un problème simple et connu qui permet d'en faire la conception et la réalisation dans le temps qui nous est imparti. Les choix de conception et de réalisation sont donc orientés par ces contraintes et par les objectifs pédagogiques, à savoir:apprendre la POO en _Python_. Il est clair que le même problème dans un cadre professionnel serait traité d’une autre manière et une solution basée sur des bases de données émergerait naturellement, solution que nous écartons a priori car en dehors du périmètre de ce cours.
---
## Cahier des charges
...
...
@@ -48,7 +49,7 @@ Cet énoncé a pour objectif de vous accompagner pour répondre au cahier des ch
_Remarque_ : Dans chaque titre de section, vous verrez figurer une durée entre parenthèses : celui-ci correspond au temps approximatif à passer pour répondre aux questions du chapitre. Si vous prenez trop de retard par rapport à ces _milestones_, demandez de l'aide à votre encadrant !
_Remarque_ : Même si ce n'est pas pas obligatoire, il vous est demandé de développer chaque classe dans un fichier python séparé (pensez à enregistrer tous les fichiers dans le même répertoire).
_Remarque_ : Même si ce n'est pas pas obligatoire, il vous est demandé de développer chaque classe dans un fichier _Python_ séparé (pensez à enregistrer tous les fichiers dans le même répertoire).
---
## Classe Lecteur et classe Livre (75 minutes)
...
...
@@ -125,6 +126,7 @@ Dessinez ensuite le détail de la boîte UML de la classe __Bibliothèque__, de
1. Faites de même avec les livres. On ne vérifiera pas si le livre est déjà présent dans la collection avant de l'ajouter.
---
## Les emprunts (90 minutes)
...
...
@@ -204,32 +206,32 @@ Un emprunt sera modélisé par un objet qui associe un lecteur (connu par son id
1. Pour simuler le rendu d'un livre par un lecteur à la bibliothèque, implémentez une méthode _retour\_livre(self, numero_lecteur, numero_livre)_. Pour coder cette méthode, on pourra faire appel à une __méthode privée__ appelée _\_\_chercher_emprunt(self, numero_lecteur, numero_livre)_ qui renverra l'instance de l'emprunt s'il fait partie de la liste des emprunts, ou _None_ dans le cas contraire. La méthode _retour\_livre_ affichera un message d'erreur si l'emprunt n'existe pas. Dans le cas contraire, détruisez l'emprunt et pensez à mettre à jour le nombre d’exemplaires du livre ainsi que le nombre d’emprunts du lecteur.
Tester le retour dans votre programme principal grâce au code suivant :
Tester le retour dans votre programme principal grâce au code suivant :
``` python
if __name__ == '__main__':
``` python
if__name__=='__main__':
...
...
# Quelques retours de livres
print('\n--- Quelques retours de livres :')
b.retour_livre(1, 101)
b.retour_livre(1, 102)
b.retour_livre(10, 108)
```
qui devra afficher quelque chose de similaire à :
# Quelques retours de livres
print('\n--- Quelques retours de livres :')
b.retour_livre(1,101)
b.retour_livre(1,102)
b.retour_livre(10,108)
```
qui devra afficher quelque chose de similaire à :
```console
--- Quelques retours de livres :
Aucun emprunt ne correspond a ces informations : 1 102
Aucun emprunt ne correspond a ces informations : 10 108
```
```console
--- Quelques retours de livres :
Aucun emprunt ne correspond a ces informations : 1 102
Aucun emprunt ne correspond a ces informations : 10 108
```
---
## Crash-test
À ce stade, votre programme doit être fonctionnel, mais êtes-vous bien certains que l'ensemble de vos classes sont robustes ? Nous vous proposons de le vérifier à l'aide de ce [crash-test](./crash_test_biblio.py), à télécharger à côté de vos fichiers.
À ce stade, votre programme doit être fonctionnel, mais êtes-vous bien certains que l'ensemble de vos classes sont robustes ? Nous vous proposons de le vérifier à l'aide de ce [crash-test](crash_test_biblio.py), à télécharger à côté de vos fichiers.
Si, en lançant ce programme, vous obtenez des erreurs d'exécution, chercher à corriger vos méthodes. Les réponses attendues à chaque ligne de code sont données sous forme de commentaire dans le fichier. A vous de vérifier que tout est OK !
...
...
@@ -241,6 +243,9 @@ _Remarque_ : Pour établir la robustesse de ses programmes, on utilise la progra
**Point 6. (facultatif) du cahier des charges**
1. Implémentez une méthode permettant de supprimer un livre (si tous les exemplaires sont rendus).
1. Implémentez une méthode permettant de supprimer un lecteur (si il n'est redevable d'aucun emprunt).
1. Un livre qui n'aurait plus d’exemplaire ne doit plus apparaître dans la liste des livres à disposition de la bibliothèque.
1. Implémentez une méthode permettant de supprimer un lecteur (si il n'est redevable d'aucun emprunt).
1. Un livre qui n'aurait plus d’exemplaire ne doit plus apparaître dans la liste des livres à disposition de la bibliothèque.
1. Comment implémenter un mécanisme de vérification de l'unicité de l'identifiant d'un lecteur et de celui d'un livre ?