caculatebithday.c

来自「这是一个在UNIX 下开发C 程序时候, 计算某年某月某日,计算你的生日日期。」· C语言 代码 · 共 158 行

C
158
字号
/************************************************************************/
/*                                                                      */
/*  僾儘僙僗柤丗 嵨偺寁嶼                                     丂丂丂  丂*/
/*  娭  悢  柤丗 嵨偺寁嶼丂丂丂丂                                       */
/*  婡擻奣梫  丗 嵨偺寁嶼偵偮偄偰丂丂丂丂丂丂                           */
/*  曉媝抣    丗 0 : 惓忢廔椆                                           */
/*               1 : 堎忢廔椆                                           */
/*  拲堄帠崁  丗 僷儔儊儞僞偑擖椡偡傞側偗傟偽側傜側偄                   */
/*                                                                      */
/*  怴婯嶌惉幰丗妿巙暉                                                  */
/*  怴婯嶌惉擔丗2005擭05寧30擔                                          */
/*  僶乕僕儑儞丗Ver1.1.0                                                */
/*  廋惓幰丗妿巙暉                                                      */
/*  廋惓擔丗2005擭06寧23擔                                              */
/*  僶乕僕儑儞丗Ver1.1.3                                                */
/*                                                                      */
/************************************************************************/
/*----------------------------------------------------------------------*/
/*                          僀儞僋儖乕僪                                */
/*----------------------------------------------------------------------*/
#include "caculateBithday.h"

int main(int argc, char *argv[])
{

    static struct tm t_birth;  /* 抋惗擔偵偮偄偰擔晅乛帪娫峔憿懱 */
    static struct tm t_now;    /* 尰嵼擔晅乛帪娫峔憿懱 */
    char localTimeBuffer[128];
    char nowTimeBuffer[128];
    struct tm t_nowtime;
    time_t nowtime;
    time_t birthtm;
    time_t nowtm;
    int i_ageYear;
    int i;
    double  elapsed_time;
    char message[50];
    char pc_argyear[5];
    char pc_argmonth[3];
    char pc_argday[3];

    /* 弶婜壔 */
    memset(&com_birthdate, 0, sizeof(combirth));
    memset(&com_nowdate, 0, sizeof(comnow));
    memset(&t_birth, 0, sizeof(t_birth));
    memset(&t_now, 0, sizeof(t_now));
    memset(localTimeBuffer,0,sizeof(localTimeBuffer));
    memset(nowTimeBuffer,0,sizeof(nowTimeBuffer));
    i_ageYear=0;
    i=0;
    elapsed_time=0;
    memset(message,0,sizeof(message));
    memset(pc_argyear,0,sizeof(pc_argyear));
    memset(pc_argmonth,0,sizeof(pc_argmonth));
    memset(pc_argday,0,sizeof(pc_argday));

    /* 堷悢偺僠僃僢僋張棟 */
    if(argc==2){
        if(strlen(argv[1])==8){
            /* 擭偺僠僃僢僋張棟 */
            memcpy(pc_argyear,argv[1],4);
            if(atol(pc_argyear)<1900 || atol(pc_argyear)>2005){
                printf("\nError! please check your year.\n");
                exit(1);
            }
            /* 寧偺僠僃僢僋張棟 */
            memcpy(pc_argmonth,argv[1]+4,2);
            if(atol(pc_argmonth)<1 || atol(pc_argmonth)>12){
                printf("\nError! please check your month.\n");
                exit(1);
            }else{
                if(atol(pc_argmonth)==2){
                    /* 擇寧拞丄擔偺僠僃僢僋張棟 */
                    memcpy(pc_argday,argv[1]+6,2);
                    if(atol(pc_argday)<1 || atol(pc_argday)>29){
                        printf("\nError! please check your day.\n");
                        exit(1);
                    }
                }
                if(atol(pc_argmonth)==1 || atol(pc_argmonth)==3
                    || atol(pc_argmonth)==5 || atol(pc_argmonth)==7
                    || atol(pc_argmonth)==8 || atol(pc_argmonth)==10
                    || atol(pc_argmonth)==12){
                    /* 擔偺僠僃僢僋張棟 */
                    memcpy(pc_argday,argv[1]+6,2);
                    if(atol(pc_argday)<1 || atol(pc_argday)>31){
                        printf("\nError! please check your day.\n");
                        exit(1);
                    }
                }
                if(atol(pc_argmonth)==4 || atol(pc_argmonth)==6
                    || atol(pc_argmonth)==9 || atol(pc_argmonth)==11){
                    /* 擔偺僠僃僢僋張棟 */
                    memcpy(pc_argday,argv[1]+6,2);
                    if(atol(pc_argday)<1 || atol(pc_argday)>30){
                        printf("\nError! please check your day.\n");
                        exit(1);
                    }
                }
            }
        }else{
            printf("\nError! your argument is wrong.\n");
            exit(1);
        }
    }else{
        printf("\nError! please input your argument.\n");
        exit(1);
    }

    /* 抋惗擔偺庢摼偡傞 */
    strcpy(com_birthdate.pc_birthdate,argv[1]);
    memcpy(com_birthdate.pc_year,com_birthdate.pc_birthdate,4);
    memcpy(com_birthdate.pc_month,com_birthdate.pc_birthdate+4,2);
    memcpy(com_birthdate.pc_day,com_birthdate.pc_birthdate+6,2);
    t_birth.tm_year=atoi(com_birthdate.pc_year);
    t_birth.tm_mon=atoi(com_birthdate.pc_month);
    t_birth.tm_mday=atoi(com_birthdate.pc_day);

    //尰嵼帪娫偺庢摼偡傞
    time(&nowtime);
    t_nowtime=*localtime(&nowtime);

    //帪娫偺奿擺YYYYMMDD
    strftime(localTimeBuffer,128,"%Y%m%d\n",&t_nowtime);

    /* 奿擺屻 */
    strcpy(nowTimeBuffer,localTimeBuffer);
    memcpy(com_nowdate.pc_year,nowTimeBuffer,4);
    memcpy(com_nowdate.pc_month,nowTimeBuffer+4,2);
    memcpy(com_nowdate.pc_day,nowTimeBuffer+6,2);
    t_now.tm_year=atoi(com_nowdate.pc_year);
    t_now.tm_mon=atoi(com_nowdate.pc_month);
    t_now.tm_mday=atoi(com_nowdate.pc_day);

    //擭傪斾妑偡傞
    i_ageYear=t_now.tm_year-t_birth.tm_year;
    if(t_now.tm_mon<t_birth.tm_mon){
        //嵎傪媮傔傞
        i=t_now.tm_year-1;
        t_now.tm_year=t_now.tm_year-1900;
        t_birth.tm_year=i-1900;
        nowtm=mktime(&t_now);
        birthtm=mktime(&t_birth);
        //偙傟娭悢偺曉媝抣偼昩偱偡
        elapsed_time=difftime(nowtm,birthtm);
        //堦擔拞丄86400昩偑偁傞
        if((elapsed_time/86400)<365/2){
            i_ageYear-=1;
        }
    }

    sprintf(message,"\n乽傛偆偙偦乿偁側偨偼 %d 嵨偱偡両\n",i_ageYear);
    printf("%s",message);

    //惓忢廔椆
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?