かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】



このエントリーをはてなブックマークに追加
カレンダー(今年1月〜12月, 前年次年リンク付)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
    
void print_calendar(void) {
    int    y, m, i, year, startwday, endmday;
    int    days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};        /* 1月〜12月の日数 */
    int    count = 0;
    char    *query;
    time_t    timer;
    struct tm *date;

    timer = time(NULL);
    date = localtime(&timer);
    year = date->tm_year + 1900;                            /* 今年 */
    if((query = getenv("PATH_INFO")) != NULL) {                    /* 年取得 */
        if(strlen(query) >= 2) {
            year = atoi(query + 1);
        }
    }
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {            /* うるう年 */
        days[1]++;                                /* 2月の日数を1日増やす */
    }
    y = year - 1;
    startwday = (y + y / 4 - y / 100 + y / 400 + (13 * 13 + 8) / 5 + 1) % 7;    /* 1月1日の曜日 */
    printf("<table align=\"center\" cellpadding=\"7\">\n");
    printf("<tr>\n");
    printf("<td><small><a href=\"%s/%d\">%d≪</a></small></td>\n", getenv("SCRIPT_NAME"), year - 1, year - 1);
    printf("<th colspan=\"2\"><big>%d</big><small>年</small></th>\n", year);
    printf("<td align=\"right\"><small><a href=\"%s/%d\">≫%d</a></small></td>\n", getenv("SCRIPT_NAME"), year + 1, year + 1);
    printf("</tr>\n");
    for(m = 0 ; m < 12 ; m++) {                            /* 1月〜12月のカレンダー表示 */
        if(m % 4 == 0) {
            printf("    <tr>\n");
        }
        endmday = days[m];                            /* 最後の日 */
        count = 0;
        printf("    <td valign=\"top\">\n");
        printf("<table border=\"2\" bordercolor=\"#ff9933\" cellspacing=\"0\" cellpadding=\"5\">\n");
        printf("<tr>\n");
        printf("<th colspan=\"7\"><big>%d</big><small>月</small></th>\n", m + 1);
        printf("</tr>\n");
        printf("<tr>\n");
        printf("<td align=\"center\"><small style=\"color:red\">日</small></td>\n");
        printf("<td align=\"center\"><small>月</small></td>\n");
        printf("<td align=\"center\"><small>火</small></td>\n");
        printf("<td align=\"center\"><small>水</small></td>\n");
        printf("<td align=\"center\"><small>木</small></td>\n");
        printf("<td align=\"center\"><small>金</small></td>\n");
        printf("<td align=\"center\"><small style=\"color:blue\">土</small></td>\n");
        printf("</tr>\n");

        for(i = 0 ; i < startwday; i++) {                    /* 1日までの空欄 */
            if(count % 7 == 0) {
                printf("<tr>\n");
            }
            printf("<td> </td>\n");
            count++;
        }
        for(i = 1 ; i <= endmday; i++) {                    /* 日付を表示 */
            if(count % 7 == 0) {
                printf("<tr>\n");
            }
            printf("<td align=\"right\"", i);
            if(count % 7 == 0) {
                printf(" style=\"color:red\"", i);
            }
            else if(count % 7 == 6) {
                printf(" style=\"color:blue\"", i);
            }
            printf(">%d</td>\n", i);
            count++;
            if(count % 7 == 0) {
                printf("</tr>\n");
            }
        }
        startwday = count % 7;                            /* 次月1日の曜日 */
        while(count < 42) {                            /* 最後の日からの空欄 */
            printf("<td> </td>\n");
            count++;
            if(count % 7 == 0) {
                printf("</tr>\n");
            }
        }
        printf("</table>\n");
        printf("    </td>\n");
        if(m % 4 == 3) {
            printf("    </tr>\n");
        }
    }
    printf("</table>\n");
}

int main(void) {
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>カレンダー</title>\n");
    printf("</head>\n");
    printf("<body>\n");
    print_calendar();
    printf("</body>\n");
    printf("</html>\n");
    return 0;
}
かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】