commit de fin
This commit is contained in:
commit
8080015638
1
PROJETIHM_FA/Chemin.txt
Normal file
1
PROJETIHM_FA/Chemin.txt
Normal file
@ -0,0 +1 @@
|
||||
Class-Path: libs/mariadb-client.jar
|
BIN
PROJETIHM_FA/Main.jar
Normal file
BIN
PROJETIHM_FA/Main.jar
Normal file
Binary file not shown.
142
PROJETIHM_FA/Makefile
Normal file
142
PROJETIHM_FA/Makefile
Normal file
@ -0,0 +1,142 @@
|
||||
# COMMANDES #
|
||||
JAVAC = javac
|
||||
# note $$ to get a single shell $
|
||||
JAVAC_OPTIONS = -encoding "UTF-8" -d build -cp "libs/mariadb-client.jar" -sourcepath "src" -implicit:none
|
||||
JAVA = java
|
||||
JAR = jar
|
||||
EXEC_JAR = ${JAVA} -jar
|
||||
|
||||
# CHEMINS RELATIFS
|
||||
SRC = src/fr/iutfbleau/projetIHM2021FI2
|
||||
BUILD = build/fr/iutfbleau/projetIHM2021FI2
|
||||
DOC = doc/fr/iutfbleau/projetIHM2021FI2
|
||||
|
||||
# CHOIX NOMS
|
||||
JAR_MAIN = Main.jar
|
||||
|
||||
# BUTS FACTICES #
|
||||
.PHONY : run clean doc
|
||||
|
||||
# BUT PAR DEFAUT #
|
||||
run : ${JAR_MAIN}
|
||||
${EXEC_JAR} ${JAR_MAIN} -cp "libs/mariadb-client.jar"
|
||||
|
||||
# AUTRE BUTS
|
||||
doc :
|
||||
javadoc -d doc -cp "libs/mariadb-client.jar" src/fr/iutfbleau/projetIHM2021FI2/API/*.java src/fr/iutfbleau/projetIHM2021FI2/IHM1/*.java src/fr/iutfbleau/projetIHM2021FI2/Model/*.java src/fr/iutfbleau/projetIHM2021FI2/Controller/*.java src/fr/iutfbleau/projetIHM2021FI2/View/*.java
|
||||
|
||||
clean :
|
||||
rm -rf ${BUILD}/* *.jar
|
||||
|
||||
|
||||
# REGLES DE DEPENDANCE #
|
||||
|
||||
## API ##
|
||||
${BUILD}/API/MonPrint.class : ${SRC}/API/MonPrint.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/MonPrint.java
|
||||
|
||||
${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\
|
||||
${BUILD}/API/MonPrint.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Chambre.java
|
||||
|
||||
${BUILD}/API/Client.class : ${SRC}/API/Client.java \
|
||||
${BUILD}/API/MonPrint.class
|
||||
${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
|
||||
|
||||
|
||||
# ## JARS ##
|
||||
|
||||
${JAR_MAIN} : ${BUILD}/Main.class
|
||||
${JAR} cvfem ${JAR_MAIN} fr.iutfbleau.projetIHM2021FI2.Main Chemin.txt -C build fr
|
||||
|
||||
|
||||
## Model ##
|
||||
|
||||
${BUILD}/Model/ConnexionBDD.class : ${SRC}/Model/ConnexionBDD.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/ConnexionBDD.java
|
||||
|
||||
${BUILD}/Model/ConnexionBDD.class : ${SRC}/Model/ConnexionBDD.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/ConnexionBDD.java
|
||||
|
||||
${BUILD}/Model/RecupChambre.class : ${SRC}/Model/RecupChambre.java \
|
||||
${BUILD}/API/Client.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/RecupChambre.java
|
||||
|
||||
${BUILD}/Model/PrereservationModel.class : ${SRC}/Model/PrereservationModel.java \
|
||||
${BUILD}/API/Prereservation.class \
|
||||
${BUILD}/Model/RecupChambre.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/PrereservationModel.java
|
||||
|
||||
${BUILD}/Model/PrereservationFactoryModel.class : ${SRC}/Model/PrereservationFactoryModel.java \
|
||||
${BUILD}/API/PrereservationFactory.class \
|
||||
${BUILD}/Model/PrereservationModel.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/PrereservationFactoryModel.java
|
||||
|
||||
${BUILD}/Model/RecupClient.class : ${SRC}/Model/RecupClient.java \
|
||||
${BUILD}/API/Chambre.class \
|
||||
${BUILD}/Model/ConnexionBDD.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Model/RecupClient.java
|
||||
|
||||
## Controller ##
|
||||
|
||||
${BUILD}/Controller/MainWindowController.class : ${SRC}/Controller/MainWindowController.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Controller/MainWindowController.java
|
||||
|
||||
${BUILD}/Controller/SearchButtonController.class : ${SRC}/Controller/SearchButtonController.java \
|
||||
${BUILD}/Model/PrereservationFactoryModel.class \
|
||||
${BUILD}/View/PrereservationView.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Controller/SearchButtonController.java
|
||||
|
||||
${BUILD}/Controller/SelectButtonController.class : ${SRC}/Controller/SelectButtonController.java \
|
||||
${BUILD}/View/ChambresView.class
|
||||
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Controller/SelectButtonController.java
|
||||
|
||||
## View ##
|
||||
|
||||
${BUILD}/View/WindowView.class : ${SRC}/View/WindowView.java \
|
||||
${BUILD}/Controller/MainWindowController.class \
|
||||
${BUILD}/View/PrereservationView.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/View/WindowView.java
|
||||
|
||||
${BUILD}/View/PrereservationView.class : ${SRC}/View/PrereservationView.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/View/PrereservationView.java
|
||||
|
||||
${BUILD}/View/ChambresView.class : ${SRC}/View/ChambresView.java \
|
||||
${BUILD}/Model/RecupClient.class \
|
||||
${SRC}/Controller/SelectButtonController.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/View/ChambresView.java
|
||||
|
||||
|
||||
|
||||
|
||||
## Main ##
|
||||
${BUILD}/Main.class : ${SRC}/Main.java \
|
||||
${BUILD}/Model/ConnexionBDD.class \
|
||||
${BUILD}/Controller/SearchButtonController.class \
|
||||
${BUILD}/Controller/SelectButtonController.class \
|
||||
${BUILD}/View/WindowView.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Main.java
|
||||
|
||||
|
BIN
PROJETIHM_FA/Rapport PROJET.docx
Normal file
BIN
PROJETIHM_FA/Rapport PROJET.docx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
PROJETIHM_FA/build/fr/iutfbleau/projetIHM2021FI2/Main.class
Normal file
BIN
PROJETIHM_FA/build/fr/iutfbleau/projetIHM2021FI2/Main.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
PROJETIHM_FA/libs/mariadb-client.jar
Normal file
BIN
PROJETIHM_FA/libs/mariadb-client.jar
Normal file
Binary file not shown.
@ -0,0 +1,57 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
/**
|
||||
* Une chambre
|
||||
*/
|
||||
|
||||
public interface Chambre extends MonPrint {
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @deprecated replaced by {@link #getType()}
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean unLitSimple();
|
||||
|
||||
/**
|
||||
* permet de savoir si la chambre a deux lits simples
|
||||
* @return vrai si c'est le cas.
|
||||
* @deprecated replaced by {@link #getType()}
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean deuxLitsSimples();
|
||||
|
||||
/**
|
||||
* permet de savoir si la chambre a un lit double
|
||||
* @return vrai si c'est le cas.
|
||||
* @deprecated replaced by {@link #getType()}
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean unLitDouble();
|
||||
|
||||
/**
|
||||
* @return le type de chambre (un type énuméré de l'API)
|
||||
*
|
||||
* NB. Les trois méthodes ci-dessus sont assez moches.
|
||||
* De toute façon Chambre ou Prérerservation exposent le type énuméré TypeChambre à la vue.
|
||||
* Il est donc plus simple d'ajouter des types de chambre à ce type énuméré plutôt que d'ajouter des tests ici.
|
||||
* Je laisse les méthodes obsolètes pour illustrer l'annotation <pre>@deprecated</pre> de la javadoc.
|
||||
*/
|
||||
public TypeChambre getType();
|
||||
|
||||
/**
|
||||
* @return un string contenant les informations de la chambre
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Chambre " + getNumero() + " ("+ getType() +")");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
|
||||
/**
|
||||
* Un client
|
||||
*/
|
||||
|
||||
public interface Client extends MonPrint{
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* @return un string contenant les informations du client
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Nom " + getNom() + " Prenom " + getPrenom() + " (id="+getId()+")");
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
/**
|
||||
* Toutes nos interfaces vont étendre cette interface.
|
||||
*/
|
||||
public interface MonPrint {
|
||||
|
||||
/**
|
||||
* Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
|
||||
* Toutes nos interfaces vont étendre cette interface.
|
||||
*/
|
||||
public String monPrint();
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
import java.time.LocalDate;
|
||||
/**
|
||||
* Une préréservation
|
||||
*
|
||||
* e.g. utilisé par le système de réservation externe à l'hôtel.
|
||||
*
|
||||
*/
|
||||
|
||||
public interface Prereservation extends MonPrint{
|
||||
|
||||
/**
|
||||
* 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 LocalDate 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();
|
||||
|
||||
/**
|
||||
* @return un string contenant les informations de la réservation
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Préréservation " + getReference() + ": " + getClient().monPrint() + " le " + getDateDebut().toString() + " pour " + getJours() + " nuit(s) ");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
import java.time.LocalDate;
|
||||
/**
|
||||
* 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 LocalDate 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 la chambre
|
||||
*/
|
||||
public Chambre getChambre();
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le client
|
||||
*/
|
||||
public Client getClient();
|
||||
|
||||
/**
|
||||
* @return un string contenant les informations de la réservation
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Réservation " + getReference() + ": " + getClient().monPrint() + " le " + getDateDebut().toString() + " pour " + getJours() + " nuit(s) " + getChambre().monPrint());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,182 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
import java.time.LocalDate;
|
||||
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(LocalDate 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(LocalDate 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(LocalDate 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(LocalDate 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(LocalDate 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(LocalDate 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(LocalDate d1, LocalDate 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(LocalDate d1, LocalDate 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(LocalDate d1, LocalDate 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(LocalDate d1, LocalDate 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(LocalDate d1, LocalDate d2, TypeChambre t);
|
||||
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.API;
|
||||
public enum TypeChambre {
|
||||
UNLS ("Un lit simple"), DEUXLS ("Deux lits simples"), UNLD ("Un lit double");
|
||||
|
||||
private final String name;
|
||||
|
||||
private TypeChambre(String s) {
|
||||
name = s;
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Controller;
|
||||
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.event.WindowListener;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.ConnexionBDD;
|
||||
|
||||
/**
|
||||
* La classe MainWindowController permet de se déconnecter de la base de données lorsqu'on ferme la fenêtre.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class MainWindowController implements WindowListener {
|
||||
public void windowActivated (WindowEvent e) {
|
||||
}
|
||||
|
||||
public void windowClosed (WindowEvent e) {
|
||||
}
|
||||
|
||||
public void windowClosing (WindowEvent e) {
|
||||
ConnexionBDD.getInstance().close();
|
||||
}
|
||||
|
||||
public void windowDeactivated (WindowEvent e) {
|
||||
}
|
||||
|
||||
public void windowDeiconified (WindowEvent e) {
|
||||
}
|
||||
|
||||
public void windowIconified(WindowEvent e) {
|
||||
}
|
||||
|
||||
public void windowOpened(WindowEvent e) {
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Controller;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.View.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.PrereservationFactoryModel;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.*;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* La classe SearchButtonController permet de répertorier les actions effectués lors d'une recherche.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class SearchButtonController implements ActionListener {
|
||||
private JTextField champNom;
|
||||
private JTextField champPrenom;
|
||||
private JTextField champRef;
|
||||
|
||||
public SearchButtonController(JTextField champNom, JTextField champPrenom, JTextField champRef) {
|
||||
this.champNom = champNom;
|
||||
this.champPrenom = champPrenom;
|
||||
this.champRef = champRef;
|
||||
}
|
||||
|
||||
public void fillTable(String nom, String prenom) {
|
||||
|
||||
|
||||
|
||||
PrereservationFactoryModel factory = new PrereservationFactoryModel();
|
||||
Set<Prereservation> cResSet = factory.getPrereservations(nom, prenom);
|
||||
|
||||
|
||||
for (Prereservation currRes : cResSet) {
|
||||
String[] rowToAdd = {currRes.getReference(), currRes.getDateDebut().toString(), String.valueOf(currRes.getJours()), currRes.getTypeChambre().name()};
|
||||
|
||||
PrereservationView.getInstance().ajoutTuples(rowToAdd);
|
||||
}
|
||||
}
|
||||
|
||||
public void fillTable(String reference) {
|
||||
|
||||
|
||||
PrereservationFactoryModel factory = new PrereservationFactoryModel();
|
||||
Prereservation cRes = factory.getPrereservation(reference);
|
||||
|
||||
String[] rowToAdd = {cRes.getReference(), cRes.getDateDebut().toString(), String.valueOf(cRes.getJours()), cRes.getTypeChambre().name()};
|
||||
|
||||
PrereservationView.getInstance().ajoutTuples(rowToAdd);
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
|
||||
PrereservationView.getInstance().viderTableau();
|
||||
System.out.println(this.champNom.getText() + champPrenom.getText() + this.champRef.getText());
|
||||
|
||||
if (this.champRef.getText().isEmpty()) {
|
||||
fillTable(this.champNom.getText(), champPrenom.getText());
|
||||
}
|
||||
else {
|
||||
fillTable(this.champRef.getText());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Controller;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.View.*;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* La classe SelectButtonController permet de répertorier les actions effectués lors d'une recherche de chambre.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class SelectButtonController implements ActionListener {
|
||||
|
||||
public SelectButtonController(JButton button) {
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
|
||||
String Command = e.getActionCommand();
|
||||
Prereservation preRes = PrereservationView.getInstance().getSelectedReservation();
|
||||
|
||||
if (Command == "Valider la préréservation") {
|
||||
RecupChambre availableRoom = RecupChambre.byDate(preRes.getDateDebut());
|
||||
|
||||
int rep = JOptionPane.showOptionDialog(null, availableRoom.monPrint() + " est disponible", "Recherche de chambre", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[] { "Oui", "Choisir une autre chambre" }, JOptionPane.YES_OPTION);
|
||||
|
||||
if (rep == JOptionPane.YES_OPTION) {
|
||||
availableRoom.reserve(preRes.getDateDebut());
|
||||
}
|
||||
else {
|
||||
|
||||
ArrayList<RecupChambre> rooms = RecupChambre.allByDate(preRes.getDateDebut());
|
||||
// CREATION LISTE DE CHAMBRES
|
||||
ChambresView.getInstance().update(rooms);
|
||||
}
|
||||
}
|
||||
else if (Command == "Sélectionner cette chambre") {
|
||||
ChambresView.getInstance().chambreSelectionnee().reserve(preRes.getDateDebut());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Controller;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
|
||||
|
||||
|
||||
public class TextFieldController implements ActionListener {
|
||||
private JTextField champPrenom;
|
||||
private JTextField champRef;
|
||||
|
||||
public TextFieldController(JTextField champPrenom, JTextField champNom, JTextField champRef) {
|
||||
|
||||
this.champPrenom = champPrenom;
|
||||
this.champRef = champRef;
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
|
||||
if (this.champPrenom.getText() != "") {
|
||||
this.champRef.setEditable(false);
|
||||
}
|
||||
}
|
||||
}
|
19
PROJETIHM_FA/src/fr/iutfbleau/projetIHM2021FI2/Main.java
Normal file
19
PROJETIHM_FA/src/fr/iutfbleau/projetIHM2021FI2/Main.java
Normal file
@ -0,0 +1,19 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.View.*;
|
||||
|
||||
/**
|
||||
* La classe Main permet le démarrage du programme.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class Main {
|
||||
static public void main(String[] args) {
|
||||
ConnexionBDD.getInstance();
|
||||
|
||||
WindowView window = new WindowView();
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Model;
|
||||
import java.sql.*;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
|
||||
/**
|
||||
* La classe ConnexionBDD permet de se connecter à notre base de données.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class ConnexionBDD {
|
||||
|
||||
private static ConnexionBDD connexionInstance = null;
|
||||
private Connection sqlCo;
|
||||
|
||||
//Constructeur
|
||||
private ConnexionBDD() {
|
||||
this.sqlCo = null;
|
||||
this.connect();
|
||||
}
|
||||
|
||||
// CONNEXION BDD TAJGALT
|
||||
public void connect() {
|
||||
try {
|
||||
Class.forName("org.mariadb.jdbc.Driver");
|
||||
try {
|
||||
this.sqlCo = DriverManager.getConnection("jdbc:mariadb://dwarves.iut-fbleau.fr/tajgalt", "tajgalt", "tajgalt");
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Identifiants incorrects, vérifiez !");
|
||||
}
|
||||
}
|
||||
catch(ClassNotFoundException e) {
|
||||
JOptionPane.showMessageDialog(null, "Connexion Impossible !", "Connexion", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
// DECONNEXION BDD
|
||||
public void close() {
|
||||
try {
|
||||
this.sqlCo.close();
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Impossible de se déconnecter");
|
||||
}
|
||||
}
|
||||
|
||||
public static ConnexionBDD getInstance() {
|
||||
if (connexionInstance == null) {
|
||||
connexionInstance = new ConnexionBDD();
|
||||
}
|
||||
return connexionInstance;
|
||||
}
|
||||
|
||||
public static Connection getSQLco() {
|
||||
return connexionInstance.sqlCo;
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Model;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
import java.sql.*;
|
||||
|
||||
/**
|
||||
* La classe PrereservationFactoryModel permet de gérer les préréservations.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class PrereservationFactoryModel implements PrereservationFactory {
|
||||
private HashMap<String,Prereservation> map =new HashMap<String,Prereservation>();
|
||||
|
||||
/** Constructeur */
|
||||
public PrereservationFactoryModel() {
|
||||
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getSQLco().prepareStatement(
|
||||
"SELECT DISTINCT client, reference, debut, nuits, categorie FROM Reservation JOIN Client c ON c.id = client");
|
||||
|
||||
pst.executeUpdate();
|
||||
|
||||
ResultSet rs = pst.executeQuery();
|
||||
|
||||
// On ajoute toutes les préreservations au map
|
||||
while (rs.next()) {
|
||||
RecupClient c = RecupClient.byId(rs.getInt("client"));
|
||||
this.map.put(rs.getString("reference"), new PrereservationModel(rs.getString("reference"), LocalDate.parse(rs.getString("debut")), rs.getInt("nuits"), TypeChambre.values()[rs.getInt("categorie") - 1], c));
|
||||
}
|
||||
|
||||
rs.close();
|
||||
pst.close();
|
||||
}
|
||||
|
||||
catch(SQLException e) {
|
||||
System.err.println("Problème lors de la récupération des préréservations.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recherche par référence
|
||||
* Ne devrait pas retourner un objet null.
|
||||
*/
|
||||
public Prereservation getPrereservation(String r){
|
||||
Objects.requireNonNull(r,"La référence recherchée est vide.");
|
||||
if (this.map.containsKey(r)){
|
||||
return this.map.get(r);
|
||||
}
|
||||
else {
|
||||
throw new IllegalStateException("Il n'existe pas de préréservation avec la référence : " + r);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Recherche par nom et prénom
|
||||
* Ne devrait pas retourner un objet null ou un ensemble vide.
|
||||
*/
|
||||
public Set<Prereservation> getPrereservations(String n, String p){
|
||||
Objects.requireNonNull(n,"Le nom est vide.");
|
||||
Objects.requireNonNull(p,"Le prénom est vide.");
|
||||
|
||||
|
||||
Collection<Prereservation> c = this.map.values();
|
||||
Predicate<Prereservation> filtre = preresa -> !preresa.getClient().getNom().equals(n) || !preresa.getClient().getPrenom().equals(p);
|
||||
// COLLECTION
|
||||
c.removeIf(filtre);
|
||||
if (c.isEmpty()){
|
||||
throw new IllegalStateException("Pas de préréservation au nom de : " + n + p);
|
||||
}
|
||||
// on fabrique un ensemble.
|
||||
Set<Prereservation> found = new HashSet<Prereservation>(c);
|
||||
return found;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupération de toutes les préréservations.
|
||||
*/
|
||||
public Set<Prereservation> getAllPrereservations() {
|
||||
return new HashSet<Prereservation>(this.map.values());
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Model;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class PrereservationModel implements Prereservation {
|
||||
private String reference;
|
||||
private LocalDate dateDebut;
|
||||
private int jours;
|
||||
private TypeChambre type;
|
||||
private Client client;
|
||||
|
||||
public PrereservationModel(String reference, LocalDate dateDebut, int jours, TypeChambre t, Client client){
|
||||
Objects.requireNonNull(reference,"La référence est null.");
|
||||
Objects.requireNonNull(dateDebut,"La date est null.");
|
||||
if (jours<1) {
|
||||
throw new IllegalArgumentException("Nombres de jours négatif ou null.");
|
||||
}
|
||||
Objects.requireNonNull(t,"Le type de chambre est null.");
|
||||
Objects.requireNonNull(client,"Le client est null.");
|
||||
this.reference=reference;
|
||||
this.dateDebut=dateDebut;
|
||||
|
||||
this.jours=jours;
|
||||
this.type=t;
|
||||
this.client=client;
|
||||
}
|
||||
|
||||
public String getReference(){
|
||||
return this.reference;
|
||||
}
|
||||
|
||||
public LocalDate getDateDebut(){
|
||||
return this.dateDebut;
|
||||
}
|
||||
|
||||
public int getJours(){
|
||||
return this.jours;
|
||||
}
|
||||
|
||||
public TypeChambre getTypeChambre(){
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public Client getClient(){
|
||||
return this.client;
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Model;
|
||||
|
||||
import java.sql.*;
|
||||
import java.sql.Date;
|
||||
import java.time.LocalDate;
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
/**
|
||||
* La classe RecupChambre nous permet de récupérer et traiter les chambres grâce à la base de données.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
|
||||
public class RecupChambre implements Chambre {
|
||||
private int numero;
|
||||
private TypeChambre type;
|
||||
|
||||
public RecupChambre(int numero, TypeChambre t){
|
||||
Objects.requireNonNull(t,"Type de chambre est null.");
|
||||
this.numero=numero;
|
||||
this.type=t;
|
||||
}
|
||||
|
||||
|
||||
public int getNumero(){
|
||||
return this.numero;
|
||||
}
|
||||
|
||||
|
||||
public boolean unLitSimple(){
|
||||
//https://stackoverflow.com/questions/1750435/comparing-java-enum-members-or-equals
|
||||
return (this.type == TypeChambre.UNLS);
|
||||
}
|
||||
|
||||
|
||||
public boolean deuxLitsSimples(){
|
||||
return (this.type == TypeChambre.DEUXLS);
|
||||
}
|
||||
|
||||
|
||||
public boolean unLitDouble(){
|
||||
return (this.type == TypeChambre.UNLD);
|
||||
}
|
||||
|
||||
|
||||
public TypeChambre getType(){
|
||||
return this.type;
|
||||
}
|
||||
|
||||
|
||||
static public RecupChambre byDate(LocalDate date) {
|
||||
RecupChambre room = null;
|
||||
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getInstance().getSQLco().prepareStatement(
|
||||
"SELECT id, type FROM Chambre WHERE DATEDIFF(?, dateDispo) > 0");
|
||||
|
||||
pst.setDate(1, Date.valueOf(date));
|
||||
pst.executeUpdate();
|
||||
ResultSet rs = pst.executeQuery();
|
||||
|
||||
rs.next();
|
||||
// CREATION CHAMBRE
|
||||
room = new RecupChambre(rs.getInt("id"), TypeChambre.values()[rs.getInt("type") - 1]);
|
||||
rs.close();
|
||||
pst.close();
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("erreur bydate");
|
||||
System.out.println("error code " + e.getErrorCode());
|
||||
System.out.println(" sqlState " + e.getSQLState());
|
||||
}
|
||||
return room;
|
||||
}
|
||||
|
||||
static public ArrayList<RecupChambre> allByDate(LocalDate date) {
|
||||
ArrayList<RecupChambre> rooms = new ArrayList<RecupChambre>();
|
||||
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getInstance().getSQLco().prepareStatement(
|
||||
"SELECT id, type FROM Chambre WHERE DATEDIFF(?, dateDispo) > 0");
|
||||
|
||||
pst.setDate(1, Date.valueOf(date));
|
||||
pst.executeUpdate();
|
||||
ResultSet rs = pst.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
rooms.add(new RecupChambre(rs.getInt("id"), TypeChambre.values()[rs.getInt("type") - 1]));
|
||||
}
|
||||
rs.close();
|
||||
pst.close();
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Aucune chambre à partir de cette date là");
|
||||
}
|
||||
|
||||
return rooms;
|
||||
}
|
||||
|
||||
public void reserve(LocalDate date) {
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getInstance().getSQLco().prepareStatement(
|
||||
"UPDATE Chambre SET dateDispo = ? WHERE id = ?;");
|
||||
|
||||
pst.setDate(1, Date.valueOf(date));
|
||||
pst.setInt(2, this.getNumero());
|
||||
pst.executeUpdate();
|
||||
pst.executeQuery();
|
||||
|
||||
JOptionPane.showMessageDialog(null, "La chambre " + this.getNumero() + " a été réservée pour le " + date + " avec succès !", "Réservation", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Impossible de réserver la chambre");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.Model;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import java.util.*;
|
||||
import java.sql.*;
|
||||
|
||||
/**
|
||||
* La classe RecupClient permet de récupérer et traiter les clients grâce à la base de données.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
|
||||
public class RecupClient implements Client {
|
||||
private int id;
|
||||
private String nom;
|
||||
private String prenom;
|
||||
|
||||
public RecupClient(int id, String prenom, String nom){
|
||||
Objects.requireNonNull(nom,"nom est null.");
|
||||
Objects.requireNonNull(prenom,"prenom est null.");
|
||||
this.id=id;
|
||||
this.nom=nom;
|
||||
this.prenom=prenom;
|
||||
}
|
||||
|
||||
|
||||
public int getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
||||
|
||||
public String getNom(){
|
||||
return this.nom;
|
||||
}
|
||||
|
||||
|
||||
public String getPrenom(){
|
||||
return this.prenom;
|
||||
}
|
||||
|
||||
|
||||
static public RecupClient byId(int id) {
|
||||
RecupClient customer = null;
|
||||
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getSQLco().prepareStatement(
|
||||
"SELECT * FROM Client WHERE id = ?");
|
||||
|
||||
pst.setInt(1, id);
|
||||
pst.executeUpdate();
|
||||
|
||||
ResultSet rs = pst.executeQuery();
|
||||
rs.next();
|
||||
|
||||
customer = new RecupClient(rs.getInt("id"), rs.getString("prenom"), rs.getString("nom"));
|
||||
|
||||
rs.close();
|
||||
pst.close();
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Erreur lors de la recherche.");
|
||||
}
|
||||
return customer;
|
||||
}
|
||||
|
||||
|
||||
static public String nom(int id) {
|
||||
String customer = null;
|
||||
try {
|
||||
PreparedStatement pst = ConnexionBDD.getSQLco().prepareStatement(
|
||||
"SELECT * FROM Client WHERE id = ?");
|
||||
|
||||
pst.setInt(1, id);
|
||||
pst.executeUpdate();
|
||||
ResultSet rs = pst.executeQuery();
|
||||
rs.next();
|
||||
|
||||
customer = rs.getString("nom");
|
||||
|
||||
rs.close();
|
||||
pst.close();
|
||||
|
||||
}
|
||||
catch(SQLException e) {
|
||||
System.err.println("Problème lors de la recherche");
|
||||
}
|
||||
return customer;
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.View;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.Controller.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import javax.swing.table.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* La classe ChambresView permet d'afficher les autres chambres disponibles que l'on peut sélectionner.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class ChambresView extends JFrame {
|
||||
private JLabel instructionsLabel;
|
||||
private JButton confirmBtn;
|
||||
private JScrollPane scrollPane;
|
||||
|
||||
|
||||
// MODELE TABLE
|
||||
private DefaultTableModel model;
|
||||
// TABLE
|
||||
private JTable table;
|
||||
|
||||
|
||||
private ArrayList<RecupChambre> rooms;
|
||||
private static ChambresView instance = null;
|
||||
|
||||
|
||||
private ChambresView() {
|
||||
super();
|
||||
this.rooms = null;
|
||||
|
||||
this.setLayout(new GridBagLayout());
|
||||
this.scrollPane = new JScrollPane();
|
||||
this.instructionsLabel = new JLabel("Selectionnez une chambre");
|
||||
this.confirmBtn = new JButton("Sélectionner");
|
||||
|
||||
SelectButtonController btnListener = new SelectButtonController(this.confirmBtn);
|
||||
this.confirmBtn.addActionListener(btnListener);
|
||||
|
||||
this.setSize(550, 600);
|
||||
this.setLocation(500,400);
|
||||
|
||||
String[] columnName = {"Chambres disponibles"};
|
||||
this.model = new DefaultTableModel(null, columnName);
|
||||
this.table = new JTable(this.model);
|
||||
scrollPane.setViewportView(this.table);
|
||||
|
||||
|
||||
GridBagConstraints gridBtn = new GridBagConstraints();
|
||||
gridBtn.gridx = 0;
|
||||
gridBtn.gridy = 2;
|
||||
gridBtn.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridBtn.insets = new Insets(10, 10, 10, 10);
|
||||
|
||||
GridBagConstraints gridLabel = new GridBagConstraints();
|
||||
gridLabel.gridx = 0;
|
||||
gridLabel.gridy = 0;
|
||||
gridLabel.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridLabel.insets = new Insets(10, 10, 10, 10);
|
||||
|
||||
GridBagConstraints gridRoom = new GridBagConstraints();
|
||||
gridRoom.gridx = 0;
|
||||
gridRoom.gridy = 1;
|
||||
gridRoom.fill = GridBagConstraints.BOTH;
|
||||
gridRoom.insets = new Insets(10, 10, 10, 10);
|
||||
gridRoom.weighty = 10.0;
|
||||
|
||||
|
||||
this.add(this.instructionsLabel, gridLabel);
|
||||
this.add(this.scrollPane, gridRoom);
|
||||
this.add(this.confirmBtn, gridBtn);
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
public void ajoutTuples(String[] data) {
|
||||
this.model.addRow(data);
|
||||
}
|
||||
|
||||
public void viderTableau() {
|
||||
this.model.setRowCount(0);
|
||||
}
|
||||
|
||||
public RecupChambre chambreSelectionnee() {
|
||||
|
||||
int selectedRow = this.table.getSelectedRow();
|
||||
|
||||
return this.rooms.get(selectedRow);
|
||||
}
|
||||
|
||||
public void update(ArrayList<RecupChambre> rooms) {
|
||||
this.rooms = rooms;
|
||||
|
||||
this.viderTableau();
|
||||
|
||||
for (int i = 0; i<rooms.size(); i++) {
|
||||
this.ajoutTuples(new String[]{rooms.get(i).monPrint()});
|
||||
}
|
||||
}
|
||||
|
||||
public static ChambresView getInstance() {
|
||||
if (instance == null)
|
||||
instance = new ChambresView();
|
||||
|
||||
return instance;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.View;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import javax.swing.table.*;
|
||||
|
||||
/**
|
||||
* Ce fichier nous permet d'afficher le JTable contenant les informations de la base de données.
|
||||
* Ainsi, l'utilisateur obtient, dans la page principale, le contenu de la base de données concernant la liste des chambres disponibles.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class PrereservationView extends JScrollPane {
|
||||
private static PrereservationView instance;
|
||||
private DefaultTableModel model;
|
||||
private JTable table;
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
*/
|
||||
private PrereservationView() {
|
||||
super();
|
||||
|
||||
String[] header = {"Référence", "Date de début", "Nombre de nuits", "Catégorie chambre"};
|
||||
this.model = new DefaultTableModel(null, header);
|
||||
|
||||
this.table = new JTable(this.model);
|
||||
this.setViewportView(this.table);
|
||||
}
|
||||
|
||||
|
||||
// AJOUT DES BONS TUPLES APRES LA RECHERCHE
|
||||
public void ajoutTuples(String[] data) {
|
||||
this.model.addRow(data);
|
||||
}
|
||||
|
||||
// MISE A ZERO DU TABLEAU
|
||||
public void viderTableau() {
|
||||
this.model.setRowCount(0);
|
||||
}
|
||||
|
||||
|
||||
// SELECT RESERVATION
|
||||
public Prereservation getSelectedReservation() {
|
||||
PrereservationFactoryModel factory = new PrereservationFactoryModel();
|
||||
Prereservation reserv = null;
|
||||
|
||||
int selectedRow = this.table.getSelectedRow();
|
||||
reserv = factory.getPrereservation(this.table.getValueAt(selectedRow, 0).toString());
|
||||
|
||||
return reserv;
|
||||
}
|
||||
|
||||
// GET INSTANCE DU TABLEAU
|
||||
public static PrereservationView getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new PrereservationView();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
}
|
@ -0,0 +1,175 @@
|
||||
package fr.iutfbleau.projetIHM2021FI2.View;
|
||||
|
||||
import fr.iutfbleau.projetIHM2021FI2.Controller.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.Model.*;
|
||||
import fr.iutfbleau.projetIHM2021FI2.API.*;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Ce fichier permet d'ouvrir la fenetre principale. Au démarrage, après avoir exécuté la commande "make", l'utilisateur se retrouve sur cette page.
|
||||
* Cette page permet à l'utilisateur de faire une recherche ainsi que de valider une préréservation.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Anice TAJGALT, Gianni MANZARI, Alban DUMAS
|
||||
*/
|
||||
public class WindowView extends JFrame {
|
||||
|
||||
// CONSTRUCTEUR
|
||||
public WindowView() {
|
||||
|
||||
super("Finir la réservation d'une Chambre");
|
||||
this.setSize(1200, 700);
|
||||
this.setLocation(200, 200);
|
||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
// CREATION PANEL
|
||||
JPanel panel = new JPanel();
|
||||
|
||||
|
||||
// ELEMENTS DU PANEL
|
||||
JLabel phrase1 = new JLabel("Effectuer une recherche :");
|
||||
JTextField reference = new JTextField("rentrer la référence");
|
||||
reference.setPreferredSize(new Dimension(200, 30));
|
||||
JTextField nom = new JTextField("rentrer le nom");
|
||||
nom.setPreferredSize(new Dimension(200, 30));
|
||||
JTextField prenom = new JTextField("rentrer le prenom");
|
||||
prenom.setPreferredSize(new Dimension(200, 30));
|
||||
|
||||
|
||||
// BOUTON
|
||||
JButton buttonSearch = new JButton("Rechercher");
|
||||
JButton selectR = new JButton("Valider la préréservation");
|
||||
|
||||
// LISTENERS
|
||||
SearchButtonController searchBtnListener = new SearchButtonController(nom, prenom, reference);
|
||||
buttonSearch.addActionListener(searchBtnListener);
|
||||
SelectButtonController selectBtnListener = new SelectButtonController(selectR);
|
||||
selectR.addActionListener(selectBtnListener);
|
||||
|
||||
// VIDER LE TEXTE DES CHAMPS
|
||||
nom.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
JTextField texteField = ((JTextField)e.getSource());
|
||||
texteField.setText("");
|
||||
}
|
||||
});
|
||||
reference.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
JTextField texteField = ((JTextField)e.getSource());
|
||||
texteField.setText("");
|
||||
}
|
||||
});
|
||||
prenom.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
JTextField texteField = ((JTextField)e.getSource());
|
||||
texteField.setText("");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
PrereservationView tableau = PrereservationView.getInstance();
|
||||
PrereservationFactoryModel prefactory = new PrereservationFactoryModel();
|
||||
Set<Prereservation> preresList = prefactory.getAllPrereservations();
|
||||
|
||||
|
||||
// REMPLIS LE TABLEAU
|
||||
for (Prereservation currRes : preresList) {
|
||||
String[] rowToAdd = {currRes.getReference(),
|
||||
currRes.getDateDebut().toString(),
|
||||
String.valueOf(currRes.getJours()),
|
||||
currRes.getTypeChambre().name()};
|
||||
|
||||
PrereservationView.getInstance().ajoutTuples(rowToAdd);
|
||||
}
|
||||
|
||||
|
||||
panel.setLayout(new GridBagLayout());
|
||||
|
||||
// TEXTE
|
||||
GridBagConstraints gridP = new GridBagConstraints();
|
||||
gridP.gridx = 0;
|
||||
gridP.gridy = 0;
|
||||
gridP.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridP.insets = new Insets(20, 20, 20, 20);
|
||||
|
||||
GridBagConstraints gridN = new GridBagConstraints();
|
||||
gridN.gridx = 1;
|
||||
gridN.gridy = 0;
|
||||
gridN.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridN.insets = new Insets(20, 20, 20, 20);
|
||||
|
||||
GridBagConstraints gridR = new GridBagConstraints();
|
||||
gridR.gridx = 2;
|
||||
gridR.gridy = 0;
|
||||
gridR.gridwidth = 1;
|
||||
gridR.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridR.insets = new Insets(20, 20, 20, 20);
|
||||
|
||||
// BOUTON
|
||||
GridBagConstraints gridS = new GridBagConstraints();
|
||||
gridS.gridx = 0;
|
||||
gridS.gridy = 1;
|
||||
gridS.fill = GridBagConstraints.HORIZONTAL;
|
||||
gridS.insets = new Insets(20, 20, 20, 20);
|
||||
|
||||
GridBagConstraints gridSelect = new GridBagConstraints();
|
||||
gridSelect.gridx = 0;
|
||||
gridSelect.gridy = 4;
|
||||
gridSelect.gridwidth = 2;
|
||||
gridSelect.fill = GridBagConstraints.BOTH;
|
||||
gridSelect.insets = new Insets(20, 20, 20, 20);
|
||||
|
||||
|
||||
// TABLEAU
|
||||
GridBagConstraints gridT = new GridBagConstraints();
|
||||
gridT.gridx = 0;
|
||||
gridT.gridy = 3;
|
||||
gridT.gridwidth = 4;
|
||||
gridT.fill = GridBagConstraints.BOTH;
|
||||
gridT.insets = new Insets(20, 20, 20, 20);
|
||||
gridT.weightx = 1.0;
|
||||
gridT.weighty = 1.0;
|
||||
|
||||
panel.add(nom,gridN);
|
||||
panel.add(prenom,gridP);
|
||||
panel.add(buttonSearch,gridS);
|
||||
panel.add(reference,gridR);
|
||||
panel.add(tableau, gridT);
|
||||
panel.add(selectR, gridSelect);
|
||||
|
||||
|
||||
this.add(panel);
|
||||
this.setVisible(true);
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user