很多刚学Java的小伙伴都估摸回去实现万年历这个功能,至少怎么实现这个功能,这就需要了解万年历的平闰年的计算方法等。
万年历的实现主要是靠循环实现,程序基本上也都加了注解,而且尽可能的对程序进行了优化,大家有需要可以参考一下。
import java.util.Scanner;
public class MyCalendar {
/*
* 功能:万年历
* 控制台:输入年份和月份,打印出该月的日历
* 实现步骤:判断平闰年 计算总天数 打印月的第一天星期几 打印空格 打印
* */
public static void main(String[] args) {
MyCalendar calendar = new MyCalendar();
calendar.menu();
}
//主菜单方法
public void menu(){
int year; //年
int month; //月份
int day; //天
int totalDays; //这个月第一天离1900-1-1过了多少天
int monthDays; //该月的总天数
Scanner in = new Scanner(System.in);
System.out.println("********欢迎使用万年历**********");
System.out.println("请输入年份:");
year = in.nextInt();
System.out.println("请输入月份:");
month = in.nextInt();
System.out.println("你输入的是"+year+"年"+month+"月");
if(isRun(year)){
System.out.println(year+"年"+"是闰年!");
}else{
System.out.println(year+"年"+"是平年!");
}
System.out.println("*****************************");
monthDays = getMonthDays(year, month);
totalDays = getTotalDays(year, month);
totalDays++; //总天数
day = totalDays%7; //得到星期几
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
int iCount = 0;//计数器,用来决定是否换行
for (int i = 0; i < day; i++) {
System.out.print("\t");
iCount++;
}
//打印该月日历
for (int i = 1; i <= monthDays; i++) {
System.out.print(i+"\t");
iCount++;
if(iCount%7==0){
System.out.println();
}
}
}
//判断是否是闰年
public static boolean isRun(int year){
if((year%4==0 && year%100!=0) || (year%400==0)){
return true;
}else{
return false;
}
}
//根据年份和月份,返回该月的天数
public static int getMonthDays(int year,int month){
int days = 31;
switch (month) {
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if(isRun(year)){
days = 29;
}else{
days = 28;
}
break;
}
return days;
}
//计算输入的年份和月份,计算这个月离1900-1-1过了多少天
public static int getTotalDays(int year,int month){
int totalDays = 0;
//计算年的天数
for (int i = 1900; i < year; i++) {
if(isRun(i)){
totalDays+=366;
}else{
totalDays+=365;
}
}
//计算月的天数
for (int i = 1; i < month; i++) {
totalDays+=getMonthDays(year, i);
}
return totalDays;
}
}
不到位的地方也希望大家指正,谢谢!