UIT2024_Calendar/stu2024/虚拟2401彭子杰.c
2024-12-07 16:23:34 +08:00

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;
}