Java实现打印日历的功能

  编写一个程序,显示给定年月的日历。程序提示用户输入年份和月份,然后显示该月的整个日历。

  代码:

  1 import java.util.Scanner;
  2 public class PrintCalendar{
  3     public static void main(String[] args){
  4         Scanner input=new Scanner(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, int month){
 44         printMonthTitle(year, month);
 45         printMonthBody(year,month);
 46     }
 47     
 48     public static void printMonthTitle(int year, int month){
 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(int month){
 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         return monthName;
 71     }
 72     
 73     public static void printMonthBody(int year, int month){
 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, int month){
 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, int month){
108         int total = 0;
109         
110         //get total number of days from 1800 to 1/1/year
111         for(int i = 1800; i<year; i++){
112             if(isLeapYear(i))
113                 total = total + 366;
114             else
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<month;i++)
120             total +=getNumberOfDaysInMonth(year, i);
121         
122         return total;
123     }
124     
125     /** Get the number of days in a month */
126     public static int getNumberOfDaysInMonth(int year, int month){
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(int year){
138         return year % 400 == 0  ||  (year % 4 == 0  &&  year % 100 != 0);
139     }
140 }

执行效果:

猜你喜欢

转载自www.cnblogs.com/shuitailiang/p/10639982.html