C++万年历

目标:编程实现1901年以后的某年某月的日历,已知1901年第一天为星期二。

#include<iostream.h>
int IsLeapYear(int y)     /*判断是否闰年*/    //闰年返回1  不是闰年返回0
{
	if(y%4==0||y%400==0)
		return 1;
	return 0;
}

int GetDaysofMonth(int y,int m)    /*确定某个月的天数*/     
{
	int ts;
	if((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))
		ts=31;	
	else if(m!=2)
		ts=30;
	else if(m==2&&IsLeapYear(y))
		ts=29;	
	else 
		ts=28;
	return ts;	
}
int GetTotalDays(int y,int m)    /*计算从1901年1月开始到给定年月的天数*/  
{
	int tianshu=0,i=0;
	while(m>0)
	{
		tianshu+=GetDaysofMonth(y,m);
		m--;		
	}
	while(y>=1902)
	{	
		if(IsLeapYear(y))
		tianshu+=366;
		else
		tianshu+=365;
		y--;		
	}	
	return tianshu;
}
int GetFirstDayInTable(int y,int m)   /*计算给定年月的第一天在日历表中的位置*/
{
	int x=2;
	x+=(GetTotalDays(y,m-1))%7;     
	while(x==7)
	{
		x=0;
	}
	return x;    //1901年一月一日星期二要返回2   其他年的月份用初始值x加天数对7求余数即可!
}
void ShowDate(int y,int m)    /*显示日历*/
{
	cout<<"-----------------------------------------------------"<<endl;
	cout<<"SUN" <<'\t'<<"MON"<<'\t'<<"TUE"<<'\t'<<"WEN"<<'\t'<<"THU"<<'\t'<<"FRI"<<'\t'<<"SAT"<<'\t'<<endl;
	
	int ct=0;
	for(ct;ct<GetFirstDayInTable(y,m);ct++)
		cout<<'\t';
	
	int i=1;
	for(i;i<=GetDaysofMonth(y,m);i++)
	{
		cout<<i<<'\t';
		if((i+GetFirstDayInTable(y,m))%7==0)
			cout<<endl;
	}
	cout<<endl<<"----------------------------------------------------"<<endl;
}
void main()
{
	int y,m;
	cout<<"input year:";
	cin>>y;
	cout<<"input month:";
	cin>>m;
	ShowDate(y,m);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值