UIT2024_Calendar/stu2024/虚拟2402周丛笑.c
2024-12-07 16:23:34 +08:00

212 lines
2.8 KiB
C

#include<stdio.h>
void printfMenu ()
{
printf("1.单列输出\n");
printf("2.双列输出\n");
}
//判断是否为闰年
int isLeapyear(int y)
{
if(y%4==0&&y%100!=0 || y%400==0)
return 1;
else
return 0;
}
//这个函数用于计算返回该月的天数
int daysInMonth(int y, int m)
{
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
{
if(y==1582)
{
days=21;
}
}
case 12:days = 31;break;
case 4:
case 6:
case 9:
case 11:days = 30;break;
case 2:{
if(((year%4) == 0) && ((year%100)!=0) || ((year%400) == 0)){
days = 29;
}else{
days = 28;
}
}
}
return days;
}
//判断指定日期是星期几
int dayOfWeek(int y, int m, int d)
{
if(y>1852 && m>10 && d>4)//1582.10.4之后
{
if (m < 3)
{
m += 12;
y--;
}
int h = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
return h + 1;
}
else
{
int K,J,h;
K=y%100;
J=y/100;
switch(m)
{
case 1:
m=3;
break;
case 2:
m=4;
break;
case 3:
m=5;
break;
case 4:
m=6;
break;
case 5:
m=7;
break;
case 6:
m=8;
break;
case 7:
m=9;
break;
case 8:
m=10;
break;
case 9:
m=11;
break;
case 10:
m=12;
break;
case 11:
m=13;
break;
case 12:
m=14;
break;
}
h=(d+(13*(m+1)/5)+K+K/4+5-J)%7;
switch(h)
{
case 0:
h=6;
break;
case 1:
h=7;
break;
case 2:
h=1;
break;
case 3:
h=2;
break;
case 4:
h=3;
break;
case 5:
h=4;
break;
case 6:
h=5;
break;
}
return h;
}
}
//显示指定年月的月历
void MonthCalendar(int y, int m, int d)
{
printf("\t\t\t\t\t\t")//\t制表符
int ofday=DaysInMonth(y,m);//获取每个月有多少天
int first_day = dayOfWeek(y, m, 1); //获取每月1号是周几
int ofday = daysInMonth(y, m); //获取一个月有多少天
int count = first_day;
for (int i = 0; i <= ofday; i++)
{
//使日期能对齐对应的星期
if (i == 0)
{
for (int j = 0; j < count % 7; j++)
{
printf("\t");
}
}
else
{
printf("%2d\t", i);
count++;
}
//循环打印一周后换行
if (count % 7 == 0)
{
printf("\n");
}
}
printf("\n");
}
//这个函数用于显示指定年份 year 的全年日历
void YearCalendar(int y)
{
int i = 0;
for (i = 1; i <= 12; i++)
{
MonthCalendar(y, i, day);
printf("\n");
}
}
//这个函数用于验证给定的日期是否有效
int isTureDate(int y, int m, int day)
int main(void)
{
int y,m,d,a;
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
scanf("%d",&a);
switch(a)
case 1:
scanf("%d",&y);
YearCalendar(y);
case 2:
scanf("%d %d %d",&y,&m,&d);
dayOfWeek(y,m,d);
case 3:
scanf("%d",&y);
isLeapyear(y);
case 4:
default :
printf("输入错误请重新输入。")
}