java交通灯管理项目
交通灯管理需求:
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
• 异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆---- 直行车辆
由西向而来去往南向的车辆---- 右转车辆
由东向而来去往南向的车辆---- 左转车辆
。。。
• 信号灯忽略黄灯,只考虑红灯和绿灯。
• 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
• 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
• 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
• 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
• 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
需求分析:
主要是面向对象的分析,分析一共有多少个对象.谁占有资源谁就提供方法.张老师还在其中讲了不少面向对象的分析,很实用.
首先需要有路: Road
package com.isoftstone.interview.traffic;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。
* 每条路线上随机增加新的车辆,增加到一个集合中保存。
* 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
* @author 张孝祥 www.it315.org
*
*/
public class Road {
//路线名称和交通灯名称是一致的
private List<String> vechicles = new ArrayList<String>();
private String name =null;
public Road(String name){
this.name = name;
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int i=1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);//1-9秒内不断的增加车辆
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if(vechicles.size()>0){
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();//用路线名称来查询并获取该名称的枚举对象然后判定是否为亮灯,要是亮灯就删除输出车辆
if(lighted){
System.out.println(vechicles.remove(0) + " is traversing !");//输出车辆里面包含了路线名称和i变量;
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
//利用12个方向的路线来判定该路灯是否为亮,如果灯亮那么就输出,否则就继续增加车辆并等待(线程继续循环)。
交通灯枚举类Lamp
package com.isoftstone.interview.traffic;
/**
* 每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
* 有如下一些方向上的灯,每两个形成一组,一组灯同时变绿或变红,所以,
* 程序代码只需要控制每组灯中的一个灯即可:
* s2n,n2s
* s2w,n2e
* e2w,w2e
* e2s,w2n
* s2e,n2w
* e2n,w2s
* 上面最后两行的灯是虚拟的,由于从南向东和从西向北、以及它们的对应方向不受红绿灯的控制,
* 所以,可以假想它们总是绿灯。
* @author 张孝祥 www.it315.org
*
*/
/**/
public enum Lamp {
/*每个枚举元素各表示一个方向的控制灯*/
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,true),N2W(null,null,true),W2S(null,null,true);
private Lamp(String opposite,String next,boolean lighted){
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}
/*当前灯是否为绿*/
private boolean lighted;
/*与当前灯同时为绿的对应方向*/
private String opposite;
/*当前灯变红时下一个变绿的灯*/
private String next;
public boolean isLighted(){
return lighted;
}
/**
* 某个灯变绿时,它对应方向的灯也要变绿
*/
public void light(){
this.lighted = true;
if(opposite != null){
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
}
/**
* 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
* @return 下一个要变绿的灯
*/
public Lamp blackOut(){
this.lighted = false;
if(opposite != null){
Lamp.valueOf(opposite).blackOut();
}
Lamp nextLamp= null;
if(next != null){
nextLamp = Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "-------->切换为" + next);
nextLamp.light();
}
return nextLamp;
}
}
控制器类LampController
package com.isoftstone.interview.traffic;
public class MainClass {
public static void main(String[] args) {
//产生12个方向的路线
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
//产生整个交通灯系统
new LampController();
}
}
利用控制器类来生成12条路。然后将车放入其中,再调用start方法。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0071/2608/42598331-a2ab-307d-bc63-ae4289950baf-thumb.png)
- 大小: 49.1 KB
分享到:
相关推荐
总之,通过研究"java交通灯管理系统源码和文档",你可以深入了解Java编程语言,学习面向对象设计,以及如何在实际项目中运用这些知识。这是一个极好的实践平台,能帮助你从理论走向实践,提升编程技能。
Java交通灯简单GUI编程是一个基础的程序设计项目,它展示了如何使用Java Swing库来创建一个图形用户界面(GUI),模拟交通灯的周期性变化。在这个项目中,我们通常会涉及三个核心类:计数类、监听类和基于Swing的...
Java交通灯程序是一种模拟现实生活中交通信号灯运作的软件应用,通常用于教学目的,帮助学生理解和实践面向对象编程、多线程以及事件处理等Java核心概念。在这个大学JAVA课的作业中,学生们被要求设计一个能够模拟...
**JAVA交通灯指挥系统**是基于Java编程语言开发的一个实用示例,它融合了图数据结构、观察者模式以及策略模式等核心概念。这个系统旨在模拟真实的交通灯控制逻辑,帮助初学者理解如何在实际项目中应用这些重要的编程...
根据提供的文件信息,我们可以推断出这是一个关于Java项目的交通灯管理系统的案例。下面将围绕这个项目的几个关键方面进行深入解析。 ### 一、项目概述 交通灯管理系统是一种典型的基于计算机技术实现的城市交通...
在编程领域,交通灯模拟是一个常见的练习项目,用于教授并发控制和状态管理等概念。本文将深入探讨如何使用Java语言来实现一个简单的交通灯控制系统。交通灯系统是城市交通流的关键组成部分,它通过红绿黄三色灯的...
交通灯管理系统是一个典型的Java应用程序示例,用于模拟和控制城市交叉路口的交通信号灯运作。在本教程中,你将学习如何使用Java编程语言来设计和实现这样一个系统,以提高城市交通的效率和安全性。这个视频教程可能...
交通灯管理系统是一个基于JAVA技术开发的应用程序,主要目的是实现城市交通信号灯的自动化控制与管理。这个系统在法国外包项目中被开发出来,通过网络搜集相关信息并进行打包整合,体现了JAVA在分布式系统和网络应用...
在本项目中,我们关注的是一个使用Java编程语言实现的交通灯模拟程序。交通灯控制系统是城市交通管理的重要组成部分,它有效地协调车辆和行人的流动,确保道路安全。这个Java源代码提供了一个基础的交通灯模型,适用...
总结起来,这个Java交通灯项目涵盖了枚举、对象状态管理、时间延迟、多线程和同步等核心概念。通过这样的实践,我们可以加深对Java语言特性和面向对象编程的理解,同时也能了解到交通灯系统的工作原理。当然,这只是...
总的来说,【交通路灯管理系统】是一个综合运用JAVA多线程、面向对象编程、并发控制、数据处理以及软件工程实践的项目。通过学习和理解这个系统,开发者可以深化对JAVA编程、交通管理以及软件设计的理解,提升自己的...
在本项目"Java Swing 图形界面 交通灯"中,我们将探讨如何利用Java Swing来设计一个模拟交通灯系统,让用户通过图形化的方式了解交通灯的工作流程。 首先,交通灯控制系统通常包括红、黄、绿三种颜色的灯,每种灯...
总的来说,这个Java交通信号灯项目涵盖了多线程编程、状态机设计、定时任务设置以及可能的配置文件读取等核心知识点,对于学习和提升Java编程技能具有很好的实践价值。通过这样的项目,开发者可以深入理解并发编程的...
《交通灯管理系统视频教程_源代码与PPT》是由传智播客的知名讲师张孝祥主讲的一门课程,旨在帮助程序员们理解和掌握交通灯管理系统的开发技术,特别是针对那些正在寻求7K月薪职位的面试者。这门课程不仅包含视频教程...
交通灯模拟程序是一种基于计算机编程的实践项目,主要用于教授学生如何使用特定的编程语言,如JAVA,来实现复杂的逻辑控制和多线程技术。在这个项目中,学生将学习到如何设计一个模拟真实世界交通规则的系统,这涉及...
【五星路口交通灯控制系统(Java版)】是一个基于Java编程语言实现的交通灯控制系统,专为模拟和管理复杂的交叉路口交通流而设计。这个系统利用Java的面向对象特性,为每个交通灯方向创建独立的对象,以实现灵活的...
通过深入研究这份资源,学习者不仅可以掌握交通灯管理系统的实现细节,还能加深对SSM框架的理解,提升实际项目开发经验,为未来的课程设计或毕业设计提供有力支持。同时,这也有助于锻炼解决实际问题的能力,增强...
总的来说,模拟交通灯的Java源代码项目是一个很好的学习实践,涵盖了枚举、类设计、事件处理、定时任务以及GUI编程等基础编程概念。通过这个项目,你可以提高自己的编程技能,并对交通管理系统有更深入的理解。
从提供的资源来看,`交通灯管理系统.doc`可能是项目的设计文档,详述了系统的架构、功能需求和实现方案。`交通灯系统.ppt`可能是介绍或演示文稿,用于向相关人员展示系统的工作原理和优势。而`traffic`可能是源代码...
同时,Java的线程机制使得可以并行控制多个交叉口的信号灯,实现更复杂的交通管理。 并发处理是此项目的核心部分。在Java中,可以使用Thread类或Runnable接口来创建并运行线程。每个交通信号灯可以视为一个独立的...