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

一、万年历要求的功能

①输入年份,打印出该年份12个月的月历

②输入年份、月份,输出对应年份月份的月历

③输入具体的一个日期,输出这一天是星期几,并计算出与当天相隔的日期数,以及输出公历节日(若有)。

二、代码块

#include 
#include 
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:
    					n+=29+31+30+31+30+31;break;
   					case 8:
    					n+=29+31+30+31+30+31+31;break;
   					case 9:
    					n+=29+31+30+31+30+31+31+30;break;
   					case 10:
    					n+=29+31+30+31+30+31+31+30+31;break;
   					case 11:
    					n+=29+31+30+31+30+31+31+30+31+30;break;
   					default: n=31;break;
  				}
			}
 			else n=0;
 			if(!(d.getyear()%400==0||d.getyear()%4==0&&d.getyear()%100!=0) && d.getmonth()>2)
  				n--;
    		t=a+n-1+d.getday();
 			return t;
		}
	private: 
		int year; //定义三个私有成员 
		int month; 
		int day; 
};

ostream& operator<<(ostream &out,const date &d); //重载“<<”操作符 
istream& operator>>(istream &in,date &d); //重载“>>”操作符 

int date::getmonthdays(const date&d) //得到具体一月的天数 
{ 
	switch( d.getmonth() ) 
	{ 
		case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
			return 31;
		case 4: case 6: case 9: case 11: 
			return 30; 
		case 2: 
			return isleapyear(d.getyear())? 29:28;
	} 
} 

ostream &operator<<(ostream &out,const date &d) 
{ 
	out<>(istream &in,date&d) 
{ 
	int year,month,day; 
	cin>>year>>month>>day; 
	d=date(year,month,day); 

	return in; 
}

inline void printyear(int y)//打印域宽 
{
	cout << setw(28) << y << " 年" << endl;//setw(int)设置输出数据项的域宽 
}

inline void printline()//打印行 
{
	cout << " ----------------------------------------------------" << endl;
}

void printmonth(int m)//打印月份 
{
	char month[][5]={ "0", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
	cout << setw(27) << month[m] << "月" <> y;
	date lz(y);
	printyear(lz.getyear());
	for( int m=1; m<=12; ++m )
	{
		lz.setmonth(m);

		printline();
		printmonth(m);
		printweek();
		printday( lz.getmonthdays(lz), lz.week(lz) );
		printline();
	}

}
void show2()
{
    int y = 2000;
	int m = 1;
	int d = 1;
    cin>>y>>m;
    date lz(y,m);
    printyear(y);
    printline();
	printmonth(m);
	printweek();
	printday( lz.getmonthdays(lz), lz.week(lz) );
	printline();
}
void show3()
{	
	int y,m,d;
	int wk = 0;
	cin>>y>>m>>d;
	date lz(y,m,d);
	wk = lz.week(lz);
	cout<<"您查询的日期为"<tm_year+=1900;
    t->tm_mon+=1;
    cout<tm_year<<" 年 ";
    cout<tm_mon<<" 月 "<tm_mday<<" 日"<tm_year,t->tm_mon,t->tm_mday);
    int count1 = today.date_count(today);
    int count2 = lz.date_count(lz);
    if(count1>count2)
		cout<<"相差"<>tem;
     	getchar();
    	switch(tem)
     	{
      		case 1:
      		{	
      			cout<< "请输入年份 > ";
      			show1();
      		};break;
      		case 2:
      		{	
      			cout<<"请输入年/月 >"<"<"<"<

三、部分运行结果截图

第一个功能:

【课设】C++实现万年历_第1张图片

第二个功能

【课设】C++实现万年历_第2张图片

第三个功能:

【课设】C++实现万年历_第3张图片

 

 

---------------》》用C语言实现万年历


 

你可能感兴趣的:(C++)