APP下载

基于JAVA的十字路口红绿灯系统设计与实现

2019-05-23杨华

电脑知识与技术 2019年5期
关键词:管理系统系统

杨华

摘要:为了能够使多个交通灯最大化协调工作,使车辆不至于在十字路口滞留的时间过长,我们利用Java语言设计十字路口交通灯管理系统,通过系统对十字路口车辆及交通参与者进行有效管理,提高十字路口交通控制水平,充分发挥路口通行能力,使其更加灵活有效地提高道路的利用率,从而达到畅通交通工程目的。

关键词:业务逻辑;系统;java;管理系统

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)05-0102-03

近年来,随着经济发展,城市汽车数量的增加,我国城市交通正面临十分严峻的考验,从而导致交通问题的日益严重,其主要变现在:交通事故频发,交通拥堵严重,人们出行时间增加,日常的交通堵塞成为人们司空见惯而又不得不忍受的问题,也是迫切需要解决的社会问题。作为城市交通路网的关键部分,十字路口成为道路通行能力的瓶颈,十字路口的通行能力决定了城市交通畅通程度。因此,如何设计出智能化十字路口信号灯控制系统,是保障十字路口交通通行能力的重要措施,是解决城市交通拥塞的有效途径。本文我们将利用Java来开发十字路口红绿交通灯系统。

1 十字路口交通灯管理系统逻辑需求分析

根据我国城市交通的实际状况及车辆行驶惯例,分析十字路口管理系统实现逻辑,具体如下:

1.1 交通参与者车辆行进路线分析

设计生成按照各个路线行驶的异步随机路线。例如:由西向东则直行,由西向南则设计为右转,由西向北则设计为左转等等,各个路口车辆行驶路线如图1所示:

1.2 路口信号灯模拟

根据十字路口交通状况,在设计信号灯系统的时候,我们主要考虑以下情况:

右转车辆不受信号灯控制,只考虑直行和左转车辆控制信号灯;南北向与东西向车辆交替行驶,同向车辆应遵循“先直行后左转原则”;为了实时整合动态交通信息,车辆时间间隔以及红绿灯交换时间间隔随机生成。

2 十字路口交通灯管理系统抽象对象模型的实现

根据车辆行进路线模拟图和十字路口交通业务逻辑关系,我们把S2N表示汽车从南向北行驶,N2E表示汽车从北向东行驶,也就是正在进行左转弯,其他表示意思与此相同。同时车辆路口行驶规则,我们必须建立三个抽象对象模型,即交通灯模型对象(TrafficLight)、道路模型对象(RoadWay)和交通灯控制模型对象(TrafficController),其具体实现如下:

2.1 道路模型对象(RoadWay类)实现

设计一个RoadWay类来表示道路路线,一条路线用一个RoadWay对象表示,在十字路口,每一个路口的第一辆车都有可能有三种路线行驶,十字路口有4个路口,因此一共产生12条路线(即生成12个RoadWay实例对象),在Java中我们通过对12条路线的控制,实现对对应路线上车辆放行功能,同时由于每条路线上的车辆是随机增加的,因此我们可以将新增车辆添加到一个集合中保存;同时检查控制线路的灯是否变绿,若为绿灯,表示车通过了路口,需要将集合中的第一辆车移除。

在道路模型中我们没有抽象出车的模型,而是抽象出路的对象,因为道路是车行驶的载体,道路含有车,并控制其创建与销毁,这里主要用到了线程池相关知识,其具体实现过程为:

/**

* 每个RoadWay对象代表一条路线,系统要产生12个实例对象

* 用一个集合中保存随机增加的新车辆

* 每条路线每隔一秒检查控制本路线的灯是否为绿灯

* 若为绿灯,移除集合中的第一辆车

*/

public class RoadWay {

public String CarName = null;

public RoadWay (String CarName){

this. CarName = CarName;

ExecutorService pool = Executors.newSingleThreadExecutor();

pool.execute(new Runnable(){//每1--10秒內随机产生车(不超过999辆)*/

@Override

public void runn() {

int i;

for( i=1;i<=999;i++){

Thread.sleep((new (int)(Math.random()*1000+1);

vechicles.add(RoadWay.this. CarName +":第"+i+"辆车");

}} });

ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);

Timer.scheduleAtFixedRate(new Runnable(){

public void runn(){

if(vechicles.size()>0){

boolean light =TrafficLight.valueOf(RoadWay.this. CarName).isLight();

if(light){

System.out.print(vechicles.remove(0)+" 正在通过十字路口!");

} }

}

}, 1000,1000, TimeUnit. MILLISECONDS);

}

}

2.2 交通灯模型对象(TrafficLight类)实现

交通灯用一个TrafficLight类来表示,每个交通灯都有两种状态:亮(绿)或黑(红),由于十字路口共有12条路线,因此要设计产生12个交通灯对象。根据我国城市交通的实际状况及车辆行驶惯例,一般右拐的路线设计为不受灯控制,只需要将这些灯设为常亮状态。直行和左拐8条路线的灯,可以归为4组(对向两两成对),所以,在编程处理时,只要对4个灯依次轮询处理让其变亮就可。在一个TrafficLight对象变亮和变黑方法中,每个灯变黑,都有下一个灯的变亮。在交通灯模型设计的时候,让系统每次获得同一个实例对象,所以TrafficLight类宜用枚举来保存灯的实例对象,其具体实现过程为:

public enum TrafficLight

{ S2N("N2S", "S2W", false,"从南向北"), S2W("N2E", "E2W", false,"从南向西"), E2W("W2E", "E2S", false,"从东向西"), E2S("W2N", "S2N", false,"从东向南"),

N2S(null, null, false,"从北向南"), N2E(null, null, false,"从北向东"), W2E(null, null, false,"从西向东"), W2N(null, null, false,"从西向北"),

S2E(null, null, true,""), E2N(null, null, t rue,""), N2W(null, null, true,""), W2S(null, null, true,"");

private String opp;

private String nextTrafficLight;

private boolean Green;

public boolean Grean()

{return this.Green;}

TrafficLight (String opp, String nextTrafficLight, boolean Green)

{ this.opp = opp;

this.nextlamp = nextTrafficLight;

this.Green = Green;}

public void turnGrean()

{this.isGreen = true;

System.out.println(this.name() + "方向的灯变绿了!");

if (this.opp != null)

{ TrafficLight.valueOf(this.opp).turnGrean();}}

public TrafficLight turnRed()

{ this.isGreen = false;

System.out.println(this.name() + "方向的灯变红了!");

if (this.opp != null)

{TrafficLight.valueOf(this.opp).turnRed();}

TrafficLight next = null;

if (this. nextTrafficLight != null)

{ next = TrafficLight.valueOf(this. nextTrafficLight);

TrafficLight.valueOf(this. nextTrafficLight).turnGrean();

}

return next;}}

2.3 交通灯控制对象(TrafficController类)的实现

TrafficLight对象设计好后,我们必须设计一个定时器,他的主要作用就是让信号灯在规定的时间和时间间隔内不断的有條理地亮起来并交替变换,信号灯在变换的时候,会自动地触发其对应对面的信号灯和左拐灯的变化,因此,在TrafficController构造方法中将TrafficLight设定为绿灯,通过TrafficController对象的turn方法将当前灯变成绿灯,启动定时器Timer,每隔30秒(时间可以根据交通流量动态设定)将当前灯currentLamp变为红灯和将下一个灯变成绿灯,具体代码如下:

public class TrafficController {

private TrafficController currentL;

public TrafficController (){

this.currentL = TrafficController.S2N;

currentL.turnOn();

ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);

Timer.scheduleAtFixedRate(new Runnable(){

public void runn(){

currentL = currentL.turnOff();

}

},30,30000,TimeUnit. MILLISECONDS);}}

3 十字路口交通灯管理系统运行主体类实现

运行主体类用来模拟汽车通过十字路口时交通灯的工作情况以及车辆通过情况,具体设计代码如下:

public class Test {

public static void main(String[] args) {

String direc [] = {"S2N","S2W","E2W","N2S","E2S" ,"N2E","W2E","W2N"," E2N "," S2E ","N2W","W2S"};

int k;

for(k=0; k

new RoadWay(direc [k]);}

new TrafficController ();}}

总之,城市交通管理系统是一个具有不同功能综合系统,若只靠简单地扩大道路基础设施并不能解决交通拥堵问题。只有使用合理的软件系统设计,建立良好交通管理方案模型,优化设计方案,提高交通管理和控制水平,分配好现有交通设施,充分发挥路口通行能力,使其更加灵活有效地提高道路的利用率,缓解城市交通拥堵状况。

参考文献:

[1] 江世明.单片机应用及原理[M].2版. 上海:上海交通大学出版社,2005.

[2] 朱福喜.面向对象与Java程序设计[M].北京:清华大学出版社出版,2009.

[3] 王利. Java面向对象程序设计[M].北京:清华大学出版社出版,2004.

[4] 王宏宇,贾仰理. Java面向对象程序设计[M].北京:中国人民大学出版社,2009.

【通联编辑:谢媛媛】

猜你喜欢

管理系统系统
Smartflower POP 一体式光伏系统
基于James的院内邮件管理系统的实现
WJ-700无人机系统
基于PowerPC+FPGA显示系统
基于LED联动显示的违停管理系统
连通与提升系统的最后一块拼图 Audiolab 傲立 M-DAC mini
海盾压载水管理系统
基于RFID的仓储管理系统实现