C++日历

C++编写日历

  • 编写日历要用到蔡勒公式:
      蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。
      days = (year+year/4+century/4- 2century+26(month+1)/10+day-1)%7
  • 其次输出星期数字的时候要注意好空格,确保行列对其!!
  • 输出结果:
    输出结果
//输入年份、月份、输出当月日历
/* 
1.用户输入年份
2.判断年份输入值是否为0,为0则退出程序
3.判断年份输入值是否小于1582,小于则退出程序
3.用户输入月份
4.判断月份是否正确(1-12),错误则退出程序
5.计算年份是否为闰年,如是闰年则设置二月天数为28天
6.通过蔡勒公式计算当月1号是星期几
7.按顺序排列输出日历
*/
#include <iostream>
                     //确定蔡勒公式在哪个模板里 
using namespace std;
int input_year();     //输入年份 
int intput_month();   //输入月份 
void output();        //日历输出函数

//声明星期几计算函数
int calc_week(int year,int month,int day);
//声明闰年判断函数
int calc_leap_year(int year);
//声明日历核心函数
void calc_core();

//输入年份 
int input_year(){
	int year;
	cout<<"请输入年份:";
	cin>>year;
	return year;
} 
//输入月份 
int input_month(){
	int month;
	cout<<"请输入月份:";
	cin>>month;
	return month; 
}
//输出日历
void output(int year,int month,int week,int is_leap_year){
	char* month_name[12] = {"January","February","March",
	"April","May","June","July","August","September","October",
	"November","December"};
	char* week_name[7] = {"Sun","Mon","Tus","Wed","Thu",
	"Fri","Sat"};
	int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
	//当闰年时设置二月为29天
	if (is_leap_year){
		days[1] = 29;
	} 
	cout<<endl;
	//显示年月
	cout<<"    "<<month_name[month]<<"  "<<year<<endl;
	//显示星期名
	int i=0;
	for (i=0; i<7; i++){
		cout<<week_name[i]<<" ";
	} 
	cout<<endl;
	//显示每月1号前的空白
	for(i=0;i<week%7;i++){
		cout<<"    ";
	} 
	//显示日期
	for(i=1;i<=days[month];i++){
		if(i<10) cout<<"  "<<i<<" ";
		else cout<<" "<<i<<" ";
		if((i+week)%7==0){
			cout<<endl;
		}
	} 
	cout<<endl;
} 

//蔡勒公式通过年月日计算当天是星期几
int calc_week(int year,int month,int day){
	if(month<=2){  //根据蔡勒公式,如果月份小于2,应该按13、14来看 
		month+=12;
		year--;
	}
	int century = year/100;
	year%=100;
	int days = (year+year/4+century/4-
	2*century+26*(month+1)/10+day-1)%7;
	while (days<0){
		days+=7;
	} 
	return days;
}

//计算是否为闰年
int calc_leap_year(int year){
	if (year%4==0&&year%100!=0||year%400==0){
		return 1;
	}
	return 0;
} 
//日历核心函数
void calc_core(){
	for(int i=0;;i++){
		if(i==1) cout<<"输入0退出日历"<<endl;
		int year=input_year();
		if(year==0) break;
		if(year<=1582){
			cout<<"错误!请输入1582年之后的年份"<<endl;
			break;
		}
		int month=input_month();
		if(month<=0||month>=13){
			cout<<"错误!请输入正确的月份(1-12)"<<endl;
			break; 
		}
		int is_leap_year=calc_leap_year(year);
		int week=calc_week(year,month,1);
		month--;  //在output函数中作为数组下标对应起来
		output(year,month,week,is_leap_year); 
	}
} 

//主函数
int main(){
	calc_core();
	return 0;
} 



发布了16 篇原创文章 · 获赞 1 · 访问量 895

猜你喜欢

转载自blog.csdn.net/qq_33866593/article/details/104566255