效果展示
代码
int MonthOfYear[2][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}};
void PrintCalender(int iyear,int imonth);
int CheckYear(int y);
int main()
{
int year,month;
int k,i;
char ch='y';
printf("请输入年份(0000-9999):\n");
scanf("%d",&year);
printf("请输入月份(1-12):\n");
scanf("%d",&month);
PrintCalender(year,month);
for(i=0;ch=='y';i++)
{
printf("%c",24);
printf(":上一年\n");
printf("%c",25);
printf(":下一年\n");
printf("%c",27);
printf(":上一月\n");
printf("%c",26);
printf(":下一月\n");
getch();
k=getch();
switch(k)
{
case KEYNUMUp:
{
system("cls");
year--;
PrintCalender(year,month);
printf("是否继续更改?(y/n)");
getchar();
scanf("%c",&ch);
break;
}
case KEYNUMDown:
{
system("cls");
year++;
PrintCalender(year,month);
printf("是否继续更改?(y/n)");
getchar();
scanf("%c",&ch);
break;
}
case KEYNUMLeft:
{
system("cls");
month--;
PrintCalender(year,month);
printf("是否继续更改?(y/n)");
getchar();
scanf("%c",&ch);
break;
}
case KEYNUMRight:
{
system("cls");
month++;
PrintCalender(year,month);
printf("是否继续更改?(y/n)");
getchar();
scanf("%c",&ch);
break;
}
}
}
}
void PrintCalender(int iyear,int imonth)
{
int sumday=0,w,i,nowday=1,n;
char wday[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
for(i=0;i<imonth-1;i++)
sumday+=MonthOfYear[CheckYear(iyear)][i];
sumday++;
sumday+=(iyear-1+(iyear-1)/4-(iyear-1)/100+(iyear-1)/400);
w=sumday%7;
printf("%d",w);
printf(" %d 年 %d 月 \n",iyear,imonth);
//system("pause");
printf("%15c",' ');
for(i=0;i<7;i++)
printf("%5s",wday[i]);
printf("\n");
switch(w)
{
case 0:printf("%20d",nowday);break;
case 1:printf("%25d",nowday);break;
case 2:printf("%30d",nowday);break;
case 3:printf("%35d",nowday);break;
case 4:printf("%40d",nowday);break;
case 5:printf("%45d",nowday);break;
case 6:printf("%50d",nowday);break;
}
if(w==6)
printf("\n%15c",' ');
n=MonthOfYear[CheckYear(iyear)][imonth-1];
for(i=1;i<=n;i++)
{
sumday+=1;
w=sumday%7;
//printf("%d",w);
nowday++;
if(nowday>n)
break;
if(w==6)
{
printf("%5d",nowday);
printf("\n");
printf("%15c",' ');
}
else
printf("%5d",nowday);
}
printf("\n");
}
int CheckYear(int y)
{
if(y%400==0||y%4==0&&y%100!=0)
return 1;
else return 0;
}