实践内容——万年历
一、实践要求
使用Java语言编写Java程序,输出××××年××月对应的日历。效果如下图所示。
提示:
1、判断润年(四年一闰;百年不闰,四百年再闰)
2、键盘读数据:
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
3、本案例目的是综合使用Java控制结构。
4、1900年1月1日是星期一。
二、万年历的实现步骤:
(1)从键盘读入一个整数的要查询的年份year和月份month。
(2)计算历史从1900年1月1日至year-1年12月31日,历时多少天?
(3)计算从指定年份的1月1日至指定月份month之前总共多少天?
运行代码:
(4)计算month月份的第一天是星期几?
(5)打印year年month月份的日历。
运行代码:
import java.util.Scanner;
public class Mylalendar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//一、 1. 输入要查询的年份和月份
System.out.print("请输入要查询的年份:");
int year = sc.nextInt();
System.out.print("请输入要查询的月份:");
int month = sc.nextInt();
//二、 处理:(1)year年month月1日是星期几;(2)year年month月有多少天
//2.计算1900年1月1日到year-1年12月31日,共计多少天
int sum1 = 0;
for(int y=1900;y<year;y++) {
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
//满足闰年的条件
sum1 += 366;
}else {
//平年
sum1 += 365;
}
}
//3.求year年1月至month-1月共计多少天
int sum2 = 0;
for(int m = 1;m < month;m ++) {
int days =0;//m月份的天数
if(m == 2) {
days = (year % 4 == 0 && year % 400 != 0 || year % 400 == 0)? 29:28;
}else if (m == 4 || m == 6 || m == 9 || m ==11) {
days = 30;
}else {
days = 31;
}
sum2 += days;
}
//4.计算month月份的第1天是星期几?
int day = (sum1 + sum2 +1) % 7;//0:星期日。1~6:星期一~星期六。
//year年month月有多少天?
int days = 0;
switch(month) {
case 2:days = (year % 4 == 0 && year % 400 != 0 || year % 400 == 0)? 29:28;break;
case 4:
case 6:
case 9:
case 11:days = 30;break;
default:days = 31;break;//此处break可省略。
}
//三、 打印输出year年month月的日历
System.out.println("\t\t"+year+"年"+month+"月\n------------------------------------------------------");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for(int i = 0;i < day;i ++) {
System.out.print("\t");
}
for(int i = 1;i <= days;i ++) {
System.out.print(i+"\t");
if((i + day) % 7 == 0)
System.out.println();
}
sc.close();
}
}