From a08b2142424f648de94e7a1f66504d81767a4af3 Mon Sep 17 00:00:00 2001 From: Florent Madelaine Date: Wed, 16 Feb 2022 11:55:47 +0100 Subject: [PATCH] =?UTF-8?q?Bugfix=20merci=20Dylan,=20plus=20ajout=20quelqu?= =?UTF-8?q?es=20fonctionalit=C3=A9s=20pipeau=20pour=20tester=20les=20ratio?= =?UTF-8?q?=20pour=20le=20second=20sujet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MNP/PrereservationFactoryNP.java | 7 +- .../MNP/ReservationFactoryNP.java | 31 ++++++- .../projetIHM2021FI2/Test/TestTexteMNP.java | 86 +++++++++++++++++++ 3 files changed, 120 insertions(+), 4 deletions(-) diff --git a/src/fr/iutfbleau/projetIHM2021FI2/MNP/PrereservationFactoryNP.java b/src/fr/iutfbleau/projetIHM2021FI2/MNP/PrereservationFactoryNP.java index 91d0c8f..860846a 100644 --- a/src/fr/iutfbleau/projetIHM2021FI2/MNP/PrereservationFactoryNP.java +++ b/src/fr/iutfbleau/projetIHM2021FI2/MNP/PrereservationFactoryNP.java @@ -57,11 +57,12 @@ public class PrereservationFactoryNP implements PrereservationFactory{ public Set getPrereservations(String n, String p){ Objects.requireNonNull(n,"Le nom recherché est null."); Objects.requireNonNull(p,"Le prénom recherché est null."); - // on va extraire toutes les préréservations du cerveau - Collection c = this.brain.values(); + // on va extraire toutes les préréservations d'une copie du cerveau + HashMap copy_brain = (HashMap) this.brain.clone(); + Collection c = copy_brain.values(); // on définit un prédicat sur les Préréservations : Predicate filtre = preresa -> !preresa.getClient().getNom().equals(n) || !preresa.getClient().getPrenom().equals(p); - // on filtre la collection. + // on filtre la collection (ceci provoque des effets de bords sur le hashmap, d'où la copie ci-dessus. Merci à Dylan Giraud pour le bugfix). c.removeIf(filtre); if (c.isEmpty()){ throw new IllegalStateException("Il n'y a pas de préréservation avec un Client ayant pour nom et prenom : " + n + " et " + p); diff --git a/src/fr/iutfbleau/projetIHM2021FI2/MNP/ReservationFactoryNP.java b/src/fr/iutfbleau/projetIHM2021FI2/MNP/ReservationFactoryNP.java index c13753c..f5d7202 100644 --- a/src/fr/iutfbleau/projetIHM2021FI2/MNP/ReservationFactoryNP.java +++ b/src/fr/iutfbleau/projetIHM2021FI2/MNP/ReservationFactoryNP.java @@ -4,6 +4,7 @@ import java.time.LocalDate; import java.util.*; import java.util.function.Predicate; import java.lang.*; +import java.util.Random; /** * Usine non persistante stockant les réservations dans une structure de données permettant de simuler un ensemble. @@ -86,6 +87,10 @@ public class ReservationFactoryNP implements ReservationFactory{ // private HashMap> brain; + + // mostly useless stuff to pretend to implement some methods. + private Random rnd; + // /** // * Constructeur // */ @@ -102,6 +107,10 @@ public class ReservationFactoryNP implements ReservationFactory{ this.brokenMagic.put(TypeChambre.UNLD,Integer.valueOf(this.MAX_UNLD)); brain = new HashMap>(); + + // crap stuff to do drawing + this.rnd = new Random(); + rnd.setSeed(42); } /** @@ -284,12 +293,32 @@ public class ReservationFactoryNP implements ReservationFactory{ /** * Cherche la proportion de chambres disponibles pour une date (réservées sur réservables). + * (en théorie) + * + * En pratique cette méthode répond n'importe quoi mais ça devrait faire des jolis dessins. + * * @param d une date * @return un entier entre 0 et 100 * @throws NullPointerException si un argument est null */ public int getRatio(LocalDate d){ - throw new UnsupportedOperationException("pas encore implanté"); + //throw new UnsupportedOperationException("pas encore implanté"); + + // normalement vu le nombre de chambres ceci serait probablement correct + // return 100; + + // Je vais répondre un truc idiot pour faire des plus jolis dessins. + int jourint = d.getDayOfWeek().getValue(); // une valeur entre 1 pour lundi et 7 pour dimanche. + // tableau indexé par le jour + int[] intArray = new int[]{ 30,40,60,65,40,60,30}; + + //un peu de bruit pour faire joli + // Random rnd; intialisé dans constructeur maintenant, c'est un attribut. + int max = 10; + int min = 0; + int bruit = this.rnd.nextInt((max - min) + 1) + min; + + return intArray[jourint-1]+bruit; } diff --git a/src/fr/iutfbleau/projetIHM2021FI2/Test/TestTexteMNP.java b/src/fr/iutfbleau/projetIHM2021FI2/Test/TestTexteMNP.java index 0c8ba5f..e82dc45 100644 --- a/src/fr/iutfbleau/projetIHM2021FI2/Test/TestTexteMNP.java +++ b/src/fr/iutfbleau/projetIHM2021FI2/Test/TestTexteMNP.java @@ -95,6 +95,36 @@ public class TestTexteMNP{ System.out.print("I am sorry Madam, no booking under this reference.\n"); } System.out.println("=========================="); + System.out.println("Le portier a un moment d'absence? on est dans total recall?"); + System.out.println("=========================="); + System.out.print("Hello Madam. Je cherche votre préreservation avec référence 2436-3909-NXLL\n"); + try{ + Prereservation preresa = bookingPointComAPISeulement.getPrereservation("2436-3909-NXLL"); + System.out.print("I found your booking.\n"); + System.out.println(preresa.monPrint()); + + Chambre libre=null; + try{ + libre = grandLivreDOrAPISeulement.getChambre(preresa); + System.out.print("I have a great room for you.\n"); + System.out.println(libre.monPrint()); + } + catch(IllegalStateException e){ + System.out.print(e.getMessage()); + } + try{ + System.out.print("You like this room? Excellent! Let me confirm the reservation for you.\n"); + Reservation resa = grandLivreDOrAPISeulement.createReservation(preresa,libre); + System.out.println(resa.monPrint()); + } + catch(IllegalStateException e){ + System.out.print(e.getMessage()); + } + } + catch(IllegalStateException e){ + System.out.print("I am sorry Madam, no booking under this reference.\n"); + } + System.out.println("=========================="); System.out.print("Hello Madam. Vous avez oubliée votre numéro de préréservation. Ce n'est pas grave, je vais chercher avec votre nom et prénom.\n"); System.out.print("Marine Carpentier? C-A-R-P-E-N-T-I-E-R? Un instant, je vous prie.\n"); try{ @@ -141,6 +171,54 @@ public class TestTexteMNP{ System.out.print("I am sorry Madam, no booking under this reference.\n"); } System.out.println("=========================="); + System.out.println("Deux clients à la suite. Ça ne marche pas sans le bugfix de Dylan avec le modèle non persistant."); + System.out.println("=========================="); + System.out.print("Hello Sir. Vous avez oubliée votre numéro de préréservation. Ce n'est pas grave, je vais chercher avec votre nom et prénom.\n"); + System.out.print("Dumas Aaron? ah non, Aaron Dumas? OK. Un instant, je vous prie.\n"); + try{ + Set preresas = bookingPointComAPISeulement.getPrereservations("Dumas","Aaron"); + System.out.print("I found your bookings.\n"); + for(Prereservation p : preresas){ + System.out.println(p.monPrint()); + Chambre libre = null; + Set disponibles=null; + try{ + disponibles = grandLivreDOrAPISeulement.getChambres(p); + System.out.print("I have great rooms for you :\n"); + for(Chambre c : disponibles){ + System.out.println(c.monPrint()); + } + // choix de la chambre au hasard simulant le choix du client + int choix = random.nextInt(disponibles.size()); + System.out.println("choix: " + choix); + int compter = 0; + for(Chambre c : disponibles){ + if (compter == choix){ + libre = c; + break; + } + compter++; + } + } + catch(IllegalStateException e){ + System.out.print(e.getMessage()); + } + try{ + System.out.println(libre.monPrint()); + System.out.print("You like this room? Excellent! Let me confirm the reservation for you.\n"); + Reservation resa = grandLivreDOrAPISeulement.createReservation(p,libre); + System.out.println(resa.monPrint()); + } + catch(IllegalStateException e){ + System.out.print(e.getMessage()); + } + + } + } + catch(IllegalStateException e){ + System.out.print("I am sorry Madam, no booking under this reference.\n"); + } + System.out.println("=========================="); System.out.println("=== Vue du manageur ===="); System.out.println("=========================="); Set resas = grandLivreDOrAPISeulement.getReservation(LocalDate.of(2018,01,05)); @@ -148,6 +226,14 @@ public class TestTexteMNP{ for(Reservation r : resas){ System.out.println(r.monPrint()); } + System.out.println("Attention ce n'est pas cohérent mais nous avons le moyen de récupérer un ratio pour faire joli"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,7) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,7)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,8) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,8)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,9) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,9)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,10) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,10)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,11) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,11)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,12) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,12)) + "%\n"); + System.out.print("Ratio du "+ LocalDate.of(2018,01,13) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,13)) + "%\n"); } }