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

上传人:b****5 文档编号:6487928 上传时间:2023-01-07 格式:DOCX 页数:34 大小:787.74KB
下载 相关 举报
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx_第1页
第1页 / 共34页
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx_第2页
第2页 / 共34页
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx_第3页
第3页 / 共34页
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx_第4页
第4页 / 共34页
java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

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

《java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx》由会员分享,可在线阅读,更多相关《java日历记事本无敌版带提醒功能调整时区更换图片铃声功能.docx(34页珍藏版)》请在冰豆网上搜索。

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

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;//定义两个按钮,保存,删除;

Hashtabletable;

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.setText(""+y

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

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

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