最简单最容易看懂的万年历项目
有注释
package riLi;
import java.util.*;
public class RiLi {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dataDays;
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
//判断输入是否合理
if(year<1900||month>12||month<0)
{
System.out.println("输入错误");
System.exit(0);
}
/*
*
* 判断用户输入的月份的天数
*/
int day;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
day = 29;
} else {
day = 28;
}
break;
default:
day = 30;
break;
}
dataDays = days(year,month);//用户输入月份之前一共多少天
int xingqi=dataDays%7+1;//此月一号是星期几
int huam=xingqi;
//打印表头
System.out.println("**********万年历*****************");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
//打印一号之前的空格
for (int i = 0; i < xingqi; i++) {
System.out.print("\t");
}
//打印日历
for(int i=1;i<=day;i++)
{
System.out.print(i+"\t");
if(huam%7==6)
System.out.println();
huam++;
}
}
/**
*
* @param year
* @param mount
* @判断在此月之前一共多少天
*/
private static int days(int year,int mount) {
int yearDays=0;
for(int i=1900;i<year;i++) {
if(i%4==0&&i%100!=0||i%400==0) {
yearDays += 366;
}
else {
yearDays += 365;
}
}
if(year%4==0&&year%100!=0||year%400==0)
{
switch (mount) {
case 1:
yearDays+=0;
break;
case 2:
yearDays+=31;
break;
case 3:
yearDays+=60;
break;
case 4:
yearDays+=91;
break;
case 5:
yearDays+=121;
break;
case 6:
yearDays+=152;
break;
case 7:
yearDays+=182;
break;
case 8:
yearDays+=213;
break;
case 9:
yearDays+=244;
break;
case 10:
yearDays+=274;
break;
case 11:
yearDays+=305;
break;
case 12:
yearDays+=335;
break;
default:
break;
}
}
else
{
switch (mount) {
case 1:
yearDays+=0;
break;
case 2:
yearDays+=31;
break;
case 3:
yearDays+=59;
break;
case 4:
yearDays+=90;
break;
case 5:
yearDays+=120;
break;
case 6:
yearDays+=151;
break;
case 7:
yearDays+=181;
break;
case 8:
yearDays+=212;
break;
case 9:
yearDays+=243;
break;
case 10:
yearDays+=273;
break;
case 11:
yearDays+=304;
break;
case 12:
yearDays+=334;
break;
default:
break;
}
}
return yearDays;
}
}