红绿灯JAVA课程设计报告.docx

上传人:b****8 文档编号:11958984 上传时间:2023-06-03 格式:DOCX 页数:20 大小:203.84KB
下载 相关 举报
红绿灯JAVA课程设计报告.docx_第1页
第1页 / 共20页
红绿灯JAVA课程设计报告.docx_第2页
第2页 / 共20页
红绿灯JAVA课程设计报告.docx_第3页
第3页 / 共20页
红绿灯JAVA课程设计报告.docx_第4页
第4页 / 共20页
红绿灯JAVA课程设计报告.docx_第5页
第5页 / 共20页
红绿灯JAVA课程设计报告.docx_第6页
第6页 / 共20页
红绿灯JAVA课程设计报告.docx_第7页
第7页 / 共20页
红绿灯JAVA课程设计报告.docx_第8页
第8页 / 共20页
红绿灯JAVA课程设计报告.docx_第9页
第9页 / 共20页
红绿灯JAVA课程设计报告.docx_第10页
第10页 / 共20页
红绿灯JAVA课程设计报告.docx_第11页
第11页 / 共20页
红绿灯JAVA课程设计报告.docx_第12页
第12页 / 共20页
红绿灯JAVA课程设计报告.docx_第13页
第13页 / 共20页
红绿灯JAVA课程设计报告.docx_第14页
第14页 / 共20页
红绿灯JAVA课程设计报告.docx_第15页
第15页 / 共20页
红绿灯JAVA课程设计报告.docx_第16页
第16页 / 共20页
红绿灯JAVA课程设计报告.docx_第17页
第17页 / 共20页
红绿灯JAVA课程设计报告.docx_第18页
第18页 / 共20页
红绿灯JAVA课程设计报告.docx_第19页
第19页 / 共20页
红绿灯JAVA课程设计报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

红绿灯JAVA课程设计报告.docx

《红绿灯JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《红绿灯JAVA课程设计报告.docx(20页珍藏版)》请在冰点文库上搜索。

红绿灯JAVA课程设计报告.docx

红绿灯JAVA课程设计报告

合肥学院

计算机科学与技术系

课程设计报告

2012~2013学年第一学期

课程

课程设计名称学生姓名

学号

专业班级

指导教师

2013

JAVA语言

JAVA语言课程设计朱鹏飞

1104011011

11级计本(3)班檀明、张艳明

1月

一、课程设计目的

通过课程设计,学生在下述各方面的能力应该得到锻炼:

(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

(5)熟练掌握JAVA语言的GUI设计、多线程技术,灵活运用各种类库。

二、课程设计名称及内容

名称:

交通灯模拟程序

内容:

设计一个交通灯管理的模拟程序,实现在一个十字路口的交通管理三、任务和要求

1.设计程序界面,画出十字路口和交通灯。

2.可以手工设置红、绿等的时间间隔,程序按设定值自动变换每个路口的交通灯颜色。

3.随机产生一些车辆,这些车辆遵守红灯停、绿灯行的交通规则。

四、设计方案提示

分别设置两个线程代表东西和南北方向的交通灯,根据设定值变换交通灯颜色

每个车辆对应一个线程,利用线程技术实现车辆的红灯停、绿灯行的行为五、总体设计思路

从实验的要求上看,要实现交通灯的管理,需要解决的问题有两大部分:

(一)绘制出交通灯及路口上的线路,以界面的形式展现出来。

以此作为程序运行的一个进程。

(二)程序对交通灯时间按计数器进行监听,倒计时时间为0的时候就进行切换。

同时设置文本框,当操作员将时间写入文本框当中之后,点击确定按钮就将程序中的红绿灯的时间重置。

以此作为一个线程。

(三)随机在各个路口产生车辆,符合条件则通过,不符合条件则暂停。

以此作为程序运行的另一个进程。

程序中用到的6个类,介绍如下:

1.主类:

TrafficLight

该类是从Jframe类中继承过来的,该类当中定义了文本框、文本区、按钮这些对象成员变量。

然后,在主类的构造方法中,设置窗口的大小并将这些组添加到窗口容器当中。

这些组建是采用默认的顺序布局,根据设定的大小和其实位置添加到容器中。

为“确定”按钮注册监听器,对其动作进行监听。

在try-catch中处理的是:

从文本框中获取数据并将其转换成整型作为红绿灯的时间,在对设置的红绿灯时间进行修改。

异常处理的方式是输出当前异常所产生的位置。

在主方法当中,是创建一个TrafficLight类的对象,通过构造方法来实现所需的功能。

2.绘制窗口的类Luche

该类是JPanel类的子类,该类当中含有的方法及其作用如下:

(1)该类当中的一个构造方法Luche()

该方法的功能是将被十字路分割成的四块区域的背景设置为绿色。

(2)绘制界面的方法(即该类中程序的执行入口):

publicvoidpaint(Graphicsg1)

设置十字路口,即根据具体的坐标绘制两个构成“十”字的道路。

再根据车子的位置用for循环创建对象,以车子对象的两个成员变量(横纵坐标值)作为绘制填充圆的圆心所在位置,以及根据相应的矩形大小绘制填充圆。

对这几个灯进行判断,在其位红色、绿色的情况下,对其进行不同的处理。

加载图片对象,用try-catch对异常处理,加载是时间间隔为10毫秒。

(3)repaint()方法,循环的调用paint()方法。

(4)publicListgetCars()、publicvoidsetCars(Listcars)这两个方法的作用是:

返回Car,即加Car移出,另一个是将获得Car赋给该类当中的成员变量。

(5)lauch()

该方法的作用就是:

创建是三个线程对象,分别是界面的绘制的、车子对象的创建、时间倒计时对象。

(6)其他的一些方法:

这些方法的作用就是盘对灯的颜色,然后将该类当中的成员变量附上该值。

3.随机产生车子线程类:

classCarThreadimplementsRunnable

该类的功能是实现Runnable接口功能:

在run()方法中,用while循环,在永真的条件下,将car对象添加到其中。

用try-catch处理异常,在产生异常的情况下,就输出该异常对象。

4.控制小车子行驶的线程类:

classCarRunThreadimplementsRunnable

控制的原理同上,再永真的while循环当中,产生Car对象,对其类型(所在

的位置)进行判断然后根据不同的线路将其移除(在满足条件的情况下)。

该类当中有一个方法:

privatebooleanhasObstructor(Carcar,Listcars),用来判断这个车子及其行驶的方向上是否有障碍物,在有和无的情况下分别作不同的处理。

5.时间倒计时:

publicclassPaintThreadimplementsRunnable

这个方法主要作用是对倒计时的时间进行根性,根性的周期在try-catch中进行控制,设置为1秒。

5.车子类:

classCar

该类当中的一个构造方法:

用一个随机数产生器产生随机0-3这四个随机整数,由这4个数来确定产生的车子的起始坐标,即确定车子的行驶方向。

同时,这里有6个方法对这些车子对象的3个成员变量进行赋值。

6.创建车子的类:

classCarFactory

该类当中只有一个方法,这个方法就是使创建一个Car类的对象,并返回这个类对象。

六、具体设计

各个类之间的关系:

主类:

TrafficLight

绘制窗口类的对象

该类父类:

Jframe

标签对象:

greenlight_label、

Luchelucheredlight_label

作为成员变量

文本框对象:

redlight_field、

greenlight_field

按钮对象:

btn_set

容器类的子类:

classLucheextendsJPanel

用循环创建Car类的对象

绘图类对象Graphicsg(闭屏获取图片)Graphicsg1(播放图片)

创建并启动3个线程对象

newPaintThread()newCarThread()newCarRunThread()

车运动的类CarRunThrea

时间倒计时(类):

产生小车的类:

PaintThreaCarThread

实现Runnable接口

实现Runnable接口

实现Runnable接口

同时调用了CarFactory类中的方法

创建并返回Car对象

以上各个类的具体实现如下:

1.Car类:

通过产生0-3之间的随机数,初始化3个成员变量。

3个成员变量

包含的方法

对应的方法的功能

车子所在横坐标privateintx

getX()、setX(intx)

获取横坐标、设置横坐标为当前获取的值

车子所在纵坐标privateinty

getY()、setY(inty)

获取纵坐标、设置纵坐标为当前纵坐标

车子行驶的方向

privateinttype;

getType()、

setType(inttype)

获取编号、设置编号为

当前编号(即车子的行驶方向)

2.产生车子的类:

classCarFactory

该类当中仅有一个静态方法:

publicstaticCargetCar()

执行的语句:

returnnewCar();

其功能就是穿件Car对象,同时返回该对象。

3.时间倒计时的类:

publicclassPaintThreadimplementsRunnable

变量j:

全局变量(记录显示的时间)

执行的方法:

publicvoidrun()

方法中执行了一个循环:

for(inti=0;i

try{

Thread.sleep(1000);//暂停1秒

}catch(InterruptedExceptione){

e.printStackTrace();//输出异常所在的位置

}

结合,在没有异常的情况下,即循环的周期为1秒(时间更新周期)。

在循环周期类:

由于程序运行的时间的影响,经调试分析:

设置的红绿灯的时间应大于5秒for(inti=0;i

if(i==0){//程序开始运行

j=0;//开始设置南北方向红灯亮,东西方向绿灯亮redStatus=true;

greenStatus=false;

}

elseif(i==redTimes){

j=0;//当时间周期到来时,两路口的交通灯也进行切换

redStatus=false;

greenStatus=true;

}

elseif(i==redTimes+greenTimes){

j=0;//实际是不能出现的状态(即所有方向上的灯都不

亮)

redStatus=false;

greenStatus=false;

}

repaint();

j++;//执行周期的记录

if(i==redTimes+greenTimes)

i=-1;

}

实现的功能是:

在执行周期内循环执行交通灯颜色的切换,在达到周期的前一秒,将计时变量重新设置到初始状态。

4.控制车子运动的类:

classCarRunThreadimplementsRunnable

方法一:

publicvoidrun()

外循环:

while(true)//条件为永真

内循环:

for(inti=0;i

实现的功能判断如下:

(以一个条件为例)

if(car.getType()==0)//对对象的类型进行判断

{

if(car.getX()>2000)

{//条件是已经超出了界面的边界范围,将其移除cars.remove(car);

i--;

continue;//结束本次循环跳转至下次循环

}

if((Luche.this.isGreenStatus()&&Math.abs(car.getX()-

210)<5)||hasObstructor(car,cars))

{continue;}//条件是:

//绿灯是是亮的但车距边界已小于

5像素或者是车子不可移动

else

{car.setX(car.getX()+5);}//在满足移动的条件下,将车子

的右移5个像素单位

}

这个进程的周期是:

Thread.sleep(50);//进程暂停50毫秒

方法二:

判断是否有障碍物

privatebooleanhasObstructor(Carcar,Listcars)

分别对4个方向进行判断(选择其一方向)

if(car.getType()==0){//西->东方向

for(inti=0;i

Carcar2=(Car)cars.get(i);//从已有的车子线程中取出下一个线程对象赋给当前新创建的对象

intdistance=(car2.getX()-car.getX());//判断这两个对象之间的距离if(car2.getType()==0&&distance<30&&distance>0)

returntrue;//没有障碍物的条件是:

两者距离在30像素之间

}

}

在不成立的条件下,返回false,但只用了一个。

因为在每次用到的时候,看上去是有4个判断,但真正只会执行其中一个(单线程)。

5.随机产生小车的线程

在while(true)循环体中执行:

添加车子:

cars.add(CarFactory.getCar());

进程的周期为1秒:

Thread.sleep((long)(Math.random()*1200));

6.绘制界面的类:

classLucheextendsJPanel

变量列表显示如下:

变量名、类型及修饰符

功能

privateBooleanredStatus

控制南北方向的红灯,初值为false

privateBooleangreenStatus

控制东西方向的绿灯,初值为false

privateintredTimes

记录红灯时间周期

privateintgreenTimes

记录绿灯的时间周期

intj=0

全局变量,记录执行次数

privateListcars

动态数组存储车子线程对象

方法列表显示如下:

方法名

功能

Luche()

构造方法,仅用来设置界面的背景颜色

paint()

创建的对象有:

Imageimage、Graphicsg、Colorc=g.getColor();//创建颜色类对象,并获取当期的颜色;

Carcar=(Car)cars.get(i);//用循环创建Car类对象,赋上的值是已存在的对象数组中的同类对象;

if(redStatus==true){//南北方向红灯亮

即:

根据对象的值,绘制交通灯的位置和颜色

publicvoid

setRedStatus(boolean

redStatus)

this.redStatus=redStatus;//给当前对象附上更新之后的值

publicboolean

isGreenStatus()

returngreenStatus;

publicvoid

setGreenStatus(boolean

greenStatus)

this.greenStatus=greenStatus;

publicint

getRedTimes()

returnredTimes;//获取文本框中的红灯设置时间

publicvoid

setRedTimes(int

redTimes)

this.redTimes=redTimes;//更新红灯设置时间

publicint

getGreenTimes()

returngreenTimes;

publicvoid

setGreenTimes(int

greenTimes)

this.greenTimes=greenTimes;

publicList

getCars()

returncars;//返回从动态数组中产生车子对象

Publicvoid

setCars(Listcars)

this.cars=cars;//将该时间点上的车子对象赋值给正在执行的车子线程

publicvoidlauch()

创建3个线程

newThread(newPaintThread()).start();

newThread(newCarThread()).start();

newThread(newCarRunThread()).start();

7.主类:

publicclassTrafficLightextendsJFrame

(1)含有的成员

①标签:

privateJLabelredlight_label=newJLabel("红灯时间:

秒");

privateJLabelgreenlight_label=newJLabel("绿灯时间:

秒");

②文本框:

privateJTextFieldredlight_field=newJTextField();

privateJTextFieldgreenlight_field=newJTextField();

③按钮

privateJButtonbtn_set=newJButton("设置");

④容器类的子类对象

privateLucheluche=newLuche();

(2)方法:

构造方法:

publicTrafficLight()

实现的功能是:

添加组件,

动作处理:

publicvoidactionPerformed(ActionEventarg0){//该方法对发生在按钮上的事件进行处理

//异常处理

try{

intredTimes=

Integer.parseInt(redlight_field.getText());//获取设置时间的文本框中的文本并转换成整形

intgreenTimes=

Integer.parseInt(greenlight_field.getText());

if(redTimes

greenTimes=redTimes;

elseif(redTimes>greenTimes)

redTimes=greenTimes;

//当获得了值之后就对开始设定的进行修改luche.setRedTimes(redTimes);

luche.setGreenTimes(greenTimes);

}catch(NumberFormatExceptione){}//异常处理

}

说明:

由于程序能够运行简单,在设置时间之后,将红绿灯的时间间隔均设置为等长的。

即用上述的

if(redTimes

greenTimes=redTimes;

elseif(redTimes>greenTimes)

redTimes=greenTimes;

解决该问题。

主方法功能:

newTrafficLight();//创建对象,通过构造方法的调用使程序运行

程序运行的结果:

1.未手动设置红绿灯的时间:

2.手动设置时间之后:

(1)第一组测试数据:

(2)第二组测试数据:

七、总结

Java课程设计编写的程序是不仅要实现一个单一的功能,而且是要对一个任务做多个操作,并将这些功能合理的组合到一起。

这样更加适用于对现实问题的解决能力。

比如,我所做的的课题:

十字路口红绿灯模拟,不仅要用GUI绘制图形,而且还要用两个线程分别对交通灯和车辆进行处理。

通过这样一次比较大的实验,提高了我将所学的各个知识点综合到一起应用,而且还学到了以前没有学到的知识,比如:

将java和数据库SQLserver相连接。

实现java语言对数据库的操纵。

令我印象最深的一点就是,在课程设计的时候,可以检查到自己平时学习的疏漏点。

比如:

在编写对时间计数的时候处理的情况少了一种

elseif(i==redTimes+greenTimes){

j=0;

redStatus=false;

greenStatus=false;

}

一旦,在文本框中输入数据的时候,程序就会运行错误,时间就异常的终止,导致红绿灯不能进行切换。

这个错误,让我明白了:

在编程时,对于时间的处理的时候要考虑全面,这样才能增加程序的健壮性。

但有时确实就不能考虑那么全面,所以就要反复调试(选择不同的测试数据)。

检错与改错的能力还是要靠多写一些程序,多分析,掌握经验。

在这次课程设计当中,通过对一个对象的功能的逐步分解、细化,在用类、方法来完成每一个小的细节,最终通过在组合实现总体的功能了。

通过这次课程设计,我也想向学校里提一些建议:

最重要的一点就是时间安排问题上,一个是时间安排的太少了,因为java课程设计要实现的功能是很多的,并且java的内容多;另一个就是时间安排的不合理,安排在最后两周,但这段时间会有很多课程要考试,所以还要有时间来复习,这样就更紧张,导致很多学生的程序不是自己来思考和编写的。

这样,课程设计也就不会达到预期的作用啦!

八、其它

程序设计可在Eclipse、JDK1.5或JBuilder环境下实现

九、参考资料

[1]

[2]

[3]

[4]

吕凤羽、马皓《JAVA程序设计》清华大学出版社耿祥义《JAVA课程设计》清华大学出版

黄小东《Java课程设计案例精编》中国水利水电出版社印旻《Java与面向对象程序设计》清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2