编辑代码

#include <stdio.h>
typedef struct
{
    int year;
    int month;
    int day;
    int flag;
}date;
int days_in_month(int n)
{
    int days;
    switch(n)
    {
        case 1:case 3:case 5: case 7:case 8:case 10:case 12:
            days=31;break;
        case 4:case 6:case 9: case 11:
            days=30;break;
        case 2:
            days=28;break;
        default:
            printf("月份不正确\n");
    }
    return days;
}
int isWeekend(date a)
{
    int i;
    int days=0;
    int result;
    for(i=0;i<a.month;i++)
        days+=days_in_month(i);
    days+=a.day-1;
    result=(days+6)%7;
    if(result==0||result==6)
        return 1;
    else
        return 0;
}
int main()
{
    date a[365];
    date t;
    FILE *fp=fopen("holidays2022.txt","rt");
    int i=0,n,count=0;
    int flag=0;
    while(fscanf(fp,"%d-%d-%d %d",&a[i].year,&a[i].month,&a[i].day,&a[i].flag)!=EOF)
        i++;
    n=i;
    for(i=0;i<n;i++)
    {
        if(a[i].flag==0)
            count++;
    }
    printf("2022年共有%d个节假日\n",count);
    printf("请输入2022年的一个日期(y-m-d):\n");
    scanf("%d-%d-%d",&t.year,&t.month,&t.day);
    for(i=0;i<n;i++)
    {
        if(t.year==a[i].year && t.month==a[i].month && t.day==a[i].date)
        {
            flag=1;
            t.flag=a[i].flag;
        }
    }
    if(flag==1)
    {
        if(t.flag==0)
            printf("节假日\n");
        else
            printf("工作日\n");//调休工作日
    }
    else
    {
        if(isWeekend(t))
            printf("休息日\n");
        else
            printf("工作日\n");
    }
    return 0;
}