M2103-TP2-Exo-5

Exercice donné en test le 09/02/2006

Remarques préliminaires

  1. Dans le calendrier grégorien que nous utilisons :

    • les années divisibles par 4 sont bissextiles,

    • les années divisibles par 100 ne sont pas bissextiles,

    • les années divisibles par 400 sont bissextiles.

Téléchargez le fichierTestDate
TestCDate.cpp.

Créez le projet Date.

Dans les fichiers Date.h et Date.cpp, déclarer et définir la classe Date, de l’espace de noms nsUtil dont le diagramme de classe
est
, qui a les caractéristiques suivantes :

  • quatre données membres : jour, mois, année, et un booléen indiquant si l’année est bissextile.

    Par défaut, les trois premières données-membres sont nulles, la quatrième est fausse.

    Remarques

    1. Une date ne peut avoir que les trois premières données-membres toutes nulles (la date est considérée comme non initialisée, et la donnée-membre “année bissextile” est fausse), soit toutes valides.

    2. Une date est considérée comme valide si :

      – l’année est dans l’intervalle [1900, 2021],

      – le mois est dans l’intervalle [1, 12],

      – le jour est dans l’intervalle [1, xx], où xx dépend du mois et de l’année (bissextile ou pas).

  • un constructeur public, qui initialise correctement les données-membres à partir des valeurs des paramètres (jour, mois, an).

    Si les valeurs des paramètres sont incohérentes, les données-membres doivent prendre les valeurs par défaut.

    Le constructeur doit pouvoir servir de constructeur par défaut.

  • la fonction-membre publique reset() qui redonne à toutes les données-membres les valeurs par défaut,

  • la fonction-membre getQuantieme() qui renvoie le numéro du jour de la date enregistrée dans l’année, dans l’intervalle [1, 365] ou [1, 366].

    La fonction renvoie 0 si la date est invalide.

  • la fonction-membre getLaVeille() qui renvoie la date (objet Date de la veille de la date courante),

  • la fonction-membre display() qui affiche à l’écran la date enregistrée dans l’un des deux formats suivants (se conformer rigoureusement au format de l’exemple) :

    1 février 2000
    01/02/2000
    

    selon la valeur de son paramètre booléen (la seconde forme d’affichage par défaut).

    L’affichage d’une date invalide apparaît ainsi :

    date invalide
    

Dans l’espace de noms anonyme du fichier Date.cpp, définir un tableau contenant le nombre de jours de chaque mois, et un autre tableau contenant le libellé de chaque mois.

Dans l’espace de noms anonyme du fichier Date.cpp, ajouter la fonction getNbJoursDuMois() qui renvoie le nombre de jours du mois (dans l’intervalle [1, 12]) qui lui est passé en premier paramètre, selon que l’année est bissextile ou pas (booléen qui lui est passé en second paramètre).

Dans le fichier Date.cpp, écrire les corps des fonctions-membres de la classe; les fonctions getQuantieme() et getLaVeille() doivent appeler la fonction getNbJoursDuMois().

Pour essayer quelques dates, tester par exemple avec ce calendrier universel.