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.
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";
}
}