Relógio com data usando Struct
Publicado por Mauricio Moccelin (última atualização em 22/12/2016)
[ Hits: 4.341 ]
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); }
Conta e substitui caracteres de uma frase
Cálculo de Bhaskara para raízes reais e complexas
Barra de progresso em forma de "roda"
Utilizando ESTRUTURA DE DADOS (REGISTRO) - abordagem simples e rápida
Nenhum comentário foi encontrado.
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta