//万年历
#include "stdio.h"
#include "math.h"
struct month
{
int year;
int mon;
int pj;
};
void print_cal(month m[],int a[],int n)
{
int mo=0,si=0,sj,i,j,bi,t,n_end[12],k=0,col,row,temp;
temp=12/n;
char c,q;
for(row=0;row<temp;row++)
{
k=0;
for(i=0;i<2;i++)
{
if(k==0)
{
for(j=0;j<n;j++)
{
printf("%10d %-10d",m[j+row*n].year,m[j+row*n].mon);
}
k=1;
printf("\n");
}
else
{
for(j=0;j<n;j++)
{
printf(" 日 一 二 三 四 五 六");
}
printf("\n\n");
}
}
for(bi=0;bi<6;bi++)
{
if(bi==0)
{
for(mo=0+row*n;mo<n+row*n;mo++)
{
for(t=0;t<m[mo].pj;t++)
{
printf(" ");
}
k=1;
for(j=m[mo].pj;j<7;j++)
{
printf("%3d",k++);
}
n_end[mo]=k-1;
}
printf("\n");
continue;
}
for(mo=0+row*n;mo<n+row*n;mo++)
{
k=n_end[mo]+1;
for(t=0;t<7;t++)
{
if(k<=a[mo])
{
printf("%3d",k++);
}
else
{
if(bi==5)
{
for(q=t;q<7;q++)
{
printf(" ");
}
break;
}
if(bi==4)
{
for(q=t;q<7;q++)
{
printf(" ");
}
break;
}
}
}
n_end[mo]=k-1;
}
printf("\n");
}
}
printf("enter 'q' to quit out !\n");
scanf("%s",&q);
while(q!='q')
{
printf("error \n");
scanf("%s",&q);
}
}
void pri_calendar(int yea)
{
month m[12];
int week_ex[28]={6,1,2,3,4,6,0,1,2,4,5,6,0,2,3,4,5,0,1,2,3,5,6,0,1,3,4,5};
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int abs_year;
int i,j,n;
bool leap_year;
if(yea>=2000)
{
j=(yea-2000)%28;
}
else
{
j=28-(2000-yea)%28;
}
leap_year=(yea%4==0&&yea%100!=0||yea%400==0);
if(leap_year)
{
a[1]=29;
}
j=week_ex[j];
for(i=0;i<12;i++)
{
m[i].year=yea;
m[i].mon=i+1;
m[i].pj=j;
j=(j+a[i])%7;
}
printf("enter the format value(format value=1,2,3,4,6,12).\n");
scanf("%d",&n);
if(12%n!=0)
{
printf("the format value is wrong,enter the format value again .\n");
scanf("%d",&n);
}
print_cal(m,a,n);
}
void main()
{
int yea;
printf("enter the year :\n");
scanf("%d",&yea);
pri_calendar(yea);
}
评论0