/**
*
* \file Duree.cpp
*
* \authors M. Laporte
*
* \date 02/04/2018
*
* \version V2.0
*
* \brief classe Duree et test de cette classe
*
**/
#include <iostream>
#include <iomanip> // setw()
using namespace std;
typedef unsigned long long ULLong_t;
namespace
{
class Duree
{
private :
ULLong_t myDuree;
short unsigned mySeconds;
short unsigned myMinutes;
short unsigned myHours;
ULLong_t myDays;
void normaliser (void);
public :
Duree (const ULLong_t duree);
ULLong_t getDuree (void) const;
void display (void) const;
void incr (const ULLong_t delta = ULLong_t (0));
void decr (const ULLong_t delta = ULLong_t (0));
}; // Duree
Duree::Duree (const ULLong_t duree) : myDuree (duree)
{
normaliser ();
} // Duree()
void Duree::normaliser (void)
{
myDays = myDuree / 86400;
myHours = (myDuree % 86400) / 3600;
myMinutes = (myDuree % 3600) / 60;
mySeconds = myDuree % 60;
} // normaliser()
ULLong_t Duree::getDuree (void) const { return myDuree; }
void Duree::display (void) const
{
cout << setw (10) << myDays << " jour(s)"
<< setw (3) << myHours << " heure(s)"
<< setw (3) << myMinutes << " minute(s)"
<< setw (3) << mySeconds << " seconde(s)";
} // display()
void Duree::incr (const ULLong_t delta /* = ULLong_t (0) */)
{
myDuree += delta;
normaliser ();
} // incr()
void Duree::decr (const ULLong_t delta /* = ULLong_t (0) */)
{
myDuree -= (delta > myDuree) ? myDuree : delta;
} // decr()
void testDureeDeBase (void)
{
ULLong_t oneDuree;
for (cin >> oneDuree; ! cin.eof (); cin >> oneDuree)
{
Duree duree (oneDuree);
duree.display();
cout << endl;
}
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';
} // testDureeDeBase()
} // namespace
int main (void)
{
testDureeDeBase ();
return 0;
} // main()