java程序写一个万年历(自1905年开始)!

java程序写一个万年历(自1905年开始)

package com.lixiangqian.wannianli;

import java.util.Scanner;

/**
 * 栗向前——2020年3月9日
 * 制作万年历:
 * 思路
 * 1.算起始月到输入月共多少天。
 * 2.对应的起始星期几。
 * 3.算输出几个“\t”。
 * 4.算打印多少天(当前月)
 * 5.换行
 * @author Administrator
 *
 */
public class wannianli {
	public static void main(String[] args) {
		Scanner input = new Scanner (System.in);
		System.out.print("请输入年份(自1905年开始):");
		int nian=input.nextInt();
		System.out.print("请输入月份(1月~12月):");
		int yue=input.nextInt();
		
		//判断输入是否大于1905
		if(nian>=1905){

			//算整年共多少天:1905年到键盘输入的年份的前一年(过的整年)
			int zongTianShu=0;
			for(int i=1905;i<nian;i++){
				if((i%4==0&&i%100!=0)||i%400==0){
					zongTianShu+=366;
				}else{
					zongTianShu+=365;
				}
			}
			
			//算整月共多少天(1月到键盘输入月的前一个月)
			for(int i=1;i<yue;i++){
				if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){//大月累加31天
					zongTianShu+=31;
				}else if(i==4||i==6||i==9||i==11){//小月累加30天
					zongTianShu+=30;
				}else if(i==2){ 
					if((i%4==0&&i%100!=0)||i%400==0){//闰月累加29天
						zongTianShu+=29;
					}else{//非闰月累加28天
						zongTianShu+=28;
					}
				}
			}
			
			//算1号从星期几开始显示
			int mangDay=zongTianShu%7;
//			System.out.println(mangDay);
			
			//算输入月要打印多少天
			int daYin=0;
			if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12){
				daYin+=31;
			}else if(yue==4||yue==6||yue==9||yue==11){
				daYin+=30;
			}else if(yue==2){
				if((nian%4==0&&nian%100!=0)||nian%400==0){
					daYin+=29;
				}else{
					daYin+=28;
				}
			}
			
			//开始打印
			System.out.println();
			System.out.println("==========================="+nian+"年"+yue+"月"+"===========================");
			System.out.println();
			System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
			System.out.println();
			
			//先打印“\t”
			for(int i=1;i<=mangDay;i++){
				System.out.print("\t");
			}
			//打印输入月的天数
			int count=mangDay;
			for(int i=1;i<=daYin;i++){
				System.out.print(i+"\t");
				count++;
				if(count%7==0){
					System.out.println();
				}
			}
		}else{
			System.out.println("输入错误,程序结束!");
		}
	}
}

输入想要查询的年份、月份后控制台打印结果为:
万年历效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半夏乌头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值