1. 程式人生 > >使用Java實現萬年曆的格式列印

使用Java實現萬年曆的格式列印

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();
		}
	}
}
四、關鍵程式碼: