IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java任务——万年历 -> 正文阅读

[Java知识库]java任务——万年历

package com.xxm.TaskA_Calendar;

/*
    目标:实现万年历,
    提示语 → 输入年份
    提示语 → 输入月份
    打印出所输入的月份的日历。

    思路:
        1.打印日历标题
        2.录入数据,判断年份是否为闰年
        3.打印提示语,录入数据,判断该月份有多少天
        4.判断该月份的一天是星期几
        5.打印

 */

import java.util.Calendar;
import java.io.*;
import java.util.ArrayList;

public class A_Calendar {

    public static void main(String[] args) throws IOException {
        //1.打印日历标题
        PrintCalendar.printTitle();


        //死循环,录入天数
        lo:
        while (true) {
            //2.录入数据,判断年份是否为闰年
            //录入
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.println();
            System.out.print("请输入年份:");
            int year = Integer.parseInt(reader.readLine());
            if (year == -1) {
                System.out.println("程序退出,谢谢使用");
                break;
            }

            //创建 cal 对象,并将其年份设为输入值
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);

            //判断闰年
            boolean leapYearOrNot;
            if (year % 400 == 0) {
                leapYearOrNot = true;
            } else if (year % 100 == 0) {
                leapYearOrNot = false;
            } else if (year % 4 == 0) {
                leapYearOrNot = true;
            } else {
                leapYearOrNot = false;
            }
            //3.打印提示语,录入数据,判断该月份有多少天
            //提示语
            System.out.print("请输入月份:");
            int month = 0;
            int days = 0;
            month = Integer.parseInt(reader.readLine());
            if (month == -1) {
                System.out.println("程序退出,谢谢使用");
                break;
            }//判断录入数据,不合理则报错并要求重新输入
            else if (month > 12 || month < 1) {
                System.out.println("输入错误,请输入正确的月份");
                continue;
            } else if (month == 2 && leapYearOrNot) {
                days = 29;
            } else if (month == 2) {
                days = 28;
            } else if (((month == 1 || month == 3) || ((month == 5) || (month == 7)) || ((month == 8 || month == 10) || month == 12))) {
                days = 31;
            } else {
                days = 30;
            }
            //设置 cal 对象的月份为输2入月份 ,注意 Canlendar 对象中月份是从零开始的
            cal.set(Calendar.MONTH, month - 1);

            //4.判断该月份的一天是星期几。注意:dayOfWeek = 1 表示周日,dayOfWeek = 2 表示周一,以此类推。
            cal.setFirstDayOfWeek(Calendar.MONDAY);
            int dayOfWeek;
            dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

            //5.打印日历
            PrintCalendar printCal = new PrintCalendar();

            //将数据存入本月日期数临时数组中
            ArrayList<Integer> dateList = new ArrayList<>(days);

            for (int i = 0; i < days; i++) {
                dateList.add(i + 1);
            }

            //打印日历的星期数抬头
            printCal.printDayOfWeekTitle();

            //打印日期

            printCal.printDate(dateList, dayOfWeek);
        }


    }

    //打印日历类
    static class PrintCalendar {
        //打印日历标题的方法
        public static void printTitle() {
            //第一排:* 号
            for (int i = 0; i < 53; i++) {
                System.out.print('*');
            }
            System.out.println('*');

            //第二排,* 号 + 空格
            System.out.print('*');
            for (int i = 0; i < 52; i++) {
                System.out.print(' ');
            }
            System.out.println('*');


            //第三排:* 号 + 标题
            System.out.print('*');
            for (int i = 0; i < 23; i++) {
                System.out.print(' ');
            }
            System.out.print("CSDN万年历");
            for (int i = 0; i < 20; i++) {
                System.out.print(' ');
            }
            System.out.println('*');

            //第四排,* 号 + 空格
            System.out.print('*');
            for (int i = 0; i < 52; i++) {
                System.out.print(' ');
            }
            System.out.println('*');

            //第五排:* 号
            for (int i = 0; i < 54; i++) {
                System.out.print('*');
            }
            System.out.println();
            System.out.println();

        }


        //打印空格间距方法
        private void printBlankSpace() {
            System.out.print("     ");
        }

        //打印星期数的抬头
        public void printDayOfWeekTitle() {
            printBlankSpace();
            System.out.print("一");
            printBlankSpace();
            System.out.print("二");
            printBlankSpace();
            System.out.print("三");
            printBlankSpace();
            System.out.print("四");
            printBlankSpace();
            System.out.print("五");
            printBlankSpace();
            System.out.print("六");
            printBlankSpace();
            System.out.print("日");
            printBlankSpace();
            System.out.println();
        }

        /*
        思路:先判断是周几,然后在临时数组前面插入相应个数的2个空字符的字符串 "  ",然后遍历打印,注意周末周日时要打印红色字体
         */
        void printDate(ArrayList<Integer> dateList, int dayOfWeek) {
            //先将 7123456 版本的星期计数切换到中国人习惯的计数
            int oneToSevenVersionDayOfWeek;
            if (dayOfWeek == 1) {
                oneToSevenVersionDayOfWeek = 7;
            } else {
                oneToSevenVersionDayOfWeek = dayOfWeek - 1;
            }

            //在传入数组前面插入相应数目(oneToSevenVersionDayOfWeek - 1)个0
            for (int i = 0; i < oneToSevenVersionDayOfWeek - 1; i++) {
                dateList.add(0, 0);
            }

            //新建一个字符串类型的辅助数组,用于打印,同时如果日期是个位数,则在后面加一个空格
            ArrayList<String> dateStrings = new ArrayList<>(dateList.size() + oneToSevenVersionDayOfWeek - 1);
            for (int i = 0; i < dateList.size(); i++) {
                if (dateList.get(i) == 0) {
                    dateStrings.add("  ");
                } else if (dateList.get(i) < 10) {
                    dateStrings.add(Integer.toString(dateList.get(i)) + " ");
                } else {
                    dateStrings.add(Integer.toString(dateList.get(i)));
                }
            }

            //遍历打印,如果为周六打印红色字体,如果是周日,则打印红色字体,且打印完数字后面的附属空格后换行。
            for (int i = 0; i < dateList.size(); i++) {
                if ((i + 1) % 7 == 1) {
                    printBlankSpace();
                    System.out.print(dateStrings.get(i));
                    printBlankSpace();
                }
                //判断周六,是则输出红色
                else if ((i + 1) % 7 == 6) {
                    System.out.print("\033[31;m" + dateStrings.get(i) + "\033[0m");
                    printBlankSpace();
                }
                //判断周日,是周日则输出红色,且输出空格后换行
                else if ((i + 1) % 7 == 0) {
                    System.out.print("\033[31;m" + dateStrings.get(i) + "\033[0m");
                    printBlankSpace();
                    System.out.println();
                } else {
                    System.out.print(dateStrings.get(i));
                    printBlankSpace();
                }
            }

        }

    }
}

实现效果如图:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:20:41  更:2021-10-23 12:22:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:21:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码