ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:482.52KB ,
资源ID:11156177      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11156177.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA课程设计报告日历记事本.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA课程设计报告日历记事本.docx

1、JAVA课程设计报告日历记事本东华理工大学信息工程学院JAVA技术应用开发课程设计报告日历记事本姓 名:胡玖龙学 号:*同组成员:无完成日期:2015.7.31.项目概述日历记事本是将日历和记事本结合在一起,用户可以任意选择某一天,保存这一天需要记录的记事,或者任意查看某一天已经记录的记事。同时还应具备提醒功能,当到达提醒时间时会自动弹出提醒。2.需求分析日历记事本大致分为日历和记事两个部分。1日历部分首先,需要选择日期,用户可以通过点击按钮选择前一年或后一年,同样也可以选择前一个月或后一个月,当月份为1月时,用户点击前一个月,会自动跳转到前一年的12月,同理,在12月时点击后一个月,会自动跳

2、转到下一年的1月。另外,当选择跨度比较大时,需要多次点击按钮,很不方便,所以需要一个下拉框,可以直接选择某一年或某一个月。当用户改变选择日期时,日历会自动显示出这一个月的日历,并且可以通过点击某一天,来进行添加记事的操作,鼠标经过日历或点击日历时,会有不同的效果以提示用户这是可以点击的。2记事部分首先,需要一个文本域给用户编辑记事内容,记事和日历部分所选择的日期是相关的,当用户点击日历选择某一天,则记事本上端会显示出选择的日期信息。同时,记事应该还具有设置提醒的功能,用户点击设置提醒按钮后,会弹出一个新的对话框,用来选择提醒时间。为保存记事,应将记事以文件的形式存储在计算机上。另外,当用户想查

3、看所有记事,或者想搜索某一则记事时,可以将日历部分换成一个表格,列出所有的记事,或者符合搜索结果的记事。3.概要设计3.1功能结构日历记事本以功能划分,大致分为日历、记事列表及记事本三个部分:3.2布局软件界面的大致布局如下图,可以通过点击按钮将日历切换为记事列表 日历/记事列表 记事本4.详细设计及功能实现4.1结构类结构类名父类说明CalendarNotepadJFrame创建程序的总体界面,本身只有日期选择和显示当前日期等功能,以下3个类将作为JPanel在此类中实例化。包含main方法,是程序执行的入口。MyCalendarJPanel实现日历,可以根据选择的年份和月份显示出此月的日历

4、,并能用鼠标点击选择对哪一天进行操作。NotepadJPanel实现记事本,可以编辑和保存当天的记事,同时可以设置提醒时间。NoteListJPanel实现记事列表,可以查看某一个月的记事或所有记事,也可以搜索记事。 文件存储结构程序第一次运行时,会在设定的位置自动创建路径:“./日历记事本/data/” 。例如默认会创建:“E:/日历记事本/data”。每一则记事都会以txt文件的形式保存在data文件夹下,txt的文件名为记事的日期,例如“20150702.txt”保存的是2015年7月2日的记事资料,txt文件第一行记录是否有提醒时间,第二行为提醒时间(若无提醒则为空),第三行及以后为记

5、事内容,具体保存格式见4.4记事本模块。4.2主界面1主要组件:类型名称说明JComboBoxyearComboBox通过下拉列表选择年份JComboBoxmonthComboBox通过下拉列表选择月份JButtonpreviousYear选择前一年JButtonnextYear选择后一年JButtonpreviousMonth选择前一月JButtonnextMonth选择后一月JButtoncurrentBtn返回当前日期JButtonallNoteBtn切换为显示记事列表或切换回日历JLabelcurrentTime显示当前日期和时间MyCalendarleftPane日历Notepadr

6、ightPane记事本NoteListnotePane记事列表2主要方法:方法返回类型说明getTime()void获取和显示当前时间,并和提醒时间比较noteMark(int year,int month)void检查本月中的每一天是否有记事,若有,则用不同颜色标记setFilePath(String path)void设置记事文件的保存路径makeDir(File dir)void创建文件路径getAlarmList()void获取需要提醒的记事的提醒时间表actionPerformed(ActionEvent e)void实现各种按钮功能main(String args)void主函数3

7、一些重要方法的实现:makeDir(File dir)这个方法的功能是当路径不存在时创建文件路径,例如设置记事存储在E:/日历记事本/data下,则掉用该方法后,会在E盘创建“日历记事本”文件夹,并在其中再创建“data”文件夹。实现方法:先获取父文件夹,若父文件夹不存在,则递归调用自身,获取父文件夹的父文件夹,直到父文件夹存在(根目录一般必定存在),若父路径存在,则在父路径下创建此文件夹。流程图如下:getAlarmList()这个方法的功能是读取所有需要提醒的时间,将这些提醒时间按先后顺序存储在链表中。实现方法:先读取data中所有的txt文件的文件名以获取每一则记事的日期(txt文件的文

8、件名就是日期信息),然后将日期作为参数,调用getAlarm()方法(在NoteList类中,下文4.5记事列表模块中会说明)获取提醒时间,然后再将日期和提醒时间一起存储在链表中,如2015年7月2日的记事的提醒时间为16:30:00,则该方法会将这些信息在链表中保存为“20150702163000”,这样做的原因以及提醒功能的具体运行方式见下文4.6提醒功能。主界面完成后如下图:(日历和记事本及记事列表是通过其他类实现的)点击记事列表按钮后界面如下图:4.3日历模块主要组件:类型名称说明JLabelweeksJLabel类数组,用来显示星期,一个7个JLabeldaysJLabel类数组,用

9、来显示日历,一个42个主要方法:方法返回类型说明howManyDays(int year,int month)int返回此月有多少天getWeek(int year,int month,int day)int返回这个日期是星期几getDays(int year,int month)String返回此月天数的数组一些重要方法的实现:howManyDays(int year,int month)这个方法是通过参数获取这个月有多少天,实现方法很简单,除了二月份,每个月的天数都是固定的,只要检查参数的年份是否是闰年,就可知道二月份的天数。getWeek(int year,int month,int d

10、ay)这个方法的作用是得到参数所写的日期是星期几,在程序中,最后一个参数一般都是1,因为这个方法主要用来获取某个月的第一天是星期几。实现方法:JAVA本身提供Calendar类,可以通过这个类自带的方法来获取某一天是星期几,但需要注意的是,得到的结果1-7表示星期天-星期一,也就是Calendar类默认一个星期是从星期天开始的。为使程序符合中国人习惯,要先将结果转换为从星期一开始,例如用int week保存结果,则只需要加一条语句:week=week-1=0?7:week;就可以将结果转换为从星期一开始。howManyDays(int year,int month)从上面的组件表可知,不管这个

11、月有多少天,都是先创建42个Jlabel,然后将日期填入其中,没有这一天则为空白,这个方法返回的String中的某项若为null,则没有这一天。例如2015年7月,这个月的第一天是星期三,则第一天的前两个Jlabel内容为空。这个方法返回的String长度为42不变,这样就可以很方便的将返回值依次填入42个Jlabel。实现方法:通过getWeek()方法获取这个月的第一天是星期几,然后再通过howManyDays()获取这个月有多少天,最后根据这两个数据在String中填入值并返回。例如2015年7月,通过上面两个方法可知此月第一天是星期三,一共有31天,则返回值String dayNums

12、为:dayNums = null,null,”1”,”2”,”3”.”31”,null,.,null;完成后如下图(不能单独存在,这是显示在主界面中的一部分):4.4记事本模块主要组件:类型名称说明JButtonsave保存记事JButtondelete删除记事JButtonalarm设置提醒JTextAreanote记事内容编辑区域JLabelnoteDate显示记事的日期JLabelnoteWeek显示记事的星期AlarmDialogalarmDialog设置提醒时间,点击alarm按钮后弹出主要方法:方法返回类型说明saveNote(int year,int month,int day)

13、void保存记事及提醒deleteNote(int year,int month,int day)void删除记事及提醒actionPerformed(ActionEvent e)void实现按钮功能一些重要方法的实现:saveNote(int year,int month,int day)这个方法的功能是保存记事及提醒时间(如果有提醒的话),不仅要将记事内容和提醒以txt文件形式保存,同时还要将提醒时间放在提醒时间链表的合适位置,此过程见4.6提醒功能。实现方法:先通过参数获得日期信息,因为参数为int型,而最后保存的txt文件名长度是固定的,所以当月和天小于10时,要在前面加0。例如,20

14、15年7月2日,应转换成20150702,再将文件内容保存为20150702.txt。通过这条语句就可以完成:String fName = +year+(month10?0+month:month)+(day10?0+day:day)+ .txt;另外,文件的内容不只包括记事内容,还有提醒时间,为了便于读取,都要按照同样的格式存储,例如2015年7月2日有一条记事,内容为“英语考试,记得带铅笔”,提醒时间为08:00:00。则会按如下方式保存:文件名: 20150702.txt位置: E:/日历记事本/data/20150702.txt内容:Y08:00:00英语考试,记得带铅笔文件的第一行为

15、是否有提醒的标记,若有提醒则为“Y”,没有提醒则为“N”。第二行为提醒时间,若没有提醒,则为空。第三行及以后用来记录记事内容。完成后如下图:(不能单独存在,这是显示在主界面中的一部分) 左图为已存在记事时,右图为不存在记事时,下方按钮状态不同点击设置提醒后,会弹出如下对话框:设置提醒时间后,要点击右边的启用提醒后才能启用。想取消提醒,只需要取消选择右边的启用提醒4.5记事列表模块主要组件:类型名称说明JTablenoteTable记事表格,以列表形式显示多则记事的日期、提醒和摘要JLabelnoteListInfo显示记事列表的信息JTextFieldsearchField搜索框,可以填入搜索

16、词JButtonsearch根据搜索词搜索记事JButtonallNote切换查看所有记事,或切换回查看本月记事主要方法:方法返回类型说明getNoteInfo(int year,int month,boolean getAll)void显示某月记事的列表,或显示全部记事的列表getAlarm(int year,int month,int day)String获取提醒getSummary(int year,int month,int day)String获取摘要searchNote(String str)void搜索记事actionPerformed(ActionEvent e)void实现按

17、钮功能3一些重要方法的实现:getNoteInfo(int year,int month,boolean getAll)这个方法的左右是获取记事列表,然后显示在Jtable中。方法的最后一个参数若为true,则获取所有记事,若为false,则只获取参数所指月份的记事。实现方法,先根据参数,读取此月下的所有记事文件,然后将记事文件的文件名转换成“年-月-日”的形式填入列表中的日期列,再通过getAlarm()方法获取提醒,将提醒填入列表中的提醒列,再通过getSummary()方法获取摘要,将摘要填入列表中的摘要列。例如例如2015年7月2日只有一条记事,内容为“英语考试,记得带铅笔”,提醒时间

18、为08:00:00,则调用方法getNoteInfo(2015,7,false)后,记事列表会如图显示:若调用getNoteInfo(2015,7,true),则会如图显示:即使是显示全部记事,前两个日期参数也不能乱填,因为点击“查看本月”按钮后会返回显示参数所指月份的记事。getAlarm(int year,int month,int day)这个方法的作用是获取提醒时间,若有提醒则返回提醒时间,若无提醒则返回“无”。实现方法:根据参数读取记事文件,然后读取文件的第一行,若第一行内容为“N”,则直接返回“无”,若第一行内容为“Y”,则返回文件第二行内容(即提醒时间)。getSummary(i

19、nt year,int month,int day)这个方法的作用是获取记事摘要。实现方法:根据参数读取记事文件,然后跳过文件前两行,直接从第三行开始读取文件内容,不论记事内容多长,都只读取30个字节,然后将读取内容返回。searchNote(String str)这个方法的作用是通过参数获取搜索关键字段,搜索内容包含关键字段的记事。实现方法:先读取data文件夹下的所有记事文件的文件名,将文件名转换成int型的年、月、日,然后将其作为参数,调用getSummary()方法,通过String类自带的contains()方法判断getSummary()的返回的字符串是否包含关键字段,若包含,则将

20、该记事的信息显示在记事列表中,并继续读取下一个记事文件。4.6提醒功能每一则记事都可以有提醒,而且提醒时间不仅包括时、分、秒这些时间信息,同时也包括日期信息。提醒功能要做的就是,当提醒时间与计算机系统时间重合时,软件会自动弹出提醒信息。而为了实时获取计算机系统的时间,至少每秒钟就要获取一次系统时间,而若每秒都将系统时间与所有提醒时间一一比较的话,将会耗费大量资源,软件将会变得没有效率。为了解决这个问题,必须先将所有提醒时间按发生先后进行排序,这样就只需要与最先发生的提醒进行比较,当提醒已经发生时,则移除此提醒,后一个提醒将变为第一个,同时考虑到新增记事时,新的提醒时间要插入到合适位置,会将很多

21、提醒移动,所以最好采用链表来存储提醒信息,这样可以方便的获取首元素,也可以方便的新增和删除元素。具体实现:为了方便排序和比较,设置链表元素类型为long型(若为Sting类型,则不能方便的进行大小比较),则链表定义如下:LinkedList alarmLink = new LinkedList();而元素值为“年月日时分秒”的形式,例如2015年7月2日8:30:00有一则提醒,则该提醒元素值为“20150702083000”,这样做的好处是,元素值的大小就代表了发生的先后,值越小,则越先发生。例如20150702083000小于20150703070000,则2015年7月2日8:30:00

22、的提醒要早于2015年7月3日7:00:00的提醒。另外,并不是所有提醒时间都会加入链表中,若当前时间为7月2日,则7月1日的提醒是不会加入到链表中的。执行流程:先调用getAlarmList()方法读取所有已存在的提醒,并将其中晚于当前时间的提醒按先后顺序填入alarmLink中;若新增记事,则saveNote()方法会将新记事的提醒时间(若有提醒的话)插入到alarmLink中的合适位置;若删除记事,则deleteNote()方法会将删除的记事的提醒时间(若有提醒的话)从alarmLink中删除。当链表读取完成后,只需要每秒钟将当前时间转换成“年月日时分秒”的形式,再与alarmLink.

23、 getFirst().longValue()比较,若相等,则自动弹出提醒框,并调用alarmLink.removeFirst()移除首元素。下图表示一个新增提醒20150705103000应该插入的位置:5.运行测试第一次打开软件:选择另一天:添加一则记事,并设置提醒时间:点击保存:点击上方”记事列表“按钮:再多添加几则记事:搜索关键字”图书馆“:当到达提醒时间:6.总结从选择题目到最后完成,一共花了一个多星期的时间,在这段时间中,我感觉自己的编程能力得到了很大的提升,以前一些不清楚的理论知识,也在实践中变得熟悉。很多功能我并没有能第一时间想到实现的方法,但通过查API和查看其他项目源代码,最后都得到了解决,可以说,我分析和解决问题的能力也得到了提升。在编程的过程中,我更加意识到代码规范的重要性,变量和方法如果随便命名,会给后续的编程造成很大的困难,一份好的代码,不仅仅是完成所需要的功能,可读性和可扩展性也非常重要。最后的结果,基本上算是完成了需要的所有功能,但是还有很多地方做的不够好,如提醒功能,实际应用中,提醒时间没有必要精确到秒,而且提醒功能运行时可能会出现隐藏的bug,另外,提醒时,仅仅只是弹出一个简单的对话框,或许可以再加入播放铃声的功能。另外,界面的交互性做的也不够好,布局也比较呆板,离一个真正能交给用户使用的软件还有很大的差距。源代码:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1