搜索
熱搜: 活動 交友 discuz
查看: 9247|回復: 1
打印 上一主題 下一主題

萬年曆~完美版

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-7-20 01:51:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以下是萬年曆
比如說你存檔 檔名叫cal
那你執行的時候打cal 就會出現這個月的月曆
打cal 2005會出現那年的年曆
打cal 10 2005會出現2005 10月月曆
打cal 10 10 2005會出現星期幾 這天是國慶日 星期一

有興趣的可以打cal 9 1752
就可以看到少的日期溜
還有1752年以前的潤年和之後的潤年是不一樣的唷!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int three(int month,int day,int year);
int two(int month,int year, int len);
int one(int year);
int cal(int month,int day,int year);
int zero();

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

    if(argc == 4)
                        three(atoi(argv[1]), atoi(argv[2]),        atoi(argv[3]));
    else if(argc == 3)
                        two(atoi(argv[1]), atoi(argv[2]), strlen(argv[2]));
    else if(argc == 2)
                        one(atoi(argv[1]));
    else if(argc == 1)
                        zero();

    return 0;
   
}

int zero() {
        char  
                b[1][3],
                *a, *c, *d, ee[1][5],
                *months[12]={"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

        time_t rawtime;
        int e;
        
        time ( &rawtime );
  printf("%s\n", ctime( &rawtime));
        sscanf(ctime(&rawtime),"%s %s %s %s %d",&a,&b,&c,&d,&e);
        sscanf(ctime(&rawtime),"%s %s %s %s %s",&a,&b,&c,&d,&ee);
        printf("%s", b[0]);

        for(int i = 0;i<12;i++)
                if(strcmp(b[0], months)==0)
                        two(i+1, e, strlen(ee[0]));
//                if(strcmp(b[0], months)==0) printf("%s  %d", months, i+1);
        // add by function
        return 0;
}

int one(int year) {
    int adjust[7]={6, 7, 1, 2, 3, 4, 5}, date, tmp,counter = 0;
    int db[12][42];
                int i;
    for( i = 0 ; i<12 ; i++ )
            for(int j = 0;j<42;j++)
                    db[j]=0;
                  
   
   
    for(int month = 1;month<=12;month++) {
                   counter = 0;
        date = adjust[cal(month, 1, year)];
        for(int i = 1;i<date;i++) {
                counter += 1;
        }
        for( i = 1;i<=31;i++) {
                tmp = cal(month, i, year);
            if(tmp>=0) {
                    date = adjust[tmp];
                        if(date) {
                            db[month-1][counter]=i;
                        counter += 1;
                     }
             }
        }  
    }
    for(int h = 0;h<4;h++) {
                        if(h == 0)
                                printf("      January              February               March        \n");
      else if(h == 1)
                                printf("        April                 May                   June       \n");
      else if(h == 2)
                                printf("         July                August              September     \n");
      else if(h == 3)
                                printf("       October              November              December     \n");
      printf(" Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa\n");
      for(int j = 0;j<6;j++) {
                                for(int i = 0;i<3;i++) {
          for(int k = 0;k<7;k++) {
                   if(db[3*h + i][j*7+k]== 0)
                                                        printf("  ");
                                else printf("%3d", db[3* h +i][j*7+k]);
                             }
                             printf(" ");
                     }
              printf("\n");               
                  }
    }

        // add by function
        return 0;
}

int two(int month, int year, int len) {
    int adjust[7]={6, 7, 1, 2, 3, 4, 5}, date, tmp, counter = 0;
    char *months[12]={"January", "February", "March","April", "May", "June",
                                                                                        "July", "August", "September","October", "November", "December"};
                // add by function
                int i;
   
    date = adjust[cal(month, 1, year)];
   
                // add by function
    for( i=0 ; (unsigned)i<11-(strlen(months[1])+len+1)/2 ; i++)
            printf(" ");
           printf("%s %d\n", months[month-1], year);
    printf(" Su Mo Tu We Th Fr Sa\n");
    for( i=1; i<date; i++) {
      printf("   ");
      counter += 1;
    }
    for( i = 1;i<=31;i++) {
      tmp = cal(month, i, year);
      if(tmp>=0) {
                                date = adjust[tmp];
        if(date) {
                                        printf("%3d", i);
          counter += 1;
          if(counter %7 == 0)
                                                printf("\n");
                                }
      }
    }

        // add by function
        return 0;
}

int three(int month,int day,int year) {
    char *days[7]={"Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu"};
    int tmp;
    tmp = cal(month, day, year);
    if(tmp>=0)
                        printf("%s", days[tmp]);

        // add by function
        return 0;
}

int cal(int month,int day,int year) {
    long total = 0;
    int months[12]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

   
    if (((( (year % 4 == 0) && (year % 100 != 0) ) ||
                                (year % 400 == 0))&& month > 2) && year > 1752)
                                months[1] += 1;
    if( (year % 4 == 0) && year < 1752)
                        months[1] +=1;
    if(year == 1752)
                        months[1] += 1;
   
    if(months[month-1]<day)
                        return -1;
   
    for(int i = 0;i<month-1;i++) {
        total+=months;
    }
   
    if(month<1 ||month > 12)
                        return -1;
    if(year < 0 )
                        return -1;
    else if(year > 1752)
                        return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7 ;
    else if(year < 1752)
                        return ((365*(year-1)+(year-1)/4+total+day))%7 ;
    else if(year == 1752 && month < 9 )
                        return ((365*(year-1)+(year-1)/4+total+day))%7 ;
    else if(year == 1752 && month > 9 )
                        return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7;
    else if(year == 1752 && month == 9 && day < 3 )
                        return ((365*(year-1)+(year-1)/4+total+day))%7;
    else if(year == 1752 && month == 9 && day > 13 )
                        return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7;
    else
                        return -1;
    system("PAUSE");
}
2#
發表於 2018-4-15 22:09:52 | 只看該作者
感謝大大感謝大大感謝大大
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2024-5-19 02:05 , Processed in 0.016672 second(s), 15 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表