/*任意输入1970年以后的年和月,打印出当前月的日历*/
#include <iostream>
using namespace std;
class RL //日历类
{
public:
void Pri(); //打印函数
void Js(); //日历计算函数
void Sca(); //输出函数
private:
int year;
int mon;
int days;
int week;
};
void RL::Sca()
{
int y=1,m=1;
while(m==1&&y==1) //检测输入是否符合要求
{
cout<<"\n输入1920年以后的年和月,格式按 年 月"<<endl;
cin>>year>>mon;
if(year>=1920&&mon>=1&&mon<=12)
{m=0;y=0;}
}
}
void RL::Js()
{
int yer=0,mo=0,das=0,i=0,d=0;
int day_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};
yer=year-1920;
mo=mon-1;
// days=0;
week=0;
for(i=0;i<mo;i++)
{
das=das+day_tab[i];
}
if(mo>=2&&((year%4==0&&year%100!=0)||year%400==0)) //这里的括号一定要到位,在这里就是
//因为括号的问题,调了有段时间
das+=1; //判断year是否为闰年,2月要加一天
for(i=1920;i<=year;i++) //计算1920年到year之间有多少个闰年
{
if((i%4==0&&i%100!=0)||i%400==0)
d++;
}
days=yer*365+das+d; //计算year month 到1920 1 1之间的天数
week=(days%7+4)%7; //计算year month 1号星期几
}
void RL::Pri()
{
int i=0,j=0,k=0;
j=week;
int day1_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"\t\t\t"<<year<<"年"<<mon<<"月\n"<<endl;
cout<<"日\t一\t二\t三\t四\t五\t六"<<endl;
if(((year%4==0&&year%100!=0)||year%400==0)&&mon==2)k=1;
for(i=1;i<=week;i++)
cout<<"\t";
for(i=1;i<=day1_tab[mon]+k;i++)
{
if(j==7)
{
j=0;
cout<<endl;
}
j++;
cout<<i<<"\t";
}
}
int main()
{
RL rl;
while(1)
{
rl.Sca();
rl.Js();
rl.Pri();
}
return 0;
#include <iostream>
using namespace std;
class RL //日历类
{
public:
void Pri(); //打印函数
void Js(); //日历计算函数
void Sca(); //输出函数
private:
int year;
int mon;
int days;
int week;
};
void RL::Sca()
{
int y=1,m=1;
while(m==1&&y==1) //检测输入是否符合要求
{
cout<<"\n输入1920年以后的年和月,格式按 年 月"<<endl;
cin>>year>>mon;
if(year>=1920&&mon>=1&&mon<=12)
{m=0;y=0;}
}
}
void RL::Js()
{
int yer=0,mo=0,das=0,i=0,d=0;
int day_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};
yer=year-1920;
mo=mon-1;
// days=0;
week=0;
for(i=0;i<mo;i++)
{
das=das+day_tab[i];
}
if(mo>=2&&((year%4==0&&year%100!=0)||year%400==0)) //这里的括号一定要到位,在这里就是
//因为括号的问题,调了有段时间
das+=1; //判断year是否为闰年,2月要加一天
for(i=1920;i<=year;i++) //计算1920年到year之间有多少个闰年
{
if((i%4==0&&i%100!=0)||i%400==0)
d++;
}
days=yer*365+das+d; //计算year month 到1920 1 1之间的天数
week=(days%7+4)%7; //计算year month 1号星期几
}
void RL::Pri()
{
int i=0,j=0,k=0;
j=week;
int day1_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"\t\t\t"<<year<<"年"<<mon<<"月\n"<<endl;
cout<<"日\t一\t二\t三\t四\t五\t六"<<endl;
if(((year%4==0&&year%100!=0)||year%400==0)&&mon==2)k=1;
for(i=1;i<=week;i++)
cout<<"\t";
for(i=1;i<=day1_tab[mon]+k;i++)
{
if(j==7)
{
j=0;
cout<<endl;
}
j++;
cout<<i<<"\t";
}
}
int main()
{
RL rl;
while(1)
{
rl.Sca();
rl.Js();
rl.Pri();
}
return 0;
}