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