티스토리 뷰

카테고리 없음

Calender 소스 코드

Rough Existence 2008. 9. 15. 23:38

C#이나 MFC 나 JAVA 나 모두 Calender 클래스나 Date비스무리한 스트럭처가 있지만, 간혹 XXX때문에 달력 로직을

연산해야 하는 무척이나 귀찮은 경우가 있다. 그럴 경우 써먹자;;

// Calender.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>

void print(); // 전체 출력함수

void thirtyone(int year,int month); //31일로 끝나는 달 함수
void twentyeight(int year,int month);// 2월 함수
void thirty(int year,int month); // 30일로 끝나는 달 함수

void main()
{
    print(); // 달 출력을 한다
}

void print()
{

    int month = 1; // 처음엔 1월이니까 1로 초기화시킨다
    int year;
    printf("년도를 입력하세요 : ");
    scanf("%d",&year);

    while(month != 13) // 13월은 없으므로 12월까지 반복
    {
    printf("\t(%d)월",month);
    printf("\n 일 월 화 수 목 금 토\n");
    if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))
    {
        thirtyone(year,month); // 년도와 달 값이 31일 함수로 들어간다
    }

    else if((month == 2))
    {
        twentyeight(year,month); // 년도와 달 값이 2월 함수로 들어간다
    }

    else if((month == 4) || (month == 6) || (month == 9) || (month == 11))
    {
        thirty(year,month); // 년도와 달 값이 30일 함수로 들어간다
    }

    month++; // 한 달이 끝나면 증가
    printf("\n\n");
    }   

}

void thirtyone(int year,int month)
{   
    printf("=====\n");
    int i , j , count = 1, th , week;

    if(month == 1) // 1월이면 작년을 기준으로 해야함
    year--,month +=12;

    th = year / 100;
    year = year % 100;
    week = ((21 * th / 4) + (5 * year / 4) + (26 * (month + 1)) / 10) % 7;

    //첫 번째 1일을 구하는 공식
    for( i = 0 ; i <= 5 ; i++ )
    {
        for( j = 0 ; j < 7 ; j++ ){
        if(i == 0 && j < week)

        printf(" ");
        else{
            printf("%4d",count++);
            if(count > 31)
            {
                return ; // 31일 까지 출력후 함수종료
            }

        }
    }   
        printf("\n");
    }
    return;
}

void twentyeight(int year,int month)
{
    int i , j , count = 1, th , week ,year_1;
    year_1 = year ;

    if(month == 2) // 2월일경우도 작년을 기준으로 해야함

    year--,month+=12;

    th = year / 100;
    year_1 = year % 100;

    week = ((21 * th / 4) + (5 * year_1 / 4) + (26 * (month + 1)) / 10) % 7;

    year++; // 작년 기준으로 해서 1일을 구한후 윤년을 구하기위해 다시 원래의 값으로 함
    for( i = 0 ; i <= 4 ; i++ )
    {
        for( j = 0 ; j < 7 ; j++ )
        {
            if(i == 0 && j < week)
                printf(" ");               
            else
            {
                if ( (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ) // 윤년일 경우 29일까지 출력
                {
                    if(count <= 29)
                    printf("%4d",count++);
                }           
                else   
                {
                    if(count <= 28)
                    printf("%4d",count++);
                }
            }
        }
        printf("\n"); // 한주가 끝나면 줄 바꿈
    }
    return ;
}

void thirty(int year,int month)
{
    int i , j , count = 1, th , week;
    th = year / 100;

    year = year % 100;
    week = ((21 * th / 4) + (5 * year / 4) + (26 * (month + 1)) / 10) % 7;

    for( i = 0 ; i <= 5 ; i++ )
    {
        for( j = 0 ; j < 7 ; j++ )
        {

            if(i == 0 && j < week)
                printf(" ");
            else
            {               
                printf("%4d",count++);
                if(count > 30) // 30일까지 출력
                {
                    return ;
                }
            }
        }
        printf("\n"); // 한주가 끝나면 줄 바꿈
    }   
}