使用Java实现万年历的格式打印

一、题目要求:
1.定义万年历类,定义年月日属性
2.编写接收年判断是否是闰年的方法,并返回一个布尔值
3.编写接收年月日计算总天数方法,并返回总天数
4.编写接收年月日输出该日是星期几方法,已知1900年1月1日是星期一。
5.编写可无限循环接收年月日打印该月日历方法。
二、难点分析:
1.先判断该年是平年还是闰年
2.再判断该年十二个月有多少天
3.再 得到该天是这一年的第几天
4. 计算当年距离1900年1月1日的总天数
5. 再算当年的总天数
6.最后格式输出
三、代码实现:
import java.util.Scanner;
/**
 * 1. 定义万年历类,定义年月日属性
    2.编写接收年判断是否是闰年的方法,并返回一个布尔值
    3.编写接收年月日计算总天数方法,并返回总天数
    4.编写接收年月日输出该日是星期几方法,已知1900年1月1日是星期一。
    5.编写可无限循环接收年月日打印该月日历方法。
 * @author caiyu
 *
 */
public class shixun10 {
	Scanner i = new Scanner(System.in);
	public int year;
	public int month;
	public int day;
	// 判断是否为闰年
	public boolean isRun(int year) {
		boolean isRn = false;
		isRn = ((year % 4 == 0) && !(year % 100 == 0) || year % 400 == 0);
		return isRn;
	}
	// 该月有多少天
	public int monthSumDay(int yaar, int month) {
		int day = 0;
		switch (month) {
		case 2:
			if (isRun(year)) {
				day = 29;
			} else {
				day = 28;
			}
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			day = 30;
			break;
		default:
			day = 31;
			break;
		}
		return day;
	}
	// 得到至这一天是这一年的多少天
	public int totalDay(int year, int month, int day) {
		int sumDay = 0;// 总天数
		// 难点一
		for (int i = 1900; i < year; i++) {
			if (isRun(i)) {
				sumDay = sumDay + 366;// 闰年366天
			} else {
				sumDay = sumDay + 365;// 平年365天
			}
		}
		// 计算当年距离1900年1月1日的总天数
		// 再算当年的总天数
		int beforeDay = 0;
		int d = 0;// 当月日期数
		// 难点二
		for (int i = 1; i < month; i++) {
			switch (i) {
			case 2:
				if (isRun(year)) {
					d = 29;
				} else {
					d = 28;
				}
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				d = 30;
				break;
			default:
				d = 31;
				break;
			}// switch 结束
			beforeDay = beforeDay + d;
		}// 当年的总天数 循环结束
		// 累加求出距离 1900年1月1日的总天数
		sumDay = sumDay + beforeDay;
		return sumDay;
	}
	// 接收年月日输出该日是星期几方法,已知1900年1月1日是星期一
	public int weekNum(int year, int month, int day) {
		int thisMonthFirstDay = 0;// 当月第一天是星期几
		int temp = 1 + totalDay(year, month, day) % 7;
		if (temp != 7) {
			thisMonthFirstDay = temp;
		}
		return thisMonthFirstDay;
	}
	// 接收年月日打印该月日历方法
	public void printCalendar(int year, int month, int day) {
		// 调用上面的方法
		int mfd = weekNum(year, month, day);
		int sumDay = totalDay(year, month, day);
		int monthSum = monthSumDay(year, month);
		/* 格式输出日历 */
		System.out.println("\n星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		for (int i = 0; i < mfd; i++) {
			System.out.print("\t");
		}
		for (int i = 1; i <= monthSum; i++) {
			System.out.print(i + "\t");
			// 难点三
			if ((sumDay + i - 1) % 7 == 5) {// 是星期六 则要换行
				System.out.println();
			}
		}
		System.out.println();
	}
	// 显示万年历
	public void show() {
		System.out.println("******JVav万年历程序*****");
		String isRun = "y";
		while (isRun != "n") {
			System.out.print("请输入年:");
			int year = i.nextInt();
			System.out.print("请输入月:");
			int month = i.nextInt();
			System.out.print("请输入日:");
			int day = i.nextInt();
			this.printCalendar(year, month, day);
			System.out.print("\n是否继续(y/n):");
			isRun = i.next();
		}
	}
}
四、关键代码:
使用Java实现万年历的格式打印_第1张图片

使用Java实现万年历的格式打印_第2张图片
使用Java实现万年历的格式打印_第3张图片
使用Java实现万年历的格式打印_第4张图片


你可能感兴趣的:(Java,java,万年历)