红绿灯JAVA课程设计报告_第1页
红绿灯JAVA课程设计报告_第2页
红绿灯JAVA课程设计报告_第3页
红绿灯JAVA课程设计报告_第4页
红绿灯JAVA课程设计报告_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

1、合肥学院计算机科学与技术系课程设计报告20122013学年第一学期课程 JAVA语言课程设计名称JAVA语言课程设计学生姓名朱鹏飞学号1104011011专业班级11级计本(3)班指导教师檀明、张艳明2013 年 1 月一、 课程设计目的通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程JAVA语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发

2、应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)熟练掌握JAVA语言的GUI设计、多线程技术,灵活运用各种类库。二、 课程设计名称及内容名称:交通灯模拟程序内容:设计一个交通灯管理的模拟程序,实现在一个十字路口的交通管理三、 任务和要求1 设计程序界面,画出十字路口和交通灯。2 可以手工设置红、绿等的时间间隔,程序按设定值自动变换每个路口的交通灯颜色。3 随机产生一些车辆,这些车辆遵守红灯停、绿灯行的交通规则。四、 设计方案提示分别设置两个线程代表东西和南北方向的交通灯,根据设定值变换交通灯颜色每个车辆对应一个线程,利用线程技术

3、实现车辆的红灯停、绿灯行的行为五、 总体设计思路从实验的要求上看,要实现交通灯的管理,需要解决的问题有两大部分:(一)绘制出交通灯及路口上的线路,以界面的形式展现出来。以此作为程序运行的一个进程。(二)程序对交通灯时间按计数器进行监听,倒计时时间为0的时候就进行切换。同时设置文本框,当操作员将时间写入文本框当中之后,点击确定按钮就将程序中的红绿灯的时间重置。以此作为一个线程。(三)随机在各个路口产生车辆,符合条件则通过,不符合条件则暂停。以此作为程序运行的另一个进程。程序中用到的6个类,介绍如下:1主类:TrafficLight该类是从Jframe类中继承过来的,该类当中定义了文本框、文本区、

4、按钮这些对象成员变量。然后,在主类的构造方法中,设置窗口的大小并将这些组添加到窗口容器当中。这些组建是采用默认的顺序布局,根据设定的大小和其实位置添加到容器中。为“确定”按钮注册监听器,对其动作进行监听。在try-catch中处理的是:从文本框中获取数据并将其转换成整型作为红绿灯的时间,在对设置的红绿灯时间进行修改。异常处理的方式是输出当前异常所产生的位置。在主方法当中,是创建一个TrafficLight类的对象,通过构造方法来实现所需的功能。2绘制窗口的类Luche该类是JPanel类的子类,该类当中含有的方法及其作用如下:(1)该类当中的一个构造方法Luche()该方法的功能是将被十字路分

5、割成的四块区域的背景设置为绿色。(2)绘制界面的方法(即该类中程序的执行入口):public void paint(Graphics g1) 设置十字路口,即根据具体的坐标绘制两个构成“十”字的道路。再根据车子的位置用for循环创建对象,以车子对象的两个成员变量(横纵坐标值)作为绘制填充圆的圆心所在位置,以及根据相应的矩形大小绘制填充圆。对这几个灯进行判断,在其位红色、绿色的情况下,对其进行不同的处理。加载图片对象,用try-catch对异常处理,加载是时间间隔为10毫秒。(3)repaint()方法,循环的调用paint()方法。(4)public List getCars()、public

6、 void setCars(List cars)这两个方法的作用是:返回Car,即加Car移出,另一个是将获得Car赋给该类当中的成员变量。(5)lauch()该方法的作用就是:创建是三个线程对象,分别是界面的绘制的、车子对象的创建、时间倒计时对象。(6)其他的一些方法:这些方法的作用就是盘对灯的颜色,然后将该类当中的成员变量附上该值。3.随机产生车子线程类:class CarThread implements Runnable该类的功能是实现Runnable接口功能:在run()方法中,用while循环,在永真的条件下,将car对象添加到其中。用try-catch处理异常,在产生异常的情况下

7、,就输出该异常对象。4.控制小车子行驶的线程类:class CarRunThread implements Runnable控制的原理同上,再永真的while循环当中,产生Car对象,对其类型(所在的位置)进行判断然后根据不同的线路将其移除(在满足条件的情况下)。该类当中有一个方法:private boolean hasObstructor(Car car, List cars),用来判断这个车子及其行驶的方向上是否有障碍物,在有和无的情况下分别作不同的处理。5.时间倒计时:public class PaintThread implements Runnable 这个方法主要作用是对倒计时的时

8、间进行根性,根性的周期在try-catch中进行控制,设置为1秒。5.车子类:class Car该类当中的一个构造方法:用一个随机数产生器产生随机0-3这四个随机整数,由这4个数来确定产生的车子的起始坐标,即确定车子的行驶方向。同时,这里有6个方法对这些车子对象的3个成员变量进行赋值。6.创建车子的类:class CarFactory该类当中只有一个方法,这个方法就是使创建一个Car类的对象,并返回这个类对象。六、 具体设计各个类之间的关系:主类 :TrafficLight 该类父类:Jframe 绘制窗口类的对象 标签对象:greenlight_label、 Luche luche redl

9、ight_label 作为成员变量 文本框对象:redlight_field、 greenlight_field 按钮对象:btn_set容器类的子类:class Luche extends JPanel 用循环创建 Car类的对象 绘图类对象 Graphics g(闭屏获取图片) Graphics g1(播放图片) 创建并启动3个线程对象 new PaintThread() new CarThread() new CarRunThread() 车运动的类CarRunThrea 时间倒计时(类): 产生小车的类: PaintThrea CarThread 实现Runnable接口 实现Runn

10、able接口实现Runnable接口 同时调用了CarFactory类中的方法 创建并返回Car对象以上各个类的具体实现如下:1. Car类:通过产生0-3之间的随机数,初始化3个成员变量。3个成员变量包含的方法对应的方法的功能车子所在横坐标private int xgetX()、setX(int x)获取横坐标、设置横坐标为当前获取的值车子所在纵坐标private int ygetY()、setY(int y)获取纵坐标、设置纵坐标为当前纵坐标车子行驶的方向private int type;getType()、setType(int type)获取编号、设置编号为当前编号(即车子的行驶方向)

11、2.产生车子的类:class CarFactory 该类当中仅有一个静态方法:public static Car getCar()执行的语句:return new Car();其功能就是穿件Car对象,同时返回该对象。3时间倒计时的类:public class PaintThread implements Runnable变量j:全局变量(记录显示的时间)执行的方法:public void run()方法中执行了一个循环:for (int i = 0; i redTimes+greenTimes; i+)i用来记录次数;再与异常处理try Thread.sleep(1000);/暂停1秒 ca

12、tch (InterruptedException e) e.printStackTrace();/输出异常所在的位置结合,在没有异常的情况下,即循环的周期为1秒(时间更新周期)。在循环周期类:由于程序运行的时间的影响,经调试分析:设置的红绿灯的时间应大于5秒for (int i = 0; i redTimes+greenTimes; i+) if(i=0) /程序开始运行j = 0; /开始设置南北方向红灯亮,东西方向绿灯亮redStatus = true;greenStatus = false;else if(i=redTimes)j = 0;/当时间周期到来时,两路口的交通灯也进行切换r

13、edStatus = false;greenStatus = true;else if(i=redTimes+greenTimes)j = 0;/实际是不能出现的状态(即所有方向上的灯都不亮)redStatus = false;greenStatus =false;repaint();j+;/执行周期的记录if (i = redTimes+greenTimes)i = -1;实现的功能是:在执行周期内循环执行交通灯颜色的切换,在达到周期的前一秒,将计时变量重新设置到初始状态。4控制车子运动的类:class CarRunThread implements Runnable方法一:public v

14、oid run()外循环:while(true)/条件为永真内循环:for(int i = 0;i 2000)/条件是已经超出了界面的边界范围,将其移除cars.remove(car); i-; continue;/结束本次循环跳转至下次循环if(Luche.this.isGreenStatus()& Math.abs(car.getX()-210)5 ) | hasObstructor(car,cars)continue;/条件是:/绿灯是是亮的但车距边界已小于5像素或者是车子不可移动elsecar.setX(car.getX()+5);/在满足移动的条件下,将车子的右移5个像素单位这个进程

15、的周期是:Thread.sleep(50);/进程暂停50毫秒方法二:判断是否有障碍物private boolean hasObstructor(Car car, List cars) 分别对4个方向进行判断(选择其一方向)if(car.getType()=0)/西-东方向for(int i = 0;i cars.size();i + )Car car2 = (Car) cars.get(i);/从已有的车子线程中取出下一个线程对象赋给当前新创建的对象int distance = (car2.getX()-car.getX();/判断这两个对象之间的距离if(car2.getType()=0

16、& distance 0)return true;/没有障碍物的条件是:两者距离在30像素之间在不成立的条件下,返回false,但只用了一个。因为在每次用到的时候,看上去是有4个判断,但真正只会执行其中一个(单线程)。5随机产生小车的线程在while(true)循环体中执行:添加车子:cars.add(CarFactory.getCar();进程的周期为1秒:Thread.sleep(long)(Math.random()*1200);6绘制界面的类:class Luche extends JPanel变量列表显示如下:变量名、类型及修饰符 功能private Boolean redStatu

17、s控制南北方向的红灯,初值为falseprivate Boolean greenStatus控制东西方向的绿灯,初值为falseprivate int redTimes记录红灯时间周期private int greenTimes记录绿灯的时间周期int j = 0全局变量,记录执行次数private List cars动态数组存储车子线程对象方法列表显示如下:方法名功能Luche()构造方法,仅用来设置界面的背景颜色paint( )创建的对象有:Image image、Graphics g、Color c = g.getColor();/创建颜色类对象,并获取当期的颜色;Car car = (

18、Car) cars.get(i);/用循环创建Car类对象,赋上的值是已存在的对象数组中的同类对象;if (redStatus = true) /南北方向红灯亮即:根据对象的值,绘制交通灯的位置和颜色public void setRedStatus(boolean redStatus)this.redStatus = redStatus;/给当前对象附上更新之后的值public boolean isGreenStatus()return greenStatus;public void setGreenStatus(boolean greenStatus)this.greenStatus = g

19、reenStatus;public int getRedTimes()return redTimes;/获取文本框中的红灯设置时间public void setRedTimes(int redTimes)this.redTimes = redTimes;/更新红灯设置时间public int getGreenTimes()return greenTimes;public void setGreenTimes(int greenTimes)this.greenTimes = greenTimes;public List getCars()return cars; /返回从动态数组中产生车子对象P

20、ublic void setCars(List cars)this.cars = cars;/将该时间点上的车子对象赋值给正在执行的车子线程public void lauch()创建3个线程new Thread(new PaintThread().start();new Thread(new CarThread().start();new Thread(new CarRunThread().start();7主类:public class TrafficLight extends JFrame(1)含有的成员标签:private JLabel redlight_label = new JLab

21、el(红灯时间: 秒);private JLabel greenlight_label = new JLabel(绿灯时间: 秒);文本框:private JTextField redlight_field = new JTextField();private JTextField greenlight_field = new JTextField();按钮private JButton btn_set = new JButton(设置);容器类的子类对象private Luche luche = new Luche();(2)方法:构造方法:public TrafficLight()实现的功

22、能是:添加组件,动作处理:public void actionPerformed(ActionEvent arg0) /该方法对发生在按钮上的事件进行处理/异常处理 try int redTimes = Integer.parseInt(redlight_field.getText();/获取设置时间的文本框中的文本并转换成整形 int greenTimes = Integer.parseInt(greenlight_field.getText();if(redTimesgreenTimes) redTimes=greenTimes; /当获得了值之后就对开始设定的进行修改 luche.set

23、RedTimes(redTimes); luche.setGreenTimes(greenTimes); catch (NumberFormatException e) /异常处理说明:由于程序能够运行简单,在设置时间之后,将红绿灯的时间间隔均设置为等长的。即用上述的if(redTimesgreenTimes) redTimes=greenTimes;解决该问题。主方法功能:new TrafficLight();/创建对象,通过构造方法的调用使程序运行程序运行的结果:1.未手动设置红绿灯的时间:2.手动设置时间之后:(1)第一组测试数据:(2)第二组测试数据:七、 总结Java 课程设计编写的程序是不仅要实现一个单一的功能,而且是要对一个任务做多个操作,并将这些功能合理的组合到一起。这样更加适用于对现实问题的解决能力。比如,我所做的的课题:十字路口红绿灯模拟,不仅要用GUI绘制图形,而且还要用两个线程分别对交通灯和车辆进行处

温馨提示

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

评论

0/150

提交评论