domingo, 15 de outubro de 2017

Relógio digital em C com janela gráfica

Depois que converti para linguagem C, o relógio digital
criado originalmente em java, por mim mesmo, não parei nisto,
e pensei: "Ficaria ainda melhor se utilizasse
uma biblioteca gráfica no lugar do prompt de comando (cmd)"
e fazendo uso da mesma IDE, o eclipse é claro, 
comecei novamente a programar, e escolhi a biblioteca
graphics.h, para os gráficos, e os resultados apresento
agora no vídeo abaixo, acompanhe:

Veja abaixo o vídeo do programa:





Veja abaixo o código do programa:


#include <graphics.h>
#define ENTER 13
int Verifica_Horas ( );
int Verifica_Minutos ( );
int Verifica_Segundos ( );
static int hora = -1, min, seg;

char buf   [ 10 ];
char buf_1 [ 10 ];
char buf_2 [ 10 ];
char buf_3 [ 10 ];

void imp_jan ( int x, int y, int lin, int col, int n ) {
     for ( int i = 0; i <= n; i++ ) {
         line ( x + i, y, x + i, y + lin );
         line ( x + col + i, y, x + col + i, y + lin );
         line ( x, y + i, x + col, y + i );
         line ( x, y + i + lin, x + col + n, y + i + lin );
     }
}
int main ( );
int lt = 0, y = 0;
int a = 0, b = 0, c = 0;
int Format ( char vet [ 50 ] ) {
     int d = 0, i, i_ = 1, k = 0, t;
     char letra = '\0';
     for ( i = 0; i < 50; i++ )
         vet [ i ] = ' ';
     do {
         setcolor ( 9 );
         imp_jan ( 1, 96 * i_ - 97, 445, 580, 20 );
         d++;
         letra = getch ( );
         vet [ k ] = letra;
         k++;
         t = strlen ( vet );
         if ( a == 1 ){
              Verifica_Horas ( );
              setcolor ( LIGHTRED );
              outtextxy ( 410, 70, vet );
         }
         if ( a == 2 ){
              Verifica_Minutos ( );
              setcolor ( LIGHTRED );
              outtextxy ( 410, 100, vet );
         }
         if ( a == 3 ){
              Verifica_Segundos ( );
              setcolor ( LIGHTRED );
              outtextxy ( 410, 130, vet );
         }
         if ( letra == ENTER ) {
              break;
         }
     } while ( d < 50 );
     return 0;
}
void Inform ( ) {
     settextstyle ( GOTHIC_FONT, 0, 2 );
     setcolor ( LIGHTBLUE );
     outtextxy ( 130, 330, "Por: " );
     setcolor ( WHITE );
     outtextxy ( 200, 330, "Samuel Lima" );
     setcolor ( LIGHTMAGENTA );
     outtextxy ( 130, 350, "sa_sp10@hotmail.com" );
     setcolor ( YELLOW );
     outtextxy ( 170, 410, "MUITO OBRIGADO" );
}
int acerta_hora ( ) {
     if ( hora > 23 ) {
         return true;
     }
     return false;
}
int acerta_min ( ) {
     if ( min > 59 ) {
         return true;
     }
     return false;
}
int acerta_seg ( ) {
     if ( seg > 59 ) {
         return true;
     }
     return false;
}
int Verifica_Horas ( ) {
     cleardevice ( );
     setcolor ( LIGHTRED );
     moveto ( 160, 40 );
     outtext ( "RELÓGIO DIGITAL EM C" );
     setcolor ( LIGHTBLUE );
     outtextxy ( 230, 70, "Hora atual =>" );
     if ( ( hora >= 0 && hora <= 23 ) ) {
         setcolor ( LIGHTRED );
         sprintf ( buf_1, "%d", hora );
         outtextxy ( 410, 70, buf_1 );
     }
     a = 1;
     return 1;
}
int Verifica_Minutos ( ) {
     setcolor ( LIGHTBLUE );
     outtextxy ( 230, 100, "Minutos =>" );
     if ( ( min >= 1 && min <= 59 ) ) {
         setcolor ( LIGHTRED );
         sprintf ( buf_1, "%d", min );
         outtextxy ( 410, 100, buf_1 );
     }
     a = 2;
     return 2;
}
int Verifica_Segundos ( ) {
     setcolor ( LIGHTBLUE );
     outtextxy ( 230, 130, "Segundos =>" );
     if ( ( seg >= 1 && seg <= 59 ) ) {
         setcolor ( LIGHTRED );
         sprintf ( buf_1, "%d", seg );
         outtextxy ( 410, 130, buf_1 );
     }
     a = 3;
     return 3;
}
int main ( ) {
     int i_ = 1;
     initwindow ( 600, 463, "RELÓGIO DIGITAL EM C" );
     settextstyle ( 10, 0, 2 );
     int erro = 0;
     char str_1 [ 4 ];
     char str_2 [ 4 ];
     char str_3 [ 4 ];
     if ( hora == 0 )
         hora = ' ';
     do{
         Verifica_Horas ( );
         setcolor ( LIGHTRED );
         Format ( str_1 );
         hora = atoi ( str_1 );
         if ( *str_1 < '0' || *str_1 > '9' || hora == -1 ) {
              printf("%d", hora );
              Beep ( 1000, 100 );
              erro = 1;
              if ( hora == 0 )
                   hora = ' ';
              continue;
         }
         if ( acerta_hora ( ) ) {
              Beep ( 1000, 100 );
              erro = 1;
              continue;
         }
         break;
     } while ( ( hora < 0 || hora > 23 ) );
     ///////////////////////////////////////////////
     do{
         Verifica_Horas ( );
         Verifica_Minutos ( );
         if ( erro == 2 ) {
              Verifica_Minutos ( );
         }
         setcolor ( LIGHTRED );
         Format ( str_2 );
         min = atoi ( str_2 );
         if ( *str_2 < '0' || *str_2 > '9' || min == 0 ) {
              Beep ( 1000, 100 );
              erro = 2;
              continue;
         }
         if ( acerta_min ( ) ) {
              Beep ( 1000, 100 );
              erro = 2;
              continue;
         }
         break;
     } while ( ( min < 1 || min > 59 ) );
     ////////////////////////////////////////////////
     do{
         Verifica_Horas ( );
         Verifica_Minutos ( );
         Verifica_Segundos ( );
         if ( erro == 3 ) {
              Verifica_Segundos ( );
         }
         setcolor ( LIGHTRED );
         Format ( str_3 );
         seg = atoi ( str_3 );
         if ( *str_3 < '0' || *str_3 > '9' || seg == 0 ) {
              Beep ( 1000, 100 );
              erro = 3;
              continue;
         }
         if ( acerta_seg ( ) ) {
              Beep ( 1000, 100 );
              erro = 3;
              continue;
         }
         break;
     } while ( ( seg < 1 || seg > 59 ) );
     ///////////////////////////////////////////////
     cleardevice ( );
     imp_jan ( 1, 96 * i_ - 97, 445, 580, 20 );
     setcolor ( LIGHTRED );
     moveto ( 170, 40 );
     outtext ( "RELÓGIO DIGITAL EM C" );
     setcolor ( LIGHTBLUE );
     outtextxy ( 130, 100, "Horas         minutos    segundos" );
     setcolor ( WHITE );
     outtextxy ( 160, 130, "H                M                 S");
     /*
              Este laço repetidor funciona como contador
              Vai incrementando até que atinge o número máximo
              em cada operação.
      */
     while ( 1 ) {
         Sleep ( 1000 );
         seg++;
         if ( seg > 59 ) {
              seg = 0;
              min++;
         }
         if ( min > 59 ) {
              min = 0;
              hora++;
         }
         if ( hora > 23 ) {
              hora = 0;
         }
         settextstyle ( 10, 0, 8 );
         setcolor ( RED );
         if ( ( hora >= 0 && hora <= 9 ) ){
              outtextxy ( 100, 160, "0" );
              sprintf ( buf_1, "%d", hora );
              outtextxy ( 150, 160, buf_1 );
         }
         ////////////////////////////////////
         if ( ( hora >= 10 && hora <= 59 ) ){
              sprintf ( buf_1, "%d", hora );
              outtextxy ( 100, 160, buf_1 );
         }
         outtextxy ( 200, 160, ":" );
         ////////////////////////////////////
         if ( ( min >= 0 && min <= 9 ) ){
              outtextxy ( 240, 160, "0" );
              sprintf ( buf_2, "%d", min );
              outtextxy ( 290, 160, buf_2 );
         }
         if ( ( min >= 10 && min <= 59 ) ){
              sprintf ( buf_2, "%d", min );
              outtextxy ( 240, 160, buf_2 );
         }
         outtextxy ( 340, 160, ":" );
         ////////////////////////////////////
         if ( ( seg >= 0 && seg <= 9 ) ){
              outtextxy ( 390, 160, "0" );
              sprintf ( buf_3, "%d", seg );
              outtextxy ( 440, 160, buf_3 );
         }
         ////////////////////////////////////
         if ( ( seg >= 10 && seg <= 59 ) ){
              sprintf ( buf_3, "%d", seg );
              outtextxy ( 390, 160, buf_3 );
         }
         ////////////////////////////////////
         Inform ( );
     }
}