Relógio com data usando Struct

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

[ Hits: 4.359 ]

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

Uma implementação do HeapSort

Fila Sequencial

Binário para decimal

uso do if

Números randômicos


  

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