java基础实现动态日历

动态日历

package com.softeem.lesson06.oop.method;

import java.util.Scanner;

/**
 * 创建一个方法,计算从1900年1月1日到当前月份上一个月的总天数,并返回总天数值
 * @author 信仰斌
 *
 */
public class MyCalendar {
	Scanner sc = new Scanner(System.in);
	/**
	 * 判断是否是闰年
	 * @param y	year
	 * @return	true-闰年  false-平年
	 */
	public boolean isLeapYear(int y) {
		// 闰年则返回true
		return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
	}
	
	/**
	 * 计算每月的天数
	 * @param y	year
	 * @param m month
	 * @return	days
	 */
	public int getDaysOfMonth(int y, int m) {
		// 判断每月有多少天
		switch (m) {
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			// 闰年2月29天,平年28天
			return isLeapYear(y) ? 29 : 28;
			default :
				return 31;
		}
	
	}
	
	/**
	 * 到上一个月的总天数
	 * @param y	year
	 * @param m month
	 * @return days
	 */
	public int getDays(int y, int m) {
		// 初始总天数
		int days = 0;
		// 计算每年的天数
		for (int i = 1900; i < y; i ++) {
			// 闰年366,平年365
			days += isLeapYear(i) ? 366 : 365;
		}
		
		// 计算每月的天数
		for (int i = 1; i < m; i ++) {
			// 累加每月的天数
			days += getDaysOfMonth(y, i);
		}
		
		// 返回计算值
		return days;
	}
	
	// 绘制日历
	public void printCalendar() {
		System.out.print("输入年份:");
		int year = sc.nextInt();
		System.out.print("输入月份:");
		int month = sc.nextInt();
		
		// 打印标题
		System.out.println("=================="+ year +"【年】" + month + "【月】"+"=================");
		System.out.println("周一\t周二\t周三\t周四\t周五\t周六\t周日");
		// 打印当前月数之前的空格
		for (int i = 1; i <= (getDays(year,month) % 7); i++) {
			System.out.print("\t");
		}
		
		// 打印日历
		for (int i = 1; i <= getDaysOfMonth(year, month); i ++) {
			System.out.print(i + "\t");
			// 每隔七天换行重新输出
			if ((i + getDays(year,month)) % 7 == 0) {
				System.out.println();
			}
		}
	}
	
	public static void main(String[] args) {
		MyCalendar mc = new MyCalendar();
		
//		boolean b = mc.isLeapYear(2020);
//		System.out.println(b ? "是闰年" : "不是闰年");
//		
//		//	创建一个方法,获取一个指定年份,月份单月的总天数
//		int days = mc.getDaysOfMonth(2019, 2);
//		System.out.println(days);
//		
//		int year = 2020, month = 11;
//		int totalDays = mc.getDays(year, month);
//		System.out.println("1900年1月1日到" + year + "年" + month + "月共" + totalDays + "天");
		mc.printCalendar();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值