本科毕业设计基于j2me的手机定时系统的设计与实现.docx
《本科毕业设计基于j2me的手机定时系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《本科毕业设计基于j2me的手机定时系统的设计与实现.docx(20页珍藏版)》请在冰豆网上搜索。
本科毕业设计基于j2me的手机定时系统的设计与实现
基于J2ME的手机定时系统的设计与实现
王盖,电子信息系
摘要:
现代社会人们生活节奏逐渐加快,在忙碌的工作、学习中,人们往往忘了生活中的一些小细节,同时手机也成为了人们最为依赖的通信工具。
所以
手机上功能的齐全和完善是当今用户的需求。
手机定时系统的实现与应用可
以给人们及时的提醒,好的定时系统可以代替用户完成各种命令。
这也是手
机智能化的一个重点完善对象。
如果定时系统能和完善的语音识别结合的话,
将是一个重大突破。
本次设计的定时系统主要实现了定时关机,闹铃,提醒
备忘和发短信这几个功能。
系统操作简单明了,适合学生和上班族使用,可
以固定每天起床的时间,定时提醒重要的事情等。
关键词:
定时系统;J2me;手机;Java
TheDesignandRealizationofTimingSystembasedonJ2ME
WangGai,DepartmentofElectronicInformation
Abstract:
InthemodernsocietythepaceoflifeaccelerateGradually.InthebusyworkandLearning,peopleoftenforgetsomesmalldetailsinlife.Atthesametime,mobilephonehasbecomethecommunicationtoolsrelyonpeople.Somoblilephone’sfunctioncompleteandperfectistheuser’sdemand.Implementionandapplicationofmobilephoneinthetimingsystemcangivepeopleatimelyreminder,andagoodtimingsystemcanreplacetheusertoperformvariouscommand.Thisisthemobilephoneintrlligentafocusonimprovingtheobject.Ifthetimingsystemcanimprovethespeechrecognitionandthecombinationofwords,willbeamajorbreakthrouth.Thedesignofthetimingsystemmainlyrealizestimingshutdown,alarm,remindernotesandsendtextmessagestothisfunction.Systemoperationissimpleandclear,suitablefrostudentsandofficeworkerstouse.Youcaneachdaytogetupontime,timetoremindtheimportantthings.
Keywords:
Timingsystem;J2me;MobilePhone;Java
第一章引言
1.1课题研究的目的与意义
目的:
1.更进一步的加深对eclipse、wtk工具的熟练使用和J2me环境配置及开发过程;
2.熟练掌握一门语言,对学习其他语言也有很大的帮助;
3.学习程序封装的合理性,了解类与类之间的联系,更好的构造程序结构;
4.锻炼遇到问题的解决能力,能够很快的解决问题,发现隐藏的漏洞。
意义:
本系统是利用J2ME实现定时系统在手机平台上的应用。
J2me是运行在嵌入式设备上,为这些消费类电子产品设备提供灵活的环境,如移动电话、游戏终端等。
J2me还提供了图形用户界面、安全的模型,支持互联网协议。
J2me平台如今已被广泛应用在设备上,未来的发展也是相当看好。
其利用的开发工具主要有Eclipse和NetBeans两种,同时也是最常用的两种,由于其适用平台从以前的电视机、PC等转换到如今十分流行的手机中来,使以手机为平台的应用类软件拥有巨大的市场空间,随着3G的开通和应用,使得手机类应用程序迎来新的热潮,使其发展前景十分的可观。
基于J2me目前已经出现的不是很多,大多数都是以简单的计时功能予以敷衍,所以如果能设计好定时系统,市场还是很看好的。
1.2系统的主要功能
本系统主要是用来进行计时和定时,帮助提醒用户一些短暂的比较容易遗忘或者自己无法得到有效提醒的情况,同时考虑到用户使用闹铃的情况,在系统加入了次日提醒功能,可以省去用户每天都要设定时间的繁琐,此外,系统还可以进行定时发短信、关机等功能。
随着手机的飞速发展,人们对手机的依赖也日益加深,需要手机又更加全面的功能。
第二章相关理论和可行性分析
2.1对定时系统开发的理解
本系统在设计方面做了一些改变,为了更简捷的使用花了大量的心思,首先对市场上已经存在的定时系统做了参考,找出其优点和缺点,然后开发要充分的利用JAVA语言面向对象的特点,把系统内的各个模块设计成一个个相对独立的对象,然后将这些相对独立的对象进行类的封装,把用户的需求转化为软件的需求,把软件的需求转化为软件的设计,用软件代码来实现软件设计,对软件代码进行测试并签署确认它可以投入运行使用的过程,在这个过程中的每一阶段,都包含有相应的文档编制工作。
对定时系统软件开发的过程中,遵循一定的流程,主要包括系统分析、系统设计、系统编码、系统测试以及系统的维护等几个阶段。
2.2可行性分析
1、技术可行性
设计定时系统主要是使用J2me语言,以为对J2me中定时器类的了解和运用,其次就是要求对于开发环境和开发工具的熟悉和了解。
没有涉及到过于复杂的知识,所以技术上可行。
2、经济可行性
本次设计不需要花大量资料去购置设备,只需要一台装有Eclipse软件和WTK手机模拟器的电脑就行了。
还需要给电脑配置宽带网络,方便收集和浏览网上的资料。
最重要的是自己的构思,不需要先进设备的支持。
所以经济上可行。
3、操作可行性
界面和功能需要考虑用户的习惯,简洁好用是最终目的,所以不需要太复杂的功能,只有网络通信方面需要多注意些,可行。
第三章系统需求分析
3.1系统的开发背景
现在手机的发展现状已经展现了手机的未来市场无可厚非的市场,手机的的确确给人们带来了巨大的便利,手机的功能越来越强大,已经可以代替用户完成许多任务,也被广泛应用于多数方面,手机之所以如此流行的主要原因有一下几个方面:
1、用手机通讯方便快捷、且信息交流相对安全;
2、手机可以节省许多资源;
3、手机上各种应用丰富了手机的功能,让手机的用处更多更大;
4、让手机来代替人完成各种任务,出错少、效率高,等等;
根据现在市场定时系统的情况,可以了解到定时系统的发展还有很大的提升空间,如果能够完善功能,将会对手机的使用情况有很大改变。
可以称的上是手机功能管家,充分利用手机,让手机的强大功能得到淋漓尽致的发挥。
现在市场上使用J2me开发的软件已经不多了,在这里的设计仅仅是一个开始,如果使用J2me语言能够设计出优秀的手机定时系统,那在转移安卓市场后也会是前景一片大好。
3.2需求分析
人们又很多不方便的时候,尽管手机上功能很强大,但是如果无法及时使用,也是形同虚设,所以这时候就需要一种系统能够管理这些功能并按照用户的需求在预设好的时间完成或者执行手机的任务,这就是手机定时系统,强大的定时系统会帮助用户能好的更全面的更个性的使用手机上的功能,本系统主要实现的功能有:
1、可以计时或者定时,时间到时可以提醒备忘,不填写备忘时就相当于闹铃功能;
2、计时或者定时,到时关机;
3、计时或者定时发送短信;
4、可以在计时时间到的时候设置再次计时、在定时时间到的时候设置次日计时;
第四章系统设计
4.1软硬件环境配置
4.1.1硬件配置
1、计算机一台(包括各类硬件部分如主机、显示器、鼠标、键盘等)
2、连接互联网的设备,适配器、电缆等
3、测试程序用的Java手机、相关数据线等
4.1.2软件配置
1、WindowsXP操作系统
2、eclipse开发软件、eclipseME和jdk
3、wirelessToolkit手机模拟器
4.2系统模块设计
手机定时系统主要分为开始界面模块、模式选择模块、定时任务模块和计时启动模块,系统模块的总体结构图如下(图4-1):
图4-1总体结构图
在总体结构图中详细简单的说明该系统在使用中主要具备的功能,以及各功能模块在系统中的主要应用,从结构图中可以看出,本系统的设计目的是简单便捷,这也是设计是手机等一些小型电子产品所用软件的基本要求,占用内存小,便于操作使用。
4.3操作流程图
本系统主要是在对时间进行设定时可能会有些模糊系统的具体功能,在这里绘制出本手机定时系统的操作流程图,同时也相当于一个使用说明书了,具体流程如下图所示(图4-2):
图4-2操作流程图
4.4模块详细设计
4.4.1开始界面模块设计
开始界面的主要是一个TimeCanvas类,下面来详细介绍一下。
此类的功能是绘制本系统的开始界面。
为了系统不至于单调。
开始界面主要绘制了一张卡通图片,和卡通日期时间,从开始见面可以进入定时系统,可以退出程序。
TimeCanvas类的具体设计如下面两个表(表4.1和表4.2)所示。
表4.1TimeCanvas类成员变量表
描述变量类型名称
手机屏幕或者图片的宽intw
手机屏幕或者图片的高inth
获取系统年月日intyear
卡通图片或者数字Imageswimsuit
启动线程显示时间Threadth
进入定时系统CommandcmdOk
退出整个程序CommandcmdCan
表4.2TimeCanvas类方法表
名称功能备注
TimeCanvas()连接图片添加数据类的构造方法
paint(Graphicsg)绘制开始界面Canvas类自带方法
initList()初始化数据刷新数据
run()获取时间和数据线程主要方法
commandAction()按键处理处理监听到的事件
4.4.2计时器模块设计
计时器模块和模式选择的主要是一个MyTime类,下面来详细介绍一下。
此类的功能是实现定时系统的计时功能,主要是通过TextField来获取用户设置的时间,然后改变Form里的Item转为设定任务的模块。
MyTime类的具体设计如下面两个表(表4.3和表4.4)所示。
表4.3MyTime类成员变量表
描述变量类型名称
显示定时系统的模式Listlist
计时设置和任务模式Formform
获取用户设置的时间TextFieldtfm
设置需要系统完成的任务ChoiceGroupcg
启动线程显示时间Threadth
计时器开始计时CommandcmdStart
表4.4MyTime类方法表
名称功能备注
MyTime()连接图片添加数据类的构造方法
init()初始化Form界面还可以还原Form界面
cometolist()返回模式选择供其他类调用的接口
cometocanvas()返回开始界面供其他类调用的接口
stoptimer()停止闹铃返回开始界面
run()用来启动定时器、闹铃线程主要方法
commandAction()按键处理处理监听到的事件
MyTask()创建定时器内部类构造方法
itemStateChanged()项目状态监听设定处理方法
4.4.3定时器模块设计
定时器模块的主要是一个TimeForm类,下面来详细介绍一下。
此类的功能是实现定时系统的计时功能,主要是通过TimeForm来获取用户设置的时间,然后改变Form里的Item转为设定任务的模块。
TimeForm类的具体设计如下面两个表(表4.5和表4.6)所示。
表4.5TimeForm类成员变量表
描述变量类型名称
获取用户设置的时间DateFielddf
定时设置和任务模式Formform
获取用户编辑的备忘或短信TextFieldtf
储存long格式的时间longa
启动线程显示时间Threadth
设置是否关机booleangj
获取系统当前时间Calendarcal
计时器开始计时CommandcmdStart
表4.6TimeForm类方法表
名称功能备注
TimeForm()连接图片添加数据类的构造方法
init()初始化Form界面还可以还原Form界面
stoptimer()停止闹铃返回开始界面
run()用来启动定时器、闹铃线程主要方法
commandAction()按键处理处理监听到的事件
MyTask()创建定时器内部类构造方法
itemStateChanged()项目状态监听设定处理方法
4.4.4开始计时模块设计
计时界面的主要是一个StartCanvas类,下面来详细介绍一下。
此类的功能是绘制本系统的计时界面。
如果用户设置计时或者定时成功,系统则会专制本界面进行计时或者定时。
如果是计时模式,本界面会进行倒计时,定时模式,界面则显示所定的时间。
在此见面可以取消计时或者定时然后重新回到开始界面。
StartCanvas类的具体设计如下面两个表(表4.7和表4.8)所示。
表4.7StartCanvas类成员变量表
描述变量类型名称
手机屏幕或者图片的宽intw
手机屏幕或者图片的高inth
获取系统年月日intyear
卡通图片或者数字Imagestart
启动线程显示时间Threadth
获取系统时间Calendarcal
设定任务模式booleanjd
取消计时或者定时CommandcmdCan
表4.8StartCanvas类方法表
名称功能备注
StartCanvas()连接图片添加数据类的构造方法
paint(Graphicsg)绘制开始界面Canvas类自带方法
setmode()获取模式信息计时模式或者定时模式
settime()获取计时信息对外设置的调用接口
setdate()设置定时的时间对外设置的调用接口
setnext()设置次日的时间用户点击次日提醒调用
run()获取系统时间线程主要方法
commandAction()按键处理处理监听到的事件
4.4.5音频文件处理模块类的设计
音频处理模块主要是一个Source类,下面来详细介绍一下。
此类的功能是连接本地音乐文件并实现播放暂停等功能。
Source类的具体设计如下面两个表(表4.9和表4.10)所示。
表4.9Source类成员变量表
描述变量类型名称
建立播放器控制播放Playerp
音量控制VolumeControlvolC
表4.10Source类方法表
名称功能备注
Source()连接图片添加数据类的构造方法
paint(Graphicsg)绘制开始界面Canvas类自带方法
start()开始播放音乐文件对外接口
stop()停止播放音乐文件对外接口
4.4.6短信收发模块设计
短信收发模块主要是一个Client01类,下面来详细介绍一下。
此类的功能是实现短信的接收和发送,不过遗憾的是只有一台电脑没有办法测试是否能成功发送和接收。
Client01类的具体设计如下面两个表(表4.11和表4.12)所示。
表4.11Client01类成员变量表
描述变量类型名称
定义套接字SocketConnectionsc
定义输入流DataInputStreamdis
定义输出流DataOutputStreamdos
表4.12Client01类方法表
名称功能备注
Client01()定义输入输出和套接字类的构造方法
sendmsg()发送短信显示短信内容
run()接收短信线程主要方法
commandAction()按键处理处理监听到的事件
第五章系统的实现和测试
5.1编码实现
5.1.1ChoiceGroup状态检测实现
这段程序是本方法利用J2me监听器实现的一个简单的变化,可以随着用户的选择改变Form里面项目的内容。
具体代码实现如下:
publicvoiditemStateChanged(Itemit){
//TODOAuto-generatedmethodstub
if(it==cg){
if(cg.isSelected(0)){
form.deleteAll();
form.append(cg);
tf=newTextField("填写备忘","",185,TextField.ANY);
form.append(tf);
}
elseif(cg.isSelected
(1)){
form.delete
(1);
}
else{
form.deleteAll();
form.append(cg);
tf=newTextField("编辑短信","",185,TextField.ANY);
form.append(tf);
}
}
}
5.1.2倒计时功能的实现
主要是通过获取用户所设置的时间,然后模仿时钟的60进制进行倒计时,具体代码实现如下:
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true){
Calendarc=Calendar.getInstance();
year=c.get(Calendar.YEAR);
month=c.get(Calendar.MONTH)+1;
day=c.get(Calendar.DAY_OF_MONTH);
week=c.get(Calendar.DAY_OF_WEEK);
hour=c.get(Calendar.HOUR_OF_DAY)+8;
if(hour>23)hour=hour-24;
minute=c.get(Calendar.MINUTE);
second=c.get(Calendar.SECOND);
//System.out.println(hour+":
"+minute+":
"+second);
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(jd){
ss--;
if(ss<0){
ss=59;
mm--;
if(mm<0){
mm=59;
hh--;
if(hh<0){ss=0;mm=0;hh=0;}
}
}
}
repaint();
}
}
5.1.3实现卡通时钟
主要是通过制作卡通的汉字和数字,然后根据每秒获取的系统时间来通过g.drawRegion()这个方法画出图片的局部,实现卡通时钟的显示。
具体代码的实现如下(其中ct是数字“12345567890:
”组成的图片,cw是“一二三四五六日”):
protectedvoidpaint(Graphicsg){
//TODOAuto-generatedmethodstub
g.setColor(255,255,255);
g.fillRect(0,0,w,h);
g.setColor(0,0,0);
g.setFont(f);
g.drawImage(swimsuit,0,0,Graphics.LEFT|Graphics.TOP);
int[]num=newint[8];
int[]word=newint[8];
intj=0;
num[0]=hour/10;
num[1]=hour%10;
num[2]=10;
num[3]=minute/10;
num[4]=minute%10;
num[5]=10;
num[6]=second/10;
num[7]=second%10;
word[0]=year/1000;
word[1]=year/100%10;
word[2]=year/10%10;
word[3]=year%10;
word[4]=month/10;
word[5]=month%10;
word[6]=day/10;
word[7]=day%10;
for(inti=0;i<9;i++){
if(i==4||i==6||i==8){
g.drawRegion(cw,ww*j,0,ww,hw,Sprite.TRANS_NONE,ww*(i+j),0,Graphics.LEFT|Graphics.TOP);
j++;
if(i==8){
g.drawRegion(cw,ww*j,0,ww,hw,Sprite.TRANS_NONE,0,30,Graphics.LEFT|Graphics.TOP);
j++;
g.drawRegion(cw,ww*j,0,ww,hw,Sprite.TRANS_NONE,ww,30,Graphics.LEFT|Graphics.TOP);
j++;
g.drawRegion(cww,ww*week,0,wn,hn,Sprite.TRANS_NONE,wn*2,30,Graphics.LEFT|Graphics.TOP);
break;
}
}
g.drawRegion(ct,wn*word[i],0,wn,hn,Sprite.TRANS_NONE,wn*(i+j),0,Graphics.LEFT|Graphics.TOP);
}
for(inti=0;i<8;i++)
g.drawRegion(ct,wn*num[i],0,w