• 851.50 KB
  • 10页

JAVA课程设计 闹钟的设计与实现项目报告 附源代码.doc

  • 10页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'Java设计报告书课程名称:JAVA语言程序设计设计题目:闹钟的设计与实现院系:计算机科学与信息工程系学生姓名:学号:专业班级:指导教师:许研2010年12月28日目录 一、题目描述1二、设计思路1三、运行结果5四、源代码6五、总结10六、参考文献10 闹钟的设计与实现一、题目描述:结合JAVA图形界面的知识设计一个闹钟二、设计思路1、设计要求:编写闹钟钟程序,要求画出时钟面板,动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能与可以自己选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能。2、算法基本描述:本程序先是在框架中新建了一个容器,然后用GridLayout类对面板进行划分,程序引入java.util.Date来显示当前时间,并用一个永真循环,来对当前时间显示的更新,引入java.io.File来实现对文件的读写操作,程序设计了一个选择按钮,用来选择文件,并且声明只能选择,WAU、MID的文件,引入用java.applet.Applet来播放音乐文件,用getText()函数获取输入的闹钟设定时间,并永真循环和当前的时间进行对比,若相等则播放音乐,若不相等则显示离目标设定时间的差距。3、设计思想与内容1、画出类的UML简图Clock类:Clock类中的变量ri,shi,fen,miao,dangqian,guanji:JLabelqueding,dakai:JButtonmusic,RI,SHI,FEN,MIAO:JTextFieldh=0,f=0,m=0,r=0:intFo,foo:booleansoumd1:publicAudioClipClock类中的函数publicclock()publicstaticvoidmain(Stringagrs[])publicvoidrun()2、各方法功能描述列表Clock类方法功能Main()执行main函数Clock()Clock类的构造函数,用于对时钟界面的初始化Run()用于对时钟的动态显示的执行,并判断是否设定了闹钟时间,若当前时间与设定的时间相等则播放选定的音乐3、主要模块算法描述 (1)当前动态时间的显示的设计与实现。功能:可以实时的更新显示系统完整的时间算法:引入java.util.Date用while循环更新时间代码如下:publicvoidrun(){while(true){Datenow=newDate();//设置一个新的当前时间对象。dangqian.setText("当前时间:"+now.toString());//显示当前的时间…}(2)音乐文件的选择。功能:用打开按钮实现对本地音乐文件的选择算法:引入java.io.File和java.net.MalformedURLException来实现对音乐本地音乐文件的选择。代码如下:dakai.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){JFileChooserfileChooser=newJFileChooser();//实例化文件选择器fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置文件选择模式,此处为文件和目录均可fileChooser.setCurrentDirectory(newFile("."));//设置文件选择器当前目录fileChooser.setFileFilter(newjavax.swing.filechooser.FileFilter(){publicbooleanaccept(Filefile){//可接受的文件类型Stringname=file.getName().toLowerCase();returnname.endsWith(".wav")||name.endsWith(".au")||file.isDirectory();}publicStringgetDescription(){//文件描述return"音乐文件(*.wav,*.au)";}});(3)闹铃功能的实现功能:到达设定闹钟时间,会有输出文字及产生音乐。算法:读入Clock类中的时间,并设置一个Timer,每隔0.1秒进行比对,如果字符串之间匹配就显示,简化代码如下示意:publicvoidrun(){………if(fo){foo=true;RI.setEditable(false);//设定之后禁用输入功能SHI.setEditable(false);FEN.setEditable(false);MIAO.setEditable(false);queding.setText("关闭");//关闭闹钟设定 SimpleDateFormatri=newSimpleDateFormat("dd");//封装为了获取日期SimpleDateFormatshi=newSimpleDateFormat("HH");//封装为了获取小时SimpleDateFormatfen=newSimpleDateFormat("mm");//封装为了获取分钟SimpleDateFormatmiao=newSimpleDateFormat("ss");//封装为了获取秒钟riqi=Integer.parseInt(ri.format(now));//获取日期shizhong=Integer.parseInt(shi.format(now));//获取小时fenzhong=Integer.parseInt(fen.format(now));//获取分钟miaozhong=Integer.parseInt(miao.format(now));//获取秒钟if(riqi==r&&shizhong==h&&fenzhong==f&&miaozhong==m)//判断条件是否符合{try{soumd1=Applet.newAudioClip(newFile(music.getText()).toURL());//播放音乐soumd1.loop();//我设置的是循环播放..这样不起床都不行..fo=false;foo=false;}catch(MalformedURLExceptione){e.printStackTrace();}}}try{Thread.sleep(1000);}catch(InterruptedExceptionie){}}}三、运行结果 四、源程序清单:importjava.applet.Applet;importjava.applet.AudioClip;importjava.awt.Container;importjava.awt.GridLayout;importjava.awt.event.*;importjava.io.File;importjava.net.MalformedURLException;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.swing.*;publicclassclockextendsJFrameimplementsRunnable{JLabelri,shi,fen,miao,dangqian,guanji;JButtonqueding,dakai;JTextFieldmusic,RI,SHI,FEN,MIAO;inth=0,f=0,m=0,r=0;booleanfo=false,foo=false;publicAudioClipsoumd1;intriqi,shizhong,fenzhong,miaozhong;publicclock(){Containerc=getContentPane();c.setLayout(newGridLayout(4,1));JPaneljp=newJPanel();dangqian=newJLabel();jp.add(dangqian);c.add(jp);JPaneljp3=newJPanel();guanji=newJLabel("离闹铃时间:0日0时0分0秒");jp3.add(guanji);c.add(jp3);JPaneljp1=newJPanel();music=newJTextField(20);dakai=newJButton("选择闹铃音乐");jp1.add(music);jp1.add(dakai);c.add(jp1);ri=newJLabel("日");RI=newJTextField(4);shi=newJLabel("时");SHI=newJTextField(4);fen=newJLabel("分");FEN=newJTextField(4);miao=newJLabel("秒");MIAO=newJTextField(4);JPaneljp2=newJPanel();jp2.add(ri);jp2.add(RI);jp2.add(shi);jp2.add(SHI);jp2.add(fen); jp2.add(FEN);jp2.add(miao);jp2.add(MIAO);queding=newJButton("确定");jp2.add(queding);c.add(jp2);setSize(400,160);setVisible(true);dakai.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){JFileChooserfileChooser=newJFileChooser();//实例化文件选择器fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置文件选择模式,此处为文件和目录均可fileChooser.setCurrentDirectory(newFile("."));//设置文件选择器当前目录fileChooser.setFileFilter(newjavax.swing.filechooser.FileFilter(){publicbooleanaccept(Filefile){//可接受的文件类型Stringname=file.getName().toLowerCase();returnname.endsWith(".wav")||name.endsWith(".au")||file.isDirectory();}publicStringgetDescription(){//文件描述return"音乐文件(*.wav,*.au)";}});if(fileChooser.showOpenDialog(clock.this)==JFileChooser.APPROVE_OPTION){//弹出文件选择器,并判断是否点击了打开按钮StringfileName=fileChooser.getSelectedFile().getAbsolutePath();//得到选择文件或目录的绝对路径music.setText(fileName);}}});queding.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){if(queding.getText().equals("确定")){try{h=Integer.parseInt(SHI.getText());f=Integer.parseInt(FEN.getText());m=Integer.parseInt(MIAO.getText());if(1<=h&&h<=31&&0<=h&&h<=23&&0<=f&&f<=59&&0<=m&&m<=59){Datenow=newDate();SimpleDateFormatri=newSimpleDateFormat("dd");if(RI.getText()==null||RI.getText().equals("")){r=Integer.parseInt(ri.format(now));RI.setText(ri.format(now));}elser=Integer.parseInt(RI.getText());fo=true; }elseJOptionPane.showMessageDialog(null,"输入时间错误");}catch(Exceptione){JOptionPane.showMessageDialog(null,"请输入正确的时间");}}else{try{fo=false;RI.setEditable(true);SHI.setEditable(true);FEN.setEditable(true);MIAO.setEditable(true);queding.setText("确定");soumd1.stop();}catch(ExceptionE){System.out.println("关闭");}}}});}publicstaticvoidmain(Stringagrs[]){clocks=newclock();Threadt1=newThread(s);t1.start();s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidrun(){while(true){Datenow=newDate();dangqian.setText("当前时间:"+now.toString());if(foo){if(h==0||h-shizhong<0){h+=24;r=r-1;}if(f==0||f-fenzhong<0){f+=60;h-=1;}if(m==0||m-miaozhong<0){m+=60;f-=1;}guanji.setText("离闹铃时间:"+(r-riqi)+"日"+(h-shizhong)+"时"+(f-fenzhong)+"分"+(m-miaozhong-1)+"秒");if(r