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();
}
}
}四、关键代码: