Java语言——万年历

刚开始学习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("********************************************************************");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值