C++编写万年历查询

/*任意输入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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Hwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值