日期:2014-05-20  浏览次数:20807 次

万年历谁会做;请高手指点;

请选择年份;2003
请选择月份; 2 平年和闰年显示 计算输入的月份到1900年的天数










星期日 星期一 星期二 星期三 星期四 星期五 星期六 

  1 2 3 4 5  
  6 7 8 9 10 11 12
  13 14 15 16 17 18 19
  20 21 22 23 24 25 26
  27 28 29 30 31

------解决方案--------------------
package 自我练习.对象操作;

public class Calendar
{
int year; //年 2010
int month; //月 6

//显示日历
public void show()
{
int days=this.getDays(year, month);

int weekday=this.getWeekday(); //假设1号是星期三

System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");

//控制输出1号之前的空格
for(int i=1;i<=weekday;i++)
{
System.out.print("\t");
}

//输出每一天
for(int i=1;i<=days;i++)
{
System.out.print(" " + i +"\t");

if((weekday+i)%7==0)
{
System.out.print("\n");
}
}
}

//判断是否是闰年
public boolean isLeapYear(int year) //year=2010
{
if(year%4 ==0 && year%100!=0 || year%400==0)
{
return true;
}
else
{
return false;
}

}

//得到某年某月的天数
public int getDays(int year,int month)
{
int days=0;

if(month==1 ||month==3 || month==5 ||month==7 ||month==8 ||month==10 ||month==12 )
{
days=31;
}
else if (month==4 ||month==6 || month==9 ||month==11)
{
days=30;
}
else if (month==2)
{
if(year%4 ==0 && year%100!=0 || year%400==0)
{
days=29;
}
else
{
days=28;
}
}

return days;
}

//计算距1900-1-1的总天数
public int sumDays()
{
int sumDays=0; //距1900年1月1日相差的天数

for(int i=1900;i<year;i++) // 在这的i表示,相差的年份变化
{
if(isLeapYear(i)==true)
{
sumDays=sumDays+366;
}
else
{
sumDays=sumDays+365;
}
}

for(int i=1;i<month;i++) // 在这的i表示,零几个月的变化
{
sumDays=sumDays+getDays(year, i);

}

return sumDays;

}

//(相差的天数+1)%7 ,1号是星期几
public int getWeekday()
{
int weekday=(sumDays()+1)%7;

return weekday;
}

}

------解决方案--------------------
Java code

package DK_Date;

import java.util.Date;

public class DK_Date {

    public int Year; // 年份
    public int Month; // 月份
    public int Day; // 日期
    public int Days; // 当月有几天
    public int Week; // 当月第一天为周几

    public void getCurDate() {
        Date date = new Date();

        this.Year = date.getYear() + 1900;
        this.Month = date.getMonth() + 1;
        this.Day = date.getDate();
    }

    /**
     * 判断是否为闰年
     * 
     * @param year
     * @return 如果为真则为闰年,反之为平年
     */
    public boolean isRun(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )
            return true;
        return false;
    }

    /**
     * 计算当月天数
     * 
     * @param month
     *            月份
     * @param year
     *            年份
     */
    public void getDays(int month, int year) {
        switch (month) {
        case 2:
            if (isRun(year))
                this.Days = 29;
            else
                this.Days = 28;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            this.Days = 30;
            break;
        default:
            this.Days = 31;
            break;
        }
    }

    /**
     * 计算当月第第一天是一年中的第几天
     * 
     * @param month
     * @param year
     * @return
     */
    public int getYearDays(int month, int year) {
        int days = 1;
        for (int i = 1; i < month; i++) {
            switch (i) {
            case 2:
                if (isRun(year))
                    days += 29;
                else
                    days += 28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days += 30;
                break;
            default:
                days += 31;
                break;
            }
        }
        return days;
    }

    /**
     * 计算1900年到当年1月1日经过了多少天
     * 
     * @param year
     *            当前年份
     * @return
     */
    public int getYearsDay(int year) {
        int days = 0;
        for (int i = 1900; i < year; i++) {
            if (isRun(i))
                days += 366;
            else
                days += 365;
        }
        return days;
    }

    /**
     * 计算当月第一天为周几
     * 
     * @param year
     *            年份
     * @param month
     *            月份
     */
    public void getWeek(int year, int month) {
        int days = getYearsDay(year) + getYearDays(month, year);
        this.Week = days % 7 == 0 ? 7 : days % 7;
    }
}


package DK_Date;

import java.util.Scanner;

public class DateUI {

    private DK_Date date;
    Scanner scanner = new Scanner(System.in);

    public void initial() {
        date = new DK_Date();
        date.getCurDate();
        date.getWeek(date.Year, date.Month);
        date.getDays(date.Month, date.Year);
    }

    public void show() {
        System.out.println("◆◇◆◇◆◇    DK 万年历    ◆◇◆◇◆◇\n");
        System.out.println("北京时间:" + date.Year + "年" + date.Month + "月"
                + date.Day + "日\n");
        getShow(date.Week, date.Days);
        while (true) {
            System.out.println("\n请输入年份:");
            date.Year = scanner.nextInt();
            System.out.println("请输入月份:");
            date.Month = scanner.nextInt();
            date.getWeek(date.Year, date.Month);
            date.getDays(date.Month, date.Year);
            getShow(date.Week, date.Days);
        }
    }

    public void getShow(int week, int days) {
        System.out.println("周日\t周一\t周二\t周三\t周四\t周五\t周六\t");
        if (week != 7) {
            for (int i = 0; i < week; i++) {
                System.out.print("\t");
            }
        }
        for (int i = 1; i <= days; i++) {
            System.out.print(i + "\t");
            if (i % 7 == 7 - week) {
                System.out.println();
            }
        }
    }
}

package DK_Date;

public class Start {

    public static void main(String[] args)
    {
        DateUI date = new DateUI();
        date.initial();
        date.show();
    }
}