当前位置:文档之家› 电梯调度算法

电梯调度算法

课程设计报告电梯调度算法学院医药信息工程学院专业年级 2008 学生姓名学号指导教师2011-7-12电梯调度算法设计报告一.LOOK(查找)调度(电梯)电梯算法,操作系统学术名为SCAN算法。

磁臂仅移动到请求的最外道就回转。

反方向查找服务。

1.问题描述:说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。

具体而言,如果电梯现在朝上运动,*如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。

*设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语言编程,定义合适的数据结构。

最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。

* 设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。

把这个结构体数组作为程序的输入,*通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。

2.算法设计:本程序用java语言、eclipse平台编写。

(1)算法思想:本算法只设计了一辆电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。

如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼驻停。

同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。

随后再搭载去反方向的乘客。

实现电梯的升降操作。

二.1.总程序流程图如下2.代码如下:package Test1;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;public class Lifta{/*** @param args*/public static void main(String[] args){// TODO Auto-generated method stubBrick brick=new Brick();}}class Brick{ //方块类public int octime=0; //计算开关门事件。

public int j=0;public String closedoor="关门";public String close="关";public String open="开";JFrame frame=new JFrame("电梯调度算法");JPanel pan=new JPanel();JButton but=null;JButton sign=new JButton(+j+"楼");JButton openclose=new JButton(closedoor+"");JButton openkey=new JButton(open+"");JButton closekey=new JButton(close+"");public ArrayList blackBrick;; //brick用来依次存放button,程序用button显示蓝色表示有电梯的当前位置。

public ArrayList controlBrick; //controlBrick用来依次存放button,表示每层楼电梯口的是上键和下键,程序用button显示绿色表示对应键被按下。

public int[][] controlTable; //用二维数组controlTable与电梯口的上下键对应,其中如果值1表示button应显示绿色,值0表示button应显示灰色。

public ArrayList numberBrick; //numberBrick用来依次存放button,程序用button显示桔黄色表示电梯内的数字键被按下。

public int[]table; //用二维数组table与电梯内的数字键对应,其中如果值1表示button应显示桔黄色,值0表示button应显示灰色。

public int[] upSignalTable; //纪录向上任务的任务数组,值为1表示相应位的上键被按下。

public int[] downSignalTable; //纪录向下任务的任务数组,值为1表示相应位的下键被按下。

public Timer timer; //计时器。

public LiftThread lift; //控制每个电梯的线程数组。

//================================================构造方法(下)初始化===========================================================//public Brick(){sign.setBounds(0, 0, 80, 40); //起始位置//开关门部分openclose.setBounds(80, 0, 80, 40);openclose.setBackground(Color.yellow);openkey.setBounds(160, 0, 80, 40);openkey.addActionListener(new OpencolseListener()); //开门按钮添加事件closekey.setBounds(240, 0, 80, 40);closekey.addActionListener(new OpencolseListener()); //关门按钮添加事件pan.setLayout(null); //画布绝对定位Font fnt=new Font("Serief",Font.ITALIC,15); //设置字体样式//实例化数组numberBrick=new ArrayList(10);blackBrick=new ArrayList(10);controlBrick = new ArrayList(10);controlTable = new int[10][2];for (int i = 0; i < 10; i++)for (int j = 0; j < 2; j++)controlTable[i][j] = 0;table = new int[10];for (int i = 0; i < 10; i++)table[i] = 0;upSignalTable = new int[10];downSignalTable = new int[10];for (int i = 0; i < 10; i++) {upSignalTable[i] = 0;downSignalTable[i] = 0;}//********************画图************************ for(int i=10;i>0;i--){//最左边黑色列but=new JButton();but.setFont(fnt);but.setBounds(0, (11-i)*40, 80, 40);but.setBackground(Color.BLACK);blackBrick.add(but);pan.add(but);//显示楼层but=new JButton(+i+"楼");but.setFont(fnt);but.setBounds(80, (11-i)*40, 80, 40);but.addActionListener(new NumberListener(i));but.setBackground(Color.gray);numberBrick.add(but);pan.add(but);//向上键but=new JButton("上");but.setFont(fnt);but.setBounds(160, (11-i)*40, 80, 40);if(i!=10)but.addActionListener(new UpListener(i));but.setBackground(Color.gray);controlBrick.add(but);pan.add(but);//向下键but=new JButton("下");but.setFont(fnt);but.setBounds(240, (11-i)*40, 80, 40);if(i!=1)but.addActionListener(new DownListener(i));but.setBackground(Color.gray);controlBrick.add(but);pan.add(but);}//*******************运行部分******************pan.add(sign);pan.add(openclose);pan.add(openkey);pan.add(closekey);frame.add(pan);frame.setSize(329, 479);lift = new LiftThread();frame.setVisible(true);frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);}//====================================================构造方法(上)=======================================================////*************************************************填充方块和设置方法*******************************************************public void DrawBrick() { //重新刷新整个table,使每个button显示应该的颜色。

相关主题