Relógio com data usando Struct
Publicado por Mauricio Moccelin (última atualização em 22/12/2016)
[ Hits: 4.629 ]
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);
}
Utilizando ponteiros na manipulação de strings
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (38)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (1)
Mint Xfce não mantém a conexão no wi-fi (2)









