方法调用:万年历
文章目录
将万年历实现的各个功能封装成独立的功能模块,便于功能的扩展和可读性增强
代码
import java.util.Scanner;
public class Test03{
public static void main(String [] args){
/**
方法版 ,万年历
*/
Scanner sc = new Scanner(System.in);
System.out.println("请您输入年:");
int year = sc.nextInt();
System.out.println("请您输入月:");
int month = sc.nextInt();
int allAay= getDay(1900,year,1,month);
int week = getWeek(allAay);
int day = getDayOfMonth(year,month);
printCalendar(year,month,week,day);
}
//打印日历
public static void printCalendar(int year,int month,int week,int day){
System.out.println(year+"年"+month+"月");
System.out.println("一\t二\t三\t四\t五\t六\t七");
int count = 0; //记录打印列数,到7换行
for(int i = 1;i<week;i++){
System.out.print("\t");
count++;
}
for(int i =1;i<=day;i++){
System.out.print(i+"\t");
count++;
if(count%7 ==0){
System.out.println("\n");
}
}
}
//获取周几
public static int getWeek(int allDay){
int week = allDay%7+1;
if(week == 0){
week = 7;
}
return week;
}
//获取总天数
public static int getDay(int startYear,int endYear,int startMonth,int endMonth){
int allDay = dayOfYear(startYear,endYear)+dayOfMonth(endYear,startMonth,endMonth);
return allDay;
}
//获取年差天数
public static int dayOfYear(int startYear,int endYear){
int allDayOfYear = 0;
for(int i = startYear ; i<endYear;i++){
if(isLeap(i)){
allDayOfYear += 366;
}else{
allDayOfYear += 365;
}
}
return allDayOfYear;
}
//获取月差天数
public static int dayOfMonth(int year,int startMonth,int month){
int dayOfMonth = 0;
for(int i=startMonth;i<month;i++){
dayOfMonth = getDayOfMonth(year,i);
}
return dayOfMonth;
}
//获取当月天数
public static int getDayOfMonth(int year,int month){
int getDayOfMonth = 0;
switch(month){
case 1 :case 3:case 5:case 7:case 8:case 10:case 12:
getDayOfMonth += 31;
break;
case 4:case 6:case 9:case 11:
getDayOfMonth += 30;
break;
case 2 :
if(isLeap(year)){
getDayOfMonth += 29;
}else{
getDayOfMonth += 28;
}
}
return getDayOfMonth;
}
//判断是否闰年
public static boolean isLeap(int year){
if(year%4==0 && year%100 != 0 || year%400==0){
return true;
}else{
return false;
}
}
}