稍微改了下对齐格式,加了注释
*/
/*
1、闰年的算法:
如果某年能被4整除但不能游则敏被100整除,
或者能被400整除,
则该年是闰年.
用表达式表示就是
(year
%4
==
0
&&
year%100
!=
0)
||
(year%400
==
0)
2、计算某一天是星期几:
已知1900年的1月1号为神枝星期一,
然后就可以用某一天和1900年的1月1号相差的天数对7取余来求星期,
本题是用盯喊的公元1年的1月1号作为基准
*/
#include
<stdio.h>
#include<conio.h>
#include<stdlib.h>
int
IsLeapYear(int)
//函数定义
void
main()
{
int
i
int
day
int
year
int
temp
int
temp_i
long
int
Year_days
=
0
int
Year_Start
=
1
int
Per_Year_Days
int
month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}
printf("Please
enter
the
year:
")
scanf("%d",&year)
//输入年份
while(Year_Start
<
year)
//从公元1年开始执行while循环,
该年的一月一号为星期一
{
if(
IsLeapYear(
Year_Start
)
)
Per_Year_Days
=
366
//如果是闰年,
则一年有366天
else
Per_Year_Days
=
365
//如果不是闰年,
则一年有365天
Year_days
=
Year_days
+
Per_Year_Days
//Year_days为从公元1年到输入年份的前一年的天数的总和
Year_Start++
}
for(
temp
=
1
temp
<=12
temp++
)
//temp从1到12,
对应一年内12个月
{
switch(
temp
)
//用switch语句将temp和12个月对应起来
{
case
1:
printf("
January(%d)\n",year)
//一月
break
case
2:
printf("
February(%d)\n",year)
//二月
break
case
3:
printf("
March(%d)\n",year)
//三月
break
case
4:
printf("
April(%d)\n",year)
//四月
break
case
5:
printf("
May(%d)\n",year)
//五月
break
case
6:
printf("
June(%d)\n",year)
//六月
break
case
7:
printf("
July(%d)\n",year)
//七月
break
case
8:
printf("
August(%d)\n",year)
//八月
break
case
9:
printf("
September(%d)\n",year)
//九月
break
case
10:
printf("
October(%d)\n",year)
//十月
break
case
11:
printf("
November(%d)\n",year)
//十一月
break
case
12:
printf("
December(%d)\n",year)
//十二月
break
}
i
=
Year_days
%
7
//每个星期有7天,
故用每年的天数对7取余
printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n")
if(
i
!=
0
)
//如果余数不为零
for(
temp_i
=
0
temp_i
<
i
temp_i++)
printf("\t")
//则打印空格(这里用\t代替空格,
更加美观),
空格数为i
day
=
1
//初始化day为1,
为下面的while循环做准备
if(
IsLeapYear(year)
&&
temp
==
2)
//如果输入的年份是闰年,
并且月份为2
while(
day
<=
month_day[12]
)
//day为一循环变量,
取值为1-365(闰年的话为1-366)
{
if(
day
>1
)
//如果天数大于一
if(
Year_days
%
7
==
0
)
//如果是星期日,
则换行
printf("\n")
if(
day
>=
10
)
printf("%d\t",day)
//打印天数+空格
else
printf("%d\t",day)
Year_days++
day++
}
else
//如果不满足"输入的年份是闰年,
并且月份为2"
while
(day
<=
month_day[temp-1])
{
if(
day
>
1
)
if(
Year_days
%
7
==
0
)
printf("\n")
if(
day
>=10
)
printf("%d\t",day)
else
printf("%d\t",day)
Year_days++
day++
}
printf("\n")
if(
getch()
==
'q'
)
//如果输入为q,
则退出程序
exit(0)
}
getch()
//每按一次键,
打印一个月份
}
int
IsLeapYear(
int
year
)
{
//判断是否是闰年,
是则返回1,
否则返回0
if
((year
%4
==
0)
&&
(year
%
100
!=
0)
||
(year
%
400
==
0)
)
return
1
else
return
0
}
#include<iostream>#include<time.h>
using namespace std
class calendar
{
int day[2][12]
public:
calendar()
~calendar(){}
int leap(int year)const
int week(int year,int month)const
void showYear()const
void showMonth()const
void showDay()const
}
calendar::calendar()
{
int i,j
int days[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}}
for(i=0i<2i++)
for(j=0j<12j++)
day[i][j]=days[i][j]
}
//判断year是否是闰年,是闰年返回1,不是返回0.
int calendar::leap(int year)const
{
if(!(year%400)||(year%100)&&!(year%4))
return 1
else return 0
}
//判断year年空凳month月的第一天是星期几的函数,0为星期日,1为星期一,依次类推.
int calendar::week(int year,int month)const
{
int i,w_day=6
if(year-2000>=0)
{
for(i=2000i<yeari++)
w_day+=1+leap(i)
}
else
{
for(i=1999i>=yeari--)
w_day+=6-leap(i)
}
for(i=1i<monthi++)
w_day+=day[leap(year)][i-1]
return w_day%7
}
//通过输入的年份,输出这一年的日历.
void calendar::showYear()const
{
int i,j
int Year,Month,Day,Week
int Leap
system("cls")
cout<<"请输入年份"<<endl
cin>>Year
Leap=leap(Year)
cout<<Year<<"年的日历"<<endl
for(Month=1Month<=12Month++)
{
Day=day[Leap][Month-1]
Week=week(Year,Month)
cout<<Month<<"月"<<endl
cout<<"日\t一\t二\t三\t四\t五\t六"<<endl
for(i=0i<=Dayi++)
{
if(i==0)
{
for(j=0j<Weekj++)
cout<<"毕绝\t"
}
else
{
cout<<i
if((i+Week)%7)
cout<<斗数旅"\t"
else
cout<<endl
}
}
cout<<endl
}
}
//通过输入的年份月份,输出这该月的日历.
void calendar::showMonth()const
{
int i,j
int Year,Month,Day,Week
system("cls")
cout<<"请输入年份与月份"<<endl
cin>>Year>>Month
Day=day[leap(Year)][Month-1]
Week=week(Year,Month)
cout<<Year<<"年"<<Month<<"月"<<endl
cout<<"日\t一\t二\t三\t四\t五\t六"<<endl
for(i=0i<=Dayi++)
{
if(i==0)
{
for(j=0j<Weekj++)
cout<<"\t"
}
else
{
cout<<i
if((i+Week)%7)
cout<<"\t"
else
cout<<endl
}
}
cout<<endl
}
//通过输入的年月日,输出这一天与今年差几天,是星期几,是不是公历节日.
void calendar::showDay()const
{
int i,j=0,flag=1,a[6],sum,Day_tem=0,Week
int year1,month1,day1,year2,month2,day2,sumDay1=0,sumDay2=0
time_t t
time(&t)
day1=localtime(&t)->tm_mday
month1=localtime(&t)->tm_mon
year1=localtime(&t)->tm_year+1900
system("cls")
cout<<"请输入年月日"<<endl
cin>>year2>>month2>>day2
sumDay1=localtime(&t)->tm_yday
for(i=1i<month2i++)
{
if(leap(year2))
sumDay2+=day[1][i-1]
else
sumDay2+=day[0][i-1]
}
sumDay2+=day2-1
if(year2>=year1)
{
for(i=year1i<year2i++)
Day_tem+=365+leap(i)
if(Day_tem+sumDay2-sumDay1>=0)
cout<<"距"<<year2<<"年"<<month2<<"月"<<day2<<"日还有"<<Day_tem+sumDay2-sumDay1<<"天"<<endl
else
cout<<"你输入的天数已经过去"<<sumDay1-sumDay2<<"天"<<endl
}
else
{
for(i=year2i<year1i++)
Day_tem+=365+leap(i)
if(Day_tem+sumDay1-sumDay2>=0)
cout<<"你输入的天数已经过去"<<Day_tem+sumDay1-sumDay2<<"天"<<endl
else
cout<<"距"<<year2<<"年"<<month2<<"月"<<day2<<"日还有"<<sumDay2-sumDay1<<"天"<<endl
}
Week=week(year2,month2)
Week=(Week+day2-1)%7
cout<<year2<<"年"<<month2<<"月"<<day2<<"日是"
switch(Week)
{
case 0:cout<<"星期日"<<endlbreak
case 1:cout<<"星期一"<<endlbreak
case 2:cout<<"星期二"<<endlbreak
case 3:cout<<"星期三"<<endlbreak
case 4:cout<<"星期四"<<endlbreak
case 5:cout<<"星期五"<<endlbreak
case 6:cout<<"星期六"<<endlbreak
}
cout<<year2<<"年"<<month2<<"月"<<day2<<"日是"
//1月最后一个星期日 国际麻风节
Week=week(year2,1)
sum=day[leap(year2)][0]
for(i=0,j=0i<sumi++)
{
if(!((Week+i)%7))
a[j++]=i
}
if(sumDay2==a[--j])
{
cout<<"国际麻风节 "
flag=0
}
//3月最后一个完整周的星期一 中小学生安全教育日
Week=week(year2,3)
sum=day[leap(year2)][2]
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==6)
a[j++]=i-5
}
j--
for(i=0i<2i++)
a[j]+=day[leap(year2)][i]
if(sumDay2==a[j])
{
cout<<"中小学生安全教育日 "
flag=0
}
//5月第二个星期日 母亲节
//5月第三个星期日 全国助残日
Week=week(year2,5)
sum=day[leap(year2)][4]
for(i=0,j=0i<sumi++)
{
if(!((Week+i)%7))
a[j++]=i
}
for(i=0i<4i++)
{
a[1]+=day[leap(year2)][i]
a[2]+=day[leap(year2)][i]
}
if(sumDay2==a[1])
{
cout<<"母亲节 "
flag=0
}
if(sumDay2==a[2])
{
cout<<"全国助残日 "
flag=0
}
//6月第三个星期日 父亲节
Week=week(year2,6)
sum=day[leap(year2)][5]
for(i=0,j=0i<sumi++)
{
if(!((Week+i)%7))
a[j++]=i
}
for(i=0i<5i++)
a[2]+=day[leap(year2)][i]
if(sumDay2==a[2])
{
cout<<"父亲节 "
flag=0
}
//9月第三个星期二 国际和平日
Week=week(year2,9)
sum=day[leap(year2)][8]
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==2)
a[j++]=i
}
for(i=0i<8i++)
a[2]+=day[leap(year2)][i]
if(sumDay2==a[2])
{
cout<<"国际和平日 "
flag=0
}
//9月第三个星期六 全国国防教育日
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==6)
a[j++]=i
}
for(i=0i<8i++)
a[2]+=day[leap(year2)][i]
if(sumDay2==a[2])
{
cout<<"全国国防教育日 "
flag=0
}
//9月第四个星期日 国际聋人节
for(i=0,j=0i<sumi++)
{
if(!((Week+i)%7))
a[j++]=i
}
for(i=0i<8i++)
a[3]+=day[leap(year2)][i]
if(sumDay2==a[3])
{
cout<<"国际聋人节 "
flag=0
}
// 10月的第一个星期一 世界住房日
Week=week(year2,10)
sum=day[leap(year2)][9]
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==1)
a[j++]=i
}
for(i=0i<9i++)
a[0]+=day[leap(year2)][i]
if(sumDay2==a[0])
{
cout<<"世界住房日 "
flag=0
}
//10月的第二个星斯一 加拿大感恩节
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==1)
a[j++]=i
}
for(i=0i<9i++)
a[1]+=day[leap(year2)][i]
if(sumDay2==a[1])
{
cout<<"加拿大感恩节 "
flag=0
}
//10月第二个星期三 国际减轻自然灾害日
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==3)
a[j++]=i
}
for(i=0i<9i++)
a[1]+=day[leap(year2)][i]
if(sumDay2==a[1])
{
cout<<"国际减轻自然灾害日 "
flag=0
}
//10月第二个星期四 世界爱眼日
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==4)
a[j++]=i
}
for(i=0i<9i++)
a[1]+=day[leap(year2)][i]
if(sumDay2==a[1])
{
cout<<"世界爱眼日 "
flag=0
}
//11月最后一个星期四 美国感恩节
Week=week(year2,11)
sum=day[leap(year2)][10]
for(i=0,j=0i<sumi++)
{
if((Week+i)%7==4)
a[j++]=i
}
j--
for(i=0i<10i++)
a[j]+=day[leap(year2)][i]
if(sumDay2==a[j])
{
cout<<"美国感恩节 "
flag=0
}
if((sumDay2>59)&&(leap(year2)))
sumDay2--
switch(sumDay2)
{
case 0:cout<<"元旦"<<endlbreak
case 32:cout<<"世界湿地日"<<endlbreak
case 44:cout<<"情人节"<<endlbreak
case 61:cout<<"全国爱耳日"<<endlbreak
case 63:cout<<"青年志愿者服务日"<<endlbreak
case 66:cout<<"国际妇女节"<<endlbreak
case 67:cout<<"保护母亲河日"<<endlbreak
case 70:cout<<"中国植树节"<<endlbreak
case 72:cout<<"白色情人节 国际警察日"<<endlbreak
case 73:cout<<"世界消费者权益日"<<endlbreak
case 79:cout<<"世界森林日 世界睡眠日"<<endlbreak
case 80:cout<<"世界水日"<<endlbreak
case 81:cout<<"世界气象日"<<endlbreak
case 82:cout<<"世界防治结核病日"<<endlbreak
case 90:cout<<"愚人节"<<endlbreak
case 94:cout<<"清明节"<<endlbreak
case 96:cout<<"世界卫生日 "<<endlbreak
case 111:cout<<"世界地球日"<<endlbreak
case 115:cout<<"世界知识产权日"<<endlbreak
case 120:cout<<"国际劳动节"<<endlbreak
case 122:cout<<"世界哮喘日"<<endlbreak
case 123:cout<<"中国青年节"<<endlbreak
case 127:cout<<"世界红十字日"<<endlbreak
case 131:cout<<"国际护士节"<<endlbreak
case 134:cout<<"国际家庭日"<<endlbreak
case 136:cout<<"世界电信日"<<endlbreak
case 139:cout<<"全国学生营养日 "<<endlbreak
case 142:cout<<"国际牛奶日"<<endlbreak
case 150:cout<<"世界无烟日 "<<endlbreak
case 151:cout<<"国际儿童节"<<endlbreak
case 155:cout<<"世界环境日"<<endlbreak
case 156:cout<<"全国爱眼日"<<endlbreak
case 167:cout<<"世界防治荒漠化和干旱日"<<endlbreak
case 173:cout<<"国际奥林匹克日"<<endlbreak
case 175:cout<<"全国土地日"<<endlbreak
case 176:cout<<"国际禁毒日"<<endlbreak
case 181:cout<<"中国共产党诞生日 国际建筑日"<<endlbreak
case 187:cout<<"中国人民抗日战争纪念日"<<endlbreak
case 191:cout<<"世界人口日"<<endlbreak
case 212:cout<<"中国人民解放军建军节"<<endlbreak
case 223:cout<<"国际青年节"<<endlbreak
case 250:cout<<"国际扫盲日"<<endlbreak
case 252:cout<<"中国教师节"<<endlbreak
case 258:cout<<"中国脑健康日 国际臭氧层保护日"<<endlbreak
case 262:cout<<"全国爱牙日"<<endlbreak
case 263:cout<<"世界停火日"<<endlbreak
case 269:cout<<"世界旅游日"<<endlbreak
case 273:cout<<"中华人民共和国国庆节 国际音乐日 国际老年人日"<<endlbreak
case 276:cout<<"世界动物日"<<endlbreak
case 277:cout<<"世界教师日"<<endlbreak
case 280:cout<<"全国高血压日"<<endlbreak
case 281:cout<<"世界邮政日"<<endlbreak
case 282:cout<<"世界精神卫生日"<<endlbreak
case 286:cout<<"世界标准日"<<endlbreak
case 287:cout<<"国际盲人节 世界农村妇女日"<<endlbreak
case 288:cout<<"世界粮食日"<<endlbreak
case 289:cout<<"国际消除贫困日"<<endlbreak
case 296:cout<<"联合国日 世界发展新闻日"<<endlbreak
case 300:cout<<"中国男性健康日"<<endlbreak
case 301:cout<<"国际生物多样性日"<<endlbreak
case 303:cout<<"万圣节"<<endlbreak
case 311:cout<<"中国记者节"<<endlbreak
case 312:cout<<"消防宣传日"<<endlbreak
case 317:cout<<"世界糖尿病日"<<endlbreak
case 320:cout<<"国际大学生节 "<<endlbreak
case 328:cout<<"国际消除对妇女的暴力日"<<endlbreak
case 334:cout<<"世界爱滋病日"<<endlbreak
case 336:cout<<"世界残疾人日"<<endlbreak
case 337:cout<<"全国法制宣传日"<<endlbreak
case 342:cout<<"世界足球日"<<endlbreak
case 358:cout<<"圣诞节"<<endlbreak
case 362:cout<<"国际生物多样性日"<<endlbreak
default:if(flag) cout<<"没有节日滴"<<endlelse cout<<endlbreak
}
}
main()
{
calendar obj
int i,flag=1
while(flag)
{
system("cls")
cout<<"年历显示\n请按以下数字进行 *** 作"<<endl
cout<<"1,输入一个年份,输出是在屏幕上显示该年的日历"<<endl
cout<<"2,输入年月,输出该月的日历"<<endl
cout<<"3,输入年月日,输出距今天还有多少天,星期几,是否是公历节日"<<endl
cout<<"4,退出"<<endl
scanf("%d",&i)
switch(i)
{
case 1:obj.showYear()system("pause")break
case 2:obj.showMonth()system("pause")break
case 3:obj.showDay()system("pause")break
case 4:flag=0break
default:cout<<"输入有误,请重新输入"<<endlsystem("pause")break
}
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)