问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。

#include<iostream>
class calendar
{
     //基准为2000,1,1,星期六
int y;
int m;
int d;
int sum ;


public:
calendar(int year, int month)
{
y = year;
m = month;
}
//是否闰年
int isleap()
{
if ((0 == y % 400) || (y % 100 != 0 && 0 == y % 4))
{
return 1;
}
return 0;
}


int count()//计算2016,4
{
sum = 0;
int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//加上年份
if (y >= 2001)
{
for (int i = 2001; i < y; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 0; i < m - 1; i++)
{


sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m >= 3)
{
sum += 1;
}


}
sum = sum % 7 ;
}
else
{
for (int i = y+1; i<2001; i++)
{
if ((0 == i % 400) || (i % 100 != 0 && 0 == i % 4))
{
sum += 366;
sum %= 7;
}
else
{
sum += 365;
sum %= 7;
}
}
//加上月份
for (int i = 11; i >= m - 1; i--)
{


sum += mon[i];
}
//加上闰年多一天
if (isleap())
{
if (m <= 2)
{
sum += 1;
}


}
std::cout << sum << std::endl;


sum = sum % 7;
sum = 7 - sum;
}
return sum;
}




void show()
{
std::cout << "        " << m << "月份              " << std::endl;
std::cout << "星期一   星期二   星期三   星期四   星期五   星期六   星期天  " << std::endl;
int qi = count();
for (int i = 0; i <qi; i++)
{
std::cout << "         ";
}




int mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isleap() && m == 2)
{
mon[2 - 1] = 29;
}
for (int i = 1; i <= mon[m - 1]; i++)
{
std::cout << "   " << i<< "    ";
if (i < 10)
{
std::cout << " ";
}


qi++;


if (7== qi)
{
std::cout <<std::endl;
std::cout << "            " << std::endl;
qi = 0;
}

}
std::cout << "\n\n" << std::endl;
}
};


void main()
{
calendar calen(2000, 2);
calendar calen1(2016, 2);


calen.show();
calen1.show();




system("pause");
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值