编程小白学习之路,供参考
import java.util.Scanner;
/**
* 输入年,月,打印该月的日历
* 采用自顶向下设计,自下向上实现的方法
*TODO
* @author swjtu
* @project JavaTest3
* @date 2019年3月28日
* @remarks TODO
*/
public class PrintCalender {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year,month;
System.out.print("请输入打印年份:");
year = input.nextInt();
System.out.print("请输入打印月份:");
month = input.nextInt();
printMonth(year,month);
}
public static void printMonth(int year,int month) {
printMonthTitle(year,month);
printMonthBody(year,month);
}
//打印日历的标题
public static void printMonthTitle(int year,int month) {
System.out.println(" "+ getMonthName(month) +" " +year);
System.out.println("-------------------------------");
System.out.println("Sun"+" "+"Mon"+" "+"Tue"+" "+"Wed"+" "+"Thu"+" "+"Fri"+" "+"Sat");
}
//打印日历主体
public static void printMonthBody(int year,int month) {
int startDay= getStartDay(year,month);
int dayOfMonth = getNumberOfDaysInmonth(year,month);
for (int i = 0; i < startDay; i++) {
System.out.printf(" ");
}
for (int j = 1; j <=dayOfMonth; j++) {
System.out.printf("%-4d",j);
if((j+startDay)%7==0)
System.out.println();
}
System.out.println();
}
//返回月份的名字
public static String getMonthName(int month) {
String monthName="";
switch (month) {
case 1:
monthName="January";
break;
case 2:
monthName="Febuary";
break;
case 3:
monthName="March";
break;
case 4:
monthName="April";
break;
case 5:
monthName="May";
break;
case 6:
monthName="June";
break;
case 7:
monthName="July";
break;
case 8:
monthName="August";
break;
case 9:
monthName="September";
break;
case 10:
monthName="October";
break;
case 11:
monthName="November";
break;
case 12:
monthName="Deceber";
break;
default:
break;
}
return monthName;
}
//返回一个月的第一天星期几
public static int getStartDay(int year,int month) {
final int StartDay_1800=3;
int startDay;
startDay=(getTotalNumberOfDays(year,month)+StartDay_1800)%7;
return startDay;
}
//返回现在到1800.1.1的总天数
public static int getTotalNumberOfDays(int year,int month) {
int totalNumberOfDays=0;
for (int year1 = 1800; year1 < year; year1++) {
if(isLeapyear(year1))
totalNumberOfDays+=366;
else
totalNumberOfDays+=365;
}
for (int month1 =1; month1 < month; month1++) {
totalNumberOfDays+=getNumberOfDaysInmonth(year,month1);
}
return totalNumberOfDays;
}
//返回每个月份的天数
public static int getNumberOfDaysInmonth(int year,int month) {
int day;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
day=31;
return 31;
}
else if(month==4||month==6||month==9||month==11) {
day=30;
return day;
}
else if(month==2&&isLeapyear(year))
return 29;
else
return 28;
}
//判断是不是闰年
public static boolean isLeapyear(int year) {
if(year%400==0||(year%4==0&&year%100!=0))
return true;
return false;
}
}