PB TRES TRES TRES URGENT SVP !!!!

dalma101 Messages postés 51 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 13 août 2008 - 4 nov. 2006 à 20:56
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 4 nov. 2006 à 21:56
Bonjour, j'envoie ce post parce que ma copine est vraiment dans la merde pour son projet d'info. Elle doit programmer en c++ une horloge console avec gestion d'un réveil. (cf. post précédent, après lundi j'arrête, je le jure)

Si des âmes bien intentionnées pouvaient m'aider à lui trouver une solution et me donner des solutions fonctionnelles (codes complets et explications si possible ce serait super super cool et je ne les remercieraient jamais assez) car je n'ai jamais programmé en c++ et j'ai vraiment pas le temps d'approfondir (j'aurais cherché plus profondément si je pouvais mais le programme est à rendre pour lundi voire mardi). J'ai cherché mais je pige vraiment rien donc si possible donner code et où le mettre (je donne mon mail ou msn si nécessaire...)

En résumé, horloge avec 4 modes tournant (affichage heure, réglage heures, réglage minutes, réglage réveil (réglage heures réveil, réglage minutes réveil, réveil on/off), affichage heure,...). D'autres classes existent mais je n'en parle pas car elles ne servent pas pour ce qui merde (gestion de l'affichage et du clavier).

3 choses plantent ou doivent être améliorées :
- gestion de l'heure (horloge doit tourner en mode normal et réglage du réveil, pas lors du réglage des heures et minutes de l'heure normale). L'utilisation d'un sleep ne donne pas un fonctionnement optimal et je ne sais pas si ça tourne toujours en continu.
- lorsque l'on est dans le réglage du réveil, plus moyen de retourner vers l'affichage normal de l'heure ???
- la surveillance du réveil peut-elle être améliorée (car pas moyen de la tester pour le moment)

Je fournis le code utile pour être plus clair. En rouge et orange les choses qui plantent ou qui peuvent être modifiées.

NB : Les classes et fonctions sont censées rester telles quelles mais si une solution alternative existe ne pas hésiter à la donner (je le répète en code clair et précis)

Je me répète donnez moi des codes clairs et l'emplacement où les mettre.
Mille fois merci d'avance pour tout l'aide apportée. Merci, merci, merci...



====================================================================================




MAIN.CPP

====================================================================================


#include <cstdlib>
#include
#include <windows.h>

using namespace std;

#include "cadran.h"
#include "clavier.h"
#include "horloge.h"
#include "reveil.h"

int main(int argc, char *argv[])
{
    int result = 3%3;
    Cadran cadran1(5,10);
    Clavier unClavier;
    Horloge uneHorloge(22,59,3,3,24,unClavier,cadran1);
    uneHorloge.Controler();
    system("PAUSE");
    return EXIT_SUCCESS;
}

HORLOGE.CPP

====================================================================================


// Class automatically generated by Dev-C++ New Class wizard

#include

#include "horloge.h" // class's header file

// class constructor
Horloge::Horloge(short _heures, short _minutes, short _mode, short _nbMode,
                       short _resolution, Clavier _clavier, Cadran _cadran):
heures(_heures),
minutes(_minutes),
mode(_mode),
nbMode(_nbMode),
resolution(_resolution),
clavier(_clavier),
cadran(_cadran)
{
    // insert your code here
}

// class destructor
Horloge::~Horloge()
{
    // insert your code here
}

void Horloge::AvancerHeures()
{
...
}

void Horloge::AvancerMinutes()
{
...
}

void Horloge::ReculerHeures()
{
...    
}

void Horloge::ReculerMinutes()
{
...        
}

void Horloge::Controler()
{
 Clavier unClavier;
 Cadran unCadran;
 unCadran.Afficher(":",5);
 if ((resolution == 12 && heures >= 12) || (resolution == 24 && heures >= 24))
      {
           cout << "resolution : " << resolution << endl;
           cout << "mettre une heure inferieure a " << resolution << endl;
      }
      else if (heures < resolution)
              unCadran.Afficher(heures,2);
 if (minutes >= 60)
      {
           cout << "mettre des minutes inferieure a 60"<< endl;
      }             
 else unCadran.Afficher(minutes,7);
 short compteur = 0;
 do
 {
         Sleep(250);                                     -----------> gestion de l'heure normale, doit tourner en continu dans certains
          ++compteur;                                  


----------> cas, pas dans d'autres (utilisation d'un thread ? comment ? où ?)






          if (compteur == 240)
          {
           AvancerMinutes();
           unCadran.Afficher(minutes,7);
           compteur = 0;
          }          if (minutes 00 && compteur 0)
          {
           AvancerHeures();
           unCadran.Afficher(heures,2);


          }
         } while (!unClavier.ScruterClavier());
 char touche;
 int modulo;
 do
 {
  touche = unClavier.ScruterClavier();
  if (touche == 3)
  {
   modulo = mode % nbMode;
   switch(modulo)
   {
    case 1 :
         unCadran.Afficher("HH : ",2);
         unCadran.Afficher(heures,7);
         break;
    case 2 :
         unCadran.Afficher("MM : ",2);
         unCadran.Afficher(minutes,7);
         break;
    case 3 :                 ------------------------------> pas fait mais doit aller vers le réglage du réveil
          pour aller vers reveil.controler;
    case 0 :
         unCadran.Afficher(heures,2);
         unCadran.Afficher(minutes,7);
         short compteur2 = 0;
         do
         {
          Sleep(250);


                                     -----------------------> idem que plus haut






          ++compteur2;
          if (compteur2 == 240)
          {
           AvancerMinutes();
           unCadran.Afficher(minutes,7);
           compteur2 = 0;
          }          if (minutes 00 && compteur2 0)
          {
           AvancerHeures();
           unCadran.Afficher(heures,2);


           
          }
         } while (!unClavier.ScruterClavier());
         break;
   }
   ++mode;
  }
  else if (touche == 1)
       {
       switch (modulo)
         {
          case 1 :
               AvancerHeures();
               unCadran.Afficher(heures,7);
               break;
          case 2 :
               AvancerMinutes();
               unCadran.Afficher(minutes,7);
               break;
         }           
       }
       else if (touche == 2)
            {
            switch (modulo)
                   {
                   case 1 :
                        ReculerHeures();
                        unCadran.Afficher(heures,7);
                        break;
                   case 2 :
                        ReculerMinutes();
                        unCadran.Afficher(minutes,7);
                        break;
                   }            
            }
 } while(touche != 4);
}

REVEIL.CPP

====================================================================================


// Class automatically generated by Dev-C++ New Class wizard

#include <windows.h>

#include "reveil.h" // class's header file

// class constructor
Reveil::Reveil(short _heures, short _minutes, short _mode, short _nbMode,
                     short _resolution, Clavier _clavier, Cadran _cadran,
                     short _heureAlarme, short _minuteAlarme):                    
Horloge(_heures, _minutes, _mode, _nbMode, _resolution, _clavier, _cadran), --------> ???
heureAlarme(_heureAlarme),
minuteAlarme(_minuteAlarme)
{
    etatAlarme = false;
}

// class destructor
Reveil::~Reveil()
{
    // insert your code here
}

void Reveil::AvancerHeuresReveil()
{
...    
}

void Reveil::AvancerMinutesReveil()
{
...    
}

void Reveil::ReculerHeuresReveil()
{
...    
}

void Reveil::ReculerMinutesReveil()
{
...        
}

void Reveil::Controler()
{
 Clavier unClavier;
 Cadran unCadran;
 unCadran.Afficher(":",5);
 unCadran.Afficher(heureAlarme,2);
 unCadran.Afficher(minuteAlarme,7);
 char touche;
 int modulo2;
 do
 {
  touche = unClavier.ScruterClavier();
  if (touche == 3)
  {
   modulo2 = mode % nbMode;
   switch(modulo2)
   {
    case 1 :
         unCadran.Afficher("HHr: ",2);
         unCadran.Afficher(heureAlarme,7);
         break;
    case 2 :
         unCadran.Afficher("MMr: ",2);
         unCadran.Afficher(minuteAlarme,7);
         break;
    case 3 :
         unCadran.Afficher("Rev: ",2);
         unCadran.Afficher("Of",7);
         break;
    case 4 :
         unCadran.Afficher(heureAlarme,2);
         unCadran.Afficher(minuteAlarme,7);
         break;
    case 0 :
         if (etatAlarme == true)
            unCadran.Afficher("R",9);
         if (etatAlarme == false)
            unCadran.Afficher(" ",9);
         unCadran.Afficher(heures,2);
         unCadran.Afficher(minutes,7);  
         Horloge.Controler();                -------------------> doit aller vers l'affichage de l'heure
         break;
   }
   ++mode;
  }
  else if (touche == 1)
       {
       switch (modulo2)
         {
          case 1 :
               AvancerHeuresReveil();
               unCadran.Afficher(heureAlarme,7);
               break;
          case 2 :
               AvancerMinutesReveil();
               unCadran.Afficher(minuteAlarme,7);
               break;
          case 3 :
               if (etatAlarme == false)
               {
                  etatAlarme = true;
                  unCadran.Afficher("Rev: ",2);
                  unCadran.Afficher("On",7);
               }
               else if (etatAlarme = true)
                    {
                       etatAlarme = false;
                       unCadran.Afficher("Rev: ",2);
                       unCadran.Afficher("Of",7);
                    }
         }           
       }
       else if (touche == 2)
            {
            switch (modulo2)
                   {
                   case 1 :
                        ReculerHeuresReveil();
                        unCadran.Afficher(heureAlarme,7);
                        break;
                   case 2 :
                        ReculerMinutesReveil();
                        unCadran.Afficher(minuteAlarme,7);
                        break;
                   case 3 :
                        if (etatAlarme == false)
                        {
                         etatAlarme = true;
                         unCadran.Afficher("Rev: ",2);
                         unCadran.Afficher("On",7);
                        }
                        else if (etatAlarme = true)
                             {
                              etatAlarme = false;
                              unCadran.Afficher("Rev: ",2);
                              unCadran.Afficher("Of",7);
                             }     
                   }            
            }
 } while(touche != 4);
   
}

void Reveil::SurveillerAlarme()           ---------------> doit-il fonctionner et où mettre la surveillance ?
{
    Sleep(60000);    if (heures heureAlarme && minutes minuteAlarme && etatAlarme == true)
   {
    do
    {
     Beep(1000,2000);  // 1000 hertz (C5) for 2000 milliseconds  
    }while (minutes != (minutes + 5));
   }
}

2 réponses

nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
4 nov. 2006 à 21:08
Ca ne sert à rien de poster deux sujets, à part à polluer le forum et à prendre un peu plus de place dans la base de données...

<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
4 nov. 2006 à 21:56
L'heure systeme étant constante, m'est avis qu'il ne sert à rien d'utiliser plusieurs boucles do...,
j'en aurais fait qu'une controlé par le menu, mais par contre j'aurai fait un 2eme buffer écran grace
à la console Win32 c'est très facile (CreateConsoleScreenBuffer),
donc un buffer heure et un autre modif.
Mais il serait trop long pour moi de te donner un code pret à utiliser.
0
Rejoignez-nous