万年历

这 个万年历有能用上下左右键来控制几号的改变和年份的改变!希望网友测出bug来!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//判断是否为闰年
int Leap(int y)
{
    int s=0;
    if((y%4==0)&&(y%100!=0)||(y%400==0))
    {
        s=1;
    }
    return s;
}


int yue(int a,int b)
{
    int d=0;
    switch(b)
    {
        case  1:  d=31 ;break;
        case  2:  d=Leap(a)==1?29:28;break;
        case  3:  d=31;break;
        case  4:  d=30;break;
        case  5:  d=31;break;
        case  6:  d=30;break;
        case  7:  d=31;break;
        case  8:  d=31;break;
        case  9:  d=30;break;
        case  10:  d=31;break;
        case  11:  d=30;break;
        case  12:  d=31;break;
        default :printf("输入的月份有误!\n");


    }
    return d;
}


void face(int a,int b,int s,int h)
//a是一个月前偏移量(空格数),b是几月,s=1表示是闰年,s=0表示是平年
//h是几号
{
    int c=a;//c用来保存空格数
    int d=0;//用来表示是几月的
    printf(" Su  Mo  Tu  We  Th  Fr  Sa\n");
    while(a--)
    {
       printf("    ");
    }
    switch(b)
    {
        case  1:  d=31 ;break;
        case  2:  d=s==1?29:28;break;
        case  3:  d=31;break;
        case  4:  d=30;break;
        case  5:  d=31;break;
        case  6:  d=30;break;
        case  7:  d=31;break;
        case  8:  d=31;break;
        case  9:  d=30;break;
        case  10:  d=31;break;
        case  11:  d=30;break;
        case  12:  d=31;break;
        default :printf("输入的月份有误!\n");


    }
    if(h<=d)
    {
        for(int i=1;i<=d;i++)
        {
            if(i==h)//输入的几号
            {
                printf("[%2d]",i);
            }
            else
            {
               printf(" %2d ",i);
            }
            if((c+i)%7==0)
            {
                printf("\n");
            }


        }
    }
    else
        {
           printf("输入的天数错误!\n");
        }
}


int xiqi(int a,int b)
//计算输入的年月的第一天,例如:2013年11月1号是星期几,也就是万年历上的偏移量
{
    int p=0;//偏移量
    int r=0,s=0;//分别表示闰年的个数和平年的个数
    //int d=0;//存放月的月的天数
    for(int i=1910;i<a;i++)
    //这里是把1910年1月1号作为一个标准,它是星期六
    {
        if(Leap(i)==1)
        {
            r++;
        }
        else
        {
            s++;
        }
    }


       // p=(366*r+365*s+6)%7;
       //这里加6是1990,1,1为星期六
    switch(b)
    {
        case  1:  p=(366*r+365*s+6)%7;break;
        case  2:  p=(366*r+365*s+6+31)%7;break;
        case  3:  p=(366*r+365*s+6+(Leap(a)==1?29:28))%7;break;
        case  4:  p=(366*r+365*s+6+31)%7;break;
        case  5:  p=(366*r+365*s+6+30)%7;break;
        case  6:  p=(366*r+365*s+6+31)%7;break;
        case  7:  p=(366*r+365*s+6+30)%7;break;
        case  8:  p=(366*r+365*s+6+31)%7;break;
        case  9:  p=(366*r+365*s+6+31)%7;break;
        case  10:  p=(366*r+365*s+6+30)%7;break;
        case  11:  p=(366*r+365*s+6+31)%7;break;
        case  12:  p=(366*r+365*s+6+30)%7;break;
    }
    return p;
}


int main()
{
    int a=0,b=0,c=0;
    char s='y';
    char o;


    while(s=='y'||s=='Y')
    {
        printf("请输入年月日,格式为:(1992 11 29):\n");
        scanf("%d",&a);
        scanf("%d",&b);
        scanf("%d",&c);


        printf("%d-%d-%d\n",a,b,c);
        face(xiqi(a,b),b,Leap(a),c);
        while(o!='a')
        {


            printf("\n你可以按上下左右键来控制万年历哦!\n");
            getch();
            o=getch();
            if(o==0x4b)     //左键
            {
                if(c==1&&b==1)
                {
                    printf("%d-%d-%d\n",a-1,12,yue(a,b));
                    a--;
                    b=12;
                    face(xiqi(a,b),b,Leap(a), yue(a,b));
                    c=yue(a,b);
                }
                else
                {
                    if(c==1)
                    {
                       printf("%d-%d-%d\n",a,b-1,yue(a,b));
                       b--;
                       face(xiqi(a,b),b,Leap(a), yue(a,b));
                       c=yue(a,b);
                    }
                    else
                    {
                        printf("%d-%d-%d\n",a,b,c-1);
                        face(xiqi(a,b),b,Leap(a),--c);
                    }


                }






            }
            else if(o==0x4d)        //右键
            {
                if(c==yue(a,b)&&b==12)
                {
                    printf("%d-%d-%d\n",a+1,1,1);
                    a++;
                    b=1;
                    face(xiqi(a,b),b,Leap(a),1);
                    c=1;
                }
                else
                {
                    if(c==yue(a,b))
                    {
                       printf("%d-%d-%d\n",a,b+1,1);
                       b++;
                       face(xiqi(a,b),b,Leap(a),1);
                       c=1;
                    }
                    else
                    {
                         printf("%d-%d-%d\n",a,b,c+1);
                        face(xiqi(a,b),b,Leap(a),++c);
                    }


                }








            }
            else if(o==0x48)
            {
                a--;
                printf("%d-%d-%d\n",a,b,c);
                face(xiqi(a,b),b,Leap(a),c);


            }
            else if(o==0x50)
            {
                a++;
                printf("%d-%d-%d\n",a,b,c);
                face(xiqi(a,b),b,Leap(a),c);
            }
            else if(o=='a')
            {
                break;
            }


        }


       printf("\n还想继续查询吗?(是(y),否(n)):\n");
       s=getch();
    }


    system("Pause");


    return 0;
}


数据很详细 CREATE TABLE `zb_calendar` ( `GregorianDateTime` varchar(255) DEFAULT NULL COMMENT '公历日期时间', `LunarDateTime` varchar(255) DEFAULT NULL COMMENT '农历日期时间', `LunarShow` varchar(255) DEFAULT NULL, `IsJieJia` varchar(255) DEFAULT NULL, `LJie` varchar(255) DEFAULT NULL COMMENT '农历节日', `GJie` varchar(255) DEFAULT NULL COMMENT '公历节日', `Yi` varchar(255) DEFAULT NULL COMMENT '宜', `Ji` varchar(255) DEFAULT NULL COMMENT '忌', `ShenWei` varchar(255) DEFAULT NULL COMMENT '神位', `Taishen` varchar(255) DEFAULT NULL COMMENT '胎神', `Chong` varchar(255) DEFAULT NULL COMMENT '冲煞', `SuiSha` varchar(255) DEFAULT NULL COMMENT '岁煞', `WuxingJiazi` varchar(255) DEFAULT NULL COMMENT '五行甲子', `WuxingNaYear` varchar(255) DEFAULT NULL COMMENT '纳音五行年', `WuxingNaMonth` varchar(255) DEFAULT NULL COMMENT '纳音五行月', `WuxingNaDay` varchar(255) DEFAULT NULL COMMENT '纳音五行日', `MoonName` varchar(255) DEFAULT NULL COMMENT '农历月名称', `XingEast` varchar(255) DEFAULT NULL COMMENT '星宿吉凶(东方星座)', `XingWest` varchar(255) DEFAULT NULL COMMENT '四方(星座)', `PengZu` varchar(255) DEFAULT NULL COMMENT '彭祖百忌', `JianShen` varchar(255) DEFAULT NULL COMMENT '黄历12值神建', `TianGanDiZhiYear` varchar(255) DEFAULT NULL COMMENT '天干地支年', `TianGanDiZhiMonth` varchar(255) DEFAULT NULL COMMENT '天干地支月', `TianGanDiZhiDay` varchar(255) DEFAULT NULL COMMENT '天干地支日', `LMonthName` varchar(255) DEFAULT NULL COMMENT '农历月名称', `LYear` varchar(255) DEFAULT NULL COMMENT '生肖', `LMonth` varchar(255) DEFAULT NULL COMMENT '农历月', `LDay` varchar(255) DEFAULT NULL COMMENT '农历日', `SolarTermName` varchar(255) DEFAULT NULL COMMENT '农历节气的名称' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='万年历';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值