万年历,java如何实现日历查询

万年历

package time;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class CalendarTest {
    /*** 万年历 * 键盘输入年和月,输出这个月有多少天 */
    public static void main(String[] args) throws ParseException {
        Scanner key = new Scanner(System.in);
        Calendar cal = new GregorianCalendar();
        //打印日历的方法
        showTime(cal);
        while (true) {
            //打印操作帮助信息
            help();
            //接收指令
            int con = key.nextInt();
            switch (con) {
                case 1:
                    //打印上月的日历
                    preMonth(cal);
                    break;
                case 2:
                    //打印下月的日历
                    nextMonth(cal);
                    break;
                case 3:
                    //打印去年本月的日历
                    preYear(cal);
                    break;
                case 4:
                    //打印明年本月的日历
                    nextYear(cal);
                    break;
                case 5:
                    //打印指定年月的日历
                    checkYearMonth(key);
                    break;
                default:
                    System.out.println("请正确输入选项!");
            }
        }
    }

    /*** 打印指定年月的日历*/
    private static void checkYearMonth(Scanner key) throws ParseException {
        System.out.println("请输入年月按此格式输入:(yyyy-MM)");
        String str = key.next();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Date date1 = sdf.parse(str);
        System.out.println(date1);
        Calendar cal = new GregorianCalendar();
        cal.setTime(date1);
        showTime(cal);
    }

    /*** 打印明年本月的日历 */
    private static void nextYear(Calendar cal) {
        cal.add(Calendar.YEAR, +1);
        showTime(cal);
    }

    /*** 打印去年本月的日历 */
    private static void preYear(Calendar cal) {
        cal.add(Calendar.YEAR, -1);
        showTime(cal);
    }

    /*** 打印下月的日历 * @param cal */
    private static void nextMonth(Calendar cal) {
        cal.add(Calendar.MONTH, +1);
        showTime(cal);
    }

    /*** 打印上月的日历 */
    private static void preMonth(Calendar cal) {
        cal.add(Calendar.MONTH, -1);add()/roll():添加时间量
        showTime(cal);
    }

    private static void help() {
        System.out.println();
        System.out.println("* * * * * * * * * * * * * *");
        System.out.println("按1 查看上个月的日历");
        System.out.println("按2 查看下个月的日历");
        System.out.println("按3 查看去年本月的日历");
        System.out.println("按4 查看明年本月的日历");
        System.out.println("按5 查看指定年月的日历");
        System.out.println("* * * * * * * * * * * * * *");
        System.out.println("请输入指令:");
    }

    private static void showTime(Calendar cal) {
        //获取这个月的总天数
        int totalDays = cal.getActualMaximum(Calendar.DATE);
        //设置日期为当月第一天
        cal.set(Calendar.DAY_OF_MONTH, 1);
        // 获取月份第一天是周几,周日是第一天
        int week = cal.get(Calendar.DAY_OF_WEEK);
        // System.out.println("1号周"+(week-1));
        if (week == 1) {
            week = 8;
        }
        System.out.println("---------" + cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月---------");
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        int num = 0;
        for (int i = 1; i < week - 1; i++) {
            System.out.print(" \t");
            num++;
        }
        for (int i = 1; i <= totalDays; i++) {
            System.out.print(i + "\t");
            num++;
            if (num % 7 == 0) {
                System.out.println();
            }
        }
        System.out.println();
    }
}

效果图
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java课程设计实训大作业:记事本+简易计算器+聊天系统+日历+中英查询 基础任务一:设计日历软件 根据如下图,综合运用GUI编程、事件处理、Calendar类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期。 基础任务二:设计中英查询软件 根据Java面向对象程序设计相关理论,及GUI编程、事件处理、数据库编程等技术,设计一个如下图所示的“中英文释义查询”程序。输入英文单词,查询数据库将对应的中文显示在下框中;输入中文,查询数据库将对应的英文单词显示在下框中。 提升任务三:设计简易记事本软件 1.使用Java图形界面组件设计记事本软件的界面,参考如图所示。 2.程序代码规范,逻辑正确,能够正常运行。 3.“文件”菜单,包括“新建”、“打开”、“保存”、“另存为”和“退出”等功能。 提升任务四:设计简易计算器软件 1.使用Java图形界面组件设计软件,界面如图所示。 2.软件能够满足基本的“加、减、乘、除”等运算要求。 3.程序代码清晰,语法规范,结构合理,逻辑正确。 进阶任务五:自选主题开发一个应用软件(如在线聊天系统,学籍管理系统等)下面给的软件界面只是参考,同学们可以根据自己的想法进行设计。 1.软件界面美观、功能完善软件,导航清晰,操作方便,使用菜单栏、工具栏、布局管理器、按钮、表格等多种Java图形界面组件。 2.程序代码清晰,语法规范,结构合理,逻辑正确。 3.功能完善,程序代码优化,执行效率高,具有较好可维护性和可扩展性。 4.软件功能设计具有一定的难度和创意。
ublic class JCalendar extends JPanel{ //动态表示年月日 private int year=0; private int month=0; private int day=0; private int first = 0; //用于标志日历面板是否显示 private static boolean isShow = false; //主面板 private JPanel Main = new JPanel(); //日面板 private JPanel jPanelDay = new JPanel(); //月面板 private JPanel jPanelMonth = new JPanel(); //月的输入位置 private JTextField Month = new JTextField(); //减少月份 private JButton MonthDown = new JButton(); //增加月份 private JButton MonthUp = new JButton(); private JPanel jPanelButton = new JPanel(); //减少年份 private JButton YearDown = new JButton(); //增加年份 private JButton YearUp = new JButton(); //显示日期的位置 private JLabel Out = new JLabel(); public JLabel Out2 = new JLabel(); private Locale l=Locale.CHINESE; //主日历 private GregorianCalendar cal=new GregorianCalendar(l); //星期面板 private JPanel weekPanel=new JPanel(); //天按钮组 private JToggleButton[] days=new JToggleButton[42]; //天面板 private JPanel Days = new JPanel(); //标示 private JLabel jLabel1 = new JLabel(); private JLabel jLabel2 = new JLabel(); private JLabel jLabel3 = new JLabel(); private JLabel jLabel4 = new JLabel(); private JLabel jLabel5 = new JLabel(); private JLabel jLabel6 = new JLabel(); private JLabel jLabel7 = new JLabel(); //当前选择的天数按钮 private JToggleButton cur=null; //月份天数数组,用来取得当月有多少天 // 1 2 3 4 5 6 7 8 9 10 11 12 private int[] mm={31,28,31,30,31,30,31,31,30,31,30,31}; //空日期构造函数 public JCalendar() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //带日期设置的构造函数 public JCalendar(int year, int month, int day) { cal.set(year, month, day); try { jbInit(); } catch (Exception e) { e.printStackTrace(); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值