Relógio com data usando Struct
Publicado por Mauricio Moccelin (última atualização em 22/12/2016)
[ Hits: 4.379 ]
Homepage: https://www.linkedin.com/in/mauriciomoccellin/
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.
#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); }
Manipuladores de bases numéricas
Verificar intervalo de números
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)