JAVA课程设计-闹钟的设计与实现--11计科本01班--张慧

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安思源学院Java 课程设计报告
课程名称:JAVA语言程序设计
设计题目:简单小闹钟的设计与实现
学院:电子信息工程学院
专业班级:计算机科学与技术统本01班
学号: 111102020103
姓名:张慧
小组成员: 谢莉萍
时间: 2013年6月29日
目录
一、项目设计
1.1设计题目 (2)
1.2设计思路 (2)
1.3设计内容 (2)
1.3.1 Clock类的UML简图 (2)
1.3.2 各方法功能描述列表 (2)
二、算法描述
2.1 基本算法描述 (3)
2.2 主要模块算法描述 (3)
2.2.1当前动态时间的显示的设计与实现 (4)
2.2.2闹钟功能的实现 (4)
2.2.3闹铃功能的实现 (5)
三、程序源代码 (6)
四、运行结果截图 (9)
五、总结 (10)
闹钟的设计与实现
一、项目设计
1.1题目描述:
结合JAVA图形界面的知识设计一个简单的小闹钟
1.2设计思路
百度下载的闹钟程序设计,参考别人的程序,通过改编,并添加一些自己的程序,最终实现小闹钟的运行.本次设计要求画出时钟的面板,动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能,可以自己选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能。

1.3设计内容
1.3.1画出Clock类的UML简图
1.3.2各方法功能描述列表
二、算法描述
2.1基本算法描述
本程序先是在框架中新建了一个容器,然后用GridLayout类对面板进行划分,程序引入java.util.Date来显示当前时间,并用一个永真循环,来对当前时间显示的更新,引入java.io.File来实现对文件的读写操作,程序设计了一个选择按钮,用来选择文件,并且声明只能选择,WAU、MID的文件,引入用java.applet.Applet 来播放音乐文件,用getText()函数获取输入的闹钟设定时间,并永真循环和当前的时间进行对比,若相等则播放音乐,若不相等则显示离目标设定时间的差距。

2.2主要模块算法描述
2.2.1当前动态时间的显示的设计与实现。

(1)功能:可以实时的更新显示系统完整的时间
(2)算法:引入java.util.Date用while循环更新时间
(3)代码:
public void run()
{
while (true)
{
Date now = new Date();//设置一个新的当前时间对象。

dangqian.setText("当前时间: " + now.toString());//显示当前的时间
.......
}
2.2.2音乐文件的选择。

(1)功能:用打开按钮实现对本地音乐文件的选择
(2)算法:引入java.io.File和.MalformedURLException
来实现对音乐本地音乐文件的选择。

(3)代码:
dakai.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择器当前目录
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File file)
{ // 可接受的文件类型
String name = file.getName().toLowerCase();
return name.endsWith(".wav")
|| name.endsWith(".au")
|| file.isDirectory();
}
public String getDescription()
{ return "音乐文件(*.wav,*.au)";
}
});
2.2.3闹铃功能的实现
(1)功能:到达设定闹钟时间,会有输出文字及产生音乐。

(2)算法:读入Clock类中的时间,并设置一个Timer,每隔0.1秒进行比对,
如果字符串之间匹配就显示
(3)代码:
public void run()
{
………
if (fo) {
foo = true;
RI.setEditable(false);
SHI.setEditable(false);
FEN.setEditable(false);
MIAO.setEditable(false);
queding.setText("关闭"); //关闭闹钟设定SimpleDateFormat ri = new SimpleDateFormat("dd");
SimpleDateFormat shi = new SimpleDateFormat("HH");
SimpleDateFormat fen = new SimpleDateFormat("mm");
SimpleDateFormat miao = new SimpleDateFormat("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(new File(music.getText())
.toURL()); // 播放音乐
soumd1.loop();
fo = false;
foo = false;
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
}
}
}
三、程序源代码
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.*;
import java.io.File;
import .MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
class clock extends JFrame implements Runnable
{
JLabel ri, shi, fen, miao, dangqian, guanji;
JButton queding, dakai;
JTextField music, RI, SHI, FEN, MIAO;
int h = 0, f = 0, m = 0, r = 0;
boolean fo = false, foo = false;
public AudioClip soumd1;
int riqi, shizhong, fenzhong, miaozhong;
public clock()
{
Container c = getContentPane();
c.setLayout(new GridLayout(4, 1));
JPanel jp = new JPanel();
dangqian = new JLabel();
jp.add(dangqian);
c.add(jp);
JPanel jp3 = new JPanel();
guanji = new JLabel("离闹铃时间:0日0时0分0秒");
jp3.add(guanji);
c.add(jp3);
JPanel jp1 = new JPanel();
music = new JTextField(20);
dakai = new JButton("选择闹铃音乐");
jp1.add(music);
jp1.add(dakai);
c.add(jp1);
ri = new JLabel("日");
RI = new JTextField(4);
shi = new JLabel("时");
SHI = new JTextField(4);
fen = new JLabel("分");
FEN = new JTextField(4);
miao = new JLabel("秒");
MIAO = new JTextField(4);
JPanel jp2 = new JPanel();
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 = new JButton("确定");
jp2.add(queding);
c.add(jp2);
setSize(400, 160);
setVisible(true);
dakai.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择器当前目录
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File file)
{
String name = file.getName().toLowerCase();
return name.endsWith(".wav")
|| name.endsWith(".au")
|| file.isDirectory();
}
public String getDescription()
{
return "音乐文件(*.wav,*.au)";
}
});
if (fileChooser.showOpenDialog(clock.this) == JFileChooser.APPROVE_OPTION) {
String fileName = fileChooser.getSelectedFile()
.getAbsolutePath();
music.setText(fileName);
}
}
});
queding.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
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) {
Date now = new Date();
SimpleDateFormat ri = new SimpleDateFormat("dd");
if (RI.getText() == null || RI.getText().equals("")) {
r = Integer.parseInt(ri.format(now));
RI.setText(ri.format(now));
} else
r = Integer.parseInt(RI.getText());
fo = true;
} else
JOptionPane.showMessageDialog(null, "输入时间错误");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "请输入正确的时间");
}
} else {
try{
fo = false;
RI.setEditable(true);
SHI.setEditable(true);
FEN.setEditable(true);
MIAO.setEditable(true);
queding.setText("确定");
soumd1.stop();
}catch(Exception E)
{
System.out.println("关闭");
}
}
}
});
}
public static void main(String agrs[])
{
clock s = new clock();
Thread t1 = new Thread(s);
t1.start();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
public void run() {
while (true) {
Date now = new Date();
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<riqi)
{
foo=false;
guanji.setText("离闹铃时间:0日0时0分0秒");
}else if(r<=riqi&&h<shizhong)
{
foo=false;
guanji.setText("离闹铃时间:0日0时0分0秒");
}else if(r<=riqi&&h<=shizhong&&f<fenzhong)
{
foo=false;
guanji.setText("离闹铃时间:0日0时0分0秒");
}else if(r<=riqi&&h<=shizhong&&f<=fenzhong&&m<miaozhong) {
foo=false;
guanji.setText("离闹铃时间:0日0时0分0秒");
}
}
if (fo) {
foo = true;
RI.setEditable(false);
SHI.setEditable(false);
FEN.setEditable(false);
MIAO.setEditable(false);
queding.setText("关闭");
SimpleDateFormat ri = new SimpleDateFormat("dd"); SimpleDateFormat shi = new SimpleDateFormat("HH"); SimpleDateFormat fen = new SimpleDateFormat("mm"); SimpleDateFormat miao = new SimpleDateFormat("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(new File(music.getText())
.toURL()); // 播放音乐
soumd1.loop();
fo = false;
foo = false;
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
}
}
}
}
四、运行结果截图
打开文件添加音乐
闹钟设置完成
五、总结
本次JAVA课程设计是我和谢莉萍合作完成的,从网上下载了一个简单的小闹钟的开发程序,参照该程序代码,改编并添加一些自己的程序,在当前时间上加入了年月的显示,并在闹钟的时间设置上加入日的时间显示,最终实现小闹钟的运行.此小闹钟功能比较少,主要为能动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能,可以自己从本地文件中选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能,比较简单.
该课程设计在修改运行过程中遇见很多问题,例如:添加日期时,显示一直不对,选择音乐时,音乐会出现播放不了的情况等等,但是,在两个人的努力下,经过修改,最终实现了小闹钟的运行.当然,由于是参照了别人的程序,依旧有好多程序语言不是很理解.
经过这次的课程设计,也有了很多收获,发现自己的整体面向对象的编程能力大大提高,虽然相对于以前的实验更复杂,不过加强了对GUI、线程等的程序的练习。

由于这次课程设计安排的时间不是很足够,这个小闹钟软件比较简单,很多功能不是很完善,在很多功能上还需加强。

虽然在设计的时候有遇到过很多困难和错误,但我觉得能够完成这次的
课程设计,确实有了很大的进步与收获。

Welcome To Download !!!
欢迎您的下载,资料仅供参考!。

相关文档
最新文档