日历打印项目
简介
本项目运用了java基础语法, 计算从1990.1月到目标年月前一个的总天数计算出本月第一天星期几,然后设置空格,做到日历效果,其中还需要判断闰年平年,以便计算天数。
代码类
package com.softeem.lesson05.example;
/**
* java基础语法 数据类型、条件分支、循环语句、运算符 面向对象 类、对象、属性、方法、封装 计算从1990.1月到目标年月前一个的总天数
*
* @author Huaazai
*
*/
// 日历
public class MyCalendar {
private int year;
private int month;
// 构造器 、初始化目标年月
public MyCalendar(int y, int m) {
year = y;
month = m;
}
// 判断是否闰年
public boolean isLeapYear(int y) {
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
return true;
}
return false;
}
// 计算从1900.1到目标年月前一月的总天数
public int getTotalDaysFrom1900() {
int days = 0;
// 计算整年天数
for (int i = 1900; i < year; i++) {
days += isLeapYear(i) ? 366 : 365;
}
// 计算整月天数
for (int i = 1; i < month; i++) {
days += getDayOfMonth(i);
}
return days;
}
// 根据提供的月份获取当月的总天数
private int getDayOfMonth(int i) {
switch (i) {
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeapYear(year) ? 29 : 28;
default:
return 31;
}
}
// 打印日历
public void print() {
// 获取输出当前月信息时需要输出的空格数
int spaces = getTotalDaysFrom1900() % 7;
// 获取当前月份总天数
int days = getDayOfMonth(month);
// 打印输出
System.out.println("==========SOFTEEM万年历【" + year + "】年【" + month + "】月==========");
System.out.println("一\t二\t三\t四\t五\t六\t日");
System.out.println("==================================================");
// 初始化计数器,统计是否到达7的倍数
int count=0;
for (int i = 0; i < spaces; i++) {
System.out.print("\t");
count++;
}
//输出日期
for(int i=1;i<=days;i++){
System.out.print(i+"\t");
count++;
if(count%7==0){
System.out.println();
}
}
}
}
测试类
package com.softeem.lesson05.example;
public class TestCalendar {
public static void main(String[] args) {
MyCalendar mc = new MyCalendar(2019, 7);
mc.print();
}
}
测试结果