/*
* 已知1900/1/1星期一 模拟命令 cal 08 2018功能
*/
#include <stdio.h>
int monthOfDay(int year,int month);
void showCal(int year,int month,int days);
int main(int argc,char *argv[])
{
int i,year,month,days=0;
//\033[2J //"clear"
printf("\033[1;1H\033[2Jinput year and month :");
scanf("%d%02d",&year,&month);
if(year<1900 || month<1 || month>12)
{
fprintf(stderr,"input year or month error!\n");
return 1;
}
//1900 --- year 整年的总天数
for(i=1900;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0)){
days+=366;
}else{
days+=365;
}
}
//1900/1/1----year/month
for(i=1;i<month;i++)
{
days=days+monthOfDay(year,i);
}
//1900/1/1----year/month/1
days+=1;
//printf(">>>>>>%d\n",days%7);
//show
showCal(year,month,days);
return 0;
}
int monthOfDay(int year,int month)
{
int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%400==0||(year%4==0&&year%100!=0))
{
day[1]=29;//二月
}
return day[month-1];
}
void showCal(int year,int month,int days)
{
int i,mdays;
mdays=monthOfDay(year,month);
printf(" %02d %d \n",month,year);
printf("日 一 二 三 四 五 六\n");
//把1号置于正确的位置
for(i=0;i<days%7;i++)
{
printf("%2s "," ");
}
//
for(i=1;i<=mdays;i++)
{
printf("%2d ",i);
if(days%7==6){
putchar('\n');
}
days++;
}
putchar('\n');
}