使用Java语言编写万年历

本文介绍了如何编写一个程序,实现输入指定年份后显示该年所有日期及其星期的功能,通过计算1900年到指定年份的天数和月份天数来确定星期。程序包括闰年判断、每月天数计算等关键步骤。
摘要由CSDN通过智能技术生成

目录

一、万年历是什么?

二、书写思路和运行结果

1.编程思路

 2.源代码合集

3.运行结果

总结


一、万年历是什么?

万年历在现代生活中具有多种功能与作用,它不仅仅是一个简单的日期查询工具,更是一个综合性的信息查询平台。

首先,万年历可以显示某一年的所有日期和星期,用户输入指定的年份,万年历就能展示出这一年的每一天对应的日期和星期,这对于人们规划日常生活和工作非常有帮助。

其次,万年历还可以计算两个日期之间的天数,这对于需要计算时间间隔的场合非常实用,如旅行规划、项目进度管理等。

此外,万年历还具备节假日查询功能,用户输入特定的日期,万年历就能告诉你这一天是否是节假日,这对于安排出行和休闲活动非常有用。

本文主要是实现第一个功能即:显示某一年的所有日期和星期,用户输入指定的年份,万年历就能展示出这一年的每一天对应的日期和星期。

二、书写思路和运行结果

1.编程思路

我们要编写一个万年历,首先要考虑到如下几点。

(1)每个月有多少天:(我们可以定义一个整数型变量monthdays,用来存放天数。)

1,3,5,7,8,10,12月有31天。

4,6,9,11月有30天。

2月比较特殊:如果是闰年有29天,如果是平年有28天。

代码如下(示例):(我这里直接使用个getDaysByMonth()方法来获取每个月有多少天)

 int monthdays=getDaysByMonth( month,  year);

getDaysByMonth()方法如下:

public static int getDaysByMonth(int month, int year){
        if (month==1 ||month==3 ||month==5 ||month==7 ||month==8 ||month==10 ||month==12 ){
            return 31;
        } else if (month==4 || month==6 || month==9 || month==11 ) {
            return 30;

        }else {
            return getFlatLeapYear(year)?29:28;
        }

    }

这里调用了个方法getFlatLeapYear(year)。这个方法是进行闰年的判断。

代码如下():

 public static boolean getFlatLeapYear(int year){
        if (year%4==0 && year%100!=0 ||year%400==0){
            return true;
        }else {
            return false;
        }


    }

第一点已经了解了。接下来进行第二点。 

(2)我们要计算1900年到我们所输入年份的天数 (我这里使用整数型变量sumyear来存放)

 代码块如下:

int sumyear=0;
        //1900年1月1日为星期一,从这一天开始计算
        for (int i = 1900; i < year; i++) {
            sumyear+=getFlatLeapYear(i)?366:365;

        }

 (3)同样的我们还要知道我们所输入的月份距离1月1日整天数。(这里使用整数型变量summonth来存放)

代码块如下: 

int summonth=0;
        for (int i = 1; i <month ; i++) {
            summonth+=getDaysByMonth(i,year);


        }

 (4)然后我们计算一下星期几。

代码块如下:

//计算星期几
        int week=(summonth+sumyear+1)%7;

 (5)最后我们打印一下。

代码块如下:

 System.out.println("一\t二\t三\t四\t五\t六\t日");

        for (int i = 1; i <=week-1; i++) {
            System.out.print("\t");


        }
        for (int i = 1; i <=monthdays ; i++) {
            System.out.print(i+"\t");
            if ((summonth+sumyear+i)%7==0){
                System.out.println();
            }

        }

 2.源代码合集

//万年历
import java.util.Scanner;

public class Calender {
    public static void main(String[] args) {
        System.out.println("请输入四位年份:");
        Scanner input=new Scanner(System.in);
        int year= input.nextInt();
        System.out.println("请输入月份:");
        int month= input.nextInt();
        System.out.println(year+"年"+month+"月");

        int monthdays=getDaysByMonth( month,  year);
        //计算输入年到1900年整年天数
        int sumyear=0;
        //1900年1月1日为星期一,从这一天开始计算
        for (int i = 1900; i < year; i++) {
            sumyear+=getFlatLeapYear(i)?366:365;

        }
        //计算输入月份到1月1日整天数
        int summonth=0;
        for (int i = 1; i <month ; i++) {
            summonth+=getDaysByMonth(i,year);


        }
        //计算星期几
        int week=(summonth+sumyear+1)%7;
        System.out.println("一\t二\t三\t四\t五\t六\t日");

        for (int i = 1; i <=week-1; i++) {
            System.out.print("\t");


        }
        for (int i = 1; i <=monthdays ; i++) {
            System.out.print(i+"\t");
            if ((summonth+sumyear+i)%7==0){
                System.out.println();
            }

        }
    }
    // return true;代表闰年
    //判断闰年
    public static boolean getFlatLeapYear(int year){
        if (year%4==0 && year%100!=0 ||year%400==0){
            return true;
        }else {
            return false;
        }


    }
    //获取一个月有多少天
    public static int getDaysByMonth(int month, int year){
        if (month==1 ||month==3 ||month==5 ||month==7 ||month==8 ||month==10 ||month==12 ){
            return 31;
        } else if (month==4 || month==6 || month==9 || month==11 ) {
            return 30;

        }else {
            return getFlatLeapYear(year)?29:28;
        }

    }
}

3.运行结果

运行如下:


总结

主要是通过1900年1月1日这一天为星期一这个已知信息来计算输入年、月到这一天的天数来求星期几。这是主要的编程思路。然后分别统计每个月拥有多少天(这里二月份要单独处理一下。它要进行平年或者闰年的判断。)、距离1900年到输入年份的天数、距离1月1日到输入月份的天数、以及星期几的计算。
 

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值