萬年曆

這 個萬年曆有能用上下左右鍵來控制幾號的改變和年份的改變!希望網友測出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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章