#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
void printmonth(int m);
void printhead(int m);
int daysofmonth(int m);
int firstday(int y);
int year,weekday;
int main()
{
 int i;
 cout<<"请输入您要查询的年份:";
 cin>>year;
 weekday = firstday(year);
    cout<<endl<<endl;
 cout<<"                               "<<year<<"年"<<endl;
 for(i=1;i<=12;++i)
 {
  printmonth(i);
  cout<<endl;
 }
    cout<<endl<<endl;
 return 0;
}
void printmonth(int m)                         //打印每月日历   //重点!mvp!
{
    int i ,days;
 printhead(m);
 days=daysofmonth(m);
 for(i=1;i<=days;i++)
 {
  cout<<setw(8)<<i;
        weekday = (weekday+1)%7;
  if(weekday == 0)  
   cout<<endl;
 }
}
void printhead(int m)                          //打印每月的日历头(判定起始位置)
{
 int i;
 cout<<endl<<m<<"月   日      一      二      三      四      五      六"<<endl;//每个字隔6个空格,每个字相当于2个空格
 for(i=0;i<weekday;++i)
  cout<<"        "; //共8个空格。
}
int firstday(int y)                           //判断某年元旦是星期几
{
 double s;
 s = floor((double)(year-1 + (year-1)/4 - (year-1)/100 + (year-1)/400 + 1));
 return (int)s%7;
}
int daysofmonth(int m)                         //每月的天数
{
 switch(m)
 {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
  return 31;
 case 4:
 case 6:
 case 9:
 case 11:
  return 30;
 case 2:
  if ( (year%4==0 && year%100!=0 )|| (year%400 == 0)  ) 
   return 29;
  else
   return 28;
 default:
  return 0;
 }
}



 
											





 
	    

 
	



