用Java语言编写一个万年历,满足以下要求:

(1)使用图形用户界面

(2)实现日期与星期的查询

package test;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class Test2 extends JFrame{//pUp面板用于盛放年、月和查询组件//pCenter用于盛放滚动组件JPanel pUp=new JPanel();JPanel pCenter=new JPanel();JLabel lblYear=new JLabel("年");                                                                                                                                                                                                                                                                                                                                                  JLabel lblMonth=new JLabel("月");JComboBox cbxYear=new JComboBox();JComboBox cbxMonth=new JComboBox();JButton btnQuery=new JButton("查询");//建立一个15行60列的文本区JTextArea jtaContent=new JTextArea(15,60);public Test2() {super("万年历");//在构造方法中添加各个组件pUp.add(lblYear);pUp.add(cbxYear);pUp.add(lblMonth);pUp.add(cbxMonth);pUp.add(btnQuery);pCenter.add(jtaContent);//采用边框式布局this.add(pUp,BorderLayout.NORTH);this.add(pCenter,BorderLayout.CENTER);for(int i=1900;i<2029;i++) {//为cbxYear添加一个可以选择的范围;//String.valueOf(i)将i由int变为String类型;cbxYear.addItem(String.valueOf(i));}//获取当前时间,将cbxYear默认设置为当前年份Calendar calendar=Calendar.getInstance();cbxYear.setSelectedItem(String.valueOf(calendar.get(Calendar.YEAR)));for(int i=1;i<=12;i++) {cbxMonth.addItem(String.valueOf(i));}cbxMonth.setSelectedItem(String.valueOf(calendar.get(Calendar.MONTH)+1));//“查询”按钮添加事件btnQuery.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//获取cbxYear中的值,将其转换为字符串并赋给y,将y转换为int型赋给ytString y=cbxYear.getSelectedItem().toString();int yt=Integer.valueOf(y);int mt=Integer.valueOf(cbxMonth.getSelectedItem().toString());int day=0;int totalDays=0;boolean isLeap;if(yt%400==0||(yt%4==0&&yt%100!=0))isLeap=true;elseisLeap=false;//统计从1900年到指定年月(该月的前一个月)的总天数,1900年的第一天恰好为周一for(int i=1900;i<yt;i++) {if(i%400==0||(i%4==0&&i%100!=0)) totalDays+=366;elsetotalDays+=365;}for(int i=1;i<=mt;i++) {switch(i) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 4:case 6:case 9:case 11:day=30;break;case 2:if(isLeap)day=29;elseday=28;}if(i!=mt)totalDays+=day;}//确定该月的第一天所在行前面有几个"\t"int t=(totalDays+1)%7;jtaContent.setText("日\t一\t二\t三\t四\t五\t六\n");for(int i=0;i<t;i++) {jtaContent.append("\t");}for(int i=1;i<=day;i++) {jtaContent.append(i+"\t");if((t+i)%7==0)jtaContent.append("\n");}}});}public static void main(String[] args) {Test2 t=new Test2();t.setSize(700, 400);t.setVisible(true);//将窗口设置为屏幕中间位置t.setLocationRelativeTo(null);t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}

该程序中最核心的算法就是对年份月份的判断和最初日期的选择,如不同的年份,月份它们的天数不同。如1,3,5,7,8,10,12月均有31天,4,6,9,11月均有30天,平年2月有28天,闰年2月有29天。因为万年历中还要知道某一天具体是周几,所以我们要确定第一天是星期几,后面的日期依次填充即可。本程序的查询范围为1900年1月至2028年12月,故第一天是1900年1月1日,经查询当天是周一,故1900年1月2日为周二,1900年1月3日为周三,依次类推,可以知道后面所有日期具体是周几。

运行结果:

Java课设之万年历相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. java 课设 商品库存管理系统

    比较辛苦的java课设!写了蛮久的,战斗了好多个通宵. 下载https://download.csdn.net/download/qq_37871063/10297290 入门:JAVAFX+MVC+ ...

  3. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  4. 学生信息管理系统(成绩统计)Java课设

    下载地址:学生信息管理系统(成绩统计)Java课设-Web服务器文档类资源-CSDN下载 ├── StudentInfo │   ├── bin │   │   ├── com │   │   │   ...

  5. JAVA课设单人版五子棋小游戏

    内容介绍:该程序为Java课设的单人版五子棋小游戏,通过eclipse编辑,实现了动作事件的监听与处理,以及JavaSwing的界面编程.  编辑排行榜,包含局数,结果,步数,以及"关于我们 ...

  6. Java课设——ArxivHelper

    项目地址https://github.com/PKUCSS/arxiv-helper How to run运行方式:java -jar arxiv-helper.jar Tips:We use pyi ...

  7. 100套java课设源码参考/毕设源码代码参考

    引言:本人是一个Java 开发者,喜欢分享Java课设源码和代码,用于课程设计或者作业学习参考噢,开发一些有技术含量的Java web源码,主要的技术有JSP+Servlet,SSM/SpringBo ...

  8. JAVA课设:电子英汉词典(附源码+调试)

    JAVA课设:电子英汉词典 电子英汉词典功能概述 整体要求:用图形用户界面实现,能够编辑词典库中的信息,能够实现英译汉,汉译英.(要考虑一词多义) 具体实现:1.用图形用户界面实现:2.能够实现英译汉 ...

  9. 【Java课设】--ATM取款机(Gui界面)

    [Java课设]–ATM取款机(Gui界面)

最新文章

  1. SubLime Text 3 配置SublimeREPL来交互式调试程序
  2. (转)C# foreach 中获取索引index的方法
  3. AI如何提升10倍筛药效率?6月18日华为云携手中科院上海药物所揭开谜底
  4. 【英语学习】【WOTD】foray 释义/词源/示例
  5. 智能设备破解的那些事儿
  6. 公司顾问岗位职责_【热门推荐】泉州奥育特教育科技有限公司
  7. shell 选择对话框
  8. java regex 简单使用
  9. Linux卷没有权限,linux – Docker主机安装的卷权限
  10. 利用AOP+Swagger注解实现日志记录功能
  11. OKR助理源代码说明
  12. 完美卸载mac电脑里的软件及残留清理教程
  13. sessionid java_java如何获取sessionid
  14. 显示器刷新率30hz_如何使您的120Hz或144Hz显示器使用其广告刷新率
  15. NUnit的入门学习
  16. 模型加速之轻量化网络
  17. 美团餐饮娱乐知识图谱——美团大脑揭秘
  18. 16. 设计模式之契约原则:如何做好 API 接口设计?
  19. 原创游戏:血战太平洋1.1(可在Dev-C++上运行)
  20. elasticsearch(es)在用户画像业务上的应用【elasticsearch(es)性能调优】

热门文章

  1. C语言编写的判断素数的程序
  2. Logitech Flow 罗技鼠标在两设备之间连接不上的解决方法
  3. Android 应用支持RTL 阿语反转的UI适配处理看这一篇就够了
  4. 柳传志经典语录:管理三要素,即建班子、定战略和带队伍
  5. Boost型开关电源应用之TPS54340
  6. 二分查找法。Java泛型设计二分查找法。
  7. ChatGPT从入门到精通(附PDF文档)
  8. VMware Workstation 与 Device/Credential Guard 不兼容。
  9. 【无法打开ENVI错误提示Unable to license IDL Runtime的解决方法】
  10. 做青年领袖必须具备哪些素质?