diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..006f17d --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +# COMMANDES # +JAVAC = javac +# note $$ to get a single shell $ +JAVAC_OPTIONS = -d build -cp build:$$CLASSPATH -implicit:none +JAVA = java +JAR = jar +EXEC_JAR = ${JAVA} -jar + +# CHEMINS RELATIFS +SRC = src/fr/iutfbleau/projetIHM2021FI2 +BUILD = build/fr/iutfbleau/projetIHM2021FI2 + +# CHOIX NOMS +JAR_MNP = test-mnp.jar + +# BUTS FACTICES # +.PHONY : run clean + +# BUT PAR DEFAUT # +run : ${BUILD}/MNP/JoueurNP.class + +# ${JAR_MNP} +# ${EXEC_JAR} ${JAR_MNP} + +# AUTRE BUTS +clean : + rm -rf ${BUILD}/* *.jar + + +# REGLES DE DEPENDANCE # + +## API ## +${BUILD}/API/TypeChambre.class : ${SRC}/API/TypeChambre.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/TypeChambre.java + +${BUILD}/API/Chambre.class : ${SRC}/API/Chambre.java \ + ${BUILD}/API/TypeChambre.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Chambre.java + +${BUILD}/API/Client.class : ${SRC}/API/Client.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Client.java + +${BUILD}/API/Prereservation.class : ${SRC}/API/Prereservation.java \ + ${BUILD}/API/TypeChambre.class \ + ${BUILD}/API/Client.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Prereservation.java + +${BUILD}/API/Reservation.class : ${SRC}/API/Reservation.java \ + ${BUILD}/API/Prereservation.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Reservation.java + +${BUILD}/API/PrereservationFactory.class : ${SRC}/API/PrereservationFactory.java \ + ${BUILD}/API/Prereservation.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/PrereservationFactory.java + +${BUILD}/API/ReservationFactory.class : ${SRC}/API/ReservationFactory.java \ + ${BUILD}/API/Prereservation.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/ReservationFactory.java + +## MNP ## + +${BUILD}/MNP/JoueurNP.class : ${SRC}/MNP/ClientNP.java \ + ${BUILD}/API/Client.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ClientNP.java + + +## TEST ## + +# ${BUILD}/test/TestTexteMNP.class : ${SRC}/test/TestTexteMNP.java \ +# ${BUILD}/MNP/PassagePieceFactoryNP.class \ +# ${BUILD}/MNP/TrucFactoryNP.class \ +# ${BUILD}/MNP/JoueurNP.class +# ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/test/TestTexteMNP.java + + +# ## JARS ## + +# ${JAR_MNP} : ${BUILD}/test/TestTexteMNP.class +# ${JAR} cvfe ${JAR_MNP} fr.iutfbleau.projetIHM2020FI2.test.TestTexteMNP -C build fr + diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/Chambre.java b/src/fr/iutfbleau/projetIHM2021FI2/API/Chambre.java new file mode 100644 index 0000000..1b91845 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/Chambre.java @@ -0,0 +1,32 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +/** + * Une chambre + */ + +public interface Chambre { + + /** + * permet de récupérer le numéro de la chambre. + * @return le numéro. + */ + public int getNumero(); + + /** + * permet de savoir si la chambre a un seul lit qui est simple + * @return vrai si c'est le cas. + */ + public boolean unLitSimple(); + + /** + * permet de savoir si la chambre a deux lits simples + * @return vrai si c'est le cas. + */ + public boolean deuxLitsSimples(); + + /** + * permet de savoir si la chambre a un lit double + * @return vrai si c'est le cas. + */ + public boolean unLitDouble(); + +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/Client.java b/src/fr/iutfbleau/projetIHM2021FI2/API/Client.java new file mode 100644 index 0000000..3ae2de9 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/Client.java @@ -0,0 +1,27 @@ +package fr.iutfbleau.projetIHM2021FI2.API; + +/** + * Un client + */ + +public interface Client { + + /** + * permet de récupérer l'identifiant du client (qu'on suppose être le même pour les différents systèmes, internes et externes à l'hôtel). + * @return l'identifiant. + */ + public int getId(); + + /** + * permet de récupérer + * @return le nom du client. + */ + public String getNom(); + + /** + * permet de récupérer + * @return le prénom du client + */ + public String getPrenom(); + +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/Prereservation.java b/src/fr/iutfbleau/projetIHM2021FI2/API/Prereservation.java new file mode 100644 index 0000000..01f3e94 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/Prereservation.java @@ -0,0 +1,43 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +import java.util.Date; +/** + * Une préréservation + * + * e.g. utilisé par le système de réservation externe à l'hôtel. + * + */ + +public interface Prereservation { + + /** + * permet de récupérer + * @return la référence. + */ + public String getReference(); + + /** + * permet de récupérer + * @return la date de début + * + * A priori seule la date est importante, le reste est sans importance. + */ + public Date getDateDebut(); + + /** + * permet de récupérer + * @return la durée en jours (mais comme un entier) + */ + public int getJours(); + + /** + * permet de récupérer + * @return le type de chambre + */ + public TypeChambre getTypeChambre(); + + /** + * permet de récupérer + * @return le client + */ + public Client getClient(); +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/PrereservationFactory.java b/src/fr/iutfbleau/projetIHM2021FI2/API/PrereservationFactory.java new file mode 100644 index 0000000..80b2d71 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/PrereservationFactory.java @@ -0,0 +1,34 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +import java.util.*; +/** + * Cette interface est une usine abstraite. + * + * Elle permet de rechercher les préréservations à partir du numéro d'une préréservation, ou bien du nom et prenom d'un Client. + * + */ +public interface PrereservationFactory{ + + /** + * Recherche une préréservation par reference + * @param r la référence du système de préréservation + * @return la préréservation. + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si la Préréservation avec cette référence n'existe pas. + * + * Ne devrait pas retourner un objet null. + */ + public Prereservation getPrereservation(String r); + + /** + * Recherche une préréservation par nom et prenom + * @param n le nom + * @param p le prenom + * @return un ensemble de préréservations. + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si aucune préréservation n'existe avec ce nom + * + * Ne devrait pas retourner un objet null ou un ensemble vide. + */ + public Set getPrereservations(String n, String p); + +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/Reservation.java b/src/fr/iutfbleau/projetIHM2021FI2/API/Reservation.java new file mode 100644 index 0000000..8866d74 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/Reservation.java @@ -0,0 +1,46 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +import java.util.Date; +/** + * Une Réservation + * + * e.g. utilisé par le système de réservation interne à l'hôtel. + * + */ + +public interface Reservation { + + /** + * permet de récupérer + * @return la référence. + */ + public String getReference(); + + /** + * permet de récupérer + * @return la date de début + * + * A priori seule la date est importante, le reste est sans importance. + */ + public Date getDateDebut(); + + /** + * permet de récupérer + * @return la durée en jours (mais comme un entier) + */ + public int getJours(); + + /** + * permet de récupérer + * @return le type de chambre + */ + public Chambre getChambre(); + + /** + * permet de récupérer + * @return le client + */ + public Client getClient(); +} + + + diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/ReservationFactory.java b/src/fr/iutfbleau/projetIHM2021FI2/API/ReservationFactory.java new file mode 100644 index 0000000..5cd0ff7 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/ReservationFactory.java @@ -0,0 +1,180 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +import java.util.*; +/** + * Cette interface est une usine abstraite. + * + * Elle permet de trouver une ou des chambres à partir d'une préréservation, de créer une réservation. + * Elle permet aussi de compter toutes les chambres d'un certain type (disponibles ou non). + * + * Conseil : + * si vous instantiez cette classe pour proposer un modèle persistent avec une base de données, attention à ne pas faire des choses qu'on peut faire efficacement en BdD côté Java. + * En particulier, ne pas faire des jointures ou de l'aggrégat côté java alors que votre bdd fait ça beaucoup plus efficacement. + * Plus de détails ici : https://use-the-index-luke.com/sql/join/nested-loops-join-n1-problem + * + * Autre conseil : + * vous n'êtes probablement pas obligé de coder toutes les méthodes listées ici pour que votre projet soit terminé. + * Cette interface est volontairement assez complète pour permettre de faire varier le sujet du projet sans la changer. + * + * Je ne l'ai pas ajouté individuellement pour la documentation de chaque méthode, mais si la classe réalisant cette interface ne réalise pas vraiment une méthode, vous pouvez lever + * java.lang.UnsupportedOperationException + * avec un message "pas encore implanté" ou "aucune implantation prévue" selon les cas. + * + * La raison de cette absence dans la documentation ci-dessous c'est qu'il s'agit d'une Exception héritant de RuntimeException. + * La doc indique aussi : + * "RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary." + * + */ +public interface ReservationFactory{ + + /** + * Recherche une chambre adéquate à partir de + * @param p une préréservation + * @return la chambre + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si une chambre correspondant à cette Préréservation n'existe pas. + * + * Ne devrait pas retourner un objet null. + */ + public Chambre getChambre(Prereservation p); + + /** + * Recherche toutes les chambres adéquates à partir de + * @param p une préréservation + * @return les chambres (set de chambre) + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si une chambre correspondant à cette Préréservation n'existe pas. + * + * Ne devrait pas retourner un objet null. + */ + public Set getChambres(Prereservation p); + + /** + * Fabrique (ajoute) une réservation + * @param p une préréservation + * @param c une chambre (normalement libre et adaptée à la préréservation) + * @return la réservation + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si la chambre ne correspondant pas au type de chambre de la préréservation. + * @throws IllegalStateException si la chambre n'est pas disponible. + * + * Ne devrait pas retourner un objet null. + */ + public Reservation createReservation(Prereservation p, Chambre c); + + /** + * Cherche les réservations + * @param d une date + * @return la ou les réservation(s) à cette date sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(Date d); + + /** + * Cherche le nombre de chambres disponibles pour une date (réservées ou non). + * @param d une date + * @return un entier + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(Date d); + + /** + * Cherche les réservations + * @param d une date + * @param t un type de chambre + * @return la ou les réservation(s) pour ce type de chambre à cette date sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(Date d, TypeChambre t); + + /** + * Cherche le nombre de chambres disponibles d'un certain type pour une date (réservées ou non). + * @param d une date + * @param t un type de chambre + * @return un entier + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(Date d, TypeChambre t); + + /** + * Cherche la proportion de chambres disponibles pour une date (réservées sur réservables). + * @param d une date + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(Date d); + + /** + * Cherche la proportion de chambres disponibles d'un certain type pour une date (réservées sur réservables). + * @param d une date + * @param t un type de chambre + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(Date d, TypeChambre t); + + /** + * Cherche le nombre moyen de chambres disponibles entre deux date (réservées ou non), arrondies à l'entier inférieur. + * @param d1 une date + * @param d2 une date + * @return un entier + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(Date d1, Date d2); + + /** + * Cherche les réservations + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return la ou les réservation(s) pour ce type de chambre entre les dates sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(Date d1, Date d2, TypeChambre t); + + /** + * Cherche le nombre moyen de chambres disponibles d'un certain type entre deux date (réservées ou non), arrondies à l'entier inférieur. + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return un entier + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(Date d1, Date d2, TypeChambre t); + + /** + * Cherche la proportion moyenne de chambres disponibles pour une date (réservées sur réservables). + * @param d1 une date + * @param d2 une date + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(Date d1, Date d2); + + /** + * Cherche la proportion moyenne de chambres disponibles d'un certain type pour une date (réservées sur réservables). + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(Date d1, Date d2, TypeChambre t); + +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/API/TypeChambre.java b/src/fr/iutfbleau/projetIHM2021FI2/API/TypeChambre.java new file mode 100644 index 0000000..f2c24bb --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/API/TypeChambre.java @@ -0,0 +1,4 @@ +package fr.iutfbleau.projetIHM2021FI2.API; +public enum TypeChambre { + UNLS, DEUXLS, UNLD; +} diff --git a/src/fr/iutfbleau/projetIHM2021FI2/MNP/ClientNP.java b/src/fr/iutfbleau/projetIHM2021FI2/MNP/ClientNP.java new file mode 100644 index 0000000..900da95 --- /dev/null +++ b/src/fr/iutfbleau/projetIHM2021FI2/MNP/ClientNP.java @@ -0,0 +1,49 @@ +package fr.iutfbleau.projetIHM2021FI2.MNP; +import fr.iutfbleau.projetIHM2021FI2.API.*; +import java.util.*; +/** + * Un client non persistent tout bête + */ + +public class ClientNP implements Client { + + private int id; + private String nom; + private String prenom; + + /** + * Constructeur + */ + public ClientNP(int id, String nom, String prenom){ + Objects.requireNonNull(nom,"On ne peut pas créer une personne avec un nom à null."); + Objects.requireNonNull(nom,"On ne peut pas créer une personne avec un prenom à null."); + this.id=id; + this.nom=nom; + this.prenom=prenom; + } + + /** + * permet de récupérer l'identifiant du client (qu'on suppose être le même pour les différents systèmes, internes et externes à l'hôtel). + * @return l'identifiant. + */ + public int getId(){ + return this.id; + } + + /** + * permet de récupérer + * @return le nom du client. + */ + public String getNom(){ + return this.nom; + } + + /** + * permet de récupérer + * @return le prénom du client + */ + public String getPrenom(){ + return this.prenom; + } + +}