需求产生:

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

问题描述:

  大学的那栋楼有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

    

Servlet+AJAX实现的模拟电梯调度的更多相关文章

  1. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  2. 电梯调度编写(oo-java编程)

    第二单元的问题是写一个关于电梯调度的程序. 需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 主要锻炼学生的多线程程序 ...

  3. OO电梯调度

    告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可 ...

  4. 自己动手C#模拟电梯的运行V1.0

    电梯调度有很多种模式,参见http://www.cnblogs.com/jianyungsun/archive/2011/03/16/1986439.html 1.1先来先服务算法(FCFS) 先来先 ...

  5. 【软件工程】电梯调度的初步实现 李亚文&&郭莉莉

    一.开门见山,代码粘 using System; using System.Collections.Generic; using System.Data; using System.Drawing; ...

  6. 电梯调度--c++--软件工程

    一.设计思路 (1)将乘客要去的楼层数存起来. (2)假设yi为乘客要爬楼层数之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)| (3)比较y1到y18 ...

  7. WPF界面设计技巧(7)—模拟电梯升降的缓动动画

    原文:WPF界面设计技巧(7)-模拟电梯升降的缓动动画 如同Flash一样,WPF的亮点之一也在于其擅于表现平滑的动画效果,但以移动动画来说,仅凭简单的起始位置.目标位置,所产生的动画仍会非常生硬,这 ...

  8. OO第二单元总结(多线程的电梯调度)

    经过第一单元作业的训练,在做第二单元的作业的时候,要更加的有条理.但是第二次作业多线程的运行,带来了更多的运行的不确定性.呈现出来就是程序会出现由于线程安全问题带来的不可复现的bug.本单元的作业也让 ...

  9. 电梯调度系统(界面由C图形库编绘)

    1.编程题目 电梯调度系统 2.结对编程组员 黄冠译,刘畅 3.编程语言 C语言图形库 4题目要求 编写人员:刘畅,黄冠译 代码如下: # include <stdio.h> # incl ...

随机推荐

  1. Tcp客户端构建流程

    tcp客户端构建流程 tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机.查手机卡.设置铃声.等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多 示 ...

  2. ubuntu18.04 设置环境变量

    1.第一步:命令行输入 sudo gedit /etc/profile 2.第二步:将你想要设置环境变量的内容追加到文件结尾 例如:export JAVA_HOME=/usr/java/latest ...

  3. TensorFlow——CNN卷积神经网络处理Mnist数据集

    CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...

  4. This page includes a password or credit card input in a non-secure context. A warning has been added

    此页面包含非安全上下文中的密码或信用卡输入.URL栏中添加了一个警告.有关更多信息,请参阅https://goo.gl/zmWq3m. 因为你的页面里面有input type是password,谷歌浏 ...

  5. 将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

  6. 洛谷 P1407 稳定婚姻

    问题描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关.25岁的姗姗和男友谈恋爱半年就结婚,结婚不到两 ...

  7. 洛谷 P4827 [国家集训队] Crash 的文明世界

    题目描述 ​ 给你一棵 n 个点的树,对于树上的每个节点 i,求 \(\sum_{j=1}^ndis(i,j)^k\).其中 \(dis(i,j)\) 为两点在树上的距离. 输入格式 ​ 第一行两个整 ...

  8. python学习笔记(十二)随机数模块

    import random,string print(random.randint(1,199))#1-199随机取一个整数,包含199 print(string.digits)#所有的数字0-9 p ...

  9. windows server IIS启用Windows authentication

    双击打开IIS网站的authentication,如果有Windows authentication,直接右键启用即可,如果没有的话需要先安装一下Windows authentication,Micr ...

  10. eclipse 启动 tomcat 报错:Server mylocalhost was unable to start within 45 seconds

    这个专门转载一篇博文也是为了讽刺一下自己二逼的程序员职业,哈哈. eclipse启动tomcat服务器报错:Server mylocalhost was unable to start within ...