#include<stdio.h>
#include<stdlib.h>
#include <time.h>
/* 检查某月有几天的函数 */
int monthend(int i,int pingrun_flag)
{
switch(i)
{
case 1:return 31;
case 2:if(pingrun_flag==1)return 29;else return 28;
case 3:return 31;
case 4:return 30;
case 5:return 31;
case 6:return 30;
case 7:return 31;
case 8:return 31;
case 9:return 30;
case 10:return 31;
case 11:return 30;
case 12:return 31;
}
return 0;
}
/* 万年历函数 */
void Cnlender()
{
int cheakflag=0; //检查输入索引是否正确标志位
int pingrun_flag; //平年闰年标志
int i,j,
huanhang=0,//换行
year,//年
weekday=0; //检查到当前周余多少天
int alldays=0; //到当前年 总计多少天
printf("请输入某一年\n");
do
{
if(cheakflag!=0)
printf("年份输入错误!请重新输入\n");
scanf("%d",&year);
cheakflag++;
}while(year<1||year>9999);
if(year==1)
{
weekday=0;
pingrun_flag=0;
goto l1;
}
for(int i=1;i<year;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
if(pingrun_flag==0)
alldays+=365;
else
alldays+=366;
}
if((year%4==0&&year%100!=0)||(year%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
weekday=(alldays)%7;
l1:if(pingrun_flag==1)
{
for(i=1;i<=12;i++)
{
printf("\n%d月\n",i);
printf("一 二 三 四 五 六 七\n");
for(j=0;j<weekday;j++)
{
printf(" ");
huanhang++;
}
for(j=1;j<=monthend(i,pingrun_flag);j++)
{
if(huanhang%7==0)
printf("\n");
printf("%2d ",j);
huanhang++;
}
weekday=(weekday+monthend(i,pingrun_flag))%7;
huanhang=huanhang-weekday;
printf("\n");
}
}
else if(pingrun_flag==0)
{
for(i=1;i<=12;i++)
{
printf("\n%d月\n",i);
printf("一 二 三 四 五 六 七\n");
for(j=0;j<weekday;j++)
{
printf(" ");
huanhang++;
}
for(j=1;j<=monthend(i,pingrun_flag);j++)
{
if(huanhang%7==0)
printf("\n");
printf("%2d ",j);
huanhang++;
}
weekday=(weekday+monthend(i,pingrun_flag))%7;
huanhang=huanhang-weekday;
printf("\n");
}
}
}
/* 输出某一个月份的函数 */
void Monthly()
{
int i,j,year,month,weekday,pingrun_flag,alldays,huanhang=0;
printf("请输入年月");
while(scanf("%d,%d",&year,&month)!=2||year>9999||year<1||month>12||month<1)
{
printf("一 二 三 四 五 六 七\n\n");
}
if(year==1)
{
weekday=0;
pingrun_flag=0;
goto l2;
}
for(int i=1;i<year;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
if(pingrun_flag==0)
alldays+=365;
else
alldays+=366;
}
if((year%4==0&&year%100!=0)||(year%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
weekday=(alldays+1)%7;
l2:if(pingrun_flag==1)
{
for(i=1;i<=12;i++)
{
if(i==month)
{ printf("%d年\n",year);
printf("%d月\n",i);
printf("一 二 三 四 五 六 七\n");}
for(j=0;j<weekday;j++)
{
if(i==month)
printf(" ");
huanhang++;
}
if(i==month)
{for(j=1;j<=monthend(i,pingrun_flag);j++)
{
if(huanhang%7==0)
printf("\n");
printf("%2d ",j);
huanhang++;
}}
for(j=1;j<=monthend(i,pingrun_flag);j++)
huanhang++;
weekday=(weekday+monthend(i,pingrun_flag))%7;
huanhang=huanhang-weekday;
}
}
else if(pingrun_flag==0)
{
for(i=1;i<=12;i++)
{ if(i==month)
{
printf("%d年\n",year);
printf("%d月\n",i);
printf("一 二 三 四 五 六 七\n");}
for(j=0;j<weekday;j++)
{
if(i==month)
printf(" ");
huanhang++;
}
if(i==month)
for(j=1;j<=monthend(i,pingrun_flag);j++)
{
if(huanhang%7==0)
printf("\n");
printf("%2d ",j);
huanhang++;
}
for(j=1;j<=monthend(i,pingrun_flag);j++)
huanhang++;
weekday=(weekday+monthend(i,pingrun_flag))%7;
huanhang=huanhang-weekday;
}
}
printf("\n");
}
/* 获取当前时间函数 */
void Nowtime(int nowtime[3],char *strnowtime)
{
int year_ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int year_run[12]={31,29,31,30,31,30,31,31,30,31,30,31};
char pingrun_flag=0;
time_t timep;
time(&timep);
struct tm* t;
t = gmtime(&timep);
int year = 1900 + t->tm_year;
int month = 1 + t->tm_mon;
int day = (8 + t->tm_hour) / 24 + t->tm_mday;
int hour =(8 + t->tm_hour) % 24;
if ((8 + t->tm_hour) / 24 > 0)
{
if ((month == 2 && t->tm_mday ==28) && (year % 400 == 0 || (year % 4 == 0 && year % 100 == 0)))
pingrun_flag = 1;
if(pingrun_flag==1)
{
if (day > year_run[t->tm_mon])
{
if (month == 12 && t->tm_mday == 31)
{
year += 1;
month = 1;
day = 1;
}
else
{
month += 1;
day = 1;
} }
}
else
{
if (day > year_ping[t->tm_mon])
{
if (month == 12 && t->tm_mday == 31)
{
year += 1;
month = 1;
day = 1;
}
else
{
month += 1;
day = 1;
}
}
}
}
sprintf(strnowtime,"%04d年%02d月%02d日 %02d:%02d:%02d", year, month,day,hour,t->tm_min, t->tm_sec);
nowtime[0]=1900 + t->tm_year;
nowtime[1]=1 + t->tm_mon;
nowtime[2]=t->tm_mday;
}
/* 检查这天是不是某个节日的函数 */
void Cheak_today()
{
int year,month,day,weekday,pingrun_flag,now_date;
int alldays=0;
int alldays_nowtime=0;
int nowtime[3];
char strnowtime[30];
Nowtime(nowtime,strnowtime);
printf("请输入年月日");
while(scanf("%d,%d,%d",&year,&month,&day)!=3||year>9999||year<1||month>12||month<1)
{
printf("输入错误,请重新输入\n");
}
if(year==1)
{
weekday=0;
pingrun_flag=0;
}
for(int i=1;i<nowtime[0];i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
if(pingrun_flag==0)
alldays_nowtime+=365;
else
alldays_nowtime+=366;
}
if((nowtime[0]%4==0&&nowtime[0]%100!=0)||(nowtime[0]%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
for(int i=1;i<nowtime[1];i++)
{
alldays_nowtime+=monthend(i,pingrun_flag);
}
alldays_nowtime+=nowtime[2];
for(int i=1;i<year;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
pingrun_flag=1;
else
pingrun_flag=0;
if(pingrun_flag==0)
alldays+=365;
else
alldays+=36