아주 예전에 스터디용으로 만든 달력 코드를 다시 정리해서 올린다.
오픈소스가 많아서 직접 만들일은 없겠지만 그냥 재미삼아~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | import javax.swing.JOptionPane; public class testMain { public static void main(String[] args) { // input 예외처리 String input = JOptionPane.showInputDialog("Input Year"); if(!isNumber(input)){ JOptionPane.showMessageDialog(null, "연도는 숫자만 입력해 주세요."); System.exit(0); } int year = Integer.parseInt(input); if (year <= 0) { JOptionPane.showMessageDialog(null, "연도는 0보다 큰 숫자만 가능합니다."); System.exit(0); } input = JOptionPane.showInputDialog("Input Month"); if(!isNumber(input)){ JOptionPane.showMessageDialog(null, "월은 숫자만 입력해 주세요."); System.exit(0); } int month = Integer.parseInt(input); if (month > 12 || month < 0) { JOptionPane.showMessageDialog(null, "월은 0보다 크고 13보다 작은 숫자만 가능합니다."); System.exit(0); } printCalender(year, month); System.exit(0); } // 숫자 여부 체크 public static boolean isNumber(String str){ boolean result = false; try{ Double.parseDouble(str) ; result = true ; }catch(Exception e){} return result ; } // 달력의 타이틀과 바디 private static void printCalender(int year, int month) { printMonthTitle(year, month); printMonthBody(year, month); } // 해당 년도가 윤년인지 판별 public static boolean isLeapYear(int year) { return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)); } // 달력 바디 출력 private static void printMonthBody(int year, int month) { int count = 0; for (int i = 1; i <= getNumberOfDaysInMonth(year, month); i++) { if (i < 2) { for (int y = 1; y <= getStartDay(year, month); y++) { System.out.print("\t "); count += 1; } } System.out.printf("\t %2d", i); count += 1; if (count == 7) { System.out.println(); count = 0; } } } // 해당 달의 첫 요일을 구해서 돌려줌. private static int getStartDay(int year, int month) { int monthSum = 0; int leapYear = 0; int daySum = 1; for (int i = 1; i < year; i++) { monthSum += 365; if (isLeapYear(i) == true) { leapYear += 1; } } for (int j = 1; j < month; j++) { daySum += getNumberOfDaysInMonth(year, j); } return (monthSum + leapYear + daySum) % 7; } // 달의 마지막 일을 구함 private static int getNumberOfDaysInMonth(int year, int month) { if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (month == 2 && isLeapYear(year) == true) { return 29; } else if (month == 2 && isLeapYear(year) == false) { return 28; } else { return 31; } } // 달의 타이틀 부분 출력 private static void printMonthTitle(int year, int month) { System.out.println(); System.out.println("\t" + year + "년\t\t\t\t\t\t" + getMonthName(month)); System.out.println("\t==================================================="); System.out.println("\t일\t월\t화\t수\t목\t금\t토"); System.out.println("\t==================================================="); } private static String getMonthName(int month) { String monthName = null; switch (month) { case 1: monthName = "1월"; break; case 2: monthName = "2월"; break; case 3: monthName = "3월"; break; case 4: monthName = "4월"; break; case 5: monthName = "5월"; break; case 6: monthName = "6월"; break; case 7: monthName = "7월"; break; case 8: monthName = "8월"; break; case 9: monthName = "9월"; break; case 10: monthName = "10월"; break; case 11: monthName = "11월"; break; case 12: monthName = "12월"; break; } return monthName; } } | cs |
이클립스를 이용한다면 위코드를 입력한후 F11으로 실행한다.
다이얼로그로 연도와 월을 입력받아서 출력하는 형식이다.
올바른 연도와 달을 입력한다면 다음과 같은 화면을 콘솔창에서 볼수 있다.
결과 출력(콘솔)
그나저나 올해도 벌써 다 지나갔구나..
내년에도 열심히 살아보자~
'개발' 카테고리의 다른 글
[Node.js] Streams 사용하기 (0) | 2015.12.16 |
---|---|
[Node.js] buffer 사용하기 (0) | 2015.12.16 |
[HTML] Markup 검증 서비스를 이용한 웹표준 검사 (0) | 2015.12.15 |
[Java] 자주 사용하는 문법 모음 (0) | 2015.12.14 |
[Linux] 기본 명령어 모음 (0) | 2015.12.14 |