seunghyun Note

JAVA 자동 Calendar 만들기 본문

스터디/JAVA

JAVA 자동 Calendar 만들기

승숭슝현 2024. 1. 4. 09:25
728x90
반응형

연도와 월을 입력하면 자동으로 달력이 나오는 프로그램. 생각할 것이 많다.

연도와 월을 입력하기

연도와 월을 입력하면 자동으로 달력이 나오는 프로그램.
생각할 것이 많다.

생각해 본 것

1. 윤년 계산

2. 달력의 시작점과 끝점(윤년 계산)을 계산하기

3. 기본적인 세팅

해결

CalendarMain

  • Calendar의 main class 이다.
    • 연도와 월을 입력받아 CalendarEx class에 만든 setting function으로 데이터를 넣는다.
public class CalendarMain {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("년도 입력 : ");
        int year = sc.nextInt();
        System.out.print("월 입력 : ");
        int month = sc.nextInt();

        CalendarEx.setting(year, month);
    }

}

CalendarEx

 1. 캘린더 객체를 사용하기 위해서는 getInstance()를 사용한다.

1-1 Calendar 자체를 가져오면 abstract 객체이기 때문에 자식 객체를 불러와야 한다. -> 그렇기 때문에 getInstance()를 사용해야 한다.

 2. \t를 통해 기본적인 세팅을 한다.

 3. calendar.set(year,month-1,start) 사용하기

 4. 달력의 시작을 찾는다. get(Calendar.DAY_OF_WEEK)

 5. getActualMaximum : 마지막 일 (현재 날짜 기준 최대 수) - 윤년 계산까지 된 정보

import java.util.Calendar;
import java.util.Scanner;

class CalendarEx {

    public static void setting(int year, int month) {

        //📌 1.   캘린더 객체를 사용하기 위해서는 getInstance()를 사용한다.
        Calendar cal = Calendar.getInstance();
        // 1.1 Calendar cal = new Calendar(); error

        //📌 2.   \t를 통해 기본적인 세팅을 한다. 
        System.out.printf("\t\t%d년 %d월\n", year, month);
        System.out.println();
        System.out.printf("일\t월\t화\t수\t목\t금\t토\n");
        //  📌 3.   calendar.set(year,month-1,start) 사용하기
        // 함수가 1월 ->2월 이런식으로 진행되기떄문에 -1
        cal.set(year, month - 1, 1);

        //📌 4. 달력의 시작을 찾는다. get(Calendar.DAY_OF_WEEK)
        // 시작의 날짜를 알 수 있다.
        int start = cal.get(Calendar.DAY_OF_WEEK); // 1일의 시작 번호를 입력받는다.
        // 일 1
        // 월 2
        // 화 3
        // 수 4
        // 목 5
        // 금 6
        // 토 7

        // 시작점까지 칸 수를 이동 시킨다.
        for (int i = 1; i < start; i++) {
            System.out.print("\t");
        }
        // 📌 5. getActualMaximum : 마지막 일 (현재 날짜 기준 최대 수) - 윤년 계산까지 된 정보
        for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
            // 칸 수를 이동시킨다.
            System.out.printf("%d\t", i);
            if (start % 7 == 0) {
                // 한 줄이 완성되면 다음줄로 이
                System.out.println();
            }
            start++;
        }
    }
}

전체 코드


package abstract_;

import java.util.Calendar;
import java.util.Scanner;

class CalendarEx {

    public static void setting(int year, int month) {

        Calendar cal = Calendar.getInstance();

        System.out.printf("\t\t%d년 %d월\n", year, month);
        System.out.println();
        System.out.printf("일\t월\t화\t수\t목\t금\t토\n");
        // year년 month-1월 1일
        cal.set(year, month - 1, 1);

        // 시작의 날짜를 알 수 있다.
        int start = cal.get(Calendar.DAY_OF_WEEK); // 1일의 시작 번호를 입력받는다.
        // 일 1
        // 월 2
        // 화 3
        // 수 4
        // 목 5
        // 금 6
        // 토 7

        // 시작점까지 칸 수를 이동 시킨다.
        for (int i = 1; i < start; i++) {
            System.out.print("\t");
        }
        // getActualMaximum : 마지막 일 (현재 날짜 기준 최대 수) - 윤년 계산까지 된 정보
        for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
            // 칸 수를 이동시킨다.
            System.out.printf("%d\t", i);
            if (start % 7 == 0) {
                // 한 줄이 완성되면 다음줄로 이
                System.out.println();
            }
            start++;
        }
    }
}

public class CalendarMain {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("년도 입력 : ");
        int year = sc.nextInt();
        System.out.print("월 입력 : ");
        int month = sc.nextInt();

        CalendarEx.setting(year, month);
    }

}
728x90
반응형

'스터디 > JAVA' 카테고리의 다른 글

DB 연결을 통한 학교 관리 시스템  (0) 2024.01.11
JAVA 성적 DTO 만들기  (1) 2024.01.05