comme sur discord

This commit is contained in:
Florent Madelaine 2021-10-06 21:23:51 +02:00
parent 4f2904fc01
commit a2fa7960c3
9 changed files with 495 additions and 0 deletions

80
Makefile Normal file
View File

@ -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

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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<Prereservation> getPrereservations(String n, String p);
}

View File

@ -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();
}

View File

@ -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<Chambre> 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<Reservation> 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<Reservation> 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<Reservation> getReservation(Date d1, Date d2, TypeChambre t);
/**
* Cherche le <b>nombre moyen</b> 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 <b>proportion moyenne</b> 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 <b>proportion moyenne</b> 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);
}

View File

@ -0,0 +1,4 @@
package fr.iutfbleau.projetIHM2021FI2.API;
public enum TypeChambre {
UNLS, DEUXLS, UNLD;
}

View File

@ -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;
}
}