Relógio com data usando Struct

Publicado por Mauricio Moccelin (última atualização em 22/12/2016)

[ Hits: 4.358 ]

Homepage: https://www.linkedin.com/in/mauriciomoccellin/

Download 6542.Relogio.cpp




Este script é uma atualização do Relógio Digital que havia postado  a um tempo atrás. As atualizações tratam os dados em variáveis personalizadas para armazenar hora e também a data.

O poder de processamento da máquina afeta a precisão dos resultados na hora. No tempo de uma horas tens-se uma atraso de aproximadamente 1,1 minuto. Está sendo trabalhado para embutir esta ideia em um sistema embarcado.

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

//diretivas de pre processamento
#define DIA      23
#define MIN    59
#define ZERO    0
#define MES_DIA 30
#define MES    12

            /****************************************************************************************************
            *   RELOGIO DIGITAL - UPDATE  vercao.: 1.1                                                         
            *                                                                                                   
            *   Mauricio Moccelin - mauriciomoccellin@hotmail.com                                              
            *                                                                                                  
            *   Engenharia da Computacao - 2016 - Flores Da Cunha                                                                                                                                                 
            *   Chamada de Funcoes por main();                                                                  
            *                                                                                                  
            ****************************************************************************************************/
/*
* Vercao 1.1 -> esta atualizacao trata os dados com estruturas, tambem ha um modulo adicional que informa a data
*/

//----------------------------------------------------------------------------------------------------------------


/*
 * Declaração de variaveis personalizadas
 */
 
struct Time {
   int hora,minuto,segundo;
};

struct Date{
    int dia,mes,ano;
};

struct Time  time;
struct Date  data;

// prototipacao de modulos
void cabecalho(void);
void getTime(void);
void getData(void);
void setTime(Time time);
void setDate(Date data);
int validatesTime(Time time);
int validatesDate(Date data);
int newAjusteTime(void);
int newAjusteDate(void);
int alterClockAndDate(Time *time);
//-----------------------------------------

void cabecalho(void)
{
   printf("\t            - DATA E HORA - DIGITAL - \n\n");
    puts(" UniFtec Faculdades / Caxias do Sul - Engenharia da Computação");
    puts(" ");
}

int alterClockAndDate(Time *time, Date *data)
{   
   /*
    * Modulo para atualza o valor da variavel time em tempo real na memoria
    */
    for (;;){// criando com o laco for frames++ para atualizar hora
        Sleep(1000);
        ++time->segundo;
        if (time->segundo > MIN){
            time->minuto++;
            time->segundo = 0;
        }
        if (time->minuto > MIN){
            time->hora++;
            time->minuto = 0;
        }
        if (time->hora > DIA){
            time->hora = 0;
            //tratando a data
         data->dia++;
            if (data->dia > MES_DIA){
                data->mes++;
                data->dia = 1;
                if(data->mes > MES){
                    data->ano++;
                    data->mes = 1;
            }
         }
        }
        // limpa a tela e imprime a hora e data atualizada 
        system("cls || clear");
        setTime(*time);
        setDate(*data);
    }
}

int validatesTime(Time time)
{
   /*
    * Modulo para validar a leitura da time, garantir que a hora seja valida
    */
   const int MAX_HORA  = 24, MAX_MINUTO_SEGUNDO = 60;
   if (time.hora < ZERO || time.minuto < ZERO || time.segundo < ZERO || time.hora > MAX_HORA || time.minuto > MAX_MINUTO_SEGUNDO || time.segundo > MAX_MINUTO_SEGUNDO){
        return true;
    }else
        return false;
}

int validatesDate(Date data)
{
   /* 
    * Modulo para validar data
   */   
   int menor = 1,maior_mes=12,maior_dia=30, maior_ano=5000;
   if (data.ano < menor || data.mes < menor || data.dia < menor || data.dia > maior_dia || data.mes > maior_mes || data.ano > maior_ano || data.ano > maior_ano ){
      return true;
   }else{
      return false;   
   }
}

int newAjusteTime(void)
{
   /*
    * Caso validaTime() retorne "false" 
    * Este Modulo da opcao ao usuario de tentar ajustar a hora novamente ou sair da aplicacao
    */
   int op;
   do {
        puts("\nOs valores devem ser inteiros positivos");
        puts("(1) tentar Ajustar Novamente");
        puts("(0) Sair:");
        scanf("%d",&op);
        fflush(stdin);
        system("cls || clear");   
   }while (op < 0 || op > 1);
   
   switch(op){
        case 1:
         break;
        case 0:
          exit(0);
          break;
    }
}

int newAjusteDate(void)
{
   /*
    * Caso validaTime() retorne "false" 
    * Este Modulo da opcao ao usuario de tentar ajustar a hora novamente ou sair da aplicacao
    */
   int op;
   do {
      fflush(stdin);
      puts ("Entre com datas validas (dd/mm/aaaa)");
        puts("(1) Informar Data Novemente");
        puts("(0) Sair:");
        scanf("%d",&op);
        fflush(stdin);
        system("cls || clear");   
   }while (op < 0 || op > 1);
   
   switch(op){
        case 1:
         break;
        case 0:
          exit(0);
          break;
    }
}

void getTime(Time *time)
{   
   /*
    * modulo para obeter hora de arranque para o programa
    */
   do{
      cabecalho();
      fflush(stdin);
      puts("Entre com a Hora");
      scanf("%d",&time->hora);
      fflush(stdin);
      puts("Entre com os Minutos");
      scanf("%d",&time->minuto);
      fflush(stdin);
      puts("Entre com os segundos");
      scanf("%d",&time->segundo);
      fflush(stdin);
      if (validatesTime(*time)){
         newAjusteTime();
      }
   }while(validatesTime(*time));
}

void getData(Date *data)
{
   /*
    * Modulo para obter data de arranque para o programa
    */
   do{
      fflush(stdin);
      puts ("Entre com datas validas (dd/mm/aaaa)");
      puts("Digite o dia : ");
      scanf("%d",&data->dia);fflush(stdin);
      puts("Digite o mes : ");
      scanf("%d",&data->mes);fflush(stdin);
      puts("Digite o ano : ");
      scanf("%d",&data->ano);fflush(stdin);
      if (validatesDate(*data)){
         newAjusteDate();
      }
   }while(validatesDate(*data));
}

void setTime(Time time)
{
   /*
    * Modulo para imprimir (hora) da struct Time
    * Esta modulo é invocada a cada passagem no laço for do modulo alterClock(); dando um sentido de frames
    */
   printf("%.2d/%.2d/%.2d",time.hora,time.minuto,time.segundo);
}

void setDate(Date data)
{
   /*
    * Modulo para imprimir (data) da struct Date
    * Esta modulo é invocada a cada passagem no laço for do modulo alterClock(); dando um sentido de frames
    */
   printf(" %2.d-%2.d-%4.d\n", data.dia,data.mes,data.ano);   
}

int main (void)
{
   /*
    * Inicia o programa
    */
   getTime(&time);
   getData(&data);
   alterClockAndDate(&time,&data);
}

Scripts recomendados

impar ou par...

Jogo da forca

Soma dos dígitos de um número decimal

seu segundo programa em C

Biblioteca do Calculo do Retangulo em C++


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts