M2103-TP1-Exo-1

L’objectif de cet exercice est de construire une ébauche d’une classe permettant de gérer une durée de temps (un délai), exprimé soit en secondes, soit en jours, heures, minutes et secondes.

Les normes IUT de programmation C++ devront être respectées : identificateurs des données membres (myData), identificateurs des paramètres (Data, terminaisons des classes}; // CX, …).

Création du projet

Créez le projet DureeDeBase (avec QT Creator).

Etape 1

Dans l’espace de noms anonyme du fichier main.cpp, déclarer la classe Duree dont le diagramme de classe est

, qui possède les données membres suivantes :

  • la durée en secondes (toujours positive ou nulle, et la plus grande possible),

  • le nombre de jours, d’heures, de minutes et de secondes correspondants (choisir les types les mieux adaptés).

et les fonctions membres suivantes :

  • un constructeur dont l’unique paramètre est le nombre de secondes de la durée,

  • une fonction membre display() qui affiche à l’écran la durée sous la forme suivante (sans retour chariot, pour pouvoir compléter l’affichage) :

          0 jour(s)  0 heure(s)  1 minute(s) 40 seconde(s)
         12 jour(s) 23 heure(s) 59 minute(s)  9 seconde(s)
    

    Comme le montre l’exemple ci-dessus, prévoir pour les zones numériques un format tel qu’elles soient alignées verticalement (rappel en utilisant le manipulateur standard setw().

    On pourra simplifier l’affichage en utilisant les unités h., j. min., s. au lieu de jour, heure, minute, seconde.

  • une fonction membre normaliser() qui transforme en jours, heures, etc., toute durée exprimée en secondes.

    Cette fonction ne devrait être accessible qu’à des fins internes.

Les définitions (corps) de toutes les fonctions membres devront être faites en dehors de la déclaration de la classe.

Attention à utiliser à bon escient le qualificatif const.

Avant de continuer à développer cette classe, tester ces trois premières fonctions membres.

Pour cela, écrire la fonction testDureeDeBase() qui, dans une boucle, saisit au clavier une durée exprimée en secondes (jusqu’à une valeur nulle), construit un objet de la classe Duree initialisé à la valeur lue et l’affiche à l’écran.

Compiler et tester.

Lorsque les résultats vous sembleront justes, vous devez ouvrir un terminal et vous placer dans le répertoire où se trouve l’exécutable de votre projet.

Téléchargez-y le fichier FichDurees.

Testez à nouveau votre programme en redirigeant le fichier FichDurees sur le flux d’entrée standard et comparez vos résultats avec ceux qui sont indiqués ci-dessous.

Seconde étape

Vous pouvez maintenant enrichir la classe avec :

  • la fonction membre getDuree() qui renvoie la valeur de la donnée membre correspondante,

  • les fonctions membres incr() et decr() qui augmentent ou diminuent la durée de l’objet de la valeur delta passée en paramètre.

    On considère pour le moment que si delta est supérieur à la valeur courante de la durée, le résultat de decr(Delta) est une durée nulle.

En fin de fonction testDureeDeBase(), ajoutez le code ci-dessous.

Duree d1 (0);
d1.incr (1);
cout << "Nbre sec. " << setw (6) << d1.getDuree ()
     << ", soit : ";
d1.display ();
cout << '\n';

d1.decr (1);
cout << "Nbre sec. " << setw (6) << d1.getDuree ()
     << ", soit : ";
d1.display ();
cout << '\n';

d1.incr (3662);
cout << "Nbre sec. " << setw (6) << d1.getDuree ()
     << ", soit : ";
d1.display ();
cout << '\n';

d1.decr (10000);
cout << "Nbre sec. " << setw (6) << d1.getDuree ()
     << ", soit : ";
d1.display ();
cout << '\n';

N’oubliez pas de sauvegarder tous vos fichiers sources sur github.