求C语言编日历源代码的详细说明

求C语言编日历源代码的详细说明,第1张

/*

稍微改了下对齐格式,加了注释

*/

/*

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12545073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存