java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx
- 文档编号:28468867
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:37
- 大小:882.32KB
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx
《java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx》由会员分享,可在线阅读,更多相关《java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx(37页珍藏版)》请在冰豆网上搜索。
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.高级功能
5)时区设置
我们为用户提供了多达75个时区的选择,点击更改时区即可将时间切换到当前用户所在的时区,可以满足用户去往不同国家的需求。
是一款“国际化”日历。
6)自定义图片
用户点击更改图片背景,可以选择自己喜欢的图片,为用户提供了多样化选择。
可以根据自己的喜好设置喜爱的图片,比如放置一个名人座右铭可以勉励自己在学业上不断进步。
7)自定义音乐
考虑到普通闹钟刺耳的缺点,我们给用户提供定制化铃声的功能,让用户可以自己设置闹钟铃声,提供了个性化的用户体验。
8)保留自定义设置
用户的自定义设置功能都会被记录,下次打开软件时还能保留先前的设置。
是一款真正的人性化、个性化日历
二、设计思路
首先,按照功能将日历分成不同模块,分别是CalendarImage(显示图片),CalendarPad(实现主要功能,主要框架),mainclass(main方法),NotePad(显示记事本),myClock(钟表的显示),Month(月份的设置和显示),Year(年份的设置和显示)。
图1根据功能设计日历模块
首先按照日历所要实现的功能,从外观显示和内部功能设计日历。
日历的外观共分为四个部分,分别是顶部的菜单栏,左上部分显示日历面板,右上部分显示记事本面板,左下部分显示图片,右下部分显示表盘,包括电子表显示和钟表表盘显示。
日历的内部功能:
实现记事本功能:
包括获取日志,显示日志,删除日志
实现闹钟功能:
包括钟表的显示,不同时区的设置,和到时提醒功能
日历日期的显示:
包括月份的设置,年份的设置
根据以上功能的划分,按照面向对象编程的设计思想,将同一对象所应用的功能合并到一个对象上,可以将日历的实现划分为以下几个模块。
图2面向对象的日历设计
三、程序结构
4.总体结构
在设计多功能日历时,需要编写7个java源文件:
mainclass.java,mainclass.java,NotePad.java,Year.java,Month.java,CalendarImage.java,myClock.java。
这些类的主要功能如下:
主类mainclass(用于启动程序)
主要框架mainclass(是程序的核心)
记事本NotePad(记事本功能)
年Year(显示年)
月Month(显示月份)
日历图像CalendarImage(显示日历图像)
数字时钟myClock(用于显示数字时钟)
类之间的关系如下图所示
5.详细设计
mainclass.java
packagediaoshizhe;
importjava.util.Calendar;
//这是程序的主类;程序从这个类开始;
publicclassmainclass{
publicmainclass(){
}
//main方法;
publicstaticvoidmain(Stringargs[])
{
//创建一个日历的实例对象,返回当前时间;
Calendarcalendar=Calendar.getInstance();
inty=calendar.get(Calendar.YEAR);
intm=calendar.get(Calendar.MONTH)+1;
intd=calendar.get(Calendar.DAY_OF_MONTH);
//新建一个CalendarPad类的对象,以参数形式传递获取的当前时间
newCalendarPad(y,m,d);
}
}
CalendarPad.java
成员变量:
intyear,month,day;//存储当前的时间;
Calendarcalendar;//日历对象;
intday_of_the_week;//表示具体的星期几;
NotePadnotepad=null;//记事本对象变量;
MonthshowMonth;//显示月份的区域的组件对象
YearshowYear;//显示年份的区域的组件对象
Hashtablehashtable;//哈希表对象,用于写日志时文件的IO流;
Filefile;//file表示文件对象,用于写日志时文件的IO流;
JTextFieldshowDay[];//单行文本编辑区域数组,用于显示日期;也是日历中每天的显示区域;
JLabeltitle[];//标题栏,主要用于日历中星期几的标题栏;
CalendarImagecalendarImage;//日历图像;
Stringpicturename;//图像名称;用于更换图像时记录文件名
staticStringmusicname;//音乐名称;用于用户更换闹钟铃声时记录文件名
StringweekDay[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
JPanelleftUp,rightUp,leftWhole,rightWhole;//创建;
intringhour,ringmin;
myClockclock;//时钟对象;
staticStringtimeArea="Asia/Shanghai";
方法:
//构造方法
publicCalendarPad(intyear,intmonth,intday)
//增加鼠标监听器,按住鼠标的响应,为读取日志、写日志功能服务;
publicvoidmousePressed(MouseEvente)//增加鼠标按钮的触发;
publicvoidmouseClicked(MouseEvente)
publicvoidmouseReleased(MouseEvente)
publicvoidmouseEntered(MouseEvente)
publicvoidmouseExited(MouseEvente)
//getPicture_address()方法,从文件中读到用户选择的图片文件的地址;
publicStringgetPicture_address()
//getMusic_address()方法,从文件中读到用户选择的闹钟铃声文件的地址;
publicStringgetMusic_address()
//getsettingtime()得到闹钟时间,从文件中读到先前设置的闹钟时间;
publicvoidgetsettingtime()
//设置日历牌,但只是起到对不同月份的分类而已,通过调用sortDay()方法,把每个格要显示几号的任务交给调用方法;
publicvoidsetCalendar(intyear,intmonth)
//此方法供setCalendar()调用,用来设置每个格要显示几号;
publicvoidsortDay(intday_of_the_week,int月天数)
//得到年;
publicintgetYear()
//设置年;
publicvoidsetYear(inty)
//得到月份;
publicintgetMonth()
//设置月份;
publicvoidsetMonth(intm)
//得到号数;
publicintgetDay()
//设置号数;
publicvoidsetDay(intd)
//获得hashtable;
publicHashtable
?
>getHashtable()
//获得文件;
publicFilegetFile()
//事件监听器;
publicvoidactionPerformed(ActionEvente)
NotePad.java
成员变量:
JTextAreatext;//定义一个编辑区域;
JButtonsave,delete;//定义两个按钮,保存,删除;
Hashtable
JLabellabelBar;//用于显示日期的标题;
intyear,month,day;
Filefile;
CalendarPadcalendar;
方法:
//构造函数,实现记事本显示、增删的主要功能;
publicNotePad(CalendarPadcalendar)
//监听按钮事件;
publicvoidactionPerformed(ActionEvente)
//设置年
publicvoidsetYear(intyear)
//获取年;
publicintgetYear()
//设置月份;
publicvoidsetMonth(intmonth)
//获取月份;
publicintgetMonth()
//设置日;
publicvoidsetDay(intday)
//获取日;
publicintgetDay()
//设置标题栏的内容(日期);
publicvoidsetlabelBar(intyear,intmonth,intday)
//设置编辑区域显示的内容;
publicvoidsetTextArea(Strings)
得到某个日期的日志内容;
publicvoidgetLogContent(intyear,intmonth,intday)
//保存日志的方法;
publicvoidsaveLog(intyear,intmonth,intday)
//删除日志
publicvoiddeleteLog(intyear,intmonth,intday)
myClock.java
packagediaoshizhe;
importjava.applet.Applet;
importjava.applet.AudioClip;
importjava.awt.*;
importjava.io.File;
import.MalformedURLException;
import.URL;
importjavax.swing.*;
importjava.util.*;
importjava.text.*;
publicclassmyClockextendsJAppletimplementsRunnable{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
Threadclock;
intringhour;
intringmin;
Calendarcalendar=newGregorianCalendar(TimeZone.getTimeZone(CalendarPad.timeArea));
Datetimenow;
ClocknowClock;
publicmyClock(){
start();//开始进程
intw=getBounds().width;
inth=getBounds().height;
setBounds(0,0,w,h);//设置窗口尺寸
}
publicvoidstart(){
if(clock==null){
clock=newThread(this);
clock.start();
}
}
publicvoidstop(){
clock=null;
}
publicvoidrun(){
while(true){
repaint();
try{
Thread.sleep(1000);
}
catch(InterruptedExceptione){
}
}
}
@SuppressWarnings("deprecation")
publicvoidpaint(Graphicsg){
Calendarcalendar=newGregorianCalendar(TimeZone.getTimeZone(CalendarPad.timeArea));
timenow=newDate();
calendar.setTime(timenow);
SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日hh:
mm:
ssa");
sdf.setTimeZone(TimeZone.getTimeZone(CalendarPad.timeArea));
Strings_time_msg=sdf.format(timenow);
nowClock=newClock(
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND));
g.clearRect(0,0,this.getWidth(),this.getHeight());
g.setFont(newFont("宋体",Font.BOLD,22));
g.drawString(s_time_msg,70,400);
nowClock.show(g,230,210,150);
//闹钟功能:
如果当前时间与设置的闹钟时间相同,则响铃;
if((ringhour==calendar.get(Calendar.HOUR_OF_DAY))&&(ringmin==calendar.get(Calendar.MINUTE))&&(calendar.get(Calendar.SECOND)==0))
{
//播放指定音频;
try{
URLcb;
Filef=newFile(CalendarPad.musicname);//音频文件;
cb=f.toURL();
AudioClipaau;
aau=Applet.newAudioClip(cb);//创建AudioClip对象;
aau.play();//播放音频;
}catch(MalformedURLExceptione)
{
e.printStackTrace();
}
}
}
}
classClock{
inthour,minute,second;
Clock(inthrs,intmin,intsec){
hour=hrs%12;
minute=min;
second=sec;
}
voidshow(Graphicsg,intcx,intcy,intrad){
inthrs_len=(int)(rad*0.5);
intsec_len=(int)(rad*0.9);
doubletheta;
g.drawOval(cx-rad,cy-rad,rad*2,rad*2);
theta=(double)(hour*60*60+minute*60+second)/43200.0*2.0*Math.PI;
drawNiddle(g,Color.blue,cx,cy,hrs_len,theta);
theta=(double)(minute*60+second)/3600.0*2.0*Math.PI;
drawNiddle(g,Color.red,cx,cy,sec_len,theta);
theta=(double)(second)/60.0*2.0*Math.PI;
drawNiddle(g,Color.green,cx,cy,sec_len,theta);
}
privatevoiddrawNiddle(
Graphicsg,Colorc,intx,inty,intlen,doubletheta){
intex=(int)(x+len*Math.sin(theta));
intey=(int)(y-len*Math.cos(theta));
g.setColor(c);
g.drawLine(x,y,ex,ey);
}
}
Year.java
packagediaoshizhe;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
//继承Box,显示日历上的年份
publicclassYearextendsBoximplementsActionListener
{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
intyear;//定义年;
JTextFieldshowYear=null;//显示年的区域;
JButtonnextYear,lastYear;//定义按钮;
CalendarPadcalendar;//日历;
//构造方法;
publicYear(CalendarPadcalendar)
{
super(BoxLayout.X_AXIS);//用super继承父类的构造方法,box中的组件从左到右布置器件;
showYear=newJTextField(4);//区域大小设置;
showYear.setForeground(Color.blue);//显示字体颜色;
showYear.setFont(newFont("TimesRomn",Font.BOLD,14));//设置字体,大小;
//把calendar的时间传进来;
this.calendar=calendar;
year=calendar.getYear();
//新建按钮;
nextYear=newJButton("下年");
lastYear=newJButton("上年");
//添加按钮;
add(lastYear);
add(showYear);
add(nextYear);
//添加事件监听器;
showYear.addActionListener(this);
lastYear.addActionListener(this);
nextYear.addActionListener(this);
}
//设置年;
publicvoidsetYear(intyear)
{
this.year=year;
showYear.setText(""+year);
}
//获取年;
publicintgetYear()
{
returnyear;
}
//事件监听方法;
publicvoidactionPerformed(ActionEvente)
{
//如果点击的是lastyear按钮;
if(e.getSource()==lastYear)
{
//年减去一年,重新设置日历;
year=year-1;
showYear.setTex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 日历 记事本 无敌 提醒 功能 调整 时区 更换 图片铃声