Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : PB TRES TRES TRES URGENT SVP !!!! [ Divers / Débutant(e) ] (dalma101)

samedi 4 novembre 2006 à 20:56:59 | PB TRES TRES TRES URGENT SVP !!!!

dalma101

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 <iostream>
#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 <iostream>

#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));
   }
}



samedi 4 novembre 2006 à 21:08:13 | Re : PB TRES TRES TRES URGENT SVP !!!!

nightlord666

Membre Club
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...


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.

samedi 4 novembre 2006 à 21:56:53 | Re : PB TRES TRES TRES URGENT SVP !!!!

yann_lo_san

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.




Cette discussion est classé dans : afficher, case, minutes, heures, uncadran


Répondre à ce message

Sujets en rapport avec ce message

timer [ par nazca ] Le Zero de la programmationNazcaSalut a tousJe veux pouvoir faire des relevés de>données à des intervalles 'dt' et pouvoir préciser l'heure de début e afficher une grille [ par igloobuster ] salut à tous, j'ai un tableau a deux dimmensions et j'aimerais afficher se tableau dans une fenetre.J'ai pensé à une Listview, mais le probleme est qu probleme de modification d'heure du systeme [ par nazca ] Le Zero de la programmationNazcaSalut a tous on ma filer un programme pour afficher l'heure du systeme en temps reel mais le probleme et ke j'aimerais figeage de boite de dialogue [ par nazca ] Le Zero de la programmationNazcasalut a tousje voudrais savoir si kelkun pourrai me dire pourkoi ma dialogue box fige kan je met un programme de sauve pourkoi sa marche pas [ par nazca ] Le Zero de la programmationNazcaj'aimerais savoir pourkoi on ne pe pas faire une boucle avecla difference entre 2 heures.voici le code:{ CDialog::OnOK conversion heure et minute en seconde [ par nazca ] Le Zero de la programmationNazcacomment fait on pour convertir des heures et minutes en secondes car j'aimerais faire la difference entre 2 heures.mer Visual C++ CBitmap [ par guillaume21 ] j'essaie d'afficher une image au format pgm (niveaux de gris) avec une CBitmap.J'ai la matrice des pixels de l'image en memoire mais je n'arrive pas à Fichier texte dans edit box [ par revelata ] Bonjour,je cherche à afficher un fichier texte dans une editbox.En fait c'est pour une charte accepter refuser, le problème c'est que je n'arrive pas Ou est l'erreur [ par nazca ] Le Zero de la programmationNazcaj'aimerai savoir ou est l'erreur de mon programme,surtout pourkoi j'ai pas le droit de mettre Diff dans ma boucle Nomb Comment afficher une boite de dialogue que je vient de créer ???? [ par coyito ] Comment procede t on avec les MFC ?MerciA+Eric


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,640 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.