More actions
imported>Unknown No edit summary |
(Repair batch-0005 pages from live compare) |
||
| Line 1: | Line 1: | ||
=== Calendar.java === | === Calendar.java === | ||
public class Calendar { | public class Calendar { | ||
static int DAYS_PER_MONTH | static int DAYS_PER_MONTH[] = {31,28,31,30,31,30,31,31,30,31,30,31}; | ||
int year, month; | int year, month; | ||
public Calendar(int year, int month) { | public Calendar(int year, int month) { | ||
| Line 9: | Line 9: | ||
this.year = year; | this.year = year; | ||
this.month = month; | this.month = month; | ||
DAYS_PER_MONTH | DAYS_PER_MONTH[1] = isLeapYear(this.year) ? 29 : 28; | ||
} | } | ||
protected int getNumOfDays() { | protected int getNumOfDays() { | ||
return DAYS_PER_MONTH | return DAYS_PER_MONTH[month - 1]; | ||
} | } | ||
public int | public int[] getCalendar() { | ||
int ret | int ret[] = new int[42]; | ||
int start = getMonthStartPoint(); | int start = getMonthStartPoint(); | ||
for(int i = start ; i < getNumOfDays() + start ; ++i) | for(int i = start ; i < getNumOfDays() + start ; ++i) | ||
ret | ret[i] = i - start + 1; | ||
return ret; | return ret; | ||
} | } | ||
| Line 30: | Line 30: | ||
int ret = year + getNumOfLeapYears(); | int ret = year + getNumOfLeapYears(); | ||
for(int i = 0 ; i < month - 1 ; ++i) | for(int i = 0 ; i < month - 1 ; ++i) | ||
ret += DAYS_PER_MONTH | ret += DAYS_PER_MONTH[i]; | ||
return ret % 7; | return ret % 7; | ||
} | } | ||
| Line 50: | Line 50: | ||
super(arg); | super(arg); | ||
} | } | ||
private int | private int[] getExpectedCalendar(int start) { | ||
int ret | int ret[] = new int[42]; | ||
for(int i = start ; i < calendar.getNumOfDays() + start ; ++i) | for(int i = start ; i < calendar.getNumOfDays() + start ; ++i) | ||
ret | ret[i] = i - start + 1; | ||
return ret; | return ret; | ||
} | } | ||
private void assertEqualsArray(int | private void assertEqualsArray(int [] expected) { | ||
int real | int real[] = calendar.getCalendar(); | ||
for(int i = 0 ; i < 42 ; ++i) | for(int i = 0 ; i < 42 ; ++i) | ||
assertEquals( expected | assertEquals( expected[i], real[i] ); | ||
} | } | ||
public void test1Year() { | public void test1Year() { | ||
int expectedSet | int expectedSet[] = {1,4,4,0,2,5,0,3,6,1,4,6}; | ||
for(int i = 0 ; i < expectedSet.length ; ++i) { | for(int i = 0 ; i < expectedSet.length ; ++i) { | ||
calendar.set(1, i + 1); | calendar.set(1, i + 1); | ||
int expected | int expected[] = getExpectedCalendar(expectedSet[i]); | ||
assertEqualsArray(expected); | assertEqualsArray(expected); | ||
} | } | ||
} | } | ||
public void test2Year() { | public void test2Year() { | ||
int monthSet | int monthSet[] = {1,2,12}; | ||
int expectedSet | int expectedSet[] = {2,5,0}; | ||
for(int i = 0 ; i < monthSet.length ; ++i) { | for(int i = 0 ; i < monthSet.length ; ++i) { | ||
calendar.set(2, monthSet | calendar.set(2, monthSet[i]); | ||
assertEqualsArray( getExpectedCalendar(expectedSet | assertEqualsArray( getExpectedCalendar(expectedSet[i]) ); | ||
} | } | ||
} | } | ||
public void test4Year() { | public void test4Year() { | ||
int expectedSet | int expectedSet[] = {4,0,1,4,6,2,4,0,3,5,1,3}; | ||
for(int i = 0 ; i < expectedSet.length ; ++i) { | for(int i = 0 ; i < expectedSet.length ; ++i) { | ||
calendar.set(4, i + 1); | calendar.set(4, i + 1); | ||
int expected | int expected[] = getExpectedCalendar(expectedSet[i]); | ||
assertEqualsArray(expected); | assertEqualsArray(expected); | ||
} | } | ||
} | } | ||
public void test2003Year() { | public void test2003Year() { | ||
int expectedSet | int expectedSet[] = {3,6,6,2,4,0,2,5,1,3,6,1}; | ||
for(int i = 0 ; i < expectedSet.length ; ++i) { | for(int i = 0 ; i < expectedSet.length ; ++i) { | ||
calendar.set(2003, i + 1); | calendar.set(2003, i + 1); | ||
int expected | int expected[] = getExpectedCalendar(expectedSet[i]); | ||
assertEqualsArray(expected); | assertEqualsArray(expected); | ||
} | } | ||
} | } | ||
public void testMonthStartPoint() { | public void testMonthStartPoint() { | ||
int monthSet | int monthSet[] = {1,2,8}; | ||
int expectedSet | int expectedSet[] = {1,4,3}; | ||
for(int i = 0 ; i < monthSet.length ; ++i) { | for(int i = 0 ; i < monthSet.length ; ++i) { | ||
calendar.set(1, monthSet | calendar.set(1, monthSet[i]); | ||
assertEquals(expectedSet | assertEquals(expectedSet[i], calendar.getMonthStartPoint() ); | ||
} | } | ||
} | } | ||
| Line 118: | Line 118: | ||
class CalendarPanel extends JPanel { | class CalendarPanel extends JPanel { | ||
JFrame parent; | JFrame parent; | ||
JButton dayUnit | JButton dayUnit[][] = new JButton[6][7]; | ||
Calendar calendar; | Calendar calendar; | ||
public CalendarPanel() { | public CalendarPanel() { | ||
| Line 124: | Line 124: | ||
for(int i = 0 ; i < 6 ; ++i) { | for(int i = 0 ; i < 6 ; ++i) { | ||
for(int j = 0 ; j < 7 ; ++j) { | for(int j = 0 ; j < 7 ; ++j) { | ||
dayUnit | dayUnit[i][j] = new JButton(" "); | ||
dayUnit | dayUnit[i][j].setBackground(Color.WHITE); | ||
add(dayUnit | add(dayUnit[i][j]); | ||
} | } | ||
} | } | ||
| Line 132: | Line 132: | ||
public void set(int year, int month) { | public void set(int year, int month) { | ||
calendar = new Calendar(year, month); | calendar = new Calendar(year, month); | ||
int monthArr | int monthArr[] = calendar.getCalendar(); | ||
for(int i = 0 ; i < 6 ; ++i) { | for(int i = 0 ; i < 6 ; ++i) { | ||
for(int j = 0 ; j < 7 ; ++j) { | for(int j = 0 ; j < 7 ; ++j) { | ||
if( monthArr | if( monthArr[i * 7 + j] > 0 && monthArr[i * 7 + j] < 10) | ||
dayUnit | dayUnit[i][j].setText( " " + Integer.toString(monthArr[i * 7 + j]) ); | ||
else if( monthArr | else if( monthArr[i * 7 + j] > 0 && monthArr[i * 7 + j] >= 10) | ||
dayUnit | dayUnit[i][j].setText( Integer.toString(monthArr[i * 7 + j]) ); | ||
else | else | ||
dayUnit | dayUnit[i][j].setText( " " ); | ||
} | } | ||
} | } | ||
| Line 183: | Line 183: | ||
} | } | ||
public static void main(String | public static void main(String[] args) { | ||
new CalendarFrame("만년달력"); | new CalendarFrame("만년달력"); | ||
} | } | ||
} | } | ||
Latest revision as of 00:44, 27 March 2026
Calendar.java
public class Calendar {
static int DAYS_PER_MONTH[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int year, month;
public Calendar(int year, int month) {
set(year, month);
}
public void set(int year, int month) {
this.year = year;
this.month = month;
DAYS_PER_MONTH[1] = isLeapYear(this.year) ? 29 : 28;
}
protected int getNumOfDays() {
return DAYS_PER_MONTH[month - 1];
}
public int[] getCalendar() {
int ret[] = new int[42];
int start = getMonthStartPoint();
for(int i = start ; i < getNumOfDays() + start ; ++i)
ret[i] = i - start + 1;
return ret;
}
protected int getNumOfLeapYears() {
int ret = 0;
for(int i = 1 ; i < year ; ++i)
if( isLeapYear(i) ) ++ret;
return ret;
}
protected int getMonthStartPoint() {
int ret = year + getNumOfLeapYears();
for(int i = 0 ; i < month - 1 ; ++i)
ret += DAYS_PER_MONTH[i];
return ret % 7;
}
protected boolean isLeapYear() {
return isLeapYear(this.year);
}
protected boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}
CalendarTestCase.java
import junit.framework.TestCase;
public class CalendarTestCaseTest extends TestCase {
Calendar calendar = new Calendar(1,1);
public CalendarTestCaseTest(String arg) {
super(arg);
}
private int[] getExpectedCalendar(int start) {
int ret[] = new int[42];
for(int i = start ; i < calendar.getNumOfDays() + start ; ++i)
ret[i] = i - start + 1;
return ret;
}
private void assertEqualsArray(int [] expected) {
int real[] = calendar.getCalendar();
for(int i = 0 ; i < 42 ; ++i)
assertEquals( expected[i], real[i] );
}
public void test1Year() {
int expectedSet[] = {1,4,4,0,2,5,0,3,6,1,4,6};
for(int i = 0 ; i < expectedSet.length ; ++i) {
calendar.set(1, i + 1);
int expected[] = getExpectedCalendar(expectedSet[i]);
assertEqualsArray(expected);
}
}
public void test2Year() {
int monthSet[] = {1,2,12};
int expectedSet[] = {2,5,0};
for(int i = 0 ; i < monthSet.length ; ++i) {
calendar.set(2, monthSet[i]);
assertEqualsArray( getExpectedCalendar(expectedSet[i]) );
}
}
public void test4Year() {
int expectedSet[] = {4,0,1,4,6,2,4,0,3,5,1,3};
for(int i = 0 ; i < expectedSet.length ; ++i) {
calendar.set(4, i + 1);
int expected[] = getExpectedCalendar(expectedSet[i]);
assertEqualsArray(expected);
}
}
public void test2003Year() {
int expectedSet[] = {3,6,6,2,4,0,2,5,1,3,6,1};
for(int i = 0 ; i < expectedSet.length ; ++i) {
calendar.set(2003, i + 1);
int expected[] = getExpectedCalendar(expectedSet[i]);
assertEqualsArray(expected);
}
}
public void testMonthStartPoint() {
int monthSet[] = {1,2,8};
int expectedSet[] = {1,4,3};
for(int i = 0 ; i < monthSet.length ; ++i) {
calendar.set(1, monthSet[i]);
assertEquals(expectedSet[i], calendar.getMonthStartPoint() );
}
}
public void testLeapYear() {
calendar.set(2000, 1);
assertEquals( true, calendar.isLeapYear() );
calendar.set(1999, 1);
assertEquals( false, calendar.isLeapYear() );
}
}
CalendarFrame.java for GUI
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalendarFrame extends JFrame {
class CalendarPanel extends JPanel {
JFrame parent;
JButton dayUnit[][] = new JButton[6][7];
Calendar calendar;
public CalendarPanel() {
getContentPane().setLayout( new GridLayout(5,6) );
for(int i = 0 ; i < 6 ; ++i) {
for(int j = 0 ; j < 7 ; ++j) {
dayUnit[i][j] = new JButton(" ");
dayUnit[i][j].setBackground(Color.WHITE);
add(dayUnit[i][j]);
}
}
}
public void set(int year, int month) {
calendar = new Calendar(year, month);
int monthArr[] = calendar.getCalendar();
for(int i = 0 ; i < 6 ; ++i) {
for(int j = 0 ; j < 7 ; ++j) {
if( monthArr[i * 7 + j] > 0 && monthArr[i * 7 + j] < 10)
dayUnit[i][j].setText( " " + Integer.toString(monthArr[i * 7 + j]) );
else if( monthArr[i * 7 + j] > 0 && monthArr[i * 7 + j] >= 10)
dayUnit[i][j].setText( Integer.toString(monthArr[i * 7 + j]) );
else
dayUnit[i][j].setText( " " );
}
}
}
}
class InputPanel extends JPanel {
JFrame parent;
JTextField yearField = new JTextField();
JTextField monthField = new JTextField();
JButton submit = new JButton("보기");
int year, month;
public InputPanel() {
setLayout( new GridLayout(1,3) );
add(yearField);
add(monthField);
add(submit);
submit.addActionListener( new SubmitListener() );
}
class SubmitListener implements ActionListener {
public void actionPerformed(ActionEvent ev) {
year = Integer.parseInt( yearField.getText() );
month = Integer.parseInt( monthField.getText() );
if( year > 0 && month > 0 )
calendarPanel.set(year, month);
}
}
}
InputPanel inputPanel = new InputPanel();
CalendarPanel calendarPanel = new CalendarPanel();
public CalendarFrame(String arg) {
super(arg);
getContentPane().setLayout( new BorderLayout() );
getContentPane().add(inputPanel, BorderLayout.NORTH);
getContentPane().add(calendarPanel, BorderLayout.CENTER);
setResizable(false);
setSize(400,260);
setVisible(true);
}
public static void main(String[] args) {
new CalendarFrame("만년달력");
}
}