有 界面,菜单,文件操作+年历显示+三天打鱼,两天晒网

要求有欢迎界面、菜单、文件操作,数据使用数组、结构体、链表等均可,键盘操作或鼠标操作均可。
年历显示
要求至少具有如下功能:
(1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
(4)某人自1990年1月1日开始,“三天打鱼两天晒网”,输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。
注意:必须是一个程序哦
VScode可以运行成功
最好可以帮我分析一下整个程序


int m,d,monthmax,y;
    while(1)
    {
        cout<<"请输入年份:";
        cin>>y;
 
        cout<<"请输入月份:";
        cin>>m;
 
        cout<<endl;
 
        //判断年份和月份
        if(y%4==0||(y%100==0&&y%400==0))//闰年
        {
            if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
                monthmax=31;
            if(m==2)
                monthmax=29;
            if(m==4||m==6||m==9||m==11)
                monthmax=30;
        }
        if(y%4!=0)//平年
        {
            if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
                monthmax=31;
            if(m==2)
                monthmax=28;
            if(m==4||m==6||m==9||m==11)
                monthmax=30;
        }
 
        //基姆拉尔森计算公式取得一号周几
        if(m==1||m==2)
        {
            m+=12;    //一月算做上一年的十三月,二月算做上一年的十四月
            y--;
        }
        d=(2+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;//算出这月一号周几
        if(d==0)
        {
            d=7;
        }
        //输出日历
        {
            {
                //标题模块
                if(m==13)
                {
                    cout<<"   公元"<<y+1<<"年 第1月日历"<<endl;
                }
                if(m==14)
                {
                    cout<<"   公元"<<y+1<<"年 第2月日历"<<endl;
                }
                if(m!=13&&m!=14)
                {
                    cout<<"   公元"<<y<<"年 第"<<m<<"月日历"<<endl;
                }
            }
            cout<<" 1   2   3   4   5   6   7   "<<endl<<"==========================="<<endl;
            for(int i=1; i<=d-1; i++)
            {
                cout<<"    ";
            }
            for(int j=1; j<=monthmax; j++)
            {
                if(j<10)
                {
                    cout<<" "<<j<<"  ";
                }
                if(j>=10)
                {
                    cout<<" "<<j<<" ";
                }
                if((j+d-1)%7==0)
                {
                    cout<<endl;
                }
                if(j==monthmax)
                {
                    cout<<endl;
                }
            }
            cout<<endl;
        }
    }

如有帮助,望采纳


#include<stdio.h>
int main()
{
    int year,month,day,x,a;
    int ye=2010;
    int sum=0;
    int i[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//建立平年各月份天数的数组
    int j[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//建立闰年各月份天数的数组
    printf("请按照年月日的顺序输入日期\n");
    scanf("%d",&x);//输入日期
    year=x/10000;
    month=(x%10000)/100;
    day=x%100;
    while((year<2010)||(month<1||month>12)||((month==2&&(year%4!=0&&year%400!=0)&&day>28)||(day>j[month])))
    {
        printf("输入日期错误,请重新输入\n");
        printf("请按照年月日的顺序重新输入日期\n");
        scanf("%d",&x);
            year=x/10000;
            month=(x%10000)/100;
            day=x%100;
    }//判断输入日期是否正确
    for(ye;ye<year;ye++) //加上所隔年份天数
    {
        if((ye%400==0)||(ye%4==0&&ye%100!=0))//判断此年份是否是闰年 
        {
            sum+=366;//闰年总数加366
        }
        else
        {
            sum+=365;//平年总数加365
        }
    }
    for(a=1;a<month;a++)//加上所隔月份天数
    {
        if((ye%400==0)||(ye%4==0&&ye%100!=0)) 
        {
            sum+=j[a];//闰年月数
        }
        else{
            sum+=i[a];//平年月数
        }
    }
    sum+=day;
    if((sum%5==1)||(sum%5==2)||(sum%5==3))//天数除以5,若余数为1,2,3,则打鱼
    {
    printf("今天打鱼");
    }
    else //否则晒网
    {
    printf("今天晒网"); 
    }
    return 0;
}