package编程练习题chapter8;importjavax.swing.JOptionPane;public classExercise8_6 {static String output = "";public static voidmain(String[] args) {
String yearString= JOptionPane.showInputDialog(null,"Enter full year (i.e. 2001):", "Enter Year",
JOptionPane.QUESTION_MESSAGE);int year =Integer.parseInt(yearString);
String monthString= JOptionPane.showInputDialog(null,"Enter month in number between 1 and 12:", "Enter Month",
JOptionPane.QUESTION_MESSAGE);int month =Integer.parseInt(monthString);
printMonth(year, month);
JOptionPane.showMessageDialog(null, output);
}static void printMonth(int year, intmonth) {int startDay =getStartDay(year, month);int numOfDaysInMonth =getNumOfDaysInMonth(year, month);
printMonthTitle(year, month);
printMonthBody(startDay, numOfDaysInMonth);
}static int getStartDay(int year, intmonth) {int startDay1800 = 3;long totalNumOfDays =getTotalNumOfDays(year, month);return (int) ((totalNumOfDays + startDay1800) % 7);
}static long getTotalNumOfDays(int year, intmonth) {long total = 0;for (int i = 1800; i < year; i++)if(isLeapYear(i))
total= total + 366;elsetotal= total + 365;for (int i = 1; i < month; i++)
total= total +getNumOfDaysInMonth(year, i);returntotal;
}static int getNumOfDaysInMonth(int year, intmonth) {if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|| month == 10 || month == 12)return 31;if (month == 4 || month == 6 || month == 9 || month == 11)return 30;if (month == 2)if(isLeapYear(year))return 29;else
return 28;return 0;
}static boolean isLeapYear(intyear) {if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))return true;return false;
}static void printMonthBody(int startDay, intnumOfDaysInMonth) {int i = 0;for (i = 0; i < startDay; i++)
output+= " ";for (i = 1; i <= numOfDaysInMonth; i++) {if (i < 10)
output+= " " +i;elseoutput+= " " +i;if ((i + startDay) % 7 == 0)
output+= "\n";
}
output+= "\n";
}/**Print the month title, i.e. May, 1999*/
static void printMonthTitle(int year, intmonth) {
output+= " " + getMonthName(month) + ", " + year + "\n";
output+= "------------------------------------\n";
output+= " Sun Mon Tue Wed Thu Fri Sat\n";
}static String getMonthName(intmonth) {
String monthName= null;switch(month) {case 1:
monthName= "January";break;case 2:
monthName= "February";break;case 3:
monthName= "March";break;case 4:
monthName= "April";break;case 5:
monthName= "May";break;case 6:
monthName= "June";break;case 7:
monthName= "July";break;case 8:
monthName= "August";break;case 9:
monthName= "September";break;case 10:
monthName= "October";break;case 11:
monthName= "November";break;case 12:
monthName= "December";
}returnmonthName;
}
}