求用JAVA做出万年历从已知的1900年1月1日开始

tykao_cyj 2010-09-23 01:01:53
并且在控制台能判断出是否为闰年,计算出月份的天数,距离1900年1月1日的天数,计算出月份的第一天是星期几,按照格式在控制台输出;
并且注释清楚;


希望各位帮忙理解下



可以加我QQ:249930954
或者发邮件:tykao_cyj@126.com tykao_cyj@163.com


愿与各位高手结缘!
...全文
595 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DriverKing 2011-03-24
  • 打赏
  • 举报
回复

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();
}
}

tykao_cyj 2010-09-23
  • 打赏
  • 举报
回复
package 万年历;
import java.util.*;
public class N02 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
System.out.println("请输入年份:");
int year =s.nextInt();
System.out.println("请输入月份:");
int month =s.nextInt();

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

int total=0;//输入年份之前总天数
for (int i = 1900; i < year; i++) {
if(i%4==0&&i%100!=0||i%400==0)
{
total=total+366;
}
else
{
total=total+365;
}

}
System.out.println(total);
int monthDay=0;//输入月份之前的天数
for(int i=1;i<=month;i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;
break;
case 4:
case 6:
case 9:
case 11:
day=30;
break;
case 2:
if(isRn)
{
day=29;
}
else
{
day=28;

}

}
if(i<month)
{
monthDay=monthDay+day;

}
}
System.out.println(monthDay);
total=total+monthDay;//距离1900年1月1日的天数
// System.out.println(total);
int firstDay;//存储当月第一天
int temp = 1+total%7;
if(temp==7)
{
firstDay=0;
}
else
{
firstDay=temp;
}

/* 输出日历 */
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int nullNo = 0; nullNo < firstDay; nullNo++) {
System.out.print("\t"); // 输出空格
}
for (int i = 1; i <= day; i++) {
System.out.print(i + "\t");
if ((total + i) % 7 == 6) { // 如果当天为周六,输出换行
System.out.println();
}
}
}

}
tykao_cyj 2010-09-23
  • 打赏
  • 举报
回复
大哥注释呀
一缕疯狂0 2010-09-23
  • 打赏
  • 举报
回复
package com.wxws.sms;
import java.util.Scanner;
public class wannianli {




/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

// 第一阶段:
Scanner input = new Scanner(System.in);
System.out.println("请输入你的年份:");
int year = input.nextInt();
System.out.println("请输入你的月份:");
int month = input.nextInt();
int days = 0;// 保存月份的天数
boolean ifRn = false;//
// String ifIsRn="平年";
int totalDays = 0;// 保存总天数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
ifRn = true;
// ifIsRn="闰年";
}
// 第二阶段:
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (ifRn) {
days = 29;
} else {
days = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
}
// 第三阶段
// 1、计算从1900.1.1到你所输入的年份的前一年的总天数
for (int startYear = 1900; startYear < year; startYear++) {
if (startYear % 4 == 0 && startYear % 100 != 0
|| startYear % 400 == 0) {
totalDays += 366;
} else {
totalDays += 365;
}
}
// 2、计算从1月份到你所输入的月份之前的一个月的天数
for (int i = 1; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
totalDays += 31;
break;
case 2:
if (ifRn) {
totalDays += 29;
} else {
totalDays += 28;
}
break;
case 4:
case 6:
case 9:
case 11:
totalDays += 30;
break;
}

}
totalDays += 1;
System.out.println(totalDays);
// 第四个阶段
int weekDay = totalDays % 7;

System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 0; i < weekDay; i++) {
System.out.print("\t");
}

for (int i = 1; i <= days; i++) {

System.out.print(i + "\t");
if ((i+weekDay)%7==0) {
System.out.println();
}
}

}

}
tykao_cyj 2010-09-23
  • 打赏
  • 举报
回复
晕哦 老师讲了的 关键是他讲的不清楚 他把那个传给我们了 但是没怎么讲清楚
南瓜饼 2010-09-23
  • 打赏
  • 举报
回复
你是北大青鸟的吧 要自己完成作业啊 呵呵
课程内容:本课程是《Java工程师必学系列课程》的第6部分,主要讲解Java语言中中新旧两代期时间相关的类、期时间相关的处理方法、历法和时间计算的常识,在课程的最后还安排了实战项目本课程涉及的主要内容可以分为四部分:一、Java语言旧期时间系统二、Java8新期时间系统三、期、时间、历法基础知识四、项目课程说明:在开发Java程序的过程中,无论做什么类型的项目,基本上都会处理与期和时间相关的问题。既然期时间问题的处理已经成了程序必须要掌握的技能,那我们就必须认真深入的学习期时间的计算和处理方法。本课程将深入讲解Java语言新旧两代期时间系统的相关知识。在讲解的过程中,不仅仅讲解如何调用各种类所提供的方法去处理相关问题,更是从原理上深入分析了这些类的设计原理,以及要如何避免在实战中踩到那些非常隐蔽的大坑。此外,除了讲解期时间相关工具类的使用,本课程还向广大学员普及了一些必要的期、时间和历法的相关知识。让学员能够从根本上理解期时间算法的设计思路。同时,本课程在最后一部分,安排了非常精彩的、完整的项目,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握期时间计算和处理的相关知识,并能提高实际的编码水平。配套福利:软件的完整源码环境配置要求:学习本课程需安装JDK13或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧