# DuangCalender **Repository Path**: zgg9543/DuangCalender ## Basic Information - **Project Name**: DuangCalender - **Description**: 简易日历记事本(java+android端) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-06-28 - **Last Updated**: 2024-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DuangCalender ## 简易日历记事本(java+android端) ### 1、本设计题目的主要内容 ### JAVA: * duang日历记事本的包括日历和日志记事本两部分: * 日历部分采用公历历法,界面设计: * 日期部分每行7天,每列 5天,可完全记录一个月中的所有天数。 * 星期采用中文显示,每行的第一天为星期日。星期六、星期日显示为红色。 * 当前日期显示背景为蓝色,其它日期显示为黑色。 * 年份通过负数表示公元前,正数表示公元后。 * 用户可通过使用鼠标点击按钮的方式改变日历的年份和月份。 * 记事本部分提供输入、保存、显示、删除日志的功能。 * 记事本可根据用户需要在任意日期添加记事本。 * 用户输入的日志记录在本系统所在的目录保存为后缀名为.txt的文本文件。 * 用户只要选定要查看日志的日期,即可以通过鼠标点击显示日志的按钮来实现。 * Duang日历记事本是基于java语言的程序。 * Duang日历记事本分为两个大的模块,即日历模块和记事本模块; * 日历模块又分为日历显示模块和日历查询(上年、下年和上月、下月)模块; * 记事本模块分为编辑模块和按钮模块(保存和删除日志)。 ### ANDROID: * DuangCalendar日历仅为日历APP。 * 日历采用公历历法,界面设计: * 日期部分每行7天,每列 5天,可完全记录一个月中的所有天数。 * 期采用中文显示,每行的第一天为周一,当前日期显示背景为蓝色,其它日期显示为黑色,非本月显示为灰色。 * 用户可通过点击按钮的方式改变日历的年份和月份。 * DuangCalendar日历是基于XML语言的程序。 * DuangCalendar日历分为日历面板和更改日历面板 ### 2、设计思想与程序构架 ### 整个设计及各核心子模块的流程框图 * CalendarPad作为主函数的入口。调用NotePad类的方法完善自己的窗口。当对窗口的年份和月份进行改变时就会触发Year类和Month类里的触发器和方法,从而达到日历备忘录的目的。 ### 各核心子模块的编程思想及实现技术说明 * 在设计日历记事本时,需要编写4个Java类:CalendarPad.class、Year.class、NotePad.class、month.class。 * 日历记事本除了需要编写的上述3个Java所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。 * 主类的实现技术: * CalendarPad 类首先通过JPanel类创建用于布局的面板,左面添加日历界面(leftPanel),日历界面右面添加记事本(rightPanel)。 * 然后调用 CalendarPad 方法,该方法有三个分别是 year, month, day 的整形参数。 该方法管理日历记事本的主界面。 在日历牌部分使用网格布局,行数和列数均为 7。 其中第一行显示星期标题的标签,后续六行显示日期的标签。 * 号码排列的实现技术: * 该方法包含两个整形参数,分别是星期和月天数。 * 该方法是通过setcalendar方法和arrynum方法将日期一次排列入日历牌的网格中,日期显示的字体字体均为 TimesRoman,并将星期六和星期日显示为红色。 将当前日期显示为蓝色背景,大小为 20,其它日期为黑色,字体大小为 12。 * 设置日历牌的实现技术: * 该arrynum方法有两个整形参数,分别是 year 和 month。 * 该方法根据平、闰年以及每个月份的天数不同而以不同的方式将一个月中的每一天依次排入网格中。 当月份为 1、3、5、7、8、10 和 12 时,每月包括 31 天,当月份为 4、6、9、11 时,每月包括30 天,平年的 2 月为 28 天,闰年的 2 月为29 天。 * 记事本的实现技术描述如下: * NotePad 类首先调用 NotePad 方法创建一个容器,在这一容器中使用了边界布局管理器。 * 在该布局的北部(rightnouth)是一个显示日期的信息条,该信息条显示的信息使用的字体是 TimesRoman,大小是 16 号。 该信息条显示的日期为用户所选定的日期。 * 在布局管理器的中部是一个 10*10 的文本区域。 该文本区域用来输入和显示日志的内容。 在布局管理器的南部放置了两个按钮分别表示“保存日志”和“删除日志”。 * 在用户使用鼠标点击这两个按钮时会调用 actionPerformed 方法,以执行保存日志或删除日志的操作。 * 执行保存日志的操作需要调用方法“savedir”。 该方法的参数为三个整形变量,分别是:year, month, day。 * 当用户点击保存日志按钮后,该方法首先通过 `showConfirmDialog`方法弹出对话框询问用户是否保存日志,如果用户选择“是”,则该方法将日志内容添加到所选日期的hashtable散列表对象中,然后将其存为文本文件,保存在File方法建立的文本文件中。 * 执行删除日志的操作需要调用方法“rmdir”。 该方法的参数同样为三个分别为 year, month, day 的整形变量。 * 当用户点击删除日志按钮,通过 `actionPerformed` 方法获得点击的动作,该方法首先通过 `showConfirmDialog` 方法弹出对话框询问用户是否删除日志,如果用户选择“是”,则该方法首先到文件中读取散列表对象,然后删除该对象,以达到删除日志的目的。 如果该方法无法读取散列表对象,即所选日期没有日志,则弹出对话框通知用户当日没有日志记录。 * 如果用户在选择了一个没有日志记录的日期后点击“删除日志”按钮,系统会通过rm_text方法弹出对话框提示该日无日志记录。该类还有一个名为“lookdir”的方法。 该方法具有三个分别是 year, month, day 的整形参数。 当用户在日历牌中选定一个日期后该方法会判断该日期是否存在日志记录,若有则弹出对话框询问用户是否要查看日志,如果用户选择查看日志,该方法则从带有日期项的散列表中获取日志内容并在文本区域显示出日志的内容。 如果该日期没有日志记录,则在文本区域显示“无日志记录”。 * 图形界面至少要有一个顶级Swing容器,顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持; * 常用的顶级容器:Frame(框架):表示主程序窗口JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):在浏览器内显示一个小程序界面一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格窗格也可以看作是一种面板,但它是框架的一个组成部分组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板。 ``` public static void main(String[ ]args){ JFrame frame=new JFrame("SwingApplication"); JPanel panel1=new JPanel(); frame.getContentPane().add(panel1,BorderLayout.CENTER); ``` * 关键是 `java.awt.*`里面的两个与显示设备有关的类:`GraphicsEnvironment` 和 `GraphicsDevice`。`GraphicsEnvironment` 为Java应用程序提供了特定平台的 `GraphicsDevice` 对象和 `Font` 对象集合。这些 `GraphicsDevice` 可以是各种本机和远端机器的资源,如屏幕、打印机或者是 `Image Buffer` ,甚至是 `Graphics2D` 绘图方法的目标对象。 * 本日历记事本共有4类: * `CalendarPad.java`:该java文件生成的类负责创建本日历记事本程序主窗口。该类含有main方法, 程序从该类开始执行。 * `Year.class`:该文件负责创建管理年份的对象。 * `Month.class`:该文件负责创建管理月份对象。 * `NotePad.class`:该文件负责创建记事本。 * CalendarPad类 * 主要成员变量(属性) * 成员变量描述 变量类型 名称 * 年、月、日 int Year,month,day * 保存日志的散列表 Hashtable hashtable * 存放散列表的文件 File file * 显示日期 JTextField[] showDay * 日历对象 Calendar calendar * 记事本对象 NotePad notepad * 月 Month changemonth * 年 Year changeyear * 主要方法 * 名称 功能 备注 * CalendarPad 创建程序主窗口 构造方法 * setcalendar 设置日历的年份、月份 * arrynum 排列月份中的号码 * mousePressed 处理MouseEvent事件 接口方法 * mian 程序开始运行 * 记事本NotePad类 * 主要成员变量(属性) * 描述 变量类型 名称 * 文本输入区 JTextArea text * 保存、删除日志的按钮 Button Savedir,rmdir * 保存日志的散列表 Hashtable table * 保存散列表的文件 File file * 记录日志的年、月、日 int year,month,day * 主要方法 * 名称 功能 备注 * NotePad 创建记事本对象 构造方法 * setYear 设置年份 * getYear 获取年份 * setMonth 设置月份 * getMonth 获取月份 * setDay 设置日期 * getDay 获取日期 * lookdir 获取日志内容 * savedir 保存日志 * rmdir 删除日志 * actionPerformed 处理ActionEvent事件接口方法 * 年Year类 * 主要成员变量(属性) * 描述 变量类型 名称 * 表示年份的整数(负数表示公元前) int year * 显示年份的文本条 JTextField showYear * 负责增减年份的按钮 JButton Nextyear,lastyear * 主要方法 * 名称 功能 备注 * Year 创建“年”对象 构造方法 * setYear 设置年份 * getYear 获取年份 * actionPerformed 处理ActionEvent事件接口方法 * 月 Month类 * 主要成员变量(属性) * 描述 变量类型 名称 * 表示月份的整数 * (负数表示公元前) int month * 显示月份的文本条 JTextField ShowMonth * 负责增减月份的按钮 JButton lastmonth,nextmonth * 主要方法 * 名称 功能 备注 * Month 创建“月”对象 构造方法 * set Month 设置月份 * get Month 获取月份 * actionPerformed 处理ActionEvent事件接口方法