import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
/**
* 万年历 输入一个年份,再输入一个月份,把那个月的日历打印出来,(1900年1月1日是星期一)。
* a:先输出提示语句,并接受用户输入的年、月。
* b:根据用户输入的年,先判断是否是闰年。(闰年2月有29天,平年2月有28天);
* C:根据用户输入的月来判断月的天数。
* D:用循环计算用户输入的年份距1900年1月1日(星期一)的总天数。
* E:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。*
* F:相加D与E的天数,得到总天数。
* G:用总天数来计算输入月的第一天的星期数。
* H:根据G的值,格式化输出这个月的日历!
* * H提示:
* 1.如果当月1日如果不是周日先打印第一行,再打印后面的
* (1)startDay=0~5,先打印若干个空格,startDay==0时,是星期一,应该在星期日处打印一个空格,以此类推[0~startDay+1)
* (2)再打印第一行的日期[1,7-startDay)
* (3)打印换行
* (4)第一行打印的天数为:1~(6-startDay),所以第二行从7-startDay开始打印,打印到当月总天数为止,每7个换行
* 2.如果startDay是6(周日),直接从1日开始打印到最后一天,每7个换行 提示:当月1日如果不是周日,应循环输出\t以便对齐
* 当月1日的星期数加上日期的号,如果能被7整除,则应换行.
*/
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println();
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
int yearSum = yearSum(year);
int monthSum = monthSum(year, month);
int daySum = yearSum + monthSum;
int oneDay = whatDay(daySum + );
System.out.println("\t" + "\t" + "\t" + year + "年" + month + "月");
System.out.println("----------------------------------------------------");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
print(year, month, oneDay);
}
}
// 判断该年份1月1日到1900年1月1日的总天数
public static int yearSum(int year) {
int yearSum = ;
if (year < ) {
System.out.println("请输入大于1900年的年份:");
} else {
for (int i = ; i < year; i++) {
if (isLeapYear(i)) {
yearSum += ;
} else {
yearSum += ;
}
}
}
return yearSum;
}
// 判断该月份到1月1日的总天数
public static int monthSum(int year, int month) {
int monthSum = ;
if (month < || month > ) {
System.out.println("请输入1~12的正确月份:");
} else {
for (int i = ; i < month; i++) {
monthSum += monthNumber(year, i);
}
}
return monthSum;
}
// 判断年份是否为闰年
public static boolean isLeapYear(int year) {
if ((year % == && year % != ) || year % == ) {
return true;
} else {
return false;
}
}
// 判断月份的天数
public static int monthNumber(int year, int month) {
int monthNumber = ;
switch (month) {
case :
case :
case :
case :
case :
case :
case :
monthNumber = ;
break;
case :
case :
case :
case :
monthNumber = ;
break;
case :
if (isLeapYear(year)) {
monthNumber = ;
} else {
monthNumber = ;
}
break;
}
return monthNumber;
}
// 判断该日为星期几
public static int whatDay(int daySum) {
int whatDay = ;
if (daySum % == ) {
whatDay = ;
} else {
whatDay = daySum % ;
}
return whatDay;
}
// 打印日历
public static void print(int year, int month, int oneDay) {
// 打印空格
for (int i = ; i < oneDay; i++) {
System.out.print("" + "\t");
}
int day = monthNumber(year, month);
for (int i = ; i <= day; i++) {
if ((oneDay + i - ) % == ) {
System.out.println();
}
System.out.print(" " + i + "\t");
}
}
}