• Servlet+AJAX实现的模拟电梯调度


    需求产生:

      大三下学期天天在学校的同一栋教学楼上课,每天要等四次电梯,有次等电梯无聊了,就想到电梯的运行逻辑该如何用程序来表达呢?

    问题描述:

      大学的那栋楼有21层,不过在页面中画21层有点密,所以只画了9层;

      同时有三座电梯等待调度;

      按钮分为楼层按钮和电梯内按钮,电梯内按钮有楼层数字和关门按钮;

      运行的要求:

        1.电梯空闲时,电梯内按钮被点击,对应按钮被点亮,需要按关门键自动运行到最近的楼层;

        2.电梯正在运行过程中,电梯内按钮被点击,如果离电梯更近,需要自动更改电梯目的停靠楼层为新添加的请求楼层,否则电梯还是到达原定楼层;

        3.与电梯运行状态相反的电梯内按钮将不会被响应,比如从四楼向上运行的电梯,1、2、3楼按钮无法点击;

        4.楼层按钮请求因为三个电梯共享按钮请求,所以应该设计一个合理的调度选择;

          ①最优先选择这样的电梯:正在前往本楼层的电梯,如5楼向上的按钮被点击了,电梯B要从3楼到9楼,那么优先选择电梯B,且会先停靠5楼;

          ②其次选择这样的电梯:空闲状态的电梯,如果没有符合①中条件的电梯,那么随机选择一个空闲状态的电梯(这里可以优化的,选择最近的电梯)运行到当前楼层接人;

          ③如果没有以上两种条件的电梯存在,那么保持请求状态,直到以上两种条件之一出现,如1楼的向上请求,但电梯ABC都在从2楼向上运行,那么选择最                           先完成任务停止的电梯到1楼接人。

        5.电梯到达某一层,电梯内亮着的按钮被熄灭,楼层按钮有两种情况:

          ①当前电梯到达这一层楼之后没有下一层楼的目标了,更改状态为空闲,向上和向下的按钮都熄灭(此条是因为4-②中如果向下请求,但电梯从下面运行上来时,熄灭的应该是向下的按钮);

          ②当前电梯有继续运行的下一层目标,只熄灭与当前运行方向相同的楼层按钮。

    界面:

      

    包结构:

     

    1.po层:

      FutureFloor作为实体类,使用五个TreeSet保存按钮请求数据(因为TreeSet 有序,唯一),这五个TreeSet分别保存,楼层上升请求、楼层下降请求、三个电梯内按钮请求;

      FutureFloorFactory,实体类的工厂类;

    2.service层

      Service:封装一些方法;

    3.servlet:

      按顺序分别为:

      电梯停靠楼层时触发的响应;

      电梯开始运行时触发的响应;

      电梯内关闭按钮被点击时触发的响应;

      设置编码的过滤器;

      电梯内按钮响应;

      楼层按钮响应;

      向前端页面返回电梯当前状态;

    缺陷:

      其实保存电梯状态只在前端保存,然后传递就可以了,后台保存需要每次操作更改状态,容易造成纰漏,且没有页面保存的实时性;

    源码:

     https://files.cnblogs.com/files/liumaowu/elevator.zip

        

  • 相关阅读:
    delegate和event的区别 (zz)
    delegate和event的区别 (zz)
    delegate和event的区别 (zz)
    delegate和event的区别 (zz)
    以太坊网络服务分析
    以太坊:P2P网络数据处理流程
    以太坊:P2P网络数据交互
    以太坊虚拟机的基本介绍
    Solidity概述及基本代码展示
    Solidity编译器和简单调试
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9258943.html
Copyright © 2020-2023  润新知