include.docx
《include.docx》由会员分享,可在线阅读,更多相关《include.docx(17页珍藏版)》请在冰豆网上搜索。
include
#include
#include
#include
#include
intDaysInMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
intDaysInYear[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
charMonthInfo[13][4]={"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
charWeekInfoEng[8][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
charWeekInfoChs[8][3]={"天","一","二","三","四","五","六"};
intmain()
{
intyear,month,day;
intflag=1;/*是否输出到文件,1为输出,0为不输出*/
longdate1;
intIsLoopYear(intyear);
intCheckDay(intyear,intmonth,intday);
longDate2Long(intyear,intmonth,intday);
intWeek(longday);
intPrintNow(intflag);
intMonthCalendar(intyear,intmonth,intflag);
intYearCalendar(intyear,intflag);
intPrintNumMask(intyear,charch,FILE*fp);
PrintNow(flag);/*输出当月月历并输出时间,flag=1代表输出到文件*/
printf("year=");
scanf("%d",&year);
YearCalendar(year,flag);/*输出2010年年历,flag=1代表输出到文件*/
getch();
}
/*判断闰年*/
intIsLoopYear(intyear)
{
returnyear%400==0||(year%100&&year%4==0);
}
/*检查日期的合法性*/
intCheckDay(intyear,intmonth,intday)
{
intIsLoopYear(intyear);
/*年月日大于零,月份为1-12,日期为1至当月最大的天数,注意二月份的闰月*/
if(year>=0&&month>0&&month<=12&&day>0&&\
day<=(DaysInMonth[month]+(month==2&&IsLoopYear(year))))
return1;
else
return0;
}
/*返回year年month月day日到0000年1月0日(抽象的时间)的天数*/
longDate2Long(intyear,intmonth,intday)
{
longdays;
days=year*365l+year/4-year/100+year/400+(year>0);/*year年1月0日经历的天数,0年是闰年*/
days+=DaysInYear[month-1]+(month>2&&IsLoopYear(year))+day;/*加上月份以及天数*/
returndays;
}
/*计算星期*/
intWeek(longdays)
{
return(days+5)%7;
}
/*输出现在时刻,并输出当月日历*/
intPrintNow(intflag)
{
time_tnow;
structtm*tm_1;
intWeek(longday);
intCheckDay(intyear,intmonth,intday);
longDate2Long(intyear,intmonth,intday);
intMonthCalendar(intyear,intmonth,intflag);
time(&now);
tm_1=localtime(&now);
MonthCalendar(tm_1->tm_year+1900,tm_1->tm_mon+1,flag);
printf("今天是:
%4d年%02d月%02d日,星期%s\n",tm_1->tm_year+1900,tm_1->tm_mon+1,tm_1->tm_mday,WeekInfoChs[tm_1->tm_wday]);
printf("当前时间是:
%02d时%02d分%02d秒\n",tm_1->tm_hour,tm_1->tm_min,tm_1->tm_sec);
return1;
}
/*输出月历*/
intMonthCalendar(intyear,intmonth,intflag)/*flag=1时,写文件*/
{
inti,k,day,week;
longdays;
charfilename[80];
intWeek(longday);
intCheckDay(intyear,intmonth,intday);
longDate2Long(intyear,intmonth,intday);
FILE*fp;
if(flag)
{
sprintf(filename,"%04d_%02d.txt",year,month);
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("FileOpenErrorinFunction:
MonthCalendar\nPressanykeytoexit:
");
getch();
exit(-1);
}
}
day=1;
if(!
CheckDay(year,month,day))
{
printf("Format:
%d-%d-1(YYYY-MM-DD)isinvaildinFunction:
MonthCalendar\n",year,month);
return0;
}
days=Date2Long(year,month,day);
week=Week(days);
k=(4*7-9)/2;
for(i=0;ifilename[i]='';
filename[k]='\0';
printf("MonthCalendar:
\n%s%d--%s\n",filename,year,MonthInfo[month]);
if(flag)
fprintf(fp,"%s%d--%s\n",filename,year,MonthInfo[month]);
for(i=0;i<7;i++)
{
printf("%s",WeekInfoEng[i]);
if(flag)
fprintf(fp,"%s",WeekInfoEng[i]);
}
printf("\n");
if(flag)
fprintf(fp,"\n");
for(i=0;i{
printf("");
if(flag)
fprintf(fp,"");
}
for(i=day;i<=DaysInMonth[month]+(month==2)*(IsLoopYear(year));i++)/*闰年的2月份,要加一*/
{
printf("%3d",i);
if(flag)
fprintf(fp,"%3d",i);
if((i+week)%7==0)
{
printf("\n");
if(flag);
fprintf(fp,"\n");
}
}
printf("\n");
if(flag)
{
fprintf(fp,"\n");
fclose(fp);
}
return1;
}
/*输出年历*/
intYearCalendar(intyear,intflag)
{
intmonth_col=2;/*每行几个月历*/
intspace_col=4;/*两个月历的空格数*/
intmonth_row=(int)ceil(12.0/month_col);
intline,end_day[13],keepgoing[13]={1};
inti,j,k,month,day[13],week[13];
longdays[13];
charspace[3][80];
intWeek(longday);
intCheckDay(intyear,intmonth,intday);
longDate2Long(intyear,intmonth,intday);
intPrintNumMask(intyear,charch,FILE*fp);
FILE*fp;
if(flag)
{
charfilename[80];
sprintf(filename,"%04d.txt",year);
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("FileOpenErrorinFunction:
YearCalendar\nPressanykeytoexit:
");
getch();
exit(-1);
}
}
for(month=1;month<=12;month++)
{
day[month]=1;
if(!
CheckDay(year,month,day[month]))
{
printf("Format:
%d-%d-1(YYYY-MM-DD)isinvaildinFunction:
YearCalendar\n",year,month);
return0;
}
days[month]=Date2Long(year,month,day[month]);
week[month]=Week(days[month]);
keepgoing[month]=1;
}
k=(7*4-3)/2;
for(i=0;ispace[0][i]='';
space[0][i]='\0';
for(i=0;i<7*4-3-k;i++)/*月份标识后空格*/
space[1][i]='';
space[1][i]='\0';
for(i=0;ispace[2][i]='';
space[2][i]='\0';
PrintNumMask(year,'*',stdout);
PrintNumMask(year,'*',fp);
month=1;
for(i=0;i{
for(j=0;j{
printf("%s%s%s",space[0],MonthInfo[month+j],space[1]);/*前导空格,月份缩写,后导空格*/
if(flag)
fprintf(fp,"%s%s%s",space[0],MonthInfo[month+j],space[1]);
if(j{
printf("%s",space[2]);
if(flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
for(j=0;j{
for(k=0;k<7;k++)/*星期的缩写*/
{
printf("%s",WeekInfoEng[k]);
if(flag)
fprintf(fp,"%s",WeekInfoEng[k]);
}
if(j{
printf("%s",space[2]);
if(flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
for(j=0;j{
for(k=0;k<7;k++)/*横线*/
{
printf("____",WeekInfoEng[k]);
if(flag)
fprintf(fp,"____",WeekInfoEng[k]);
}
if(j{
printf("%s",space[2]);
if(flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
for(j=0;j{
for(k=0;k{
printf("");
if(flag)
fprintf(fp,"");
}
for(k=1;k<=7;k++)
{
printf("%3d",k);
if(flag)
fprintf(fp,"%3d",k);
if((k+week[month+j])%7==0)
{
end_day[month+j]=k+1;
printf("%s",space[2]);
if(flag)
fprintf(fp,"%s",space[2]);
break;
}
}
}
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
for(line=0;line<5;line++)
{
for(j=0;j{
if(keepgoing[month+j]==0)/*补一行空格行*/
for(k=0;k<7;k++)
{
printf("");
if(flag)
fprintf(fp,"");
}
else
{
for(k=end_day[month+j];k<=DaysInMonth[month+j]+(month==2)*(IsLoopYear(year));k++)
{
printf("%3d",k);
if(flag)
fprintf(fp,"%3d",k);
if((k+week[month+j])%7==0)
{
end_day[month+j]=k+1;
break;
}
}
if(k>=DaysInMonth[month+j]+(month==2)*(IsLoopYear(year)))
keepgoing[month+j]=0;
if(k>DaysInMonth[month+j]+(month==2)*(IsLoopYear(year)))/*补空格*/
{
for(;k<100;k++)
{
printf("");
if(flag)
fprintf(fp,"");
if((k+week[month+j])%7==0)
break;
}
}
}
if(j{
printf("%s",space[2]);
if(flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
/*每行中各个月份是否都已经输出完毕*/
k=0;
for(j=0;jk+=keepgoing[month+j];
if(k==0)
break;
}
month+=month_col;
printf("\n");/*换行*/
if(flag)
fprintf(fp,"\n");
}
if(flag)
fclose(fp);
return1;
}
/*数字模输出*/
intPrintNumMask(intyear,charch,FILE*fp)
{
/*5*5数字模*/
intmask[10][5]={{31,17,17,17,31},{1,1,1,1,1},\
{31,1,31,16,31},{31,1,31,1,31},\
{17,17,31,1,1},{31,16,31,1,31},\
{31,16,31,17,31},{31,1,1,1,1},\
{31,17,31,17,31},{31,17,31,1,31}};
intdigit[16]={0};
charspace='';
inti,j,k,n;
n=0;
while(year)
{
digit[n++]=year%10;
year/=10;
}
for(i=0;i<5;i++)/*行*/
{
for(k=0;k{
for(j=0;j<5;j++)/*列*/
{
if(mask[digit[n-1-k]][i]&(1<<(4-j)))
fprintf(fp,"%c",ch);
else
fprintf(fp,"%c",space);
}
fprintf(fp,"%c",space);
}
fprintf(fp,"\n");
}
return1;
}