📄 单片机万年历.c
字号:
{
if(((i-1)%4==0&&(i-1)%100!=0)||((i-1)%400==0))
now=now+366;
/*如果i年份是闰年,则now的值增加366*/
else
now=now+365;
/*如果i年份不是闰年,则now的值增加355*/
}
if ((year%4==0&&year%100!=0)||(year%400==0))
{ /*若该年份是闰年,则该月第一日与该年第一日距离的天数由month的值
决定,分别是366,335,306,275,245,214,184,153,122,92,61,31
该月的天数同时也由month的值决定*/
switch(month)
{
case 1 :
{
now=now+366;
j=31;
/* momth=1,第1月第1日与该年1月1日相距366天故now加上366,
1月全月共有31天*/
}
break;
case 2:
{
now=now+335;
j=29;
/* month=2,第2月第1日与该年1月1日相距335天
故now加上31,闰年的2月全月共有29天*/
}
break;
case 3:
{
now=now+306;
j=31;
}
break;
case 4:
{
now=now+275;
j=30;
}
break;
case 5:
{
now=now+245;
j=31;
}
break;
case 6:
{
now=now+214;
j=30;
}
break;
case 7:
{
now=now+184;
j=31;
}
break;
case 8:
{
now=now+153;
j=31;
}
break;
case 9:
{
now=now+122;
j=30;
}
break;
case 10:
{
now=now+92;
j=31;
}
break;
case 11:
{
now=now+61;
j=30;
}
break;
case 12:
{
now=now+31;
j=31;
}
break;
}
}
else
{
/*若该年份是闰年,则该月第一日与该年第一日距离的天数由month的值
决定,分别是365,334,306,275,245,214,184,153,122,92,61,31
该月的天数同时也由month的值决定*/
switch(month)
{
case 1 :
{
now=now+365;
j=31;
/* momth=1,第1月第1日与该年1月1日相距365天故now加上365,
1月全月共有31天*/
}
break;
case 2:
{
now=now+334;
j=28;
/* month=2,第2月第1日与该年1月1日相距335天
故now加上31,非闰年的2月全月共有28天*/
}
break;
case 3:
{
now=now+306;
j=31;
}
break;
case 4:
{
now=now+275;
j=30;
}
break;
case 5:
{
now=now+245;
j=31;
}
break;
case 6:
{
now=now+214;
j=30;
}
break;
case 7:
{
now=now+184;j=31;
}
break;
case 8:
{
now=now+153;
j=31;
}
break;
case 9:
{
now=now+122;
j=30;
}
break;
case 10:
{
now=now+92;
j=31;
}
break;
case 11:
{
now=now+61;
j=30;
}
break;
case 12:
{
now=now+31;
j=31;
}
break;
}
}
k=6-((now-1)%7);
h=k*8-1;
/*(7-(now%7))%7的值是该月第一日的星期数(日,一,二...),为使日历排列整齐
在日历的第一排(第一日不是星期日时)空出h个空格,相邻俩数相隔8个空格*/
}
}
int dayin()
{
int a=0;
int n=1;
printf("\n");
printf("********************************************************************************\n");
printf(" 万 年 历 %d年%d月\n\n",year,month );
printf("********************************************************************************\n");
printf(" Sun Mon Tue Wed Thu Fri Sat ");
printf("\n\n");
for(a=0; a<=h;a++)/*打印第一个日期前的空格,使之整齐*/
printf(" ");
for(n=1;n<=j;k++,n++)/*从第一日开始打印,所以n初始值为1*/
{
printf("%7d " , n);
if(month==1&&n==1)printf("\b*");
/*为重大节日添加标记'*',本个if语句用于标记元旦,以下相同*/
if(month==5&&n==1)printf("\b*");
if(month==6&&n==1)printf("\b*");
if(month==9&&n==10)printf("\b*");
if(month==10&&n==1)printf("\b*");
if(k%7==6)
{/*道星期六就换行,使日期整齐排列*/
printf("\n");
if(a>0)
{
a=a-300;/*使a足够小,再也不在一行的开头打印空格了*/
printf(" ^^\n");
/*当该月的第一日不为星期日时,仅标记星期六,符号'^^'恰好打印在其下方*/
}
else printf(" ^^ ^^\n");
/*当该行的第一日为星期日时,标记星期日和星期六*/
}
}
if(k%7!=0) printf("\n ^^");
/*当该月的最后一日不为星期六时,仅标记星期日*/
if(month==1) printf("\n *** 1月1日-元旦 ***\n"); /*打印节日提醒*/
if(month==5) printf("\n *** 5月1日-劳动节 ***\n");
if(month==6) printf("\n *** 6月1日-儿童节 ***\n");
if(month==9) printf("\n *** 9月10日-教师节 ***\n");
if(month==10) printf("\n *** 10月1日-国庆节 ***\n");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -