자바(JAVA)/미니 프로젝트 & 기초 공부

자바(JAVA) 미니 프로젝트-간단한 캘린더 프로그램 만들기 (1~3 단계)

개발학생 2022. 3. 22. 22:56
반응형

*참고한 강의 영상 링크

https://www.youtube.com/watch?v=iJmUoil-O8I&list=PLLVOcpGEoI9AgdKH5rlVckzLktHwbMBsU&index=3 

 

*진행 단계

1. 샘플로 가상 달력을 출력해본다
2. 입력받은 달의 최대 일수를 출력하는 기능을 추가한다
3. 2에서, 입력받은 수만큼 반복해서 출력할 수 있도록 프로그램을 변경한다(for 문, while 문 각각 이용)
4. 샘플로 만들었던 가상 달력을, 최대 일수에 따라 일자가 추가되는 가상 달력으로 출력해본다
5. 가상 달력에 요일을 입력받아 출력하는 기능을 추가한다.

6. '요일을 입력받아 출력하는 기능'을 삭제하고, 요일 계산 알고리즘을 추가하여 실제와 같은 달력을 출력한다.
7. 아래와 같이 간단한 UI를 만들고, 일정 등록 및 일정 검색 기능까지 구현한다.


7. 캘린더에 일정을 등록할 때 자동으로 파일로 저장할 수 있도록 한다.
8. 프로그램 시작 시 이전에 저장된 일정을 불러올 수 있도록 한다.

 

1. 샘플 캘린더 출력

public class Calendar {

// 가상 달력 샘플 (void 메소드인 printSampleCalendar를 만들어 가상의 달력 생성)
public void printSampleCalendar() {
		System.out.println("  일 월  화  수  목 금  토");
		System.out.println("----------------------");
		System.out.println("  1  2  3  4  5  6  7");
		System.out.println("  8  9 10 11 12 13 14");
		System.out.println(" 15 16 17 18 19 20 21");
		System.out.println(" 22 23 24 25 26 27 28");
	}

	public static void main(String[] args) {
		// 자바의 Calendar 클래스를 cal이라는 이름으로 생성
        Calendar cal = new Calendar();
        /* 메인 메소드에서 Calendar 클래스인 cal 뒤에, 
		   위의 void 메소드인 printSampleCalendar를 호출하여 가상 달력 샘플 출력 */
		cal.printSampleCalendar();
	}

}

출력 결과

 

2. 입력받은 월의 최대 일수를 출력

import java.util.Scanner;

public class Calendar {
	// MAX_DAYS 정적 메소드를 만들고 1월~12월의 최대 일수들을 순서대로 배열 안에 넣음
	public static final int[] MAX_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	// MAX_DAYS 메소드를 month-1로 인덱싱하면, month에 입력한 달에 해당하는 최대 일수를 반환
	public int getMaxDaysOfMonth(int month) {
		return MAX_DAYS[month - 1];
	}

	public static void main(String[] args) {
		// 숫자를 입력받아 해당하는 달의 최대 일수를 출력하는 프로그램
        // 스캐너 열기
		Scanner sc = new Scanner(System.in);
        // 달을 입력하라는 문구를 출력하고, month라는 변수로 숫자를 입력받음
		System.out.println("달을 입력하세요");
		int month = sc.nextInt();
        // 입력한 월에 대한 최대 일수를 출력
		System.out.printf("%d월은 %d일까지 있습니다.\n", month, cal.getMaxDaysOfMonth(month));
		//스캐너 닫기
        sc.close();
	}

}

출력 예시

 

3-1. 입력받은 수만큼 반복해서 최대 일수를 출력(for 문)

import java.util.Scanner;

public class Calendar {
	// MAX_DAYS 정적 메소드를 만들고 1월~12월의 최대 일수들을 순서대로 배열 안에 넣음
	public static final int[] MAX_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	// MAX_DAYS 메소드를 month-1로 인덱싱하면, month에 입력한 달에 해당하는 최대 일수를 반환
	public int getMaxDaysOfMonth(int month) {
		return MAX_DAYS[month - 1];
	}

	// 가상 달력 샘플 (void 메소드인 printSampleCalendar를 만들어 가상의 달력 생성)
	public void printSampleCalendar() {
		System.out.println("  일 월  화  수  목 금  토");
		System.out.println("-------------------------");
		System.out.println("  1  2  3  4  5  6  7");
		System.out.println("  8  9 10 11 12 13 14");
		System.out.println(" 15 16 17 18 19 20 21");
		System.out.println(" 22 23 24 25 26 27 28");
	}

	public static void main(String[] args) {
		// 숫자를 입력받아 해당하는 달의 최대 일수를 출력하는 프로그램
        // 스캐너 열기
		Scanner sc = new Scanner(System.in);
        // 자바의 Calendar 클래스를 cal이라는 이름으로 생성
        Calendar cal = new Calendar();
		
        // 반복횟수를 입력하라는 문구를 출력하고, repeat이라는 변수로 숫자를 입력받음
		System.out.println("반복횟수를 입력하세요.");
		int repeat = sc.nextInt();

		for (int i = 0; i < repeat; i++) {
        	// 달을 입력하라는 문구를 출력하고, month라는 변수로 숫자를 입력받음
			System.out.println("달을 입력하세요");
			int month = sc.nextInt();
            // 입력한 월에 대한 최대 일수를 출력
			System.out.printf("%d월은 %d일까지 있습니다. \n", month, cal.getMaxDaysOfMonth(month));
		}

		// "Bye~"문구 출력
		System.out.println("Bye~");
      	  /*
		 * 메인 메소드에서 Calendar 클래스인 cal 뒤에, 위의 void 메소드인 printSampleCalendar를 호출하여 가상 달력
		 * 샘플 출력
		 */
		cal.printSampleCalendar();
        // 스캐너 닫기
		sc.close();
	}
}

출력 결과

 

3-2. 입력받은 수만큼 반복해서 최대 일수를 출력(While 문)

*변동사항

1. 프롬프트(사용자의 명령을 받아들일 준비가 되었음을 나타내는 표시)를 출력
2. 횟수가 사라지지 않는 반복이어야 함

3. month에 -1을 입력받을경우 프로그램 종료

4. month에 13을 입력받을경우 아무 일도 일어나지 않고 다시 프로그램 실행

import java.util.Scanner;

public class Calendar {
	// 1월~12월의 최대 일수들을 순서대로 배열 안에 넣음
	public static final int[] MAX_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	// MAX_DAYS 정적 메소드를 만들고 1월~12월의 최대 일수들을 순서대로 배열 안에 넣음
	public int getMaxDaysOfMonth(int month) {
		return MAX_DAYS[month - 1];
	}

	// 가상 달력 샘플 (void 메소드인 printSampleCalendar를 만들어 가상의 달력 생성)
	public void printSampleCalendar() {
		System.out.println("  일 월  화  수  목 금  토");
		System.out.println("----------------------");
		System.out.println("  1  2  3  4  5  6  7");
		System.out.println("  8  9 10 11 12 13 14");
		System.out.println(" 15 16 17 18 19 20 21");
		System.out.println(" 22 23 24 25 26 27 28");
	}

	public static void main(String[] args) {
		// 숫자를 입력받아 해당하는 달의 최대 일수를 출력하는 프로그램
		// 출력할 프롬프트 문자
		String PROMPT = "cal> ";
		// 스캐너 열기
		Scanner sc = new Scanner(System.in);
		// 자바의 Calendar 클래스를 이름을 정해서 생성
		Calendar cal = new Calendar();

		// 정수 전역변수 month 선언
		int month = 1;

		// 횟수가 사라지지 않는 반복 - while문에 true를 사용하여 무한루프
		while (true) {
			// 달을 입력하라는 문구를 출력
			System.out.println("달을 입력하세요");
			// 프롬프트 문자 및 커서 출력
			System.out.print(PROMPT);
			// month라는 변수로 숫자를 입력받음
			month = sc.nextInt();
			// month에 -1을 입력할경우 프로그램 종료
			if (month == -1) {
				break;
			}
			// month가 12보다 클 경우 프로그램 다시 실행 (루프의 처음으로 돌아감)
			if (month > 12) {
				continue;
			}
			// 입력한 월에 대한 최대 일수를 출력
			System.out.printf("%d월은 %d일까지 있습니다. \n", month, cal.getMaxDaysOfMonth(month));
		}

		// "Bye~" 문구 출력
		System.out.println("Bye~");
		/* 메인 메소드에서 Calendar 클래스인 cal 뒤에, 위의 void 메소드인 printSampleCalendar를 호출하여 가상 달력
		   샘플 출력 */
		cal.printSampleCalendar();
		// 스캐너 닫기
		sc.close();
	}

}

출력 예시

 

반응형