当前位置: 代码迷 >> J2SE >> 万年历哪位高手会做;请
  详细解决方案

万年历哪位高手会做;请

热度:126   发布时间:2016-04-24 12:24:53.0
万年历谁会做;请高手指点;

请选择年份;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();    }}
  相关解决方案