Program zegar, moduł wyświetlający czas, problem

0

Mam problem z którym nie mogę sobie poradzić, proszę o pomoc. Mam do utworzenia moduł wyświetlający czas w różnych formatach np: 10:00:01 p.m. 10:00 10:00:00.

user image

Plik main

#include <cstdlib>
#include <iostream>
#include "zegar.h"
using namespace std;

void Zmien(Zegar &Obiekt);
void Zmien(Zegar *Obiekt);
int DoMenu();
bool analiza(int&h,int&m,int&s);
int Ile();
enum CHOICE { Tworz_Obiekt=1,
              Zmien_Obiekt, 
              Wyswietl_Obiekt_Format_1,
              Wyswietl_Obiekt_Format_2,
              Wyswietl_Obiekt_Format_3,
              Tworz_Kopie,
              Ilosc_Obiektow_Dynam, 
              Quit}; 
Zegar* tab[256]={0};
int main(int argc, char *argv[])
{
    Zegar* ptr=0;   
    int h,m,s=0;    
    bool exit=false;
    int i=0;    
    while(!exit)
    {
        int choice=DoMenu();
        switch(choice)
        {
            case Zmien_Obiekt://Nr 1 w menu: patrz enum CHOICE
            {
                i=Ile();
                cout<<"Ilosc obiektow dynamicznych: "<<i<<"\n";
                int nr=0;
                cout<<"Podaj nr. obiektu: ";
                cin>>nr;
                if(nr<1)
                {
                    cout<<"Brak obiektu do zmiany!!!\n";
                    break;
                }
                else
                    if(nr>i)
                    {
                        cout<<"Brak obiektu nr: "<<nr<<"\n";
                        break;
                    }
                    else
                        Zmien(tab[nr-1]);
                break;
            }
            case Wyswietl_Obiekt_Format_1://Nr 3 w menu -> enum;
            {
                i=Ile();
                for(int z=0;z<i;z++)
                {
                    cout<<"obiekt nr. "<<z+1<<": ";
                    tab[z]->format_1();
                    cout<<"\n";
                }
                break;
            }
            case Wyswietl_Obiekt_Format_2:
            {   
                i=Ile();
                for(int z=0;z<i;z++)
                {
                    cout<<"obiekt nr. "<<z+1<<": ";
                    tab[z]->format_2();
                    cout<<"\n";
                }
                break;
            }
            case Tworz_Obiekt:
            {
                fflush(stdin);//czyszczenie bufora klawiatury
                if(analiza(h,m,s))//jesli zwraca true...
                {
                ptr=new Zegar(h,m,s);//tworzy obiekt po analizie
                tab[i]=ptr;
                i++;
                ptr=0;
                }
                break;
            }
            case Wyswietl_Obiekt_Format_3:
            {

                i=Ile();//Bada ile obiektow stworzono..
                for(int z=0;z<i;z++)
                {
                    cout<<"obiekt nr. "<<z+1<<": ";
                    tab[z]->format_3();
                    cout<<"\n";
                }
                break;
            }
            case Quit:
            {
                exit=true;
                cout<<"\n\n\t\tK O N I E C\n\n";
                break;
            }
            case Tworz_Kopie:
            {
                i=Ile();
                int x;
                cout<<"Tworzy kopie obiektu na podstawie istniejacego...\n";
                cout<<"Istniejacych obiektow: "<<i;
                if(!Ile())
                {cout<<"\nBrak obiektow!!!\n";break;}
                cout<<"\nPodaj numer obiektu do skopiowania: ";
                cin>>x;
                while(x<1||x>i)
                {
                    cout<<"Napotkano Blad!!!";
                    cout<<"\nPodaj numer obiektu do skopiowania: ";
                    cin>>x;
                }
                tab[i] = new Zegar(*(tab[x-1]));
                break;
            }
            case Ilosc_Obiektow_Dynam:
            {
                cout<<"Ilosc obiektow dynamicznych: "<<Ile()<<"\n";
                break;
            }
            default:
            {
                cout<<"\n\nBledny wybor!\n";
                break;
            }

        }

    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
/****************************************/
void Zmien(Zegar &Obiekt)
{
    int H,M,S;

                cout<<"Podaj godzine: ";
                cin>>H;
                while(H<0||H>23)//Sprawdzanie zakresu godziny-> 0:23
                {
                cout<<"Niepoprawny Format!\nPodaj godzine: ";
                cin>>H;
                }
                Obiekt.setHour(H);//Akcesor modyfikujacy zmienna prywatna itsHour

                cout<<"\nPodaj minute: ";
                cin>>M;
                while(M<0||M>59)//Sprawdzanie zakresu minuty-> 0:59
                {
                cout<<"Niepoprawny Format!\nPodaj minute: ";
                cin>>M;
                }
                Obiekt.setMin(M);//Akcesor modyfikujacy zmienna prywatna itsMin

                cout<<"\nPodaj sekunde: ";
                cin>>S;
                while(S<0||S>59)//Sprawdzanie zakresu sekundy-> 0:59
                {
                cout<<"Niepoprawny Format!\nPodaj sekunde: ";
                cin>>S;
                }
                Obiekt.setSec(S);//Akcesor modyfikujacy zmienna prywatna itsSec

                cout<<"\nZmieniono skladowe obiektu...\n";
}
/**********************************************/

void Zmien(Zegar *Obiekt)
{
    int H,M,S;

                cout<<"Podaj godzine: ";
                cin>>H;
                while(H<0||H>23)//Sprawdzanie zakresu godziny-> 0:23
                {
                cout<<"Niepoprawny Format!\nPodaj godzine: ";
                cin>>H;
                }
                Obiekt->setHour(H);//Akcesor modyfikujacy zmienna prywatna itsHour

                cout<<"\nPodaj minute: ";
                cin>>M;
                while(M<0||M>59)//Sprawdzanie zakresu minuty-> 0:59
                {
                cout<<"Niepoprawny Format!\nPodaj minute: ";
                cin>>M;
                }
                Obiekt->setMin(M);//Akcesor modyfikujacy zmienna prywatna itsMin

                cout<<"\nPodaj sekunde: ";
                cin>>S;
                while(S<0||S>59)//Sprawdzanie zakresu sekundy-> 0:59
                {
                cout<<"Niepoprawny Format!\nPodaj sekunde: ";
                cin>>S;
                }
                Obiekt->setSec(S);//Akcesor modyfikujacy zmienna prywatna itsSec

                cout<<"\nZmieniono skladowe obiektu...\n";

}

/********************************/
int DoMenu()
{
    int choice;
    cout<<"\n\n  **** MENU ****\n\n";
    cout<<"(1) Tworz Obiekt Na Stercie\n";
    cout<<"(2) Zmien Wybrany Obiekt\n";
    cout<<"(3) Wyswietl Obiekty - Format 00:00:00\n";
    cout<<"(4) Wyswietl Obiekty - Format 00.00.00\n";
    cout<<"(5) Wyswietl Obiekty - Format pm/am 00:00\n";
    cout<<"(6) Tworz Kopie Wybranego Obiektu\n";
    cout<<"(7) Ilosc Obiektow Na Stercie\n";
    cout<<"(8) Quit\n";
    cout<<"Wybor: ";
    cin>>choice;
    return choice;
}
/*********************************/
bool analiza(int&h,int&m,int&s)
{

    cout<<"\n\nTworzy obiekt przechowywujacy godzine\n"<<
        "wg. nastepujacych formatow:\n\n"<<
        "\t00:00:00\n"<<
        "\t00.00.00\n"<<
        "\tpm 00:00   (pm lub am)\n\n"<<
        "Podaj godzine: ";
    bool test=true;
    char str[9]={0};

    gets(str);

    for(int x=8;x>=0;x--)

    switch (x)
    {
        case 8:
            {
                if(str[x]=='\0') break;
            }
        case 7:
            {
                if(isdigit(str[x])) s=str[x]-48; break;
            }
        case 6:
            {
                if(isdigit(str[x])) s=s+((str[x]-48)*10); break;
            }
        case 5:
            {
                if(str[x]==':'||str[x]=='.'); break;
            }
        case 4:
            {
                if(isdigit(str[x])) m=str[x]-48; break;
            }
        case 3:
            {
                if(isdigit(str[x])) m=m+((str[x]-48)*10); break;
            }
        case 2:
            {
                if(str[x]==':'||str[x]=='.'||str[x]==' ') break;
            }
        case 1:
            {
                if(isdigit(str[x])) {h=str[x]-48; break;}
                    else
                if(str[x]=='m') break;
            }
        case 0:
            {
                if(isdigit(str[x])) {h=h+(str[x]-48)*10; break;}
                if(str[x]=='a') {h=m;m=s;s='0';break;}
                if(str[x]=='p') {h=m+12;m=s;s='0';break;}
            }
        default:
            {
                cout<<"\nNiepoprawny format!!\n";
                test=false;
                break;
            }
    }

    if(!(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60))
    {
        cout<<"\nNiepoprawny format!!\n";
                test=false;
    }

    return test;
}
/************************************/
int Ile()
{
    int i=0;
                while(tab[i])
                    i++;
    return i;
}

Plik zegar.h

 #ifndef ZEGAR_H
 #define ZEGAR_H
 class Zegar
 {  public:
     Zegar ();
     Zegar (int H,int M,int S);
     Zegar (const Zegar&);
     ~Zegar();  
     int getHour() const {return itsHour;}  
     int getMin()  const {return itsMin;}
     int getSec()  const {return itsSec;}
     void setHour(int Hour)  {itsHour = Hour;}
     void setMin(int Min)   {itsMin = Min;}
     void setSec(int Sec)   {itsSec = Sec;} 
     void format_1 ();
     void format_2 ();
     void format_3 ();
    private:
     int itsHour;
     int itsMin;
     int itsSec;
 }
 #endif 

Plik zegar_cpp

 #include <iostream>
#include "zegar.h" // class's header file
using namespace std;
Zegar::Zegar()//Konstruktor z domyslnymi parametrami: 23:07:04
{             //Nie uzyty w programie :)
    itsHour=23;
    itsMin=7;
    itsSec=4;
    cout<<"Konstruktor klasy Zegar\nObiekt z domyslnymi wartosciami\n";
}
Zegar::Zegar(const Zegar& rhs)
{                             
    itsHour=rhs.setHour();
    itsMin=rhs.setMin();
    itsSec=rhs.setSec();
    cout<<"Konstruktor kopiujacy klasy Zegar\n";
}
Zegar::~Zegar()
{
    cout<<"Destruktor klasy Zegar\n";
}
void Zegar::format_1() 
{   
    cout<<(itsHour/10)<<itsHour%10<<":"<<itsMin/10<<itsMin%10<<":"<<itsSec/10<<itsSec%10<<"\n";
}
void Zegar::format_2() 
{
    cout<<(itsHour/10)<<itsHour%10<<"."<<itsMin/10<<itsMin%10<<"."<<itsSec/10<<itsSec%10<<"\n";
}
void Zegar::format_3() 
{
    if(itsHour>12)
    {   
    int usHour=itsHour-12;
        cout<<"pm ";
        cout<<(usHour/10)<<usHour%10<<":"<<itsMin/10<<itsMin%10<<"\n";      
    }
    else
    {
        cout<<"am ";
        cout<<(itsHour/10)<<itsHour%10<<":"<<itsMin/10<<itsMin%10<<"\n";
    }
}
0

Masz tak bo Dev-CPP jest popierdolony i za instrukcją preprocesora umieszczony jest kometarz i to przeszkadza. Usuń komentarz, a lepiej usuń Dev'a i zainstaluj środowisko, a nie plac zabaw z połamanymi huśtawkami.

0

Jest do tego gotowa struktura:

#include <iostream>
#include <Windows.h>
#include <time.h>
using namespace std;

int main()
{
    time_t czas;

    for(int i = 0; i < 20; ++i)
    {
        time(&czas);
        tm* zegar = localtime(&czas);
        cout << zegar->tm_hour << ":" << zegar->tm_min << ":" << zegar->tm_sec << "\r";
        Sleep(1000);
    }
    system("pause");
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0