1 importjava.util.Scanner;2 public classPrintCalendar{3 public static voidmain(String[] args){4 Scanner input=newScanner(System.in);5
6 System.out.print("Enter full year(e.g.,2011): ");7 int Year=input.nextInt();8
9 System.out.print("Enter month as a number between 1 and 12: ");10 int Month=input.nextInt();11
12 //int year=inputYear();13 //int month=inputMonth();
14 printMonth(Year, Month);15 }16 /*
17 public static int inputYear(){18 boolean flag=true;19 Scanner input=new Scanner(System.in);20 while(flag){21 System.out.print("Enter full year(e.g.,2011): ");22 int iYear=input.nextInt();23 if(iYear>=1800){24 flag = false;25 }26 }27 return iYear;28 }29
30 public static int inputMonth(){31 boolean flag=true;32 Scanner input=new Scanner(System.in);33 while(flag){34 System.out.print("Enter month as a number between 1 and 12: ");35 int iMonth=input.nextInt();36 if(iMonth>=1 && iMonth<=12){37 flag = false;38 }39 }40 return iMonth;41 }*/
42
43 public static void printMonth(int year, intmonth){44 printMonthTitle(year, month);45 printMonthBody(year,month);46 }47
48 public static void printMonthTitle(int year, intmonth){49 System.out.println("\t" + getMonthName(month)+"\t" +year);50 System.out.println("-----------------------------------");51 System.out.println("Mon Tue Wed Thu Fri Sat Sun");52 }53 public static String getMonthName(intmonth){54 String monthName="";55 switch(month){56 case 1: monthName="January"; break;57 case 2: monthName="February"; break;58 case 3: monthName="March"; break;59 case 4: monthName="April"; break;60 case 5: monthName="May"; break;61 case 6: monthName="June"; break;62 case 7: monthName="July"; break;63 case 8: monthName="August"; break;64 case 9: monthName="September"; break;65 case 10: monthName="October"; break;66 case 11: monthName="November"; break;67 case 12: monthName="December"; break;68 }69
70 returnmonthName;71 }72
73 public static void printMonthBody(int year, intmonth){74
75 //Get start day of the week for the first date int the month
76 int startDay=getStartDay(year,month);77
78 //Get number of days in the month
79 int numberOfDaysInMonth =getNumberOfDaysInMonth(year,month);80
81 //Pad space before the first day of the month
82 int i=0;83 for(i=1; i< startDay; i++){84 System.out.print(" ");85 }86 for(i=1; i<=numberOfDaysInMonth;i++){87 System.out.printf("%-4d", i);88
89 if((i+startDay-1)%7==0)90 System.out.println();91 }92 System.out.println();93 }94
95 /**Get the start day of month/1/year*/
96 public static int getStartDay(int year, intmonth){97 final int START_DAY_FOR_JAN_1_1800 = 3;98
99 //Get the total number of days from 1/1/1800 to month/1/year
100 int totalNumberOfDays=getTotalNumberOfDays(year,month);101
102 //Return the start day for month/1/year
103 return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7;104 }105
106 /**Get the total number of days from January 1, 1800;*/
107 public static int getTotalNumberOfDays(int year, intmonth){108 int total = 0;109
110 //get total number of days from 1800 to 1/1/year
111 for(int i = 1800; i
115 total = total + 365;116 }117
118 //add days from January to the month prior to the calendar month
119 for(int i = 0; i
122 returntotal;123 }124
125 /**Get the number of days in a month*/
126 public static int getNumberOfDaysInMonth(int year, intmonth){127 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)128 return 31;129 if(month==4||month==6||month==9||month==11)130 return 30;131 if(month==2)132 return isLeapYear(year)?29:28;133 return 0;134 }135
136 /**Determine if it is a leap year*/
137 public static boolean isLeapYear(intyear){138 return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);139 }140 }