已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽 宁 工 业 大 学java程序设计 课程设计(论文)题目: 时钟 院(系): 软件学院 专业班级: 软件技术091班 学 号: 888888888 学生姓名: tianxi 指导教师: tianxi 教师职称: 助 教 起止时间: 2010.12.1至2010.12.16 程序设计专题(报告)任务及评语院(系):软件学院 教研室:软件教研室学 号8888888学生姓名tianxi专业班级软件技术091程序设计(报告)题目时钟程序设计(报告)任务程序设计专题的任务与要求:(1)掌握java编程、面向对象的基础知识。(2)较熟练地编写java应用程序application。(3)了解java的常用标准类库、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 12 月 20 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1课程设计主要内容22.2概要设计22.2.1自定义类说明22.3详细设计32.4测试分析162.4.1程序运行情况162.4.2程序异常处理16第3章 课程设计总结17参考资料18第1章 课程设计的目的与要求1.1 课程设计目的java程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完java程序设计课程后,进行的一次全面的综合训练,java程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。1.2 课程设计的实验环境硬件要求能运行windows 9.x操作系统的微机系统。java程序设计语言及相应的集成开发环境,j2sdk和eclipse开发工具。1.3 课程设计的预备知识熟悉java语言及eclipse开发工具。1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握java程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。第2章 课程设计内容2.1课程设计主要内容我设计的时钟有的界面良好,比较简洁美观,程序有很强的实用性,实现程序与电脑的时间的同步。可以显示时钟,也可以显示分针秒针,并可以在相应位置调整时间。而且初始运行会自动与电脑的时间校对,一般默认为同步,但还可以自己再次调节,提高了实用性。本系统共包括1个java源文件。1、clock源文件是本程序的主函数其作用是初始化棋盘。2、setcurrenttime源文件实现电脑设置时间。3、painthourpointer源文件为时针.4、paintsecondpointer源文件实现人与电脑设置秒针.5、paintminutedot源文件人与电脑设置分针.2.2概要设计2.2.1自定义类说明* * 类名: clock * * 作用: 自定义主类,对鼠标拖拽的初始界面进行声明* * 继承的父类: jcomponent类 * * 实现的接口: 没有 * *表1-成员变量表表2.1 clock成员变量成员变量描述变量类型名称时针stringhour分针stringminute秒针stringsecond时间点textfieldtext_1表2-方法表表2 clock方法方法名功能备注setcurrenttime设置当前时间构造方法painthourpointer设置时针接口方法paintsecondpointer设置秒针接口方法paintminutedot设置分针接口方法actionperformed事件处理run程序运行2.3详细设计import java.awt.*; import java.awt.geom.ellipse2d; import java.awt.geom.generalpath; import java.awt.geom.line2d; import java.awt.geom.rectangle2d; import java.util.calendar; import java.util.date; import javax.swing.borderfactory; import javax.swing.jcomponent; import javax.swing.jframe; import javax.swing.uimanager; public class clock extends jcomponent private static final color integral_color = new color(0, 128, 128); private int radius; private calendar currenttime = calendar.getinstance(); private double s = 0.03; public clock(int radius) this.radius = radius; public void setcurrenttime(date time) /设置当前时间 this.currenttime.settime(time); public void setcurrenttime(long millis) this.currenttime.settimeinmillis(millis); public dimension getpreferredsize() insets insets = getinsets(); int r = (int) (radius = -1 ? 0 : radius*(1+s)+1; return new dimension(r * 2 + insets.left + insets.right,r * 2 + insets.top + insets.bottom); /返回一个指定宽、高的dimension protected void paintcomponent(graphics g) super.paintcomponent(g); graphics2d g2d = (graphics2d) g; g2d.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on); insets insets = getinsets(); int wid = getwidth() - insets.left - insets.right; int hei = getheight() - insets.top - insets.bottom; int r = (int) (math.min(wid, hei) / 2 / (1+s); g2d.translate(insets.left + r * (1+s), insets.top + r * (1+s); g2d.scale(1, -1); for (int i = 0; i 60; i+) int angle = 90 - i * 6; double pos = calcpos(r, angle); paintminutedot(r, g2d, pos0, pos1, i % 5 = 0); painthourpointer(r, g2d); paintminutepointer(r, g2d); paintsecondpointer(r, g2d); paintcenterpoint(g2d); g2d.scale(1, -1); g2d.translate(-insets.left - r * (1+s), -insets.top - r * (1+s); private void paintcenterpoint(graphics2d g2d) g2d.setcolor(color.blue); rectangle2d rect = new rectangle2d.double(-2, -2, 4, 4); g2d.fill(rect); private void paintminutepointer(int r, graphics2d g2d) int minute = currenttime.get(calendar.minute); int second = currenttime.get(calendar.second); double angle = 90 - (minute + second / 60.0) * 6; shape pointershape = createpointershape(r * 0.8, r * 0.04, r * 0.08, angle); g2d.setcolor(color.light_gray); g2d.fill(pointershape); g2d.setcolor(color.dark_gray); g2d.draw(pointershape); private void painthourpointer(int r, graphics2d g2d) int hour = currenttime.get(calendar.hour); int minute = currenttime.get(calendar.minute); int second = currenttime.get(calendar.second); double angle = 90 - (hour + minute / 60.0 + second / 3600.0) * 30; shape pointershape = createpointershape(r * 0.6, r * 0.06, r * 0.1, angle); g2d.setcolor(color.light_gray); g2d.fill(pointershape); g2d.setcolor(color.dark_gray); g2d.draw(pointershape); private shape createpointershape(double r1, double r2, double r3, double angle) generalpath gp = new generalpath(); double pos = calcpos(r1, angle); double pos1 = calcpos(r2, angle + 90); gp.append(new line2d.double(pos0, pos1, pos10, pos11), true); double pos2 = calcpos(r3, angle + 180); gp.lineto(float)pos20, (float)pos21); double pos3 = calcpos(r2, angle + 270); gp.lineto(float)pos30, (float)pos31); gp.closepath(); return gp; private void paintsecondpointer(int r, graphics2d g2d) g2d.setcolor(color.black); int second = currenttime.get(calendar.second); int angle = 90 - second * 6; double pos = calcpos(r * 0.9, angle); double pos1 = calcpos(r * 0.2, angle + 180); line2d line = new line2d.double(pos10, pos11, pos0, pos1); g2d.draw(line); private void paintminutedot(int r, graphics2d g2d, double x, double y, boolean flag) g2d.setcolor(flag ? color.red : color.black); if (flag) /rectangle2d rect = new rectangle2d.double( ellipse2d rect = new ellipse2d.double( x - r * s, y - r * s, r * s * 2, r * s * 2); g2d.fill(rect); else /rectangle2d rect = new rectangle2d.double( ellipse2d rect = new ellipse2d.double( x - r * 0.02, y - r * 0.02, r * 0.04, r * 0.04); g2d.fill(rect); private double calcpos(double r, double angle) double radian = math.toradians(angle); double x = r * math.cos(radian); double y = r * math.sin(radian); return new double x, y; public static void main(string args) try uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname(); catch (exception e) e.printstacktrace(); final clock clock = new clock(50); clock.setborder(borderfactory.createemptyborder(10, 10, 10, 10); jframe f = new jframe( 软件081班 071404011 孙庆贺 ); /f.setbounds(380,200,500,600); f.getcontentpane().add(clock, borderlayout.center); f.pack(); f.setlocationrelativeto(null); f.setdefaultcloseoperation(jframe.exit_on_close); f.setvisible(true); new thread() public void run() while (true) try thread.sleep(1000); catch (interruptedexception ex) ex.printstacktrace(); clock.setcurrenttime(system.currenttimemillis(); clock.repaint(); .start(); int y1 = (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);int d = 29;for (int i = 1; i = 12; i+) x1 = (int)(r - 10) * math.sin(rad * d);y1 = (int)(r - 10) * math.cos(rad * d);g.drawstring(i + , x + r + x1 - 4, x + r - y1 + 5);d+=30;/小点d = 0;for (int i = 0; i = 360) s = 0;m+=6;if (m = 72 | m = 144 | m = 216 | m = 288) h+=6;if (m = 360) m = 0;h+=6;if (h =360) h = 0;this.repaint();int x, y, r;int h, m, s;/小时,分钟,秒double rad = math.pi / 180;public clockpaint(int x, int y, int r) this.x = x;this.y = y;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, r * 3, 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);/定义mytimer类 class mytimer1 extends jframe static int count=0; /判断是否重定义了时间 /构造函数 public mytimer1() /定义窗口大小 setsize(320, 200); /定义窗口标题 settitle(测试自定义时钟类!); container c = getcontentpane(); / new clockcanvas(北京时间, gmt+8) c.add(new clockcanvas(北京时间, gmt+8); /定义接口 interface timerlistener1 void timeelapsed(timer1 t); class timer1 extends thread /类timer1 private timerlistener1 target; private int interval; public timer1(int i, timerlistener1 t) target = t; interval = i; setdaemon(true); public void run() try while (!interrupted() sleep(interval); target.timeelapsed(this); catch(interruptedexception e) class clockcanvas extends jpanel /clockcanvas implements timerlistener1 static int seconds = 0; private string city; private gregoriancalendar calendar; /构造函数 public clockcanvas(string c, string tz) city = c; calendar = new gregoriancalendar(timezone.gettimezone(tz); timer1 t = new timer1(1000, this); t.start(); setsize(180, 180); /绘制钟面 public void paintcomponent(graphics g) super.paintcomponent(g); g.drawoval(100, 5, 120, 120); g.drawoval(101, 6, 118, 118); /分离时间 double hourangle = 2 * math.pi * (seconds - 3 * 60 * 60) / (12 * 60 * 60); double minuteangle = 2 * math.pi * (seconds - 15 * 60) / (60 * 60); double secondangle = 2 * math.pi * (seconds - 15) / 60; public void timeelapsed(timer1 t) calendar.settime(new date(); if(mytimer1.count=1) int a=1; seconds=mythour*60*60+mytminute*60+mytsecond; seconds+=a;/a为秒自加 repaint(); else seconds = calendar.get(calendar.hour) * 60 * 60 + calendar.get(calendar.minute) * 60 + calendar.get(calendar.second); repaint(); /定义时钟类 class mytimer implements timerlistener /定义时钟类的属性 static int inthour,intminute,intsecond; /构造函数 public mytimer() setcurrenttimeassystemtime(); timer t = new timer(1000, this); /实例timer类,里面有run方法 t.start(); /显示当前时间 public void displaycurrenttime() joptionpane.showmessagedialog(null,inthour+:+intminute+:+intsecond); /设定当前时间 public void setcurrenttime() /从对话框输入时,分秒 string strtemp=joptionpane.showinputdialog(null,请输入当前小时(24小时制):); int ihour=integer.parseint(strtemp); strtemp=joptionpane.showinputdialog(null,请输入当前分:); int iminute=integer.parseint(strtemp); strtemp=joptionpane.showinputdialog(null,请输入当前秒:); int isecond=integer.parseint(strtemp); /设定当前时间为对话框输入的时间 if(ihour=0&ihour24) inthour=ihour; transform(angle);g.setcolor(color);/设定当前时间为系统时间,构造函数调用 public void setcurrenttimeassystemtime() /定义date类的一个对象,用来获取系统时间 date timecurrent=new date(); catch(interruptedexception e) 2.4测试分析2.4.1程序运行情况当程序正常运行的时候,它能清晰的显示时钟界面。默认为与系统时间同步,如果出现错误,就会进行归零。运行界面如图2.1:图2.1运行界面2.4.2程序异常处理当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。有时候,一种方法可能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论