Usando lenguaje C para implementar un calendario perpetuo
#include
#include
#include
# incluir
año largo;
int fecha[12][6][7];
int day_tbl[ ][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31 ,30,31,30,31}};//El último día de cada mes
char *str[]={"Enero", "Febrero", "Marzo", "Abril" ," mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
void nian(año largo,ARCHIVO *fp)
{
int i,j,n=0,t;
char s[5][ 23];//Piense en los gráficos digitales como dos -matriz dimensional
void fyear(int t,int n,char s[5][23]);
for(i =0;i<5;i++){
for(j=0;j<23;j++){
si(((i==1)||(i ==3))&&((j>= 1&&j<=3)||(j>=7&&j<=9)||(j>=13&&j<=15)||(j>=19&&j<=21)) )
s[i ][j]=' ';
si no((j==5)||(j==11)||(j==17 ))
s[ i][j]=' ';
else
s[i][j]='*';
}//Juzga la posición de '*'
}
hacer{
t=año%10;
año=año/10;
faño(t,n,s);
n++;
}mientras(año!=0);
if(n<4) {
para(i=0;i<5;i++){
para(j=0;j<24-6* n;j++)
s[i][j]=' ';
}
}
for(i=0 ;i<5;i++){ p>
printf(" ");
fprintf(fp,"%s"," ");
for( j=0;j<23;j++) {
printf("%c",s[i][j]);
fprintf(fp,"%c", s[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
}//Utiliza '*' para mostrar el año
void fyear(int t,int n,char s[5][23]) p>
{<
/p>
int i,j;
switch(t){
caso 0:
for(j=19-6*n; j<22-6*n;j++)
s[2][j]=' ';
descanso;
caso 1:
para(i=0;i<5;i++){
para(j=18-6*n;j<22-6*n;j++)
s[i][j]=' ';
}
descanso;
caso 2:
s[1] [18-6*n]=' ';
s[3][22-6*n]=' ';
descanso;
caso 3:
s[1][18-6*n]=' ';
s[3][18-6*n]=' ';
descanso;
caso 4:
for(j=19-6*n;j<22-6*n;j++){
s[0][j]=' ';
s[4][j]=' ';
}
s[3][18 -6*n]=' ';
s[4][18-6*n]=' ';
descanso;
caso 5:
s[1][22-6*n]=' ';
s[3][18-6*n]=' ';
romper;
caso 6:
s[1][22-6*n]=' ';
romper;
caso 7:
for(i=1;i<5;i++){
for(j=18-6*n;j<22-6*n;j++ )
s[i][j]=' ';
}
descanso;
caso 8:
ruptura;
caso 9:
s[3][18-6*n]=' ';
ruptura;
}
}//Juzga los espacios en los números gráficos
long int f(long año, int mes)
{
if(mes<3) devuelve año-1;
else devuelve año;
}
long int g(int mes)
{
if(mes<3) devolver mes+13;
else devolver mes+1;
}
long int n(int año,int mes,int día)
{
return 1461L*f(año,mes)/4+153L*g(mes)/5+ día ;
}
int w(int año,int mes,int día)
{
return(int)(( n (año,mes,día)%7-621049L%7+7)%7);
}//Calcular la posición de la fecha de consulta
void yueli(int m ,ARCHIVO *fp)
{
struct tm *local;
long t;
long i,sw,wd,day,leap,k,j;
char title[]=" día uno dos tres cuatro cinco seis";
void rili(largo año,FILE *fp);
tiempo(&t);
local = localtime( &t);
local->tm_year = local->tm_year + 1900;
local->tm_mon ++;
Año=local->tm_year;
if(m==1){
printf("\t\t\t %s\n",str[local->tm_mon-1]); p> p>
fprintf(fp,"\t\t\t %s\n",str[local->tm_mon]);
printf("\t\t _________________________\n ") ;
fprintf(fp,"\t\t _________________________\n");
printf("\t\t %s\n",título); p>
fprintf(fp,"\t\t %s\n",title);
sw=w(local->tm_year,local->tm_mon,1);
salto=local->tm_year%4==0&&local->tm_year%100||local->tm_year%400==0;
for(i=0;i<12;i++ )
for(j=0;j<6;j++)
for(k=0;k<7;k++)
fecha[i] [j ][k]=0;
for(wd=0,day=1;day<=day_tbl[leap][local->tm_mon-1];day++)
{
date[local->tm_mon][wd][sw]=day;
sw=++sw%7;//Siete días a la semana, contando desde 0 a 6
if(sw==0) wd++;//La tabla de fechas tiene una fila cada siete días y una nueva fila comienza el domingo
}
for(j=0;j <6;j++){
printf("\t\t ");
fprintf(fp,"\t\t ") ;
for (k=0;k<7;k++)
if(date[local->tm_mon][j][k]){
printf("%3d ",fecha [local->tm_mon][j][k]);
fprintf(fp,"%3d ",fecha
[local->tm_mon][j][k]);
}
else{
printf(" ");
fprintf(fp,"%s"," ");
}
printf("\n");
fprintf(fp,"\ n");
}
printf("\t\t Hoy es: %ld año %ld mes %ld día,",local->tm_year,local->tm_mon ,local->tm_mday);
fprintf(fp,"\t\t Hoy es: %ld año %ld mes %ld día,",local->tm_year,local->tm_mon,local- >tm_mday);
switch(local->tm_wday){
caso 0:printf("Domingo\n");fprintf(fp,"Domingo\n");descanso ;
caso 1:printf("Lunes\n");fprintf(fp,"Lunes\n");break;
caso 2:printf("Martes\n" n");fprintf(fp,"Martes\n");descanso;
caso 3:printf("Miércoles\n");fprintf(fp,"Miércoles\n");descanso;
caso 4:printf("Jueves\n");fprintf(fp,"Jueves\n");descanso;
caso 5:printf("Viernes\n"); fprintf(fp,"Viernes\n");descanso;
caso 6:printf("Sábado\n");fprintf(fp,"Sábado\n");descanso;
default:printf("error\n");
}
printf(" \t\tLa hora actual es: %ld hora %ld minuto %ld segundo\n ",local->tm_hour,local->tm_min,local->tm_sec);
fprintf(fp," \t\tLa hora actual es: %ld hora %ld minuto %ld segundo\n" ,local->tm_hour,local->tm_min,local->tm_sec);
}//Muestra la hora actual del sistema
if(m==2)
rili(local->tm_year,fp);
}
void rili(año largo,FILE *fp)
{ int sw,leap , i,j,k,wd,día;
char title[]="日一二三四五六";
sw=w(año,1,1)
salto=año%4==0&&year%100||año%400==0;//Año bisiesto
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)<
/p>
date[i][j][k]=0;//Establece la tabla de fechas en 0
nian(year,fp);
for( i= 0;i<12;i++)//Doce meses en un año
for(wd=0,day=1;day<=day_tbl[leap][i];day++)
{//Rellene la fecha del mes i+1 en la tabla de fechas
date[i][wd][sw]=day;
sw=++ sw%7 ;//Siete días por semana, contando de 0 a 6
if(sw==0) wd++;//La tabla de fechas tiene una fila cada siete días y una nueva fila comienza el Domingo
}
for(i=0;i<11;i+=2)
{//Primero calcula el número máximo de semanas en el mes i +1 y mes i+2
// for(wd=0,k=0;k<7;k++)//La sexta fila de la tabla de fechas tiene una fecha, luego wd!=0
// wd+=fecha [i][5][k]+fecha[i+2][5][k];
// wd=6; p>
printf("\t\t %s\t\t\t\t%s\n",str[i],str[i+1]);
fprintf( fp,"\t\t%s\t\ t\t\t%s\n",str[i],str[i+1]);
printf(" _________________________ _________________________\n ");
fprintf( fp," _______________________________ ___________________________\n");
printf(" %s %s \n",título,título);
fprintf(fp," %s %s \ n",título,título);
for(j=0;j<6;j++)
{
printf(" ");// Genera cuatro caracteres en blanco
//La columna de la izquierda es el mes i+1, la columna de la derecha es el mes i+2
fprintf(fp," ");
for(k=0;k<7;k++)
if(fecha[i][j][k]){
printf("%4d", fecha[i][j][k]);
fprintf(fp,"%4d",fecha[i][j][k] ]);
} p>
else{
printf(" ");
fprintf(fp," "); p>
}
printf(" ");//Emite diez caracteres en blanco
fprintf(fp," ");
for(k =0;k<7;k++)
if(fecha[i+1][j][k]){
printf("%4d",fecha[i+ 1][j][k]);
p>fprintf(fp,"%
4d",fecha[i+1][j][k]);
}
else{
printf(" ");
fprintf(fp," ");
}
printf(" \n");
fprintf(fp," \n" );
}
//Escriba Enter para generar el calendario de la siguiente línea
}
}
void main()
{
ARCHIVO *fp;
int elección;
if((fp=fopen(" E: \\out1.txt","w"))==NULL){
printf("¡error de apertura!\n");
exit(0);
}
yueli(1,fp);
while(1){
printf("¡Bienvenido a este programa! Por favor sigue las indicaciones para seleccionar \n");
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -*-* -*\n");
printf("Presione [1] para ver la información del día actual y el calendario de este mes\n");
printf(" Presione [2] para ver el calendario del año actual \n");
printf("Presione [3] para ver el calendario de un año determinado\n");
printf ("Presiona [4] para ver el calendario del año siguiente\n");
printf("Presiona [5] para ver el calendario del año anterior\n");
printf("Presione [0] para salir\n");
printf("*-*-*-*-*-*-*-*-*-*-*-*-* -*-*-*-*-*-*\n"); p>
printf("Ingrese su elección y presione Enter para finalizar:");
scanf("% d",&choice);
switch(choice){
caso 1:yueli(1,fp);break;
caso 2:yueli(2 ,fp);break;
caso 3:
p>printf("Ingrese el año que desea consultar: ");//Ingrese el año
scanf("%d",&Año);
rili(Año,fp);
break;
caso 4:rili(++Año ,fp);break;
case 5:rili(--Year, fp);break;
case 0:printf("¡Gracias por tu uso, adiós! \n");retorno;
}
}
fclose(fp);
retorno;
}