/*
 * Main.java
 *
 * Created on 2006年11月4日, 下午1:27
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package javaapplication1;
/**
 *
 * @author Karpar
 */
import    java.io.*;
public class PrintCalender {    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        InputStreamReader stdin = new InputStreamReader(System.in);
        BufferedReader console = new BufferedReader(stdin);
        int year = 0,month = 0;
        String s1,s2;
        try
        {   System.out.print ("Enter full year:");
            s1 = console.readLine();
            year = Integer.parseInt(s1);
            System.out.print ("Enter month in number between 1 and 12:");
            s2 = console.readLine();
            month = Integer.parseInt(s2);
        }
        catch(IOException ioex)
        {
            System.out.println("Input error");
            System.exit(1);
        }
        catch(NumberFormatException nfex)
        {
            System.out.println("\"" + nfex.getMessage() + "\" is not numeric");
            System.exit(1);
        }
            //Print calender for the month of the year.
        printMonth (year, month);
    }
    
    //Print the Calender 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 <>
            if(isLeapYear (i))
                total = total + 366;
            else
                total = total + 365;
        //Add day from Jan to The month prior to the calender
        for (int i = 0; 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;
    }
    //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 <>
            System.out.print("    ");
        for (i = 1 ;i <= numOfDaysInMonth ; i++){
            if(i <>
                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  Wed  Thu  Fri  Sat");
    }
    //Get the entire 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";break;
        }
        return monthName;
    }
}
 
aSimleCalender
KARPAR
Subscribe to:
Post Comments (Atom)
Twitter
Facebook
Flickr
RSS
0 评论: (+add yours?)
Post a Comment