当前位置:文档之家› java日历记事本(无敌版带提醒功能调整时区更换图片铃声功能)

java日历记事本(无敌版带提醒功能调整时区更换图片铃声功能)

java日历记事本(无敌版带提醒功能调整时区更换图片铃声功能)
java日历记事本(无敌版带提醒功能调整时区更换图片铃声功能)

装订线

北京师范大学2015~2016学年春季学期期末Java程序设计作业试卷课程名称: Java程序设计任课教师姓名:孙一林

卷面总分: 100 分考试时长:分钟考试类别:闭卷□开卷

其他□院(系):信息科学与技术学院专业:计算机科学与技术年级: 2014 姓名:刁诗哲学号:

阅卷教师(签字):

评价准则:

(1)应用程序设计思想………………………………………………… ≤ 20% (2)程序结构表述……………………………………………………… ≤ 20% (3)调试、运行、结果………………………………………………… ≤ 20% (4)报告+程序文档………………………………………………………≤ 20% (5)应用程序展示(5分钟讲解与演示)……………………………≤ 10% (6)应用程序难易度……………………………………………………≤ 10%

设计要求:

选择一题,按自己理解设计程序,在报告(该试卷首页为报告第1页,文件名及格式为:*.doc或*.docx,* = 学号 + 姓名,报告为必要项)中给出设计思路、程序结构、调试、模拟运行、结果等说明内容,提交作业(设计、调试、运行、结果):报告+程序所有(源程序、类、打包等)文件的压缩文档(学号 + 姓名)。设计题目难易度依照题号顺序由小到大。

多功能日历记事本

一、整体介绍

1.外观显示

日历外观如下图所示,全局大体分为四个部分:左上,左下,右上,右下。

最上面是标题栏,显示该程序的名称,如我的程序显示的为“刁诗哲的日历”。标题栏下方为菜单栏,菜单栏目前有两个菜单,分别是“功能设置”和“关于”。

左上部分为日历界面,显示一个万年历,用户可以在输入框中输入所查年份和月份,按下回车后自动跳转到该月。左下部分是显示图片部分,用户可以自主设置自己喜欢的图片,设置这一功能主要是给用户提供个性化的用户体验,可以根据自己的喜

好设置喜爱的图片,比如放置一个名人座右铭可以勉励自己在学业上不断进步。右上为记事本区域,用户可以选中日期后输入自己想要保存的记事,同时,用户可以设置提醒时间(闹钟)。在右下方是一个钟表,不仅可以为用户提供实时查看时间的服务,同时也可以作为闹钟使用。

2.基本功能

1)万年历功能

左上方的日历相当于一个万年历,可以为用户提供一个日期的查看功能,可以显示日历的年月日,并且对今天的日历给出了特殊的显示(大字体和蓝色显示)。还能查看当前时间之前和之后的日历,可以通过按钮操作,也支持在输入框里面输入年和月。如上图

2)记事本的编辑、查看和删除功能

右上方提供备忘录(记事本)功能,用户可以记录下来之前发生的事情以作纪念,也可以记录下来未来想要做的事情以防遗忘

3)闹钟功能

用户点击设置闹钟时间后,便可以设置闹钟时间,到达预定时间后闹钟会播放音乐,当然,闹钟提醒音乐也可以自己设置。

4)使用帮助

3.高级功能

1)时区设置

我们为用户提供了多达75个时区的选择,点击更改时区即可将时间切换到当前用户所在的时区,可以满足用户去往不同国家的需求。是一款“国际化”日历。

2)自定义图片

用户点击更改图片背景,可以选择自己喜欢的图片,为用户提供了多样化选择。可以根据自己的喜好设置喜爱的图片,比如放置一个名人座右铭可以勉励自己在学业上不断进步。

3)自定义音乐

考虑到普通闹钟刺耳的缺点,我们给用户提供定制化铃声的功能,让用户可以自己设置闹钟铃声,提供了个性化的用户体验。

4)保留自定义设置

用户的自定义设置功能都会被记录,下次打开软件时还能保留先前的设置。是一款真正的人性化、个性化日历

二、设计思路

首先,按照功能将日历分成不同模块,分别是CalendarImage(显示图片),CalendarPad(实现主要功能,主要框架),mainclass(main方法),NotePad(显示

记事本),myClock(钟表的显示),Month(月份的设置和显示),Year(年份的设置和显示)。

图 1 根据功能设计日历模块

首先按照日历所要实现的功能,从外观显示和内部功能设计日历。

日历的外观共分为四个部分,分别是顶部的菜单栏,左上部分显示日历面板,右上部分显示记事本面板,左下部分显示图片,右下部分显示表盘,包括电子表显示和钟表表盘显示。

日历的内部功能:

实现记事本功能:包括获取日志,显示日志,删除日志

实现闹钟功能:包括钟表的显示,不同时区的设置,和到时提醒功能

日历日期的显示:包括月份的设置,年份的设置

根据以上功能的划分,按照面向对象编程的设计思想,将同一对象所应用的功能合并到一个对象上,可以将日历的实现划分为以下几个模块。

图 2 面向对象的日历设计

三、程序结构

1.总体结构

在设计多功能日历时,需要编写7个java源文件:, , , , ,,。这些类的主要功能如下:

主类 mainclass(用于启动程序)

主要框架mainclass(是程序的核心)

记事本NotePad(记事本功能)

年Year(显示年)

月Month(显示月份)

日历图像CalendarImage(显示日历图像)

数字时钟myClock(用于显示数字时钟)

类之间的关系如下图所示

2.详细设计

package diaoshizhe;

import这是程序的主类;程序从这个类开始;

public class mainclass {

public mainclass() {

}

;

import .*;

import .*;

import .*;

public class myClock extends JApplet implements Runnable { /**

*

*/

private static final long serialVersionUID = 1L;

Thread clock;

int ringhour;

int ringmin;

Calendar calendar = new GregorianCalendar);

Date timenow;

Clock nowClock;

public myClock(){

start(); idth;

int h=getBounds().height;

setBounds(0,0,w,h); ;

import .*;

import

;

import .*;

import

;

import .*;

import .*;

oURL());idth;

int h=getBounds().height;

(image,0,0,w,h,this);

}

}

四、调试

在调试过程中遇到了很多问题,可以说是一边写代码一遍调试的(个人认为这也是正确方法,如果写完所有代码再调试就太晚了),在调试的过程中遇到了很多问题,在这里举最关键的,印象最深的问题列举。

遇到的问题1:

日历面板如何设计,怎样才能较完整的实现日历的功能,在这个方面的设计我头脑有点晕,分不清几个模块如何拼接在一起。如何显示日历面板,通过百度我搜索了一下前人的经验,又看了一些优秀案例,同时参照自己电脑上的日历,有了解决方法。

解决:

设置一个大的JPanel叫做leftUp(因为左上角是日历,所以名字叫leftUp),然后设置几个小的组建,分别是

JPanel leftUp_center=new JPanel();// leftUp_center为窗口的leftUp的中间部分,用于显示日历; JPanel leftUp_north=new JPanel();//leftUp_north为窗口的leftUp的上部分,用于显示年月及相关按钮;

JPanel leftUp_center_east=new JPanel();//leftUp_center_east是窗口的leftUp_center的东边部分,用来显示日历每天的星期和号数;

使用以上方法就将一个大的日历划分成几个小的模块,然后一一实现就简单了

遇到的问题2:

记事本功能如何实现,如果做到保存用户输入的记事,并且还能有保存日志功能和删除日志功能

解决:

//读取记录日志的文件;

FileInputStream inOne=new FileInputStream(file);

ObjectInputStream inTwo=new ObjectInputStream(inOne);

table=(Hashtable)();

();

();

//把读到的内容写到指定存储日志的文件中;

FileInputStream inOne=new FileInputStream(file);

ObjectInputStream inTwo=new ObjectInputStream(inOne);

table=(Hashtable)();

();

();

(key,logContent);//注意key和logContent是对应的映射;

FileOutputStream out=new FileOutputStream(file);

ObjectOutputStream objectOut=new ObjectOutputStream(out);

(table); //把内容写进文件中;

();

();

//删除当前时间对应的日志;

FileInputStream inOne=new FileInputStream(file);

ObjectInputStream inTwo=new ObjectInputStream(inOne);

table=(Hashtable)();

();

();

(key);//移除;

FileOutputStream out=new FileOutputStream(file);

ObjectOutputStream objectOut=new ObjectOutputStream(out);

(table);

();

();

(null);//清空显示的文档;

遇到的问题3:

如何实现更改图片背景的功能我设置了让用户选择图片,但是发现不起作用

解决:

经过调试我发现,原来我只是设置了一个模态对话框,让用户可以选择文件,但是选择的文件并没有真正利用起来,于是我对文件进行了操作,让获取的文件在指定区域显示便可以了。

遇到的问题4:

钟表表盘和电子数码显示不一致,发现时钟总是比表盘慢了一秒,如图,秒针没有对齐12点刻度

解决:

后来发现自己的问题在于,我的时钟获取的时间是使用变量hour,minute,second来设置的,而电子时钟的显示是使用即时获取时间

,

,

;

因此我做了相应的修改取消了使用hour,minute,second等变量保存的方式,而是都改为即时获取。

遇到的问题5:

如何做到修改时区,并且我还想实现尽可能多的时区

解决:

我百度了一下方法告诉我是,开始使用方法不对没有正确显示,后来发现该语句要这样使用:

Calendar calendar = new GregorianCalendar);

是我设置的一个成员变量,可以让用户方便的修改不同时区,但是问题又来了,如何知道不同时区的准确名称呢因为不同时区的名称很复杂,比如Europe/Paris是罗马时间也可以表示法国时间,这些怎么知道呢,通过百度我发现了在JDK/jre/lib 文件夹下有一个tzmappings文件,储存了各个时区,然后我给每个时区设置一个编号,让用户输入编号而不是输入全称,就可以让用户方便快捷的设置时区。

五、模拟运行

六、结果与反思

基本实现了初步设想的功能

1) 万年历功能

2) 记事本的编辑、查看和删除功能

3) 闹钟功能

4) 使用帮助

高级功能:

1) 时区设置

2) 自定义图片

3) 自定义音乐

4) 保留自定义设置

还有一些有待继续改进的地方和新功能,比如:

1.农历的添加

农历是中国人使用较多的日历,市面上大多数日历都可以实现农历的显示,因此在未来的版本中,添加农历是我的首要功能。

2.节假日的添加

为了让日历更加多功能,而不是仅仅只有显示日期这一作用,添加节假日可以更加符合用户的生活习惯,帮助用户查看即将到来的重要节日。另外,在设置时区的时候,也可以选择将不同国家的不同法定节日显示出来

3.多视图模式

以windows自带的日历为例,可以看出在右上角有一个多视图,可以以全年的视角查看月份,也可以以全月的视角查看每月的日期,还可以以星期的视角查看一周的时间,为同学们查看自己的记事提供了方便。

4.界面的美化

目前界面还是有些简单,希望可以做的美观一些。

图 3windows自带日历

七、收获与感想

一个学期的java课程结束了,从一开始的课程到做完这个大作业,感受颇多。

首先是对每周实验的感受,感受到了每周做的实验的重要性,尤其是在做这个大作业的时候,需要用的非常多老师上课讲的内容,有时候老师讲完还不能完全理解,当做实验的时候遇到了问题,解决之后就会体悟很深,这让我真正喜欢上每次的实验。

其次是对自己学习能力的感慨。以前觉得自己自学能力不强,但是通过这么多次实验,遇到了那么多的问题,我努力的查找百度的资料,翻java课本,解决了狠多困难。尤其是在最后这次大作业,一开始自己的思路都很乱,但是看了几个优秀案例之后,我开始模仿已有的做,不仅仅是模仿实现基本功能的样例,也模仿更加优秀的样例(比如windows自带的日历,个人认为功能非常全面并且美观)。在这个过程中,通过自学有了很大的提升。

最后是对老师的感谢。非常感谢老师,我是个问题很多的学生(哈哈),在上课的时候问了老师很多问题,还有课下发邮件也会问很多问题,老师都一一为我耐心的解答。

非常感谢老师一个学期以来的付出,谢谢老师!

相关主题
文本预览
相关文档 最新文档