您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页2024实训报告总结

2024实训报告总结

来源:华拓科技网

  一、 课程设计名称及主要内容:

  1、 课程设计名称:

  时钟动画

  2、 课程设计的主要内容:

  以下题目任选一个:

  (1)图形界面类,如科学计算器、绘图板、日历、游戏程序等。

  (2)动画类,编制功能较复杂、效果较好的Applet动画程序。

  (3)数据处理类,如学生学籍、课程成绩、图书编目、仓库货物等数据录入查询程序。

  (4)其他类型,自选题目,须经指导老师同意。

  我所选的题目是动画类的Applet动画程序,主要任务是用Java程序设计一个时钟动画。

  二、 程序的设计思想和流程图:

  1、 设计思想:

  现在的各种时钟花样百出,千奇百怪,功能亦是越来越先进了。我很喜欢这些各式各样的时钟,所以希望自己也能设计出一个来。于是,我希望自己能够用自己所学的Java知识设计出一个自己的时钟动画,即使是最简单的,但我相信这是暂时的。只要我能够努力学好Java知识,将来一定能够设计出更好更完美的时钟动画。

  2、 流程图:

  三、 程序介绍:

  1、设计方法及步骤 :

   题目分析:

  根据《课程设计任务书》要求,分析题目,构造出程序的基本思路(算法设计)。画出程序

  设计结构框图。

   构造数据结构:

  根据程序结构框图和题目分析结果(采用算法),构造程序所用各项数据,各种窗体及他们

  之间的联系。

   构造程序框架:

  在窗体确定之后,根据算法设计出所用各个窗体之间的调用关系。

   程序设计:

  ①画出程序功能框图和结构框图;

  ②根据框图设计程序;

  ③编译程序调试程序,使程序可以使用;

  ④完备程序功能。

   程序打包:

  所设计程序汇总,将程序分类归入相应子目录,完成程序所有设计要求。

  2、完成情况:

  经过一系列的Java程序代码的设计,虽然过程中遇到了许多的问题,但是最终解决了所有的问题,准确的设计出了时钟动画,运行情况正常。

  3、类的关系:

  “public class AnimatorDemo”是公共类,且是程序中的唯一的一个类。

  4、构造方法、成员变量和成员方法的功能说明:

  “Thread timer”用于显示时钟的线程;

  “SimpleDateFormat formatter”用于格式化时间显示; “String lastdate”用于保存当前时间的字符串;

  “Font clockFaceFont”用于设置显示时钟里面的数字的字体; “Date currentDate”用于显示当前时间;

  “Color handColor”用于显示时针、分针和表盘的颜色; “Color numberColor” 用于显示秒针和数字的颜色; “public void init”用于设计时钟格式并捕捉异常;

  “public void plotpoints(int x0, int y0, int x, int y, Graphics g)” 用于计算四分之一的圆弧;

  “public void circle(int x0, int y0, int r, Graphics g”) 用Bresenham算法来画圆,其中(x0,y0)是圆的中心,r为圆半径; “public void paint(Graphics g)”用于运行时钟程序; “public void start” applet的启动方法;

  “public void stop” applet的停止方法;

  “public void run” 线程的run方法。

  四、 遇到的问题和解决方法:

  1、 问题:

   写程序的时候,由于对有些Java知识不懂,所以有些想要表达的意思无法用Java代码准确的表达出来,老是出错或者无法写下去;

   一开始,自己准备的参考资料不足,无法在遇到问题时有效的利用参考资料解决,遇到不懂的问题和不会用程序语言表达的问题时,只能留在那里,无法解决,结果问题最后越积越多,导致我无法再把程序写下去;

   一开始,对于老师布置的作业题目,我不太懂,无法进行有效而且清晰的分析,自然也无法继续下去写程序了,耽误了较多的时间;

   对于要写流程图,一开始我并不懂是什么意思,也不知道怎么去写。

  2、 解决方法:

   对于那些不懂的Java知识和不会写的程序,我通过向同学寻求帮助和利用参考资料书,最终都解决了;

   对于自己参考资料不足的缺点,我在下课后,去了图书馆借阅有关方面的Java参考资料书,并且向同学借阅了他们所拥有的资料书,然后又利用自己的电脑上网查找了一些有关方面的参考知识,终于在最后解决了资料不足的缺点;

   对于不懂的题目,我也通过向多个同学进行询问,最终弄懂了老师布置的题目所要求的内容;

   至于流程图,在我向同学询问过,并且上网进行了一番查找和咨询后,也总算弄懂了流程图的含义,并努力写了出来。

  五、 认识、感想、建议:

  六、 参考资料:

  《精通Java——JDK、数据库系统开发、Web开发》

  《Java进阶教程》

  《零起点Java应用编程》

  《Java程序设计应用基础教程》

  七、 附加源程序:

  import java.util.*;

  import java.awt.*;

  import java.applet.*;

  import java.text.*;

  public class AnimatorDemo extends Applet implements Runnable

  {

  Thread timer; // 用于显示时钟的线程

  int lastxs, lastys, lastxm,

  lastym, lastxh, lastyh;

  SimpleDateFormat formatter; //格式化时间显示

  String lastdate; // 保存当前时间的字符串

  Font clockFaceFont; //设置显示时钟里面的数字的字体

  Date currentDate; // 显示当前时间

  Color handColor; // 用于显示时针、分针和表盘的颜色

  Color numberColor; // 用于显示秒针和数字的颜色

  public void init

  {

  int x,y;

  lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;

  formatter = new SimpleDateFormat ("yyyy EEE MMM dd hh:mm:ss ");

  currentDate = new Date;

  lastdate = formatter.format(currentDate);

  clockFaceFont = new Font("Serif", Font.PLAIN, 14);

  handColor = Color.blue;

  numberColor = Color.darkGray;

  try {

  setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16)));}

  catch (Exception E) { }

  try {

  handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16));}

  catch (Exception E) { }

  try {

  numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16));} catch (Exception E) { } resize(300,300); // 设置时钟窗口大小}

  // 计算四分之一的圆弧

  public void plotpoints(int x0, int y0, int x, int y, Graphics g)

  {

  g.drawLine(x0+x,y0+y,x0+x,y0+y);

  g.drawLine(x0+y,y0+x,x0+y,y0+x);

  g.drawLine(x0+y,y0-x,x0+y,y0-x);

  g.drawLine(x0+x,y0-y,x0+x,y0-y);

  g.drawLine(x0-x,y0-y,x0-x,y0-y);

  g.drawLine(x0-y,y0-x,x0-y,y0-x);

  g.drawLine(x0-y,y0+x,x0-y,y0+x);

  g.drawLine(x0-x,y0+y,x0-x,y0+y);}

  // 用Bresenham算法来画圆,其中(x0,y0)是圆的中心,r为圆半径

  public void circle(int x0, int y0, int r, Graphics g)

  {

  int x,y;

  float d;

  x=0;

  y=r;

  d=5/4-r;

  plotpoints(x0,y0,x,y,g);

  while(y>x){

  if (d<0) {

  d=d+2+3;

  x++;}

  else {

  d=d+2*(x-y)+5;

  x++;

  y--;}

  plotpoints(x0,y0,x,y,g);}}

  public void paint(Graphics g)

  {int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter; String today;

  currentDate = new Date;

  SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault); try {

  s = Integer.parseInt(formatter.format(currentDate));

  } catch (NumberFormatException n) {

  s = 0;}

  formatter.applyPattern("m");

  try {

  m = Integer.parseInt(formatter.format(currentDate));

  } catch (NumberFormatException n) {

  m = 10;}

  formatter.applyPattern("h");

  try {

  h = Integer.parseInt(formatter.format(currentDate));

  } catch (NumberFormatException n) {

  h = 10;}

  formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");

  today = formatter.format(currentDate);

  //设置时钟的表盘的中心点为(80,55)

  xcenter=80;

  ycenter=55;

  // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)

  // x = r(cos a) + xcenter, y = r(sin a) + ycenter

  xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter);

  ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter);

  xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter);

  ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter);

  xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xcenter); yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ycenter); //画时钟最外面的圆盘其中心在(xcenter,ycenter)半径为50

  g.setFont(clockFaceFont);

  g.setColor(handColor);

  circle(xcenter,ycenter,50,g);

  //画时钟表盘里的数字

  g.setColor(numberColor);

  g.drawString("9",xcenter-45,ycenter+3);

  g.drawString("3",xcenter+40,ycenter+3);

  g.drawString("12",xcenter-5,ycenter-37);

  g.drawString("6",xcenter-3,ycenter+45);

  // 如果必要的话抹去然后重画

  g.setColor(getBackground);

  if (xs != lastxs || ys != lastys) {

  g.drawLine(xcenter, ycenter, lastxs, lastys);

  g.drawString(lastdate, 5, 125);}

  if (xm != lastxm || ym != lastym) {

  g.drawLine(xcenter, ycenter-1, lastxm, lastym);

  g.drawLine(xcenter-1, ycenter, lastxm, lastym); }

  if (xh != lastxh || yh != lastyh) {

  g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

  g.drawLine(xcenter-1, ycenter, lastxh, lastyh); }

  g.setColor(numberColor);

  g.drawString("", 5, 125);

  g.drawString(today, 5, 125);

  g.drawLine(xcenter, ycenter, xs, ys);

  g.setColor(handColor);

  g.drawLine(xcenter, ycenter-1, xm, ym);

  g.drawLine(xcenter-1, ycenter, xm, ym);

  g.drawLine(xcenter, ycenter-1, xh, yh);

  g.drawLine(xcenter-1, ycenter, xh, yh);

  lastxs=xs; lastys=ys;

  lastxm=xm; lastym=ym;

  lastxh=xh; lastyh=yh;

  lastdate = today;

  currentDate=null;

  }//applet的启动方法

  public void start

  {timer = new Thread(this);

  timer.start;

  }// applet的停止方法

  public void stop

  {timer = null;

  }//线程的run方法

  public void run

  {Thread me = Thread.currentThread;

  while (timer == me) {

  try {Thread.currentThread.sleep(1000);}

  catch (InterruptedException e)

  repaint;}

  }//注意:这里重写了update方法,只是调用了paint方法来消除闪烁现象 public void update(Graphics g)

  {paint(g);}

  }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务