164 lines
2.8 KiB
C
164 lines
2.8 KiB
C
#include<stdio.h>
|
|
|
|
int isAvailable(int year);
|
|
void getDay(int year,int first_day[]);
|
|
int weak(int year);
|
|
void drawCalendar(int days[],int first_day[]);
|
|
|
|
int main(){
|
|
int year=0;
|
|
int days[12]={31,28.31,30,31,30,31,30,31,30,31,30};
|
|
int first_day[12]={0};
|
|
int i,t;
|
|
|
|
for(t=1;t==1;){
|
|
int n;
|
|
printf("=============兴趣使然=============\n");
|
|
printf("1.查询某年日历(单列输出)\n");
|
|
printf("2,查询某年是什么年\n");
|
|
printf("3.查询某年某月是星期几\n");
|
|
printf("4.退出系统\n\n");
|
|
|
|
|
|
printf("请输入选项下:");
|
|
scanf("%d",&n);
|
|
while(1){
|
|
|
|
if(n==1){
|
|
printf("请输入要查询的年份:");
|
|
scanf("%d",&year);
|
|
|
|
if(!isAvailable(year)){
|
|
break;
|
|
}
|
|
|
|
getDay(year,first_day);
|
|
|
|
if((year%4==0 && year%100!=0) || year%400==0){
|
|
days[1]=29;
|
|
}
|
|
|
|
drawCalendar(days,first_day);
|
|
putchar('\n');
|
|
break;
|
|
}
|
|
|
|
else if(n==2){
|
|
printf("请输入要查询的年份:");
|
|
scanf("%d",&year);
|
|
|
|
if(!isAvailable(year)){
|
|
break;
|
|
}
|
|
|
|
if((year%4==0 && year%100!=0) || year%400==0){
|
|
printf("%d是闰年\n",year);
|
|
}
|
|
else{
|
|
printf("%d是平年\n",year);
|
|
}
|
|
putchar('\n');
|
|
break;
|
|
}
|
|
else if(n==4){
|
|
t=0;
|
|
break;
|
|
}
|
|
else{
|
|
printf("请输入要查询的年份:");
|
|
scanf("%d",&year);
|
|
if(!isAvailable(year)){
|
|
break;
|
|
|
|
}
|
|
int weak1=0;
|
|
weak1=weak(year);
|
|
printf("星期%d",weak1);
|
|
putchar('\n');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int isAvailable(int year){
|
|
if(year>0){
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
void getDay(int year,int first_day[]){
|
|
int m=0;
|
|
int d=1;
|
|
int w=0;
|
|
int y=year;
|
|
for(m=3;m<=12;m++){
|
|
w=(d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
|
|
first_day[m]=w;
|
|
}
|
|
y-=1;
|
|
for(m=13;m<=14;m++){
|
|
w=(d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
|
|
first_day[m-13]=w;
|
|
}
|
|
}
|
|
|
|
void drawCalendar(int days[],int first_day[]){
|
|
int space=0;
|
|
int i=0,d=0,j=0;
|
|
for(i=0;i<12;i++){
|
|
space=first_day[i];
|
|
|
|
printf(" %2d月日历\n",i+1);
|
|
printf("|-----------------------------|\n");
|
|
printf("| 日 一 二 三 四 五 六 |\n");
|
|
printf("|-----------------------------|\n|");
|
|
|
|
for(j=0;j<space;j++){
|
|
printf(" ");
|
|
}
|
|
days[0]=31,days[2]=30,days[11]=30;
|
|
for(d=1;d<=days[i];d++){
|
|
printf(" %2d",d);
|
|
if((d+space)%7==0){
|
|
printf("|\n|");
|
|
}
|
|
}
|
|
space=7-(d-1+space)%7;
|
|
for(j=0;j<space;j++){
|
|
printf(" ");
|
|
}
|
|
printf("|\n|----------------------------|\n|");
|
|
}
|
|
|
|
}
|
|
|
|
int weak(int year){
|
|
int d=0,k,j;
|
|
k=year%100;
|
|
j=year/100;
|
|
int m=0;
|
|
int w=0;
|
|
int y=year;
|
|
printf("请输入要查阅的月份及其日期:");
|
|
scanf("%d%d",&m,&d);
|
|
|
|
if(m<3){
|
|
switch(m){
|
|
case 1:m=13;break;
|
|
case 2:m=14;break;
|
|
}
|
|
}
|
|
w=(d + 13 * (m + 1) / 5 + k + k / 4 + j / 4 + 5 * j)% 7;
|
|
switch(w){
|
|
case 0:w=6;break;
|
|
case 1:w=7;break;
|
|
case 2:w=1;break;
|
|
case 3:w=2;break;
|
|
case 4:w=3;break;
|
|
case 5:w=4;break;
|
|
case 6:w=5;break;
|
|
}
|
|
return w;
|
|
} |