⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printcalendar.java

📁 此源码为机械工业出版社出版的《Java语言程序设计》第三版所配套的书中所有源代码。
💻 JAVA
字号:
// PrintCalendar.java: Print a calendar for a given month in a year
public class PrintCalendar
{
  // Main method
  public static void main(String[] args)
  {
    // The user enters year and month
    System.out.print("Enter full year: ");
    int year = MyInput.readInt();
    System.out.print("Enter month in number between 1 and 12: ");
    int month = MyInput.readInt();

    // Print calendar for the month of the year
    printMonth(year, month);
  }

  // Print the calendar for a month in a year
  static void printMonth(int year, int month)
  {
    // Get start day of the week for the first date in the month
    int startDay = getStartDay(year, month);

    // Get number of days in the month
    int numOfDaysInMonth = getNumOfDaysInMonth(year, month);

    // Print headings
    printMonthTitle(year, month);

    // Print body
    printMonthBody(startDay, numOfDaysInMonth);
  }

  // Get the start day of the first day in a month
  static int getStartDay(int year, int month)
  {
    // Get total number of days since 1/1/1800
    int startDay1800 = 3;
    long totalNumOfDays = getTotalNumOfDays(year, month);

    // Return the start day
    return (int)((totalNumOfDays + startDay1800) % 7);
  }

  // Get the total number of days since Jan 1, 1800
  static long getTotalNumOfDays(int year, int month)
  {
    long total = 0;

    // Get the total days from 1800 to year -1
    for (int i = 1800; i < year; i++)
    if (isLeapYear(i))
      total = total + 366;
    else
      total = total + 365;

    // Add days from Jan to the month prior to the calendar month
    for (int i = 1; i < month; i++)
      total = total + getNumOfDaysInMonth(year, i);

    return total;
  }

  // Get the number of days in a month
  static int getNumOfDaysInMonth(int year, int month)
  {
    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; // If month is incorrect.
  }

  // Determine if it is a leap year
  static boolean isLeapYear(int year)
  {
    if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
      return true;

    return false;
  }

  // Print month body
  static void printMonthBody(int startDay, int numOfDaysInMonth)
  {
    // Pad space before the first day of the month
    int i = 0;
    for (i = 0; i < startDay; i++)
      System.out.print("    ");

    for (i = 1; i <= numOfDaysInMonth; i++)
    {
      if (i < 10)
        System.out.print("   " + i);
      else
        System.out.print("  " + i);

      if ((i + startDay) % 7 == 0)
        System.out.println();
    }

    System.out.println();
  }

  // Print the month title, i.e. May, 1999
  static void printMonthTitle(int year, int month)
  {
    System.out.println("         "+getMonthName(month)+", "+year);
    System.out.println("-----------------------------");
    System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
  }

  // Get the English name for the month
  static String getMonthName(int month)
  {
    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";
    }

    return monthName;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -