刚开始学习Java语言,写了一个万年历。
功能为,输入年份和月份,输出是否为闰年和当月日历
输出截图如下:
代码如下:
/**
* 万年历
* <p>PrintCalendar.java
* <p>创建日期:2016年05月12日
* <p>一、获取输入年份和月份
* <p>二、判断是否为闰年和月份天数
* <p>三、计算输入月份(不包含该月)至1900年1月1日的总天数
* <p>四、依据公式:该月1日星期数 = 1 + 总天数 % 7
* <p>五、for循环打印日历,7天换行
*/
import java.util.Scanner;
public class PrintCalendar{
public static void main(String [] args){
int year = 1900; //保存输入年份
int month = 1; //保存输入月份
int days = 0; //保存月份天数
boolean isRn = false; //判断是否问闰年
int sumDays = 0; //1900年1月1日至输入月份的总天数
System.out.println("");
System.out.println("********************************************************************");
System.out.println("***************************欢迎使用万年历***************************");
System.out.println("********************************************************************");
/**
*以下代码为新建输入流
*录入键盘输入数据
*/
Scanner input = new Scanner(System.in);
/**
*录入数据提示
*录入数据
*/
System.out.print("****\t年份:");
year = input.nextInt();
System.out.print("****\t月份:");
month = input.nextInt();
/**
*以下代码为if语句的嵌套使用
*判断年份是否为闰年
*/
if((0 == year % 400) || (0 == year % 4 && 0 != year % 100)){
isRn = true;
System.out.println("****\t\t\t\t\t\t\t闰年\t****");
} else{
isRn = false;
System.out.println("****\t\t\t\t\t\t\t平年\t****");
}
/**
*计算输入年份(不包含该年)至1900年的总天数
*/
for(int i = 1900; i < year; i++){
if((0 == i % 400) || (0 == i % 4 && 0 != i % 100)){
sumDays += 366;
} else{
sumDays += 365;
}
}
/**
*计算输入年份至输入月份的总天数
*/
for(int i = 1; i <= month; i++){
/**
*以下代码为switch语句的使用
*判断月份天数
*/
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if(isRn){
days = 29;
} else{
days = 28;
}
break;
default:
System.out.print("输入月份有误!");
}
/**
*输入月份的天数保存在days变量,不累加进去
*/
if(month != i){
sumDays += days;
}
}
/**
*以下代码为if语句的嵌套使用
*判断月份天数
*/
/* if(1 == month || 3 == month || 5 == month || 7 == month || 8== month || 10 == month || 12 == month){
days = 31;
} else if(4 == month || 6 == month || 9 == month || 111 == month){
days = 30;
} else if(2 == month){
if(isRn){
days = 29;
} else{
days = 28;
}
} else{
System.out.print("输入月份有误!");
}
*/
/**
*beforeDays代表该月1日的是星期几,以星期日开口
*/
int beforeDays;
beforeDays = 1 + sumDays % 7;
/**
*beforeDays=7时,代表为星期日,重新赋值为0
*/
if(7 == beforeDays){
beforeDays = 0;
}
System.out.println("********************************************************************");
/**
*打印星期抬头
*/
System.out.println("****\t星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t****");
System.out.print("****\t");
/**
*打印 \t
*/
for(int i = 0; i < beforeDays; i++){
System.out.print("\t");
}
/**
*打印日期(即1-2-3-4-->30-31)
*/
for(int i = 1; i <= days; i++){
System.out.print(i + "\t");
if(0 == (i + beforeDays) % 7){
//满7换行
if(i != days){
System.out.print("****\n****\t");
} else{
}
}
}
/**
*判断末行剩余天数,并在尾部打印“****”
*/
int belowDays = 7 - ((beforeDays + days) % 7);
switch(belowDays){
case 0: System.out.println("****"); break;
case 1: System.out.println("\t****"); break;
case 2: System.out.println("\t\t****"); break;
case 3: System.out.println("\t\t\t****"); break;
case 4: System.out.println("\t\t\t\t****"); break;
case 5: System.out.println("\t\t\t\t\t****"); break;
case 6: System.out.println("\t\t\t\t\t\t****"); break;
}
System.out.println("********************************************************************");
System.out.println("********************************************************************");
System.out.println("********************************************************************");
}
}