08 交通灯管理系统

本文基于张老师的交通灯管理系统视频讲解,详细介绍了系统的设计与实现。项目使用多线程模拟异步车流生成,信号灯分为直行、左转、停车三种状态,不考虑黄灯。系统包括8条车流,右转车辆不受控制。重点在于多线程的协同工作,如信号灯线程、放行线程和监视器线程,确保车辆有序行驶。通过接口、信号灯类、车流类、放行类和监视器类的模块化设计,实现了系统的功能。运行结果符合预期,展示了多线程控制下的交通灯管理效果。
摘要由CSDN通过智能技术生成

笔者观看了张老师关于交通灯管理系统的视频讲解,按照要求自己重新编写了程序。

1. 项目需求

模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
(1)异步随机生成按照各个路线行驶的车辆。
例如:
       由南向而来去往北向的车辆 ---- 直行车辆
       由西向而来去往南向的车辆 ---- 右转车辆
       由东向而来去往南向的车辆 ---- 左转车辆
       。。。
(2)信号灯忽略黄灯,只考虑红灯和绿灯;
(3)应考虑左转车辆控制信号灯,右转车辆不受信号灯控制;
(4)具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆;
(5)每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟);
(6)随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置;
(7)不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

2. 需求分析

(1)点:异步生成要求我们使用多线程,每条车流都要有自己的线程。车辆生成间隔可以用Thread.sleep(new Random()...)来模拟;
(2)点:不考虑黄灯,说明信号灯总体上只有两个状态:放行和不放行;
(3)点:右转车辆不受信号灯控制,因而右转车辆的控制可以省略,实际上只需考虑8条车流;
(4)点:这个要求规定了信号灯的有限状态机。按照日常生活经验,左转灯要单独列出。这样每个方向上的灯都需显示三种信号:直行,左转,停车。状态机采取南北直行,全向左转,东西直行的循环,以保证任一条道路上没有对向驶来的车流;因为信号灯需要定时转换信号,所以需要单列一个信号灯线程,使用线程休眠方式来定时;
(5)点:车辆驶出道路需要1秒,需要创建放行线程定时放行车辆并刷新车辆数;
(6) 点:时间间隔通过相应线程的休眠时间来控制;
(7)点:为了打印Log,需要单列一个监视器线程,监视8条车流的情况。无论是新车出现还是旧车放行导致剩余车辆数有变化,都需要打印变化情况。
综上,这个项目的难点是同时运行的线程较多,而且不同线程的打印语句有可能互相干扰,导致LOG上输出的语句顺序混乱。张老师用到了java.util.concurrent包中的并发线程工具。这些工具相比于Thread类中的方法,更为简洁和安全。不过笔者还是想用自学视频中讲到的多线程基本语句来写。这样做在代码上更繁琐一些,但是却更熟悉。

3. 模块分析

整个程序涉及到一个接口(常数标签)和五个类(main类,信号灯类,车流类,放行类和监视器类)。

3.1 接口

将一些常数写进接口里,便于后面的模块共享里面的常数。
import java.util.*;

//用常数代替字符串作为标签
interface Tag
{
    //直行信号
    public final int PASS = -1;
    //左转信号
    public final int LEFT_PASS = -2;
    //停车信号
    public final int STOP = -3;
    //信号间隔(秒)
    public final long LAMP_PERIOD = 3;
    //任一道路上的车辆出现间隔(最小值,秒)
    public final double CAR_PERIOD_MIN = 2;
    //最大值(秒)
    public final double CAR_PERIOD_MAX = 3;
}

3.2 信号灯类

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
毕业设计,基于SpringBoot+Vue+MySQL开发的社区医院管理系统,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的社区医院管理系统实现了病例信息、字典表、家庭医生、健康档案、就诊信息、前台、药品、用户、用户、用户表等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让社区医院管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:社区医院管理系统;信息管理,时效性,安全性,MySql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值