鱼C论坛

 找回密码
 立即注册
查看: 2266|回复: 7

想在这代码上用窗口实现这几个功能

[复制链接]
发表于 2021-12-7 21:51:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入1查看上个月日历

输入2查看下个月日历

输入3查看去年本月日历

输入4查看明年本月日历

输入5查看指定月份日历
package javaapplication26;

import java.util.Scanner;

/**
* 控制台万年历 根据输入的年月,输出当月日历
*
* @author july
*
*/
public class Calendar {

        public static void main(String[] args) {
               
                /**
                 * 第一步:从控制台获得输入的年月
                 */
                Scanner sc = new Scanner(System.in);
                while (true) {
                        System.out.println("请输入年份 (输入exit退出程序)");
                        String tempyear = sc.next();
                        if (!tempyear.equals("exit")) {
                                //year强转成int使用
                                int year=Integer.parseInt(tempyear);
                                System.out.println("请输入月份");
                                int month = sc.nextInt();

                                /**
                                 * 第二步:判断是不是闰年
                                 */
                                boolean isleap = false;
                                if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                                        isleap = true;
                                } else {
                                        isleap = false;
                                }

                                /**
                                 * 第三步:判断该月有多少天
                                 */
                                int monthDays = 0;
                                switch (month) {
                                // 大月份
                                case 1:
                                case 3:
                                case 5:
                                case 7:
                                case 8:
                                case 10:
                                case 12:
                                        monthDays = 31;
                                        break;
                                // 小月份
                                case 4:
                                case 6:
                                case 9:
                                case 11:
                                        monthDays = 30;
                                        break;
                                // 2月份
                                default:
                                        if (isleap) {
                                                monthDays = 29;
                                        } else {
                                                monthDays = 28;
                                        }

                                }

                                /**
                                 * 第四步:判断该月距离1990年1月1日有多少天
                                 * 1.按照年份差距计算天数
                                 * 2.月份距离本年1月1日有多少天
                                 *  3.两部分求和
                                 */
                                int yearCount = 0;
                                int monthCount = 0;
                                int sumCount = 0;
                                // 计算年份相差的天数
                                for (int i = 1990; i < year; i++) {
                                        if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
                                                yearCount += 366;
                                        } else {
                                                yearCount += 365;
                                        }
                                }
                                // 计算月份距离本年1月1日的天数
                                for (int i = 1; i < month; i++) {
                                        switch (i) {
                                        // 大月份
                                        case 1:
                                        case 3:
                                        case 5:
                                        case 7:
                                        case 8:
                                        case 10:
                                        case 12:
                                                monthCount += 31;
                                                break;
                                        // 小月份
                                        case 4:
                                        case 6:
                                        case 9:
                                        case 11:
                                                monthCount += 30;
                                                break;
                                        // 2月份
                                        default:
                                                if (isleap) {
                                                        monthCount += 29;
                                                } else {
                                                        monthCount += 28;
                                                }
                                        }
                                }
                                // 两部分之和即相距天数
                                sumCount = yearCount + monthCount;

                                /**
                                 * 第五步:计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求
                                 */
                                int week = (sumCount % 7) + 1;
                                /**
                                 * 第六步:打印当前月日历
                                 */
                                // 打印输入的年月信息
                                System.out.println("\t" + year + "年" + month + "月");
                                // 打印头部
                                System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
                                // 打印可能的空白
                                for (int i = 0; i < week; i++) {
                                        System.out.print("\t");
                                }
                                // 打印日历
                                for (int i = 1; i <= monthDays; i++) {
                                        System.out.print(i + "\t");
                                        if ((i + week) % 7 == 0) {
                                                System.out.println();
                                        }
                                }
                                System.out.println();
                        }else {
                                //输入了exit,退出系统
                                System.out.println("退出系统");
                                System.exit(0);
                        }
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-7 22:53:07 From FishC Mobile | 显示全部楼层
有人吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-7 23:08:57 | 显示全部楼层

你的问题是什么,贴出来的代码有什么问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-7 23:23:31 From FishC Mobile | 显示全部楼层
nzdf 发表于 2021-12-7 23:08
你的问题是什么,贴出来的代码有什么问题吗?

想用窗口来运行结果,然后用另外的窗口实现这几个功能
输入1查看上个月日历

输入2查看下个月日历

输入3查看去年本月日历

输入4查看明年本月日历

输入5查看指定月份日历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-7 23:54:29 | 显示全部楼层
giegie666 发表于 2021-12-7 23:23
想用窗口来运行结果,然后用另外的窗口实现这几个功能
输入1查看上个月日历

写了个答案可以参考下,但是不建议这样问问题,可以具体说明你是哪里不清楚怎么写
package com.kr.yu_c;

import java.util.Scanner;
import java.util.TimeZone;

/**
 * 控制台万年历 根据输入的年月,输出当月日历
 *
 * @author july
 */
public class Calendar {

    public static void main(String[] args) {

        /**
         * 第一步:从控制台获得输入的年月
         */
        Scanner sc = new Scanner(System.in);
        while (true) {
//            System.out.println("请输入年份 (输入exit退出程序)");
            System.out.println("输入1查看上个月日历\n" +
                    "\n" +
                    "输入2查看下个月日历\n" +
                    "\n" +
                    "输入3查看去年本月日历\n" +
                    "\n" +
                    "输入4查看明年本月日历\n" +
                    "\n" +
                    "输入5查看指定月份日历");
            int select = Integer.parseInt(sc.next());

            // //获取东八区时间
            java.util.Calendar c = java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
            //获取年
            int year = c.get(java.util.Calendar.YEAR);
            //获取月份,0表示1月份
            int month = c.get(java.util.Calendar.MONTH) + 1;
            switch (select) {
                case 1:
                    if (month == 1) {
                        month = 12;
                        year = year - 1;
                    }
                    break;
                case 2:
                    if (month == 12) {
                        month = 1;
                        year = year + 1;
                    }
                    break;
                case 3:
                    year = year - 1;
                    break;
                case 4:
                    year = year + 1;
                    break;
                case 5:
                    System.out.println("输入年份:");
                    year = Integer.parseInt(sc.next());
                    System.out.println("输入月份:");
                    month = Integer.parseInt(sc.next());
                    break;
            }
            printCal(year, month);
//                        if (!tempyear.equals("exit")) {
//                                //year强转成int使用
//                                int year=Integer.parseInt(tempyear);
//                                System.out.println("请输入月份");
//                                int month = sc.nextInt();
//
//
//                        }else {
//                                //输入了exit,退出系统
//                                System.out.println("退出系统");
//                                System.exit(0);
//                        }
        }
    }

    private static void printCal(int year, int month) {
        /**
         * 第二步:判断是不是闰年
         */
        boolean isleap = false;
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            isleap = true;
        } else {
            isleap = false;
        }

        /**
         * 第三步:判断该月有多少天
         */
        int monthDays = 0;
        switch (month) {
            // 大月份
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                monthDays = 31;
                break;
            // 小月份
            case 4:
            case 6:
            case 9:
            case 11:
                monthDays = 30;
                break;
            // 2月份
            default:
                if (isleap) {
                    monthDays = 29;
                } else {
                    monthDays = 28;
                }

        }

        /**
         * 第四步:判断该月距离1990年1月1日有多少天
         * 1.按照年份差距计算天数
         * 2.月份距离本年1月1日有多少天
         *  3.两部分求和
         */
        int yearCount = 0;
        int monthCount = 0;
        int sumCount = 0;
        // 计算年份相差的天数
        for (int i = 1990; i < year; i++) {
            if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
                yearCount += 366;
            } else {
                yearCount += 365;
            }
        }
        // 计算月份距离本年1月1日的天数
        for (int i = 1; i < month; i++) {
            switch (i) {
                // 大月份
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    monthCount += 31;
                    break;
                // 小月份
                case 4:
                case 6:
                case 9:
                case 11:
                    monthCount += 30;
                    break;
                // 2月份
                default:
                    if (isleap) {
                        monthCount += 29;
                    } else {
                        monthCount += 28;
                    }
            }
        }
        // 两部分之和即相距天数
        sumCount = yearCount + monthCount;

        /**
         * 第五步:计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求
         */
        int week = (sumCount % 7) + 1;
        /**
         * 第六步:打印当前月日历
         */
        // 打印输入的年月信息
        System.out.println("\t" + year + "年" + month + "月");
        // 打印头部
        System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
        // 打印可能的空白
        for (int i = 0; i < week; i++) {
            System.out.print("\t");
        }
        // 打印日历
        for (int i = 1; i <= monthDays; i++) {
            System.out.print(i + "\t");
            if ((i + week) % 7 == 0) {
                System.out.println();
            }
        }
        System.out.println();
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-8 07:59:52 From FishC Mobile | 显示全部楼层
nzdf 发表于 2021-12-7 23:54
写了个答案可以参考下,但是不建议这样问问题,可以具体说明你是哪里不清楚怎么写

这能创建窗口吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-8 10:10:43 | 显示全部楼层

不明白你说的窗口是啥意思,frame?console?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-8 17:21:17 From FishC Mobile | 显示全部楼层
nzdf 发表于 2021-12-8 10:10
不明白你说的窗口是啥意思,frame?console?

创建主界面,用于实现界面frame
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 14:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表