#includeint isleapyear(int year) //判断该年是 闰年 还是 平年
{
if((year%4==0&&year%100!=0) || (year%400==0) ) //判断该年是 闰年
return 1;
else
return 0;
}
int firstdayofyear(int year) //一年中的第一天是星期几
{
return (year+(year-1)/4+(year-1)/400-(year-1)/100)%7;
}
void main()
{
char *monthname[13]={" ","一月份","二月份","三月份","四月份","五月份","六月份","七月份","八月份","九月份","十月份","十一月份","十二月份"};
int numday_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //一个月的总天数 按平年来算 平年的二月是28天,闰年的二月是29天
int firstday_month[13]; // 存放每个月的第一天是星期几
int workarray[13];
int year;
char cha;
int k,m,n;
int i,j,x,y;
char p[20],ch;
char temp[20];
srand(time(0)); //随便产生一个数
for(i=0;i<3;i++)
{
system("cls");
j=0;
x=rand()%10000+1000; //产生的是一个大于1000的数
printf("*万年历系统*\n\n\n\n");
printf(" 验证码:%d\n",x);
printf("\n\n 请输入验证码(还有%d次机会):",3-i);
while(j<20&&(ch=getch())!='\r')
{
p[j++]=ch;
putchar('*');
}
p[j]='\0';
itoa(x,temp,10); //把X数 按十进制数转换为字符串 存储在temp[20]中
if(strcmp(p,temp)==0)
{
goto good;
}
//else
//printf("/n重新输入");
}
if(i>=3)
{
printf("\n\n\n 输入次数超过限制,退出系统!\n\n");
exit(0);
}
good:for(y=0;y<3;y++) //作为缓冲区
{
system("cls");
printf("\n\n\n\n\n\n 请稍后");
Sleep(1000);
printf(".");
Sleep(1000);
printf(".");
Sleep(1000);
printf(".");
}
do
{
system("cls"); //清屏效果
printf("\n");
printf("\n");
printf(" 欢 迎 进 入 万 年 历 查 询 系 统\n");
printf("\n");
printf(" 请输入待查询的年份:");
scanf("%d",&year);
if(isleapyear(year)) //如果是闰年那么第二个月的总天数是29天
numday_month[2]=29;
firstday_month[1]=firstdayofyear(year); //第一个月的第一天 也就是第一年的第一天
for(k=2;k<=12;k++) //注意这时 k=2
firstday_month[k]=(firstday_month[k-1]+numday_month[k-1])%7; //第二个月的第一天=(前一个月的第一天是星期几+前一个月的总天数)%7
for(k=1;k<=12;k++)
workarray[k]=-firstday_month[k]; //注意
printf("%34s"," ");
printf("year %d\n",year);
for(k=1;k<=12;k++) //一年有12个月
{
printf("\n");
printf("%32s\n\n",monthname[k]);
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
for(m=1;m<=6;m++) //一个月最多有6行
{
for(n=1;n<=7;n++) //一个星期有7天
{
workarray[k]++;
if(workarray[k]>0&&workarray[k]<=numday_month[k])
printf("%d\t",workarray[k]);
else
printf("\t");
}
printf("\n");
}
system("pause");
}
printf("\n是否要继续请按Y/y,按其它键退出系统:");
scanf(" %c",&cha); //注意%c前面有个空格 因为之前按了回车键取代了一个位置
}while(cha=='Y'||cha=='y');
}