#include<iostream>
#include<stdlib.h>
#include<iomanip>
using namespace std;
void years_and_month(int y,int m);//将日历显示出来的无返回值函数
int year_leap(int n);//判断闰年的函数,所以是有返回值
int main()
{
int year,month;
while(1)
{
system("color a");//改变字体颜色
cout<<"请输入年和月:";
cin>>year>>month;
years_and_month(year,month);
system("pause");
system("cls");
}
return 0;
}
void years_and_month(int y,int m)
{
long int year_days=0;//从公元第一年开始
int year_starts=1,per_year_starts;
int months[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
while(year_starts<y)//从这里开始统计
{
if(year_leap(year_starts))//调用函数years_leap,判断years_starts是否为闰年
per_year_starts=366;
else
per_year_starts=365;
year_starts++;
year_days=year_days+per_year_starts;
}
for(int i=0;i<m-1;i++)
year_days=months[i]+year_days;
switch(m)
{
case 1:
cout<<"January\n";break;
case 2:
cout<<"February\n";break;
case 3:
cout<<"March\n";break;
case 4:
cout<<"April\n";break;
case 5:
cout<<"May\n";break;
case 6:
cout<<"June\n";break;
case 7:
cout<<"July\n";break;
case 8:
cout<<"August\n";break;
case 9:
cout<<"September\n";break;
case 10:
cout<<"October\n";break;
case 11:
cout<<"November\n";break;
case 12:
cout<<"December\n";break;
}
cout<<" Mon Tue Wed Thu Fri Sat Sun\n";
int t,day;
t=year_days%7;//从公元开始统计下来的天数除以7,用来控制每一个星期空几天
if(t!=0)
for(int i=0;i<t;i++)
cout<<" ";//先空4个格
day=1;//每个月的第一天的号数
if(year_leap(y)&&m==2)//当到2月份的时候,要判断输入的年是否为闰年
while(day<months[12])
{
if(day>1)
if(year_days%7==0)//控制一个星期为7天的时候,自动换行
cout<<endl;
cout<<setw(4)<<day;//制造日历的间隔
year_days++;//保持上面换行能够成功
day++;
}
else
while(day<=months[m-1])//用事先temp在for语句里面的值控制每个月的天数
{
if(day>1)
if(year_days%7==0)
cout<<endl;
cout<<setw(4)<<day;
year_days++;
day++;
}cout<<endl;
}
int year_leap(int n)
{
if((n%4==0&&n%100!=0)||n%400==0)
return 1;
else
return 0;
}