【课设】C++实现万年历

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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

一、万年历要求的功能

①输入年份,打印出该年份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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值