首页 > 代码库 > 万年历小程序

万年历小程序

#include<stdio.h>
#include<iostream>
using namespace std;
int gg1,gg2;
int Year_first[10000];//每年第一天周几。
int day_first;//记录每月第一天是周几。
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//月份天数 。

int moshi()
{
    printf("请选择查看模式\n");
    printf("若按年查看则输0,若按月查看则输1\n");
    printf("您的选择:  ");
    scanf("%d",&gg1);
    return gg1;
}

void pan0(int year)
{
    //判断平闰年,改变二月份天数
        if((year%4==0)&&(year%100!=0)||(year%400==0))
        {
            a[2]=29;
        }

}
void pan1(int year,int month)
{
    //判断平闰年,改变二月份天数
        if(((year%4==0)&&(year%100!=0)||(year%400==0))&&(month>=2))
        {
            a[2]=29;
        }

}

void shu0(int year)
{
        int month;
        for(month=1;month<=12;month++)
        {
        day_first=Year_first[year];
        //一年过了多少天
        for(int i=1;i<month;i++)
            day_first+=a[i];
        //算出本月第一天是周几
        day_first%=7;


        printf("\t\t\t\t%d年%d月份\n\n",year,month);
        printf("\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n");

        //本月第一天前的空
        for(int i=0;i<day_first;i++)
            printf("\t");
        //若第一天为周日为特殊情况
        if(day_first==0)
            printf("\t\t\t\t\t\t\t");
        //输出日期
        for(int i=0;i<a[month];i++)
        {
            printf("%d\t",i+1);
            if((i+day_first)%7==0)
                printf("\n\t");
        }
        printf("\n\n\n\n");
        }
}
void shu1(int year,int month)
{
        day_first=Year_first[year];
        //一年过了多少天
        for(int i=1;i<month;i++)
            day_first+=a[i];
        //算出本月第一天是周几
        day_first%=7;


        printf("\t\t\t\t%d年%d月份\n\n",year,month);
        printf("\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n");

        //本月第一天前的空
        for(int i=0;i<day_first;i++)
            printf("\t");
        //若第一天为周日为特殊情况
        if(day_first==0)
            printf("\t\t\t\t\t\t\t");
        //输出日期
        for(int i=0;i<a[month];i++)
        {
            printf("%d\t",i+1);
            if((i+day_first)%7==0)
                printf("\n\t");
        }
        printf("\n\n\n\n");
}


int main()
{
    printf("\t\t\t万年历\n");
    printf("\t\t\t\t------爸爸送给覃女儿的六一礼物\n\n");
    printf("\t\t功能介绍:中途输入-1结束,输入-2重新选择模式\n");
    int i,year, month;
    int flag;//每年星期变化,平年加1,闰年加2。
    Year_first[1900]=1;
    //各年度第一天周几
    for(i=1900;i<9999;i++)
    {
        flag=1;
        if((i%4==0)&&(i%100!=0)||(i%400==0))
            flag=2;
        Year_first[i+1]=(Year_first[i]+flag)%7;
    }
    gg2=moshi();
    while(1)
    {
        printf("请输入年份(Sample Input: 1900):");
        scanf("%d",&year);
        if(year<1900&&year!=-1&&year!=-2)
        {
            printf("请输入大于等于1900的年份");
            continue;
        }
        if(year==-1)
        {
            return 0;
        }

        if(year==-2)
        {
            gg2=moshi();
            printf("请输入年份(Sample Input: 1900):");
            scanf("%d",&year);
        }

        //按月查看
        if(gg2)
        {
            printf("请输入月份(Sample Input:   01):");
            scanf("%d",&month);
            pan1(year,month);
            shu1(year,month);
        }
        //按年查看
        else
        {
              pan0(year);
              shu0(year);

        }
    }

    return 0;
}

 

万年历小程序