Relógio com data usando Struct
Publicado por Mauricio Moccelin (última atualização em 22/12/2016)
[ Hits: 4.202 ]
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); }
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (18)
chamados para entidades GLPI 10 (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba