ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 万年历

2019-07-06 20:37:00  阅读:263  来源: 互联网

标签:case Java 万年历 int days month year public


import java.util.Scanner;

public class Demo {
    //万年历
    /**
     * 编写一个万年历查询系统,可以查询公元元年至公元9999年间任一年的全年日历;
     * 可以查询某年某月的月历,在屏幕上显示出来;
     */
    /**
     * 31 1 3 5 7 8 10 12
     * 30 4 6 9 11
     * 29 (闰年)
     * 28 (平年)
     * @param year
     * @param month
     * @return 返回具体月份在本年的具体天数
     */
    public static int monthDays(int year,int month){
        int days = 0;
        switch (month){
            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(year%400==0 || (year%4==0 && year%100 != 0)){
                    days = 29;
                }else{
                    days = 28;
                }
                break;
                default:
                    days = 0;
                    System.out.println("输入的年月有误");
        }
        return days;
    }
    //计算今天是本年的第几天
    public static int yearMonthDays(int year,int month,int day){
        int days = 0;
        for (int i = 1; i < month; i++) {
            days += monthDays(year,i);
        }
        days = days+day;
        return days;
    }
    
    //判断某年某月某日是星期几
    public static int weeks(int year,int month,int day){
        int days = yearMonthDays(year,month,day);
        int week = (year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
        return week;
    }
    //打印具体某一月的日历
    public static void printMonth(int year,int month){
        int week = weeks(year,month,1);
        int count = 0;
        int days = monthDays(year,month);
        System.out.println("日\t一\t二\t三\t四\t五\t六\t");
        //打印空格
        for (int i = 0; i < week; i++) {
            System.out.print("\t");
            count++;
        }
        //打印天
        for (int i = 1; i <= days; i++) {
            System.out.print(i+"\t");
            count++;
            if(count%7 == 0){
                System.out.println();
            }
        }
    }
    //打印一年的日历
    public static void printYears(int year){
        for (int i = 1; i < 12; i++) {
            printMonth(year,i);
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        while(true){
            System.out.println("功能选择:1.打印某年全年日历  2.打印某月日历 输入\"exit\"退出");
            String f = reader.nextLine();
            if("1".equals(f))
            {
                System.out.println("输入年份");
                int year = reader.nextInt();
                String s = reader.nextLine();//吃回车符
                printYears(year);
            } else if("2".equals(f)) {
                System.out.println("输入yyyy-mm形式的年月");
                String s3 = reader.nextLine();
                String [] s4 = s3.split("\\-");
                printMonth(Integer.parseInt(s4[0]),Integer.parseInt(s4[1]));
                System.out.println();
            }else if ("exit".equals(f)){
                break;
            }
        }
    }
}

标签:case,Java,万年历,int,days,month,year,public
来源: https://blog.csdn.net/qq_42929437/article/details/94893794

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有