C语言下不使用日期函数输入任意日期计算周几的程序

#include<stdio.h>
#define CURRENT_YEAR 2015
#define CURRENT_MON  6
#define CURRENT_DAY  21
enum month{Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
int year;        //输入的年份
enum month mon;    //输入的月份
int day;        //输入的日
int total_yday=0;    //相差满年天数
int total_mday=0;    //相差不满年天数
int total_day =0;    //相差总天数
int plus_mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//默认月份天数
int i,j;
void greater_date()    //比当前年份大
{
    total_yday=0;    //重置相差满年天数
    total_mday=0;    //重置相差不满年天数
    total_day =0;    //重置相差总天数

    for(i=CURRENT_YEAR+1;i<year;i++)//算出满年天数
    {
        if((i%4==0 && i%100!=0) || (i%400 == 0))
            total_yday=total_yday+366;
        else
            total_yday=total_yday+365;
    }


    if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0)//设置当前年份二月天数
        plus_mday[2]=29;

    for(j=CURRENT_MON+1;j<13;j++)    //当前预设月份到年尾天数
    {
        total_mday=total_mday+plus_mday[j];    
    }
    total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY;    //将当前月份不满月天数添加进total_mday,tot
    plus_mday[2]=28;    //恢复二月默认天数28

    if((year%4==0 && year%100!=0) || year%400==0)        //设置输入年份二月份天数
        plus_mday[2]=29;
    for(j=1;j<mon;j++)
    {
        total_mday=total_mday+plus_mday[j];
    }
    total_mday=total_mday+day;
    total_day=total_yday+total_mday;

    total_day=total_day%7;
}

void smaller_date()    //比当前年份小
{
    total_yday=0;    //重置相差满年天数
    total_mday=0;    //重置相差不满年天数
    total_day =0;    //重置相差总天数

    for(i=year+1;i<CURRENT_YEAR;i++)
    {
        if((i%4==0 && i%100!=0) || (i%400 == 0))
            total_yday=total_yday+366;
        else
            total_yday=total_yday+365;
    }

    if((year%4==0 && year%100!=0) || year%400==0)        //设置输入年份二月份天数
        plus_mday[2]=29;

    for(j=mon+1;j<13;j++)    //输入月份到年尾天数
    {
        total_mday=total_mday+plus_mday[j];    
    }
    total_mday=total_mday+plus_mday[mon]-day;    //将输入月份不满月天数添加进total_mday,tot
    plus_mday[2]=28;    //恢复二月默认天数28

    if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0)    //设置当前年份二月天数
        plus_mday[2]=29;

    for(j=1;j<CURRENT_MON;j++)    //计算当前预设日期已过当年天数
    {
        total_mday=total_mday+plus_mday[j];
    }
    total_mday=total_mday+CURRENT_DAY;
    total_day=total_yday+total_mday;

    total_day = (7-total_day%7)%7;
}

void equal_date()    //年份与预设年份相同
{
    total_yday=0;    //重置相差满年天数
    total_mday=0;    //重置相差不满年天数
    total_day =0;    //重置相差总天数

    if(mon<CURRENT_MON)//比当前预设月份小
    {
        for(i=mon+1;i<CURRENT_MON;i++)
        {
            total_mday=total_mday+plus_mday[i];
        }
        total_mday=total_mday+plus_mday[mon]-day+CURRENT_DAY;
        total_day=total_mday;
        total_day=(7-total_day%7)%7;
    }
    if(mon>CURRENT_MON)    //比当前预设月份大
    {
        for(i=CURRENT_MON+1;i<mon;i++)
        {
            total_mday=total_mday+plus_mday[i];
        }
        total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY+day;
        total_day=total_mday;
        total_day=total_day%7;
    }
    if(mon==CURRENT_MON)
    {
        if(day>=CURRENT_DAY)
        {
            total_day=day-CURRENT_DAY;
            total_day%=7;
        }
        if(day<CURRENT_DAY)
        {
            total_day=CURRENT_DAY-day;
            total_day=(7-total_day%7);
        }
    }
}

void get_date()    //输入日期
{
    year=0;
    day=0;
    mon=0;

    printf("Input year:");
    scanf("%d",&year);
    int i,j;
    getchar();
    while(1)    //get month
    {
        printf("Input month:");
        scanf("%d",(int*)&mon);
        getchar();
        if(mon>0&&mon<=12)
            break;
    }
    while(1)    //get day
    {
        printf("Input day:");
        scanf("%d",&day);
        getchar();
        if(day>0&&day<=31)
            break;
    }

}

void output_weekday()
{
        switch(total_day)
        {
            case 1:
                printf("%d年%d月%d日是星期一\n",year,mon,day);
                break;
            case 2:
                printf("%d年%d月%d日是星期二\n",year,mon,day);
                break;
            case 3:
                printf("%d年%d月%d日是星期三\n",year,mon,day);
                break;
            case 4:
                printf("%d年%d月%d日是星期四\n",year,mon,day);
                break;
            case 5:
                printf("%d年%d月%d日是星期五\n",year,mon,day);
                break;
            case 6:
                printf("%d年%d月%d日是星期六\n",year,mon,day);
                break;
            case 0:
                printf("%d年%d月%d日是星期天\n",year,mon,day);
                break;
            default:
                break;
        }
}

int main()
{
    while(1)
    {
            get_date();
        if(year>CURRENT_YEAR)
            greater_date();
        if(year<CURRENT_YEAR)
            smaller_date();
        if(year==CURRENT_YEAR)
            equal_date();
        output_weekday();
    }
}

 

posted @ 2015-06-20 17:43  道心不可练  阅读(565)  评论(0编辑  收藏  举报