一、万年历要求的功能
①输入年份,打印出该年份12个月的月历
②输入年份、月份,输出对应年份月份的月历
③输入具体的一个日期,输出这一天是星期几,并计算出与当天相隔的日期数,以及输出公历节日(若有)。
二、代码块
#include <iostream>
#include <iomanip>
using namespace std;
class date//定义一个日期类
{
public:
date(int y=1,int m=1,int d=1):year(y),month(m),day(d){}//构造函数
void setyear (int y){year=y;} //改变年份的接口
void setmonth(int m){month=m;} //改变月份的接口
void setday (int d){day=d;}//改变日期的接口
int getyear() const{return year;} //得到年份
int getmonth() const{return month;} //得到月份
int getday() const{return day;} //得到日期
//date operator+(int days); //运算符“+”的重载
//date operator-(int days); //运算符"-"的重载
static bool isleapyear(int y)//定义布尔型,判断闰年的函数
{
return ( y%4==0 && y%100 !=0 || y%400==0 );
}
static int getyeardays(int y)//得到一年的日子
{
return isleapyear(y)? 366:365;
}
static int getmonthdays (const date &d); //得到月份的日子
static int week(const date& d)
{
int w = 0;
int y = d.year;
int m = d.month;
if(d.month==1||d.month==2)
{
m = d.month+12;
y = d.year-1;
}
w = d.day+2*m+3*(m+1)/5+y+y/4-y/100+y/400;
w=w%7+1;
return w;
}
int date_count(const date&d) //计算输入日期到0年1月1日的天数
{
int t=0;
int j;
j=d.getyear()-1;
int a=j/4-j/100+j/400+d.getyear()*365;//判断年份有多少天(其中还判断了有多少闰年)
int n=31;
int i=d.getmonth()-1;
if(i>=1)//判断输入月份与1月之间有多少天 *难点所在呀!!!
{
switch(i)
{
case 2:
n+=29;break;
case 3:
n+=29+31;break;
case 4:
n+=29+31+30;break;
case 5:
n+=29+31+30+31;break;
case 6:
n+=29+31+30+31+30;break;
case 7

这篇博客介绍了一篇课程设计作业,使用C++实现了万年历功能,包括打印指定年份或年份月份的月历,计算日期间隔及星期,并能显示公历节日。博主分享了代码实现和部分运行结果。

695

被折叠的 条评论
为什么被折叠?



