模拟时钟课程设计报告_第1页
模拟时钟课程设计报告_第2页
模拟时钟课程设计报告_第3页
模拟时钟课程设计报告_第4页
模拟时钟课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程: 面向对象程序设计 学号: 姓名: 张扬 李佳珂 金正行 班级: 12计科2班 教师: 钱 田 芬 时间: 2014年12月10日 计算机科学与技术系设计名称:模拟时钟日期:2014年1 2月 10日设计内容:通过多线程技术,重绘界面,绘制一个虚拟的时钟,时钟界面包括表盘和指针。并用数字表显示当前的时间。1 设计目的与要求1.1基本要求编写一个模拟时钟程序,此程序在屏幕中间有一指针式钟面。左上角以数字方式显示时间,该时间应与指针显示的时间一致,且与机器系统时间相同。在设计的过程中,需要用到awt组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。增进Java语言编辑基本功,1.2 设计目的设计一个带有指针、数字时钟,并且具有秒表功能,能方便我们的使用和操作,为我们以后的使用创造一个良好的平台。把自己所学的理论知识运用到实际操作中去,以此来发现自己的不足,及时的改正。在实际的操作中学习及运用还没有学过的知识。最后在调试与测试的过程还可以提升自己的改错能力也是自己经验的积累!2 设计环境、思想和功能描述2.1运行环境:Eclipse+JDK平台CPU:Pentium2.8GHz以上内存:256MB以上硬盘空间:80G以上操作系统:WindowsXP Windows7 Windows82.2主要设计思想:先是利用构造函数创建一个长为200,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小。利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR,MINUTE和SECOND 方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的左上角显示出当前的时间。2.3功能描述:设计的时钟界面良好,比较简洁美观,程序有很强的实用性,实现程序与电脑的时间的同步。可以显示时钟,可以显示具体的数字时间,也可以显示分针秒针。3 设计方案的具体论证3.1详细设计3.1.1 界面及布局设计先是利用构造函数创建一个长为200,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小。利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR,MINUTE,SECOND方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。3.1.2 类、方法类名:Clock作用:自定义主类,对鼠标拖拽的初始界面进行声明类名:ClockPain作用:用来画时钟和指针继承的父类:JComponent类实现的接口:没有表 1-成员变量ClockPaint成员变量成员变量描述变量类型名称时针StringH分针StringM秒针StringS表 2-方法表ClockPaint方法方法名功能备注get(Calendar.SECOND)获得秒数接口方法get(Calendar.MINUTE)获得分钟接口方法get(Calendar.HOUR_OF_DAY)获得小时接口方法Paint()画图Run()运行程序3.2 概要设计启动时钟创建一个主窗体利用AWT绘制图形方法在窗体绘制一个圆,并绘制好12个数字计算出时间和度数的关系绘制出各指针关闭时钟时针走时分针走时秒针走时程序流程图定义子类:ClockPaint继承的父类名:JPanel继承的接口名:Runnableinth,m,s/小时,分钟,秒主要成员方法:s=now.get(Calendar.SECOND)*6/获得秒转换成度数m=now.get(Calendar.MINUTE)*6/获得分钟h=(now.get(Calendar.HOUR_OF_DAY)-12)*30+now.get(Calendar.MINUTE)/12*6/获得小时主要成员方法:/清屏super.paint(g)g.setColor(Color.BLACK)g.fillRect(0,0,r*3,r*3)/画圆g.setColor(Color.WHITE)g.drawOval(x,y,r*2,r*2)/秒针g.setColor(Color.RED)intx1=(int)(r-10)*Math.sin(rad*s)inty1=(int)(r-10)*Math.cos(rad*s)g.drawLine(x+r,y+r,x+r+x1,y+r-y1)/分针g.setColor(Color.BLUE)x1=(int)(r-r/2.5)*Math.sin(rad*m)y1=(int)(r-r/2.5)*Math.cos(rad*m)g.drawLine(x+r,y+r,x+r+x1,y+r-y1)/时针g.setColor(Color.CYAN)x1=(int)(r-r/1.5)*Math.sin(rad*h)y1=(int)(r-r/1.5)*Math.cos(rad*h)g.drawLine(x+r,y+r,x+r+x1,y+r-y1)/数字g.setColor(Color.YELLOW)intd=29for(inti=1;i=12;i+)3.3 程序说明先是利用构造函数创建一个长为200,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小。利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR,MINUTE,SECOND方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的左上方画出和时钟相对数字时间。在设计的过程中,需要用到Swing组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。 “GregorianCalendar()”用于显示当前时间;“setColor”用于显示时针、分针和表盘的颜色;“ColornumberColor”用于显示秒针和数字的颜色, “drawOval(x, y, r * 2, r * 2)”用Graphics算法来画圆,其中(x,y)是圆的中心,r为圆半径;“publicvoidpaint(Graphicsg)”用于运行时程序;“publicvoidstart()”threat的启动方法; “publicvoidrun()”线程的run方法。run()方法就是分出去让程序同时运行的、用来处理休眠和重画图形的线程。4 设计结果与分析4.1设计结果当程序正常运行的时候,它能清晰的显示时钟界面。默认为与系统时间同步,如果出现错误,就会进行归零。运行界面如图4.2设计分析使用的方法:在Clock的源代码的编写过程中运用了paint()、repaint()、run()等方法。时钟的绘制采用双缓冲图形处理机制,即先在缓冲区内绘制图形,再把图形显示到框架上。时钟的不断绘制是通过一个线程不断读取系统时间,如果时间有变化即绘制。调试方法:首先我是一个类一个类的完成,在每一个类完成后都会对它进行编译,待它能正常的编译之后在进行下面的类的编写。在编译的过程中会有一些错误,比如说语法错误,类的引用格式不正确,会产生一些异常。但是在经过慢慢的调试,这些问题逐渐得到解决遇到的问题和解决方法:在用JAVA编写程序时,我遇到了很多困难,对很多的接口,类,方法都不是很熟悉,只好采用查看API文档,一个一个进行对照学习,同时也上网查看了有关模拟时钟的相关描述,还向同学请教了,翻阅了相关的书籍。14附录:程序代码import java.awt.Color;import java.awt.Graphics;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.text.DateFormat;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JFrame;import javax.swing.JPanel;public class Clock extends JFrame private static final long serialVersionUID = 1L; public Clock (int r) ClockPaint cp = new ClockPaint (r); this.add(cp); this.setSize(300,210); this.setResizable(false); this.setLocation(260, 120); this.setTitle(小时钟); this.setVisible(true); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public static void main(String s) new Clock (70); class ClockPaint1 extends JPanel implements Runnable private static final long serialVersionUID = 1L; int x, y, r; /上边距,左边距,钟面半径 int h, m, s; / 时针,分针,秒针对应的度数 double rad = Math.PI / 180; /角度1所对应的弧度 public ClockPaint1(int r) this.x = r/3; this.y = r/3; this.r = r; Calendar now = new GregorianCalendar(); s = now.get(Calendar.SECOND) * 6;/ m = now.get(Calendar.MINUTE) * 6;/ h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6; Thread t = new Thread(this); t.start(); public void paint(Graphics g) /清屏 super.paint(g); g.setColor(Color.black); g.fillRect(0, 0, 300, r*3);/填充矩形,参数分别为左上角顶点横、纵坐标,宽、高 / 画圆 g.setColor(Color.WHITE); g.drawOval(x, y, r * 2, r * 2);/参数分别为矩形的左上角顶点横、纵坐标,矩形宽,矩形高(矩形内切椭圆) / 秒针 g.setColor(Color.RED); int x1 = (int) (r - 10) * Math.sin(rad * s);/r-10为秒针的长度,x轴朝右,y轴朝下 int y1 = (int) (r - 10) * Math.cos(rad * s); g.drawLine(x + r, y + r, x + r + x1, y + r - y1);/画直线, 前2参数表起点坐标,后2参数表终点坐标 / 分针 g.setColor(Color.BLUE); x1 = (int) (r - r / 2.5) * Math.sin(rad * m);/ y1 = (int) (r - r / 2.5) * Math.cos(rad * m); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 时针 g.setColor(Color.CYAN); x1 = (int) (r - r / 1.5) * Math.sin(rad * h); y1 = (int) (r - r / 1.5) * Math.cos(rad * h); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 数字 int d = 30;/时钟刻度数从1开始,角度的基线是“00”秒时的秒钟,刻度1的夹角为30 for (int i = 1; i = 12; i+) x1 = (int) (r - 10) * Math.sin(rad * d);/刻度数横坐标 y1 = (int) (r - 10) * Math.cos(rad * d);/刻度数纵坐标 (rad * d):表示的是弧度 g.drawString(i + , x + r + x1 - 4 , x + r - y1 + 5 ); d += 30; / 小点 d = 0; for (int i = 0; i 60; i+) /循环绘出60个刻度点 x1 = (int) (r - 2) * Math.sin(rad * d);/刻度点横坐标 (r - 2):距圆面向内缩进2像素画点; y1 = (int) (r - 2) * Math.cos(rad * d);/刻度点纵坐标 (rad * d):表示的是弧度 g.drawString(., x + r + x1 - 1 , x + r - y1 + 1);/后2个参数表示横纵坐标,即从该坐标处画“.” d += 6; /一个圆360度,每隔6度画一个点,共60个点 / 显示时间 Calendar now1 = new GregorianCalendar(); int hour = now1.get(Calendar.HOUR_OF_DAY);/小时,获得当前的时刻 int minute = now1.get(Calendar.MINUTE);/分,同上 int second = now1.get(Calendar.SECOND);/秒 g.setColor(Color.pink); g.drawString(hour10?0:)+hour+ : + (minute10?0:)+minute+ : + (second10?0:)+second, 200, 85);/drawString使用当前画笔的颜色和字体,将参数str的内容显示出来,并且最 /左边的字符的基线从坐标x,y开始 Calendar now2 = new GregorianCalendar(); DateFormat f=DateFormat.getDateInstance(DateFormat.FULL);/获取当前日期的完整格式 g.setColor(Color.pink); g.drawString(f.format(now2.getTime(), 162, 130); /实现接口Runnable的方法run,用来刷新时分秒三指针的度数 public void run() while (true) try Thread.sleep(1000);/休眠一秒 catch (Exception ex) s += 6; if(s % 360=0) m += 6; if(m % 72=0) h += 6; this.repaint(); 设计建议与体会首先,java作为一种计算机语言,它具备语言的特性,就是我们在课堂上认真听取了老师的指导之后,还得自己回去认真看书写程序,并且上机实习才能发现问题及时解决问题。就像我们学习语言一样要通过和同学之间的交流才能提高我们的实际应用能力。所以,我们在自己认真刻苦学习的同时,一定要多和同学老师交流,从他们那里吸取好的思维方式、好的学习方法。对于课程设计,基本上实现了模拟时钟程序的要求,指针式钟面,左上角有数字时间,与系统显示的时间一致。该设计的特点是时钟上标有12数字个刻度,且每一分钟的位置都一个刻度,并且各指针是不同的颜色,看上去比较美观,在左上方显示数字时间,这是为了能更好的看时间。但是功能还不完善,没有实现对于时间的重置。我想在不断地进行对该设计的完善,不仅能为该时钟设置背景,以增加该时钟的美观效果,也可以对时钟到了一定的时间就可以报时,并且可以设置闹钟,为闹钟设置多种音乐,可供选择,这样的话就不显得单调,这样一来该时钟更方便实用。也能对自己的动手能力有所提高。在完成课程设计的过程中,遇到了不少的问题:一是有一些东西自己没有学过;二是在编写的过程中由于思路不清晰以及自己的粗心给自己制造了一些麻烦,还有就是会产生一些异常。但是在经过自己和搭档、同学的交流,以及自己查阅资料和API文档,针对性的对不懂得问题进行查询,自己没有学过但是又要用到得逐渐的得到解决,再经过自己反复的理清思路和反复的检查,由思路不清晰和粗心带来的麻烦也慢慢得到了解决。最后Java作为一个面向对象的编程语言,在图像方面具有很强的实现能力。这样很能激发我的学习兴趣。在编写程序的时候发现,虽然它是一个面向对象的编程语言,我们一定要学会如何编写多个类和方法,在不断地摸索中培养我们自身设计面向对象解决方案的能力。作为学生的我们,是一个学习的过程,我们应该学习如何写好程序。而好的程序不仅仅是一系列语句的拼凑,我们要联系自身实际,用编程语言解决问题和实施解决问题的方案。在以后的日子里,我要不断地学习这个博大精深的语言,继续不断的深化自己的实际动手能力。金 正 行面向对象课程设计这两周来,通过对所选题目程序的详细分析和更改,受益匪浅。让我了解到了Java更多的实用功能,也了解到了自己学习结合实践的不足。实用的软件理论,技术与方法才是我们学习的最终目的,应该有更多的时间花在实践环节,也希望学校以后能安排更多的实验性课程,不至于让理论成为白字,为以后的工作打好基础。 在这次课程设计中,我学到了很多的知识,在对Java的学习上是我学会了怎么将学到的理论知识用到实践中去,改变了过去的学习方法和学习态度,找到了一门自己很喜欢的学科。 题目虽然简单,但是我做的却很艰难,并且功能还不完善,很显然是基础不牢以及缺少动手

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论