Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • z22024794/prog-av-exercices-fadl-zemzem
  • n23017542/progavexercices
  • l23024794/saratp-1
  • d24029849/progavexercices
  • gnaves/progavexercices
5 results
Select Git revision
  • master
1 result
Show changes
Commits on Source (2)
...@@ -2,8 +2,4 @@ package fr.univamu.progav.td9; ...@@ -2,8 +2,4 @@ package fr.univamu.progav.td9;
public class BookException extends Exception { public class BookException extends Exception {
public Book book() {
// TODO
return null;
}
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
public class BookNotFoundException extends BookException { public class BookNotFoundException extends BookException {
//TODO
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
public class BookUnavailableException extends BookException { public class BookUnavailableException extends BookException {
// TODO
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public record BulkCheckoutResult( public record BulkCheckoutResult(
...@@ -7,6 +8,9 @@ public record BulkCheckoutResult( ...@@ -7,6 +8,9 @@ public record BulkCheckoutResult(
List<BookException> failedCheckouts List<BookException> failedCheckouts
) { ) {
public BulkCheckoutResult() {
this(new ArrayList<>(), new ArrayList<>());
}
public boolean isCompletelySuccessful() { public boolean isCompletelySuccessful() {
// TODO // TODO
......
...@@ -5,9 +5,12 @@ import java.util.List; ...@@ -5,9 +5,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class Library { public class Library {
private final Map<String, Book> collection = new HashMap<>();
private final Map<Book, BookStatus> bookStatuses = new HashMap<>(); private final Map<Book, BookStatus> bookStatuses = new HashMap<>();
public void addBook(Book book) { public void addBook(Book book) {
collection.put(book.isbn(), book);
bookStatuses.put(book, BookStatus.AVAILABLE); bookStatuses.put(book, BookStatus.AVAILABLE);
} }
...@@ -16,17 +19,20 @@ public class Library { ...@@ -16,17 +19,20 @@ public class Library {
return null; return null;
} }
public void checkoutBook(Book book) throws BookException {
public BookStatus getBookStatus(String isbn) {
// TODO // TODO
return null;
} }
public BulkCheckoutResult checkoutBooks(List<Book> books) { public Book checkoutBook(String isbn) {
// TODO // TODO
return null; return null;
} }
public BookStatus getBookStatus(Book book) { public BulkCheckoutResult checkoutBooks(List<String> isbns) {
// TODO // TODO
return null; return null;
} }
} }
...@@ -3,7 +3,7 @@ gestion des livres d'une bibliothèque, qui n'est pas un exemple très ...@@ -3,7 +3,7 @@ gestion des livres d'une bibliothèque, qui n'est pas un exemple très
pertinent pour l'utilisation d'exceptions, mais qui a l'avantage d'être pertinent pour l'utilisation d'exceptions, mais qui a l'avantage d'être
relativement simple pour apprendre les bases de la manipulation des exceptions. relativement simple pour apprendre les bases de la manipulation des exceptions.
La bibliothèque ```Library``` possède une collection de livre ```Book```, et La bibliothèque ```Library``` possède une collection de livres ```Book```, et
les clients peuvent venir emprunter un ou plusieurs livres (méthodes les clients peuvent venir emprunter un ou plusieurs livres (méthodes
```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être ```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être
disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire
...@@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée. ...@@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée.
Exercice 1 Exercice 1
========== ==========
Compléter la classe d'exception ```BookException```, en y ajoutant une Compléter les 2 extensions ```BookNotFoundException``` (possédant un code
propriété ```Book```, et une méthode ```toString``` affichant le livre. ISBN) et ```BookUnavailable``` (possédant un livre) de la
Compléter aussi la méthode ```book```. classe```BookException```. Assurez-vous que la méthode ```getMessage``` de
chacune délivre un message adapté et mentionnant soit le code ISBN, soit le
livre concerné.
Exercice 2 Exercice 2
========== ==========
Compléter les 2 extensions ```BookNotFoundException``` et
```BookUnavailable``` de ```BookException```. Assurez-vous que le
```toString``` de chacune affiche un message adapté et mentionnant le livre
concerné.
Exercice 3
==========
Compléter la méthode ```findBook``` de la classe ```Library```. Elle doit Compléter la méthode ```findBook``` de la classe ```Library```. Elle doit
retourner le livre dont le code ISBN est fourni. S'il n'existe pas un tel retourner le livre dont le code ISBN est fourni. S'il n'existe pas un tel
livre, il faut émettre l'exception ```BookNotFoundException```. Ajouter la livre, il faut émettre l'exception ```BookNotFoundException```. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 4 Exercice 3
========== ==========
Compléter la méthode ```checkBookStatus``` de la classe ```Library```, Compléter la méthode ```checkBookStatus``` de la classe ```Library```,
...@@ -44,7 +38,7 @@ retournant le status d'un livre précisé par son code ISBN. Si le livre ...@@ -44,7 +38,7 @@ retournant le status d'un livre précisé par son code ISBN. Si le livre
n'existe pas, l'exception ```BookNotFound``` sera émise. Ajouter la n'existe pas, l'exception ```BookNotFound``` sera émise. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 5 Exercice 4
========== ==========
Compléter la méthode ```checkoutBook``` de la classe ```Library```. Compléter la méthode ```checkoutBook``` de la classe ```Library```.
...@@ -53,7 +47,7 @@ code ISBN), et modifie alors son status à ```BORROWED```. Si les conditions ...@@ -53,7 +47,7 @@ code ISBN), et modifie alors son status à ```BORROWED```. Si les conditions
ne sont pas respectées, la méthode émet l'exception appropriée. Ajouter la ne sont pas respectées, la méthode émet l'exception appropriée. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 6 Exercice 5
========== ==========
Compléter la méthode ```isCompletelySuccessful``` de la classe Compléter la méthode ```isCompletelySuccessful``` de la classe
...@@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant : ...@@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant :
- la liste des livres empruntés; - la liste des livres empruntés;
- la liste des échecs des tentatives d'emprunt. - la liste des échecs des tentatives d'emprunt.
Exercice 7 Exercice 6
========== ==========
Compléter la méthode ```checkoutBooks``` de la classe ```Library```. Compléter la méthode ```checkoutBooks``` de la classe ```Library```.
Vérifier votre travail à l'aide des tests fournis.
\ No newline at end of file
...@@ -34,28 +34,34 @@ public class LibraryTest { ...@@ -34,28 +34,34 @@ public class LibraryTest {
@Test @Test
void testSingleCheckoutSuccess() throws BookException { void testSingleCheckoutSuccess() throws BookException {
library.checkoutBook(book1); library.checkoutBook("123");
assertEquals(BookStatus.BORROWED, library.getBookStatus(book1)); assertEquals(BookStatus.BORROWED, library.getBookStatus("123"));
} }
@Test @Test
void testBulkCheckoutPartialSuccess() throws BookException { void testBulkCheckoutPartialSuccess() throws BookException {
library.checkoutBook(book1); library.checkoutBook("123");
Book nonExistentBook = new Book("999", "Nonexistent"); Book nonExistentBook = new Book("999", "Nonexistent");
List<Book> booksToCheckout = List.of(book1, book2, nonExistentBook); List<String> booksToCheckout = List.of("123", "456", "999");
BulkCheckoutResult result = library.checkoutBooks(booksToCheckout); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertFalse(result.isCompletelySuccessful()); assertFalse(result.isCompletelySuccessful());
assertEquals(1, result.successfulCheckouts().size()); assertEquals(1, result.successfulCheckouts().size());
assertEquals(2, result.failedCheckouts().size()); assertEquals(2, result.failedCheckouts().size());
assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0)); assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0));
assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1)); assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1));
assertEquals(book1,result.failedCheckouts().get(0).book()); assertEquals(
assertEquals(nonExistentBook,result.failedCheckouts().get(1).book()); "Livre 1 (123): book unavailable",
result.failedCheckouts().get(0).getMessage()
);
assertEquals(
"Nonexistent (999): book not found",
result.failedCheckouts().get(1).getMessage()
);
} }
@Test @Test
void testBulkCheckoutAllSuccess() { void testBulkCheckoutAllSuccess() {
List<Book> booksToCheckout = List.of(book1, book2); List<String> booksToCheckout = List.of("123", "456");
BulkCheckoutResult result = library.checkoutBooks(booksToCheckout); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertTrue(result.isCompletelySuccessful()); assertTrue(result.isCompletelySuccessful());
......