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

下载本文档

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

文档简介

1、课程设计报告课程:面向对象程序设计学号:1210461018 1210461027 1210461050女姓名:张扬 李佳珂 金正行班级:12 计科2班教师:钱田芬时间:2014年12月10日计算机科学与技术系设计名称:模拟时钟日期:2014年1 2月10日设计内容:通过多线程技术,重绘界面,绘制一个虚拟的时钟,时钟界面包括表盘和指 针。并用数字表显示当前的时间。1设计目的与要求1.1基本要求编写一个模拟时钟程序,此程序在屏幕中间有一指针式钟面。 左上角以数 字方式显示时间,该时间应与指针显示的时间一致,且与机器系统时间相同。在设计的过程中,需要用到 awt组件和Swing容器与组件,布局管理

2、器, 事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。掌握JDKEditplus、Eclipse JCreator等开发工具的运用,拓宽常用类库的应用。增进Java语言编辑基本功,1.2设计目的设计一个带有指针、数字时钟,并且具有秒表功能,能方便我们的使用和 操作,为我们以后的使用创造一个良好的平台。把自己所学的理论知识运用到实际操作中去,以此来发现自己的不足,及时的改正。在实际的操作中学习及运用还没有学过的知识。最后在调试与测试的过程还可以提升自己的改错能力也是自己经验的积累!2设计环境、思想和功能描述2.1运行环境:Eclipse +JDK平 台CPU Pentium 2.8GH

3、z以上内存:256MB以上硬盘空间:80G以上操作系统: Windows XP Windows 7 Windows 82.2主要设计思想:先是利用构造函数创建一个长为 200,宽为200的窗体,颜色设置为black, 并把窗体设计为固定大小。利用 AWT绘制图形的方法,在窗体中间画一个圆, 并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR MINUTE和 SECO ND方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的左上角 显示出当前的时间。2.3功能描述:设计的时钟界面良好,比较简洁美

4、观,程序有很强的实用性,实现程序与电 脑的时间的同步。可以显示时钟, 可以显示具体的数字时间,也可以显示分针秒 针。3设计方案的具体论证3.1详细设计界面及布局设计先是利用构造函数创建一个长为 200,宽为200的窗体,颜色设置为 black,并把窗体设计为固定大小。利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR MINUTE, SECOND法获得现在 的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针, 并设置不同的颜色。类、方法类名:Clock作用:自定义主类,对鼠标拖拽的初始界面进行声明类名:Cloc

5、kPain作用:用来画时钟和指针继承的父类:JComponent类实现的接口:没有表1-成员变量ClockPai nt成员变量成员变量描述变量类型名称时针Stri ngH分针Stri ngM秒针Stri ngS表2-方法表ClockPai nt 方法方法名功能备注get(Cale ndar.SECOND)获得秒数接口方法get(Cale ndar.MINUTE)获得分钟接口方法get(Cale ndar.HOUR OF DAY)获得小时接口方法Pai nt()画图Run()运行程序3.2概要设计程序流程图定义子类:ClockPaint继承的父类名:JPa nel继承的接口名:Ru nn abl

6、eint h, m, s小时,分钟,秒主要成员方法:s = now.get(Cale ndar.SECOND) * 6 获得秒转换成度数m = now.get(Cale ndar.MINUTE) * 6 获得分钟h = (no w.get(Cale ndar.HOUR_OF_DAY) - 12) * 30+ now.get(Cale ndar.MINUTE12 * 6 /获得小时主要成员方法:/清屏super.pa in t(g)g.setColor(Color.BLACK)g.fillRect(0, 0, r * 3, r * 3)/画圆g.setColor(Color.WHITE)g.dr

7、awOval(x, y, r * 2, r * 2)/秒针g.setColor(Color.RED)int x1 = (int) (r - 10) * Math.si n(rad * s)int y1 = (int) (r - 10) * Math.cos(rad * s)g.drawL ine(x + r, y + r, x + r + x1, y + r - y1)/分针g.setColor(Color.BLUE)x1 = (i nt) (r - r / 2.5) * Math.s in (rad * m)y1 = (int) (r - r / 2.5) * Math.cos(rad *

8、m)g.drawL ine(x + r, y + r, x + r + x1, y + r - y1)/时针g.setColor(Color.CYAN)x1 = (int) (r - r / 1.5) * Math.s in (rad * h)y1 = (int) (r - r / 1.5) * Math.cos(rad * h)g.drawL ine(x + r, y + r, x + r + x1, y + r - y1)/数字g.setColor(Color.YELLOW) int d = 29for (int i = 1; i <= 12; i+)3.3程序说明先是利用构造函数创

9、建一个长为 200,宽为200的窗体,颜色设置为black, 并把窗体设计为固定大小。利用 AWT绘制图形的方法,在窗体中间画一个圆, 并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR MINUTE, SECOND法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形 的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的左上方画 出和时钟相对数字时间。在设计的过程中,需要用到Swing组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和 线程。“GregorianCalendar(”用于显示当前时间;“ s

10、etColor”用于显示时针、分针和表盘的颜色;“ Color numberColor”用于显示秒针和数字的颜色,“drawOval(x, y, r * 2, r * 2)” 用 Graphics算法来画圆,其中(x,y)是圆的中心,r 为 圆半径;“public void pai nt(Graphics g)'用于运行时程 序; “public void start()” threat 的启动方法;“public void run()” 线程的 run方法。run()方法就是分出去让程序同时运行的、用来处理休眠和重画图形的线 程。4设计结果与分析4.1设计结果当程序正常运行的时候,它

11、能清晰的显示时钟界面。默认为与系统时间同步, 如果出现错误,就会进行归零。运行界面如图4.2设计分析使用的方法:在Clock的源代码的编写过程中运用了 paint()、repaint()、run()等方法。时 钟的绘制采用双缓冲图形处理机制, 即先在缓冲区内绘制图形,再把图形显示到 框架上。时钟的不断绘制是通过一个线程不断读取系统时间,如果时间有变化即 绘制。调试方法:首先我是一个类一个类的完成,在每一个类完成后都会对它进行编译, 待它 能正常的编译之后在进行下面的类的编写。 在编译的过程中会有一些错误,比如 说语法错误,类的引用格式不正确,会产生一些异常。但是在经过慢慢的调试, 这些问题逐渐

12、得到解决遇到的问题和解决方法:在用JAVA编写程序时,我遇到了很多困难,对很多的接口,类,方法都不 是很熟悉,只好采用查看 API文档,一个一个进行对照学习,同时也上网查看了 有关模拟时钟的相关描述,还向同学请教了,翻阅了相关的书籍。附录:程序代码import java.awt.Color;import java.awt.Graphics;import java.awt.eve nt.Wi ndowAdapter;import java.awt.eve nt.Wi ndowEve nt;import java.text.DateFormat;import java.util.Cale ndar

13、;import java.util.Gregoria nCale ndar;import javax.sw in g.JFrame;import javax.swi ng.JPa nel;public class Clock extends JFrame private static fin al l ong serialVersi on UID = 1L;public Clock (i nt r) ClockPai nt cp = new ClockPai nt (r); this.add(cp);this.setSize(300,210); this.setResizable(false)

14、; this.setLocatio n(260, 120); this.setTitle("小时钟");this.setVisible(true);addWi ndowListe ner(new Win dowAdapter() public void win dowClos in g(Wi ndowEve nt e) System.exit(0););public static void main( Stri ng s) new Clock (70);class ClockPa int1 exte nds JPa nel impleme nts Runn able pri

15、vate static fin al l ong serialVersi on UID = 1L; int x, y, r;/上边距,左边距,钟面半径int h, m, s;/时针,分针,秒针对应的度数double rad = Math.PI / 180; / 角度 1 ° 所对应的弧度public ClockPai nt1(i nt r) this.x = r/3;this.y = r/3;this.r = r;Cale ndar now = new Gregoria nCale ndar();s = now.get(Cale ndar.SECOND) * 6;/m = now.g

16、et(Cale ndar.MINUTE) * 6;/h = (no w.get(Cale ndar.HOUR_OF_DAY) - 12) * 30 +no w.get(Cale ndar.MINUTE) /12 * 6;Thread t = new Thread(this);t.start();public void pain "Graphics g) /清屏super.pa in t(g);g.setColor(Color.black);g.fillRect(O, 0, 300, r*3);填充矩形,参数分别为左上角顶点横、纵坐标, 宽、高/画圆g.setColor(Color.W

17、HITE);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(C

18、olor.BLUE);x1 = (int) (r - r / 2.5) * Math.s in (rad * m);/y1 = (int) (r - r / 2.5) * Math.cos(rad * m);g.drawLi ne(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.drawLi ne(x + r, y + r, x +

19、r + x1, y + r - y1);/数字int d = 30;/时钟刻度数从1开始,角度的基线是“ 00”秒时的秒钟,刻 度 1'的夹角为30°for (int i = 1; i <= 12; i+) x1 = (i nt) (r - 10) * Math.s in (rad * d);/ 刻度数横坐标y1 = (int) (r - 10) * Math.cos(rad * d); 刻度数纵坐标 (rad *d):表示的是弧度g.drawStri ng(i + "" , x + r + x1 - 4 , x + r - y1 + 5 );d +

20、= 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.drawStri ng(".", x + r + x1 - 1 , x + r - y1 + 1);/后2 个参数表示横纵坐 标,即从该坐标处画“.”d += 6;/ 一个圆 360 度,每隔6度

21、画一个点,共60个点/显示时间Cale ndar nowl = new Gregoria nCale ndar();int hour = now1.get(Cale ndar.HOUR_OF_DAY);/、时,获得当前的时刻int min ute = now1.get(Cale ndar.MINUTE);/ 分,同上int seco nd = no w1.get(Cale ndar.SECOND);秒g.setColor(Color.pi nk);g.drawStri ng(hour<10?"0":"")+hou r+ ":"+

22、 (mi nute<10?"0":"")+mi nute+ ":"+ (seco nd<10?"0":"")+seco nd, 200, 85);/drawStri ng 使用当前画 笔的颜色和字体,将参数str的内容显示出来,并且最/左边的字符的基线 从坐标x,y开始Cale ndar now2 = new Gregoria nCale ndar();DateFormat f=DateFormat.getDateI nsta nce(DateFormat.FULL);/获取当前 日

23、期的完整格式g.setColor(Color.pi nk);g.drawStri ng(f.format( no w2.getTime(),162, 130);/实现接口 Runnable的方法run,用来刷新时分秒三指针的度数public void run() while (true) try Thread.sleep(1000);/休 眠一秒Ecatch (Excepti on ex) s += 6;if(s % 360=0) m += 6;if(m % 72=0)h += 6;this.repai nt();设计建议与体会首先,java作为一种计算机语言,它具备语言的特性,就是我们在课堂

24、上认 真听取了老师的指导之后,还得自己回去认真看书写程序,并且上机实习才能发 现问题及时解决问题。就像我们学习语言一样要通过和同学之间的交流才能提高 我们的实际应用能力。所以,我们在自己认真刻苦学习的同时, 一定要多和同学 老师交流,从他们那里吸取好的思维方式、好的学习方法。对于课程设计,基本上实现了模拟时钟程序的要求, 指针式钟面,左上角有 数字时间,与系统显示的时间一致。该设计的特点是时钟上标有12数字个刻度, 且每一分钟的位置都一个刻度,并且各指针是不同的颜色,看上去比较美观,在 左上方显示数字时间,这是为了能更好的看时间。但是功能还不完善,没有实现对于时间的重置。我想在不断地进行对该设

25、计的完善,不仅能为该时钟设置背景,以增加该时钟的美观效果,也可以对时钟 到了一定的时间就可以报时,并且可以设置闹钟,为闹钟设置多种音乐,可供选 择,这样的话就不显得单调,这样一来该时钟更方便实用。也能对自己的动手能 力有所提高。在完成课程设计的过程中,遇到了不少的问题:一是有一些东西自己没有学 过;二是在编写的过程中由于思路不清晰以及自己的粗心给自己制造了一些麻 烦,还有就是会产生一些异常。但是在经过自己和搭档、同学的交流,以及自己 查阅资料和API文档,针对性的对不懂得问题进行查询,自己没有学过但是又要 用到得逐渐的得到解决,再经过自己反复的理清思路和反复的检查, 由思路不清 晰和粗心带来的

26、麻烦也慢慢得到了解决。最后Java作为一个面向对象的编程语言,在图像方面具有很强的实现能力。 这样很能激发我的学习兴趣。在编写程序的时候发现,虽然它是一个面向对象的 编程语言,我们一定要学会如何编写多个类和方法, 在不断地摸索中培养我们自 身设计面向对象解决方案的能力。 作为学生的我们,是一个学习的过程,我们应 该学习如何写好程序。而好的程序不仅仅是一系列语句的拼凑, 我们要联系自身 实际,用编程语言解决问题和实施解决问题的方案。在以后的日子里,我要不断地学习这个博大精深的语言,继续不断的深化自己的实际动手能力。金正行面向对象课程设计这两周来,通过对所选题目程序的详细分析和更改,受益匪 浅。让我了解到了 Java更多的实用功能 也了解到了自己学习结合实践的不足。 实用的软件理论,技术与方法才是我们学习的最终目的,应该有更多的时间花在实 践环节,也希望学校以后能安排更多的实验性课程,不至于让理论成为白字,为以后的工作打好基础。在这次课程设计中,我学到了很多的知识,在对 Java的学习上是我学会了怎 么将学到的理论知识用到实践中去, 改变了过去的学习方法和学习态度, 找到了 一门自己很喜欢的学科。 题目虽然简单,但是我做的却很艰难,并且功能

温馨提示

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

评论

0/150

提交评论