基于Java的日历记事本.docx
《基于Java的日历记事本.docx》由会员分享,可在线阅读,更多相关《基于Java的日历记事本.docx(36页珍藏版)》请在冰豆网上搜索。
基于Java的日历记事本
摘要
Java是Sun公司推出的一种基于面向对象技术的编程语言,同时也是一种跨平台的程序设计语言,是软件开发的一种革命性技术,已被列为当今世界信息技术的主流之一,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。
Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。
用JAVA语言进行程序开发,目前十分流行。
本设计通过JAVA来实现具有图形界面的日历记事本,体现了JAVA的高效性等特点。
随着社会的发展,越来越多的人依靠电子产品生活,而他们的日常工作也是离不开这些电子产品的,所以开发出一款日历备忘录就显得必不可少了。
利用面向对象的程序设计语言Java来实现具有图形界面的日历记事本。
日历具有基本的浏览和日期修改的功能。
记事本具有输入、保存、删除、查看等基本功能。
关键词:
面向对象Java日历记事本
目录
摘要I
目录II
第1章绪论3
1.1概述3
1.2课程设计题目3
1.3课程设计目的3
1.4课程设计内容3
1.5项目背景和目标3
第2章系统需求分析5
2.1系统目标5
2.2主体功能5
2.3开发环境5
第3章系统概要设计6
3.1系统的功能模块划分6
3.2系统流程6
第4章系统详细设计8
4.1程序变量和方法8
第5章算法描述和编码实现10
5.1类的算法10
5.2编码实现11
第6章测试14
6.1测试方案14
6.2测试结果14
总结18
参考文献19
附录20
第1章绪论
1.1概述
日历记事本的包括日历和日志记事本两部分:
日历部分采用公历历法,界面设计:
日期部分每行7天,每列5天,可完全记录一个月中的所有天数。
星期采用中文显示,每行的第一天为星期日。
星期六显示为蓝色,星期日显示为红色,当前日期显示为绿色,其它日期显示为黑色。
年份通过负数表示公元前,正数表示公元后。
用户可通过使用鼠标点击按钮的方式改变日历的年份和月份。
记事本部分提供输入、保存、显示、删除日志的功能。
用户输入的日志记录在本系统所在的目录保存为后缀名为.txt的文本文件。
用户只要选定要查看日志的日期,即可以通过鼠标点击显示日志的按钮来实现。
1.2课程设计题目
基于Java语言的日历记事本
1.3课程设计目的
1.巩固和提高java编程技术。
2.培养掌握成学设计的基本思路和方法。
3.加强研发、调试程序的能力。
4.增强分析、解决问题的能力。
5.提高科技论文写作能力。
1.4课程设计内容
设计GUI界面的日历记事本。
系统将日历、记事本功能结合在一起,用户可以方便地在任何日期记录下有关内容或查看某个日期的记录内容。
为使用者记录、管理个人日记以及每日心里路程,其中主要实现以下功能本系统界面的左侧是日历。
系统界面的右侧是记事本。
选择具体日期后,可以将记事本的内容保存起来,形成一个日志。
显示信息:
用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
1.5项目背景和目标
目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。
按照教学培养计划要求,学生在学习完课本中指定课时的知识后,应安排一定课时的课程设计。
其主要目的是使学生深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等。
故此“日历记事本”应运而生。
本课程设计是为了配合Java程序设计课程,帮助学生深入学习掌握Java语言,熟练运用这个工具而设立的课程。
通过课程设计各个项目的综合训练,加强学生对JAVA语言的理解,检验学生对专业理论知识理解与掌握的程度,锻炼学生综合运用JAVA程序设计处理所学的知识实际分析问题、解决问题的能力,使课堂上的理论在实践中得到运用,提高学生的综合素质,为学生毕业后的实际工作打好基础。
同时也满足了大多数同学对于一款简单易用的日记本软件的需求。
第2章系统需求分析
2.1系统目标
1.系统界面的左侧是日历。
该日历可以按年份前后翻动,鼠标单击“上年”按钮时,当前日历的年份减一;当鼠标左键单击“下年”按钮,当前日历的年份加一。
2.该日历也可以在某年内按月前后翻动。
当鼠标左键单击“上月”按钮时,当前日历的月份减一;当鼠标左键单击“下月”按钮时,当前日历的月份加一。
3.使用鼠标左键单击选定的日期,如已有记录内容,系统将弹出对话框提示该日已有记录内容,并询问用户是否用记事本显示该内容。
4.用户选择具体日期后,可以将记事本的当前内容保存起来,形成日志。
2.2主体功能
用户可以方便地在任何日期记录下有关内容或查看某个日期的记录内容。
通过按按钮“上年”和“下年”对年份进行翻页。
通过按按钮“上月”和“下月”对月份进行翻页。
用户可以通过输入年份来查看自己的日志。
显示信息:
用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
定时提醒:
用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。
查询信息:
用户可以查询到某个月的所有的提示信息。
页面设计分为左右两个部分,左部分为日历的视图,上边放置了调节年份和月份的按钮,下边是日历的格式。
右部分作为一个备忘录的文本域。
当该日写有备忘时,会在文本域弹出提示有备忘是否查看。
文本域的下边设有增加备忘和删除当前备忘的按钮。
2.3开发环境
WindowsXP;jdk1.5.0-0-05;ultraedit开发工具
第3章系统概要设计
3.1系统的功能模块划分
本日历记事本共有4个java源文件。
CalendarPad.java:
该java文件生成的类负责创建本日历记事本程序主窗口。
该类含有main方法,程序从该类开始执行。
Year.java:
该文件负责创建管理年份的对象。
Month.java:
该文件负责创建管理月份对象。
NotePad.java:
该文件负责创建记事本。
图3-1类之间的关系
3.2系统流程
1.系统实现
图3-2系统功能结构
2.系统实现流程
CalendarPad作为主函数的入口。
调用NotePad类的方法完善自己的窗口。
当对窗口的年份和月份进行改变时就会触发Year类和Month类里的触发器和方法,从而达到日历备忘录的目的。
是
图3-3系统流程实现
第4章系统详细设计
4.1程序变量和方法
在设计日历记事本时,需要编写3个Java类:
CalendarPad.java、Year.java、NotePad.java、month.java。
日历记事本除了需要编写的上述3个Java所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。
图形界面至少要有一个顶级Swing容器
顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持;
常用的顶级容器:
Frame(框架):
表示主程序窗口JDialog(对话框):
每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):
在浏览器内显示一个小程序界面一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格窗格也可以看作是一种面板,但它是框架的一个组成部分组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板
publicstaticvoidmain(String[]args){JFrameframe=newJFrame("SwingApplication");
JPanelpanel1=newJPanel();
frame.getContentPane().add(panel1,BorderLayout.CENTER);
关键是java.awt.*里面的两个与显示设备有关的类:
GraphicsEnvironment和GraphicsDevice。
GraphicsEnvironment为Java应用程序提供了特定平台的GraphicsDevice对象和Font对象集合。
这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是ImageBuffer,甚至是Graphics2D绘图方法的目标对象。
而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。
这样,我们就可以用GraphicsDevice来操纵屏幕了。
GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。
监听器actionlistion:
方法:
actionPerformed事件:
ActionEvent
●StringgetActionCommand()
actioncommand是控件内部的一个字符串,用于标识控件的状态。
此函数可以取得控件的状态,从而决定到底该做什么。
●intgetModifiers()
取得“产生此事件时,用户同时按下的组合键”
●longgetWhen()
取得“产生此事件时的时间戳”
事件产生原因:
点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期。
1.CalendarPad类
表4-1主要成员变量(属性)
成员变量描述
变量类型
名称
年、月、日
int
Year,month,day
保存日志的散列表
Hashtable
hashtable
存放散列表的文件
File
file
显示日期
JTextField[]
showDay
日历对象
Calendar
日历
记事本对象
NotePad
notepad
月
Month
负责改变月
年
Year
负责改变年
表4-2主要方法
名称
功能
备注
CalendarPad
创建程序主窗口
构造方法
设置日历牌
设置日历的年份、月份
排列号码
排列月份中的号码
mousePressed
处理MouseEvent事件
接口方法
mian
程序开始运行
2.记事本NotePad
表4-3主要成员变量(属性)
描述
变量类型
名称
文本输入区
JTextArea
text
保存、删除日志的按钮
Button
保存日志、删除日志
保存日志的散列表
Hashtable
table
保存散列表的文件
File
file
记录日志的年、月、日
int
year,month,day
表4-4主要方法
名称
功能
备注
NotePad
创建记事本对象
构造方法
setYear
设置年份
getYear
获取年份
setMonth
设置月份
getMonth
获取月份
setDay
设置日期
getDay
获取日期
获取日志内容
获取日志内容
保存日志
保存日志
删除日志
删除日志
actionPerformed
处理ActionEvent事件
接口方法
3.年Year
表4-5主要成员变量(属性)
描述
变量类型
名称
表示年份的整数(负数表示公元前)
int
year
显示年份的文本条
JTextField
showYear
负责增减年份的按钮
JButton
明年,去年
表4-6主要方法
名称
功能
备注
Year
创建“年”对象
构造方法
setYear
设置年份
getYear
获取年份
actionPerformed
处理ActionEvent事件
接口方法
4.月Month
表4-7主要成员变量(属性)
描述
变量类型
名称
表示月份的整数(负数表示公元前)
int
month
显示月份的文本条
JTextField
ShowMonth
负责增减月份的按钮
JButton
上月,下月
表4-8主要方法
名称
功能
备注
Month
创建“月”对象
构造方法
setMonth
设置月份
getMonth
获取月份
actionPerformed
处理ActionEvent事件
接口方法
第5章算法描述和编码实现
5.1类的算法
主类的算法:
CalendarPad类首先创建用于布局的面板,左面添加日历牌,右面添加记事本。
然后调用CalendarPad方法,该方法有三个分别是year,month,day的整形参数。
该方法管理日历记事本的主界面。
在日历牌部分使用网格布局,行数和列数均为7。
其中第一行显示星期标题的标签,后续六行显示日期的标签。
号码排列算法:
该方法包含两个整形参数,分别是星期几和月天数。
该方法的作用是将日期一次排列入日历牌的网格中,日期显示的字体字体均为TimesRoman,并将星期六显示为蓝色,星期日显示为红色。
将当前日期显示为绿色,大小为20,其它日期为黑色,字体大小为12。
设置日历牌方法的算法:
该方法有两个整形参数,分别是year和month。
该方法根据平、闰年以及每个月份的天数不同而以不同的方式将一个月中的每一天依次排入网格中。
当月份为1、3、5、7、8、10和12时,每月包括31天,当月份为4、6、9、11时,每月包括30天,平年的2月为28天,闰年的2月为29天。
记事本的算法描述如下:
NotePad类首先调用NotePad方法创建一个容器,在这一容器中使用了边界布局管理器。
在该布局的北部是一个显示日期的信息条,该信息条显示的信息使用的字体是TimesRoman,大小是16号。
该信息条显示的日期为用户所选定的日期。
在布局管理器的中部是一个10*10的文本区域。
该文本区域用来输入和显示日志的内容。
在布局管理器的南部放置了两个按钮分别表示“保存日志”和“删除日志”。
在用户使用鼠标点击这两个按钮时会调用actionPerformed方法,以执行保存日志或删除日志的操作。
执行保存日志的操作需要调用方法“保存日志”。
该方法的参数为三个整形变量,分别是:
year,month,day。
当用户点击保存日志按钮后,该方法首先弹出对话框询问用户是否保存日志,如果用户选择“是”,则该方法将日志内容添加到所选日期的散列表对象中,然后将其存为文本文件。
执行删除日志的操作需要调用方法“删除日志”。
该方法的参数同样为三个分别为year,month,day的整形变量。
当用户点击删
本栏目责任编辑:
谢媛媛
除日志按钮,该方法首先弹出对话框询问用户是否删除日志,如果用户选择“是”,则该方法首先到文件中读取散列表对象,然后删除该对象,以达到删除日志的目的。
如果该方法无法读取散列表对象,即所选日期没有日志,则弹出对话框通知用户当日没有日志记录。
如果用户在选择了一个没有日志记录的日期后点击“删除日志”按钮,系统会弹出对话框提示该日无日志记录。
该类还有一个名为“获取日志内容”的方法。
该方法具有三个分别是year,month,day的整形参数。
当用户在日历牌中选定一个日期后该方法会判断该日期是否存在日志记录,若有则弹出对话框询问用户是否要查看日志,如果用户选择查看日志,该方法则从带有日期项的散列表中获取日志内容并在文本区域显示出日志的内容。
如果该日期没有日志记录,则在文本区域显示“无日志记录”。
5.2编码实现
1.日历记事本系统主面板与日历板模块
该模块设计主要主要包含以下成员变量:
1)年(year)
2)月(month)
3)日(day)
4)存放日期的表(Hashtable)
5)存放日志的文件(File)
主要方法有:
1)创建程序主面板的构造方法(CalendarPad)
2)处理ActionEvent事件的接口方法(actionPerformed)
3)程序开始运行的main()方法。
表5-1日历记事本系统主面板与日历板模块
类名
CalendarPad
public
接口
MouseListener
public
方法
CalendarPad(int,int,int)
设置日历牌(int,int)
排列号码(int,int)
main()
public
publicvoid
publicvoid
publicstaticvoid
在具体设计过程中,首先,基本功能和组件的创建;然后,创建构造方法,这一部分包括:
为各个功能创建监听事件,创建程序主面板以及日历面板.添加关闭窗口方法;第三步分为创建监听方法,实现对各个功能模块的操作,以及鼠标点击实现进入相应的功能面板;最后创建相应的main()方法。
2.日历记事本系统年设置模块
该模块用于实现日历记事本系统中关于年的设置。
模块中包含的主要成员变量有用于改变年的按钮(Jbutton明年去年),显示年的文本框(JTextField)。
模块中包含的主要方法有用于设置年的方法(setYear),用于获取年的方法(getYear)和处理ActionEvent事件的接口方法(actionPerformed)等。
表5-2日历记事本系统年设置模块
类名
Year
public
接口
ActionListener
public
方法
setYear()
getYear()
actionPerformed(ActionEvente)
publicvoid
publicint
publicvoid
在具体设计过程中,首先,显示年的文本框、按钮、文件列表、区域的创建和初始化;然后创建构造方法,实现以上信息和组件的实体化,下一步实现接口监听,创建监听方法,通过以上方法可以实现年设置模块的基本功能实现。
3.日历记事本系统月设置模块
该模块用于实现日历记事本系统中关于月的设置。
模块中包含的主要成员变量有用于改变月的按钮(Jbutton上月下月),显示月的文本框(JTextField)。
模块中包含的主要方法有用于设置月的方法(setMonth),用于获取月的方法(getMonth)和处理ActionEvent事件的接口方法(actionPerformed)等。
表3日历记事本系统月设置模块
类名
Month
public
接口
ActionListener
public
方法
setMonth()
getMonth()
actionPerformed(ActionEvente)
publicvoid
publicint
publicvoid
在具体设计过程中与年设置大体上相近,首先,显示年的文本框、按钮,文件列表、区域的创建和初始化;然后创建构造方法,实现以上信息和组件的实体化,下一步实现接口监听,创建监听方法,通过以上方法可以实现年设置模块的基本功能实现。
4.日历记事本系统记事本模块
该模块中包含的主要成员变量有文本框(JTextArea),按钮(JButton保存日志删除日志),用于存放日志记录的文件(File)以及响应相关操作的信息提示(JLabel)。
该模块中包含的主要方法有设置信息条,设置文本区,获取日志内容,保存日志,删除日志。
表4日历记事本系统记事本模块
类名
NotePad
public
接口
ActionListener
public
方法
设置信息条()
设置文本区()
获取日志内容()
保存日志()
删除日志()
publicvoid
publicvoid
publicvoid
publicvoid
publicvoid
在具体设计过程中首先,将记事本模块中的文本框、按钮创建和初始化;然后创建构造方法,实现以上信息和组件的实体化,实现接口监听,创建监听方法,选择日期时若记事本系统中已经存在记录,则弹出提示,询问是否查看;若不存在记录,则可以保存日志;对存在的日志使用删除日志功能时会弹出提示是否删除日志,选是即删除日志,选否即可返回.以上即实现学生基本信息模块的基本功能实现。
第6章测试
6.1测试方案
1.打开主界面,鼠标左键右击,查看日历界面。
2.选定一个日期写日志。
3.对日历添加、删除日志。
4.修改年份,查看一些日志。
6.2测试结果
1.年份改变
点击一次“上年”按钮可增加一年,点击一次“下年”按钮可减少一年,多次连续点击即可依次改变多个年份。
2.月份改变
点击一次“上月”按钮可以增加一月,点击一次“下年”按钮可以减少一月,多次连续点击即可一次改变多个月份。
3.日期显示
用于显示当前所选择的所在的年份月份的所有日期、星期,并在记载有日志的日期直接跳出“这一天有日志记载,你想看吗?
”,而没有记载日志的日期文本中则在文本框中“无记录”。
4.日志显示
界面的日期框中,可以选择某天记载的日志,并且读取的日志在此部
分显示出来。
5.保存、删除、读取日志。
可以在没有记载日志的日期里记载日志并保存,可以对以保存的日志进行读取、修改或者删除。
(1)保存日志:
(2)删除日志:
(3)查看日志
总结
经过几天的努力,基本上完成了我的软件课程设计。
通过这次的课程设计,基本上将书本上的知识运用到实践上,从而进一步巩固和丰富所学知识,也让我更加深层次的认识了java及其功能的强大。
为了更好地完成这次课程设计,我做了很多准备,上网查阅资料,到图书馆翻阅书籍。
这个过程中也锻炼了我的思维分析、遇到问题及想法设法通过各种途径解决问题的能力。
在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。
自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。
从理论到实践,在整整几天的时间里,可以说,是苦大于甜,但确实学到很多东西,同时不仅巩固了以前的知识,而且学到了许多书上学不到的知识。
通过这次课程设计使我懂得了理论与实践相结合是很重要的,只有理论知识是不够的,只有把所学的理论知识和实践结合起来,从理论中得出结论,才能真正服务社会,从而提高自己的实际动手能力和独立思考能力。
通过这次课程设计,了解到了自己的不足之处,对以前的知识没有掌握到位,所以我们一定要学好理论知识,为以后的实践打下基础。
参考文献
[1]耿祥义,张跃平 Java2实用教程(第三版)[M].北京:
清华大学出版社,2006
[2]耿祥义Java课程设计(第三版)[M].北京:
清华大学出版社,2004
[3]张跃平Java2实用教程实验