diff --git a/TD1/correction/code/formes.py b/TD1/correction/code/formes.py new file mode 100755 index 0000000000000000000000000000000000000000..b010707d7ad2a5847c630babc695437e8419f47d --- /dev/null +++ b/TD1/correction/code/formes.py @@ -0,0 +1,85 @@ +class Forme: + def __init__(self, x, y): + self.__x = x + self.__y = y + + def get_pos(self): + return self.__x, self.__y + + def set_pos(self, x, y): + self.__x = x + self.__y = y + + def translation(self, dx, dy): + self.__x += dx + self.__y += dy + +class Rectangle(Forme): + def __init__(self, x, y, l, h): + Forme.__init__(self, x, y) + self.__l = l + self.__h = h + + def __str__(self): + return f"Rectangle d'origine {self.get_pos()} et de dimensions {self.__l}x{self.__h}" + + def get_dim(self): + return self.__l, self.__h + + def set_dim(self, l, h): + self.__l = l + self.__h = h + + def contient_point(self, x, y): + X, Y = self.get_pos() + return X <= x <= X + self.__l and \ + Y <= y <= Y + self.__h + + def redimension_par_points(self, x0, y0, x1, y1): + self.set_pos(min(x0, x1), min(y0, y1)) + self.__l = abs(x0 - x1) + self.__h = abs(y0 - y1) + +class Ellipse(Forme): + def __init__(self, x, y, rx, ry): + Forme.__init__(self, x, y) + self.__rx = rx + self.__ry = ry + + def __str__(self): + return f"Ellipse de centre {self.get_pos()} et de rayons {self.__rx}x{self.__ry}" + + def get_dim(self): + return self.__rx, self.__ry + + def set_dim(self, rx, ry): + self.__rx = rx + self.__ry = ry + + def contient_point(self, x, y): + X, Y = self.get_pos() + return ((x - X) / self.__rx) ** 2 + ((y - Y) / self.__ry) ** 2 <= 1 + + def redimension_par_points(self, x0, y0, x1, y1): + self.set_pos((x0 + x1) // 2, (y0 + y1) // 2) + self.__rx = abs(x0 - x1) / 2 + self.__ry = abs(y0 - y1) / 2 + +class Cercle(Ellipse): + def __init__(self, x, y, r): + Ellipse.__init__(self, x, y, r, r) + + def __str__(self): + return f"Cercle de centre {self.get_pos()} et de rayon {self.get_dim()}" + + def get_dim(self): + return Ellipse.get_dim(self)[0] + + def set_dim(self, r): + Ellipse.set_dim(self, r, r) + + def redimension_par_points(self, x0, y0, x1, y1): + r = min(abs(x0 - x1), abs(y0 - y1)) / 2 + self.set_dim(r) + self.set_pos(round(x0 + r if x1 > x0 else x0 - r), + round(y0 + r if y1 > y0 else y0 - r)) diff --git a/TD1/correction/code/formes_avec_dessin.py b/TD1/correction/code/formes_avec_dessin.py new file mode 100644 index 0000000000000000000000000000000000000000..b9717a60503a24884b4750dff75ba6d07c413c90 --- /dev/null +++ b/TD1/correction/code/formes_avec_dessin.py @@ -0,0 +1,125 @@ +class Forme: + def __init__(self, x, y): + self.__x = x + self.__y = y + + self.__dessins = [] + + def get_pos(self): + return self.__x, self.__y + + def set_pos(self, x, y): + self.__x = x + self.__y = y + + def translation(self, dx, dy): + self.__x += dx + self.__y += dy + + def add_dessin(self,d): + self.__dessins.append(d) + + def del_dessin(self,d): + self.__dessins.remove(d) + + def print_dessins(self): + print("Liste des dessins de la forme : ") + for d in self.__dessins: + print(d.get_nom()) + +class Rectangle(Forme): + def __init__(self, x, y, l, h): + Forme.__init__(self, x, y) + self.__l = l + self.__h = h + + def __str__(self): + return f"Rectangle d'origine {self.get_pos()} et de dimensions {self.__l}x{self.__h}" + + def get_dim(self): + return self.__l, self.__h + + def set_dim(self, l, h): + self.__l = l + self.__h = h + + def contient_point(self, x, y): + X, Y = self.get_pos() + return X <= x <= X + self.__l and \ + Y <= y <= Y + self.__h + + def redimension_par_points(self, x0, y0, x1, y1): + self.set_pos(min(x0, x1), min(y0, y1)) + self.__l = abs(x0 - x1) + self.__h = abs(y0 - y1) + +class Ellipse(Forme): + def __init__(self, x, y, rx, ry): + Forme.__init__(self, x, y) + self.__rx = rx + self.__ry = ry + + def __str__(self): + return f"Ellipse de centre {self.get_pos()} et de rayons {self.__rx}x{self.__ry}" + + def get_dim(self): + return self.__rx, self.__ry + + def set_dim(self, rx, ry): + self.__rx = rx + self.__ry = ry + + def contient_point(self, x, y): + X, Y = self.get_pos() + return ((x - X) / self.__rx) ** 2 + ((y - Y) / self.__ry) ** 2 <= 1 + + def redimension_par_points(self, x0, y0, x1, y1): + self.set_pos((x0 + x1) // 2, (y0 + y1) // 2) + self.__rx = abs(x0 - x1) / 2 + self.__ry = abs(y0 - y1) / 2 + +class Cercle(Ellipse): + def __init__(self, x, y, r): + Ellipse.__init__(self, x, y, r, r) + + def __str__(self): + return f"Cercle de centre {self.get_pos()} et de rayon {self.get_dim()}" + + def get_dim(self): + return Ellipse.get_dim(self)[0] + + def set_dim(self, r): + Ellipse.set_dim(self, r, r) + + def redimension_par_points(self, x0, y0, x1, y1): + r = min(abs(x0 - x1), abs(y0 - y1)) / 2 + self.set_dim(r) + self.set_pos(round(x0 + r if x1 > x0 else x0 - r), + round(y0 + r if y1 > y0 else y0 - r)) + +class Dessin: + def __init__(self,n): + self.__nom = n + self.__formes = [] + + def get_nom(self): + return self.__nom + + def add_forme(self,f): + self.__formes.append(f) + f.add_dessin(self) + + def del_forme(self,position): + f = self.__formes.pop(position) + f.del_dessin(self) + + def print_formes(self): + print('--- Dessin ---') + for f in self.__formes: + print(f) + + def __str__(self): + s = '--- Dessin (avec print) ---' + for f in self.__formes: + s += '\n' + str(f) + return s \ No newline at end of file diff --git a/TD1/correction/code/test_formes.py b/TD1/correction/code/test_formes.py new file mode 100755 index 0000000000000000000000000000000000000000..171840f6290ef94f6a718c39381446c3f96d05e0 --- /dev/null +++ b/TD1/correction/code/test_formes.py @@ -0,0 +1,33 @@ +from formes import * + +def test_Rectangle(): + r = Rectangle(10, 20, 100, 50) + str(r) + assert r.contient_point(50, 50) + assert not r.contient_point(0, 0) + r.redimension_par_points(100, 200, 1100, 700) + assert r.contient_point(500, 500) + assert not r.contient_point(50, 50) + +def test_Ellipse(): + e = Ellipse(60, 45, 50, 25) + str(e) + assert e.contient_point(50, 50) + assert not e.contient_point(11, 21) + e.redimension_par_points(100, 200, 1100, 700) + assert e.contient_point(500, 500) + assert not e.contient_point(101, 201) + +def test_Cercle(): + c = Cercle(10, 20, 30) + str(c) + assert c.contient_point(0, 0) + assert not c.contient_point(-19, -9) + c.redimension_par_points(100, 200, 1100, 700) + assert c.contient_point(500, 500) + assert not c.contient_point(599, 500) + +if __name__ == '__main__': + test_Rectangle() + test_Ellipse() + test_Cercle() diff --git a/TD1/correction/code/test_formes_avec_dessin.py b/TD1/correction/code/test_formes_avec_dessin.py new file mode 100644 index 0000000000000000000000000000000000000000..343b02cffd73bf486a1ea1a6667adb8323885668 --- /dev/null +++ b/TD1/correction/code/test_formes_avec_dessin.py @@ -0,0 +1,68 @@ +from formes_avec_dessin import * + +def test_Rectangle(): + r = Rectangle(10, 20, 100, 50) + str(r) + assert r.contient_point(50, 50) + assert not r.contient_point(0, 0) + r.redimension_par_points(100, 200, 1100, 700) + assert r.contient_point(500, 500) + assert not r.contient_point(50, 50) + +def test_Ellipse(): + e = Ellipse(60, 45, 50, 25) + str(e) + assert e.contient_point(50, 50) + assert not e.contient_point(11, 21) + e.redimension_par_points(100, 200, 1100, 700) + assert e.contient_point(500, 500) + assert not e.contient_point(101, 201) + +def test_Cercle(): + c = Cercle(10, 20, 30) + str(c) + assert c.contient_point(0, 0) + assert not c.contient_point(-19, -9) + c.redimension_par_points(100, 200, 1100, 700) + assert c.contient_point(500, 500) + assert not c.contient_point(599, 500) + +def test_Dessin(): + # Partie pour aller plus loin : Creation et manipulation d'objets Dessin + + r = Rectangle(10, 20, 100, 50) + e = Ellipse(60, 45, 50, 25) + c = Cercle(10, 20, 30) + + print("Création d'un dessin A composé des trois formes") + d1 = Dessin("A") + d1.add_forme(r) + d1.add_forme(e) + d1.add_forme(c) + d1.print_formes() + + print("Création d'un dessin B composé de l'ellipse et du cercle") + d2 = Dessin("B") + d2.add_forme(e) + d2.add_forme(c) + d2.print_formes() + + print("Affichage des dessins auxquels les formes sont associées") + r.print_dessins() + e.print_dessins() + c.print_dessins() + + print("Suppression de l'ellipse dans le dessin A") + d1.del_forme(1) + print(d1) + + print("Affichage des dessins auxquels les formes sont associées") + r.print_dessins() + e.print_dessins() + c.print_dessins() + +if __name__ == '__main__': + test_Rectangle() + test_Ellipse() + test_Cercle() + test_Dessin() diff --git a/TD1/correction/diagramme_classes_formes.png b/TD1/correction/diagramme_classes_formes.png new file mode 100644 index 0000000000000000000000000000000000000000..0368318a11ea4296a45af7e69fe928c7d5df2f73 Binary files /dev/null and b/TD1/correction/diagramme_classes_formes.png differ diff --git a/TD1/correction/diagramme_classes_formes_avec_dessin.png b/TD1/correction/diagramme_classes_formes_avec_dessin.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1993089d4961025a34b24c9e1409f9c7aca18f Binary files /dev/null and b/TD1/correction/diagramme_classes_formes_avec_dessin.png differ diff --git a/TD2/correction/code/bibliotheque.py b/TD2/correction/code/bibliotheque.py new file mode 100755 index 0000000000000000000000000000000000000000..b493ead3f83228ce29420791f060f780736fec5e --- /dev/null +++ b/TD2/correction/code/bibliotheque.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +""" + +@author: dellandrea +""" +from lecteur import * +from livre import * +from emprunt import * + + +# ***** classe Bibliotheque ***** +class Bibliotheque: + def __init__(self,nom): + self.__nom = nom + self.__lecteurs = [] + self.__livres = [] + self.__emprunts = [] + + def get_nom(self): + return self.__nom + + def ajout_lecteur(self,nom,prenom,adresse,numero): + self.__lecteurs.append(Lecteur(nom,prenom,adresse,numero)) + + def retrait_lecteur(self,numero): + # On cherche le lecteur + lecteur = self.chercher_lecteur_numero(numero) + if lecteur == None: + return False + # On verifie qu'il n'a pas d'emprunt en cours + for e in self.__emprunts: + if e.get_numero_lecteur()==numero: + return False + # On peut ici retirer le lecteur de la liste + self.__lecteurs.remove(lecteur) + return True + + def ajout_livre(self,auteur,titre,numero,nb_total): + self.__livres.append(Livre(auteur,titre,numero,nb_total)) + + def retrait_livre(self,numero): + # On cherche le livre + livre = self.chercher_livre_numero(numero) + if livre == None: + return False + # On verifie que le livre n'est pas en cours d'emprunt + for e in self.__emprunts: + if e.get_numero_livre()==numero: + return False + # On peut ici retirer le livre de la liste + self.__livres.remove(livre) + return True + + def chercher_lecteur_numero(self,numero): + for l in self.__lecteurs: + if l.get_numero() == numero: + return l + return None + + def chercher_lecteur_nom(self,nom,prenom): + for l in self.__lecteurs: + if l.get_nom() == nom and l.get_prenom() == prenom: + return l + return None + + def chercher_livre_numero(self,numero): + for l in self.__livres: + if l.get_numero() == numero: + return l + return None + + def chercher_livre_titre(self,titre): + for l in self.__livres: + if l.get_titre() == titre: + return l + return None + + def chercher_emprunt(self, numero_lecteur, numero_livre): + for e in self.__emprunts: + if e.get_numero_lecteur() == numero_lecteur and e.get_numero_livre() == numero_livre: + return e + return None + + def emprunt_livre(self, numero_lecteur, numero_livre): + # On verifie que le numero de livre est valide + livre = self.chercher_livre_numero(numero_livre) + if livre == None: + print('Emprunt impossible : livre inexistant') + return None + + # On verifie qu'il reste des exemplaires disponibles pour ce livre + if livre.get_nb_dispo() == 0: + print('Emprunt impossible : plus d\'exemplaires disponibles') + return None + + # On verifie que le numero de lecteur est valide + lecteur = self.chercher_lecteur_numero(numero_lecteur) + if lecteur == None: + print('Emprunt impossible : lecteur inexistant') + return None + # On verifie que ce lecteur n'a pas deja emprunte ce livre + e = self.chercher_emprunt(numero_lecteur, numero_livre) + if e != None: + print('Emprunt impossible : deja en cours') + return None + + # Les conditions sont reunies pour pouvoir faire cet emprunt + self.__emprunts.append(Emprunt(numero_lecteur, numero_livre)) + livre.set_nb_dispo(livre.get_nb_dispo()-1) + lecteur.set_nb_emprunts(lecteur.get_nb_emprunts()+1) + return self.__emprunts[-1] + + def retour_livre(self, numero_lecteur, numero_livre): + # On recherche l'emprunt identifie par le numero de livre et de lecteur + e = self.chercher_emprunt(numero_lecteur, numero_livre) + if e != None: # l'emprunt existe, on le retire de la liste et on met a jour nb_emprunt pour le lecteur et nb_dispo pour le livre + self.__emprunts.remove(e) + lecteur = self.chercher_lecteur_numero(numero_lecteur) + if lecteur != None : lecteur.set_nb_emprunts(lecteur.get_nb_emprunts()-1) + livre = self.chercher_livre_numero(numero_livre) + if livre != None: livre.set_nb_dispo(livre.get_nb_dispo()+1) + print('Retour effectue') + return True + else: + print('Aucun emprunt ne correspond a ces informations') + return False + + def affiche_lecteurs(self): + for l in self.__lecteurs: + print(l) + + def affiche_livres(self): + for l in self.__livres: + print(l) + + def affiche_emprunts(self): + for e in self.__emprunts: + print(e) + diff --git a/TD2/correction/code/emprunt.py b/TD2/correction/code/emprunt.py new file mode 100644 index 0000000000000000000000000000000000000000..1ca812a9f9322525f814b71f624d75f64c5ab1c0 --- /dev/null +++ b/TD2/correction/code/emprunt.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:27:13 2022 + +@author: dellandrea +""" + +from datetime import date +from lecteur import * +from livre import * + +# ***** classe Emprunt ***** +class Emprunt: + def __init__(self,numero_lecteur,numero_livre): + self.__numero_lecteur = numero_lecteur + self.__numero_livre = numero_livre + self.__date = date.isoformat(date.today()) + + def get_numero_lecteur(self): + return self.__numero_lecteur + + def get_numero_livre(self): + return self.__numero_livre + + def get_date(self): + return self.__date + + def __str__(self): + return 'Emprunt - Numero lecteur : {}, Numero livre: {}, Date : {}'.format(self.__numero_lecteur,self.__numero_livre,self.__date) + \ No newline at end of file diff --git a/TD2/correction/code/lecteur.py b/TD2/correction/code/lecteur.py new file mode 100644 index 0000000000000000000000000000000000000000..5fca8b826a59cee5e379ce205faa32948d92a761 --- /dev/null +++ b/TD2/correction/code/lecteur.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:25:52 2022 + +@author: dellandrea +""" + +from personne import * + +# ***** classe Lecteur ***** +class Lecteur(Personne): + def __init__(self,nom,prenom,adresse,numero): + Personne.__init__(self,nom,prenom,adresse) + self.__numero = numero + self.__nb_emprunts = 0 + + def set_numero(self,numero): + self.__numero = numero + + def get_numero(self): + return self.__numero + + def set_nb_emprunts(self,nb_emprunts): + self.__nb_emprunts = nb_emprunts + + def get_nb_emprunts(self): + return self.__nb_emprunts + + def __str__(self): #Permet d'afficher les proprietes de l'objet avec la fonction print + return 'Lecteur - Nom : {}, Prenom : {}, Adresse : {}, Numero : {}, Nb emprunts : {}'.format(self.get_nom(),self.get_prenom(),self.get_adresse(),self.__numero,self.__nb_emprunts) diff --git a/TD2/correction/code/livre.py b/TD2/correction/code/livre.py new file mode 100644 index 0000000000000000000000000000000000000000..06ec6cca573cdd5325ea5e93f32e7cee6a0711e4 --- /dev/null +++ b/TD2/correction/code/livre.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:26:54 2022 + +@author: dellandrea +""" + +# ***** classe Livre ***** +class Livre: + def __init__(self,titre,auteur,numero,nb_total): + self.__titre = titre + self.__auteur = auteur + self.__numero = numero + self.__nb_total = nb_total + self.__nb_dispo = nb_total + + def set_auteur(self,auteur): + self.__auteur = auteur + + def get_auteur(self): + return self.__auteur + + def set_titre(self,titre): + self.__titre = titre + + def get_titre(self): + return self.__titre + + def set_numero(self,numero): + self.__numero = numero + + def get_numero(self): + return self.__numero + + def set_nb_total(self,nb_total): + self.__nb_total = nb_total + + def get_nb_total(self): + return self.__nb_total + + def set_nb_dispo(self,nb_dispo): + self.__nb_dispo = nb_dispo + + def get_nb_dispo(self): + return self.__nb_dispo + + def __str__(self): + return 'Livre - Auteur : {}, Titre : {}, Numero : {}, Nb total : {}, Nb dispo : {}'.format(self.__auteur,self.__titre,self.__numero,self.__nb_total,self.__nb_dispo) diff --git a/TD2/correction/code/personne.py b/TD2/correction/code/personne.py new file mode 100644 index 0000000000000000000000000000000000000000..3acd65ef8a305d9301b8bbebab4fc76b26313ca7 --- /dev/null +++ b/TD2/correction/code/personne.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:21:05 2022 + +@author: dellandrea +""" + +# ***** classe Personne ***** +class Personne: + def __init__(self,nom,prenom,adresse): + self.__nom = nom + self.__prenom = prenom + self.__adresse = adresse + + def __str__(self): + return f"Classe Personne - Nom : {self.__nom}, Prenom : {self.__prenom}, Adresse : {self.__adresse}" + + def set_nom(self,nom): + self.__nom = nom + + def get_nom(self): + return self.__nom + + def set_prenom(self,prenom): + self.__prenom = prenom + + def get_prenom(self): + return self.__prenom + + def set_adresse(self,adresse): + self.__adresse = adresse + + def get_adresse(self): + return self.__adresse \ No newline at end of file diff --git a/TD2/correction/code/test_bibliotheque.py b/TD2/correction/code/test_bibliotheque.py new file mode 100755 index 0000000000000000000000000000000000000000..da5096ee2c8fa3bd0e96c6ab6853fb1924c0f275 --- /dev/null +++ b/TD2/correction/code/test_bibliotheque.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +""" + +@author: dellandrea +""" + +from bibliotheque import * + +# Creation d'une bibliotheque +b = Bibliotheque('Bibliotheque ECL') + +# Ajout de lecteurs +b.ajout_lecteur('Duval','Pierre','rue de la Paix',1) +b.ajout_lecteur('Dupond','Laurent','rue de la Gare',2) +b.ajout_lecteur('Martin','Marie','rue La Fayette',3) +b.ajout_lecteur('Dubois','Sophie','rue du Stade',4) + +# Ajout de livres +b.ajout_livre('Le Pere Goriot','Honore de Balzac',101,2) +b.ajout_livre('Les Hauts de Hurlevent','Emilie Bronte',102,2) +b.ajout_livre('Le Petit Prince','Antoine de Saint Exupery',103,2) +b.ajout_livre('L\'Etranger','Albert Camus',104,2) + +# Affichage des lecteurs et des livres +print('\n--- Liste des lecteurs :') +print('-------------------------------') +b.affiche_lecteurs() +print('\n--- Liste des livres :') +print('-------------------------------') +b.affiche_livres() + +# Recherches de lecteurs par numero +print('\n--- Recherche de lecteurs :') +print('-------------------------------') +lect = b.chercher_lecteur_numero(1) +if lect != None: + print(lect) +else: + print('Lecteur non trouve') + +lect = b.chercher_lecteur_numero(6) +if lect != None: + print(lect) +else: + print('Lecteur non trouve') + +# Recherches de lecteurs par nom +lect = b.chercher_lecteur_nom('Martin','Marie') +if lect != None: + print(lect) +else: + print('Lecteur non trouve') + +lect = b.chercher_lecteur_nom('Le Grand','Paul') +if lect != None: + print(lect) +else: + print('Lecteur non trouve') + +# Recherches de livres par numero +print('\n--- Recherche de livres :') +print('-------------------------------') +livre = b.chercher_livre_numero(101) +if livre != None: + print('Livre trouve :',livre) +else: + print('Livre non trouve') + +livre = b.chercher_livre_numero(106) +if livre != None: + print('Livre trouve :',livre) +else: + print('Livre non trouve') + +# Recherches de livres par titre +livre = b.chercher_livre_titre('Les Hauts de Hurlevent') +if livre != None: + print('Livre trouve :',livre) +else: + print('Livre non trouve') + +livre = b.chercher_livre_titre('Madame Bovarie') +if livre != None: + print('Livre trouve :',livre) +else: + print('Livre non trouve') + +# Quelques emprunts +print('\n--- Quelques emprunts :') +print('-------------------------------') +b.emprunt_livre(1,101) +b.emprunt_livre(1,104) +b.emprunt_livre(2,101) +b.emprunt_livre(2,105) +b.emprunt_livre(3,101) +b.emprunt_livre(3,104) +b.emprunt_livre(4,102) +b.emprunt_livre(4,103) + +# Affichage des emprunts, des lecteurs et des livres +print('\n--- Liste des emprunts :') +print('-------------------------------') +b.affiche_emprunts() +print('\n--- Liste des lecteurs :') +print('-------------------------------') +b.affiche_lecteurs() +print('\n--- Liste des livres :') +print('-------------------------------') +b.affiche_livres() + +# Quelques retours de livres +print('\n--- Quelques retours de livres :') +print('-------------------------------') +b.retour_livre(1,101) +b.retour_livre(1,102) +b.retour_livre(3,104) +b.retour_livre(10,108) + +# Affichage des emprunts, des lecteurs et des livres +print('\n--- Liste des emprunts :') +print('-------------------------------') +b.affiche_emprunts() +print('\n--- Liste des lecteurs :') +print('-------------------------------') +b.affiche_lecteurs() +print('\n--- Liste des livres :') +print('-------------------------------') +b.affiche_livres() + +# Suppression de quelques livres +rep = b.retrait_livre(101) +if not rep: + print('Retrait du livre impossible') +else: + print('Retrait du livre effectue') + +b.retour_livre(2,101) + +rep = b.retrait_livre(101) +if not rep: + print('Retrait du livre impossible') +else: + print('Retrait du livre effectue') + +# Suppression de quelques lecteurs +rep = b.retrait_lecteur(1) +if not rep: + print('Retrait du lecteur impossible') +else: + print('Retrait du lecteur effectue') + +b.retour_livre(1,104) + +rep = b.retrait_lecteur(1) +if not rep: + print('Retrait du lecteur impossible') +else: + print('Retrait du lecteur effectue') + +# Affichage des emprunts, des lecteurs et des livres +print('\n--- Liste des emprunts :') +print('-------------------------------') +b.affiche_emprunts() +print('\n--- Liste des lecteurs :') +print('-------------------------------') +b.affiche_lecteurs() +print('\n--- Liste des livres :') +print('-------------------------------') +b.affiche_livres() + + diff --git a/TD2/correction/code/test_emprunt.py b/TD2/correction/code/test_emprunt.py new file mode 100644 index 0000000000000000000000000000000000000000..4f4f2f5614d9c57f166d8128d72f545d68a9975b --- /dev/null +++ b/TD2/correction/code/test_emprunt.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:46:54 2022 + +@author: dellandrea +""" + +from emprunt import * + +e = Emprunt(3,5) +print(e) + +print(e.get_numero_lecteur()) +print(e.get_numero_livre()) +print(e.get_date()) \ No newline at end of file diff --git a/TD2/correction/code/test_lecteur.py b/TD2/correction/code/test_lecteur.py new file mode 100644 index 0000000000000000000000000000000000000000..6cacc7ae3241f26279841088db0a2fe70daed211 --- /dev/null +++ b/TD2/correction/code/test_lecteur.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:21:29 2022 + +@author: dellandrea +""" + +from lecteur import * + +l = Lecteur("Durand","Marie","Ecully",13) + +print(l) + +l.set_nom("Dupond") +print(l.get_nom()) + + +l.set_prenom("Emilie") +print(l.get_prenom()) + +l.set_adresse("Lyon") +print(l.get_adresse()) + +l.set_numero(14) +print(l.get_numero()) + +l.set_nb_emprunts(2) +print(l.get_nb_emprunts()) + +print(l) \ No newline at end of file diff --git a/TD2/correction/code/test_livre.py b/TD2/correction/code/test_livre.py new file mode 100644 index 0000000000000000000000000000000000000000..5a5cc23fd313cc67fb9553b22548c7c41c759f68 --- /dev/null +++ b/TD2/correction/code/test_livre.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:41:02 2022 + +@author: dellandrea +""" + +from livre import * + +l = Livre('Le Pere Goriot','Honore de Balzac',101,2) +print(l) + +l.set_auteur("Emilie Bronte") +print(l.get_auteur()) + +l.set_titre("Les Hauts de Hurlevent") +print(l.get_titre()) + +l.set_numero(102) +print(l.get_numero()) + +l.set_nb_total(5) +print(l.get_nb_total()) + +l.set_nb_dispo(4) +print(l.get_nb_dispo()) + +print(l) \ No newline at end of file diff --git a/TD2/correction/code/test_personne.py b/TD2/correction/code/test_personne.py new file mode 100644 index 0000000000000000000000000000000000000000..1134161fc498ca55555c61607a2d72d5344983e5 --- /dev/null +++ b/TD2/correction/code/test_personne.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Sep 20 07:21:29 2022 + +@author: dellandrea +""" + +from personne import * + +p = Personne("Durand","Marie","Ecully") + +print(p) + +p.set_nom("Dupond") +print(p.get_nom()) + + +p.set_prenom("Emilie") +print(p.get_prenom()) + +p.set_adresse("Lyon") +print(p.get_adresse()) + +print(p) \ No newline at end of file diff --git a/TD2/correction/diagramme_classes_biblio.png b/TD2/correction/diagramme_classes_biblio.png new file mode 100644 index 0000000000000000000000000000000000000000..1248f4b9e31c6ee35c116a391ea8fa1ab8a4333e Binary files /dev/null and b/TD2/correction/diagramme_classes_biblio.png differ diff --git a/TD2/correction/diagramme_classes_biblio.vpd b/TD2/correction/diagramme_classes_biblio.vpd new file mode 100644 index 0000000000000000000000000000000000000000..b49a0b316c8cb64ad9752c369290081b2d5dd98c --- /dev/null +++ b/TD2/correction/diagramme_classes_biblio.vpd @@ -0,0 +1 @@ +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16lxy104 \ No newline at end of file