NFA035 : Gestion d'un hôtel

Quelques consignes

Présentation du sujet

Un hôtel comporte plusieurs catégories de chambres, dont le tarif varie avec la date, selon qu'on est en pleine saison ou en saison creuse.

Notre but est de réaliser un système de réservation et de gestion de l'hôtel pour pouvoir calculer le montant des factures dûes par les clients.

Le nombre de classes utilisées peut éventuellement vous faire un peu peur. Pas d'affolement ! elles sont souvent déjà écrites, et le sujet vous guide progressivement dans l'écriture du reste du code, en particulier grâce aux tests. Le but de l'exercice est de aussi de vous amener à comprendre et à pouvoir imiter une modélisation objet. N'hésitez pas à utiliser le forum pour poser des questions !

Lisez bien la javadoc et les commentaires des méthodes et des classes qu'on vous demande d'écrire ; elle contient des indications qui vous aideront. Les tests sont aussi très intéressants à lire ; ils vous montreront comment utiliser les objets.

La classe LocalDate

Dans cet exercice, on utilisera les collections (en particulier les maps), ainsi que la classe LocalDate introduite en java 8 pour représenter de manière propre des dates. Un objet LocalDate représente une date donnée. Une fois créé, sa valeur ne change pas.

Comme ce qui m'intéresse, c'est d'abord que vous maîtrisiez les collections, je vous guide un peu sur les méthodes les plus intéressantes de LocalDate : Dans la suite, nous allons nous intéresser aux classes qui constituent notre système une par une. Dans les premières questions, les classes à créer vous sont données, et vous avez "uniquement" à implémenter leur code. La dernière question est plus ouverte : je ne vous dis pas comment représenter les réservations, et je vous laisse libre de les implémenter comme vous le souhaitez.

La classe IntervalleDate

Comme les tarifs et les réservations sont assez naturellement définis par des intervalles entre deux dates, on a décidé de représenter ces intervalles par une classe, la classe IntervalleDate.

Un intervalleDate est défini par une date de début et une date de fin, et représente tous les jours compris entre la date de début (inclusivement) et la date de fin (exclusivement). Un effet secondaire de cette définition est que si je veux définir deux intervalles qui se suivent, la date de fin du premier est la date de début du second.

Implémentez les méthodes de la classe IntervalleDate pour faire tourner les tests. Remarque importante : vous vous apercevrez qu'ensuite, si IntervalleDate est pratique pour spécifier la durée d'un séjour, il est beaucoup plus simple de travailler ensuite jour par jour. Par exemple parce que les prix des chambres peuvent varier le long de celui-ci. C'est pour cela qu'on définit la méthode getDatesDansIntervalle.

CalendrierTarif

Le prix d'une chambre varie selon la date. Pour représenter ces variations, nous allons définir la classe CalendrierTarif. Elle permet par exemple d'enregistrer les différents prix en fonction des dates, et de calculer le prix d'un séjour, dont on connaît la date de début et la date de fin.

Implémentez les méthodes de la classe CalendrierTarif pour faire tourner les tests.

CategorieChambre

Les chambres d'un hôtel n'ont a priori pas toute le même prix. Au lieu de fixer le prix chambre par chambre, ce qui serait pénible, on définit la notion de catégorie de chambre.

Une categorie a un nom, indique la taille de chambre à laquelle elle correspond, et est associée à un calendrier de tarifs.

La classe CategorieChambre est déjà écrite... Vous n'avez rien à faire.

Sejour

Un objet séjour représente un séjour dans une chambre pour une période de temps donnée. Il sera utilisé dans GestionnaireDesReservations.

La classe Sejour est déjà écrite... Vous n'avez rien à faire.

Chambre

Un objet de classe Chambre représente une chambre de l'hôtel, y compris ses réservations. Un objet "Chambre" sait en particulier quand il est réservé, et, comme il connaît son tarif, il est capable de calculer le prix d'un séjour.

Nous vous fournissons les variables d'instance de la classe Chambre. À vous de compléter les méthodes qui gèrent les réservations.

Hotel

La classe Hotel représente l'hôtel vu de manière fixe, indépendamment des clients et de leurs séjours. En gros, c'est le bâtiment de l'hôtel.

La classe Hôtel est déjà écrite... Vous n'avez rien à faire.

GestionnaireDesReservations

La classe GestionnaireDesReservations représente le système de réservation et de facturation de l'hôtel.

Un objet GestionnaireDesReservations connaît les chambres et leurs catégories grâce à la classe Hotel ;

Une grosse partie du travail sur les réservations est déjà fait par les chambres. Le GestionnaireDesReservations va surtout devoir chercher une chambre disponible pour un client.