首页 电梯调度算法

电梯调度算法

举报
开通vip

电梯调度算法课程设计报告电梯调度算法电梯调度算法设计报告一.LOOK(查找)调度(电梯)电梯算法,操作系统学术名为SCAN算法。磁臂仅移动到请求的最外道就回转。反方向查找服务。问题描述:说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺...

电梯调度算法
课程设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 电梯调度算法电梯调度算法设计报告一.LOOK(查找)调度(电梯)电梯算法,操作系统学术名为SCAN算法。磁臂仅移动到请求的最外道就回转。反方向查找服务。问题描述:说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序 流程图 破产流程图 免费下载数据库流程图下载数据库流程图下载研究框架流程图下载流程图下载word 。设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。把这个结构体数组作为程序的输入,*通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。算法设计:本程序用java语言、eclipse平台编写。1)算法思想:本算法只设计了一辆电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼驻停。同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。随后再搭载去反方向的乘客。实现电梯的升降操作。二.1.总程序流程图如下NYYYNYNYNYNNYN代码如下:packageTest1;importjava.awt.Color;importjava.awt.Container;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.TextField;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjava.util.*;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.Timer;publicclassLifta{/**@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubBrickbrick=newBrick();}}classBrick{//方块类publicintoctime=0;//计算开关门事件。publicintj=0;publicStringclosedoor="关门";publicStringclose="关";publicStringopen="开";JFrameframe=newJFrame("电梯调度算法");JPanelpan=newJPanel();JButtonbut=null;JButtonsign=newJButton(+j+"楼");JButtonopenclose=newJButton(closedoor+"");JButtonopenkey=newJButton(open+"");JButtonclosekey=newJButton(close+"");publicArrayListblackBrick;;//brick用来依次存放button,程序用button显示蓝色表示有电梯的当前位置。publicArrayListcontrolBrick;//controlBrick用来依次存放button,表示每层楼电梯口的是上键和下键,程序用button显示绿色表示对应键被按下。publicint[][]controlTable;//用二维数组controlTable与电梯口的上下键对应,其中如果值1表示button应显示绿色,值0表示button应显示灰色。publicArrayListnumberBrick;//numberBrick用来依次存放button,程序用button显示桔黄色表示电梯内的数字键被按下。publicint[]table;//用二维数组table与电梯内的数字键对应,其中如果值1表示button应显示桔黄色,值0表示button应显示灰色。publicint[]upSignalTable;//纪录向上任务的任务数组,值为1表示相应位的上键被按下。publicint[]downSignalTable;//纪录向下任务的任务数组,值为1表示相应位的下键被按下。publicTimertimer;//计时器。publicLiftThreadlift;//控制每个电梯的线程数组。//================================================构造方法(下)初始化===========================================================//publicBrick(){sign.setBounds(0,0,80,40);//起始位置开关门部分openclose.setBounds(80,0,80,40);openclose.setBackground(Color.yellow);openkey.setBounds(160,0,80,40);openkey.addActionListener(newOpencolseListener());//开门按钮添加事件closekey.setBounds(240,0,80,40);closekey.addActionListener(newOpencolseListener());//关门按钮添加事件pan.setLayout(null);//画布绝对定位Fontfnt=newFont("Serief",Font.ITALIC,15);//设置字体样式实例化数组numberBrick=newArrayList(10);blackBrick=newArrayList(10);controlBrick=newArrayList(10);controlTable=newint[10][2];for(inti=0;i<10;i++)for(intj=0;j<2;j++)controlTable[i][j]=0;table=newint[10];for(inti=0;i<10;i++)table[i]=0;upSignalTable=newint[10];downSignalTable=newint[10];for(inti=0;i<10;i++){upSignalTable[i]=0;downSignalTable[i]=0;}//********************画图************************for(inti=10;i>0;i--){最左边黑色列but=newJButton();but.setFont(fnt);but.setBounds(0,(11-i)*40,80,40);but.setBackground(Color.BLACK);blackBrick.add(but);pan.add(but);显示楼层but=newJButton(+i+"楼");but.setFont(fnt);but.setBounds(80,(11-i)*40,80,40);but.addActionListener(newNumberListener(i));but.setBackground(Color.gray);numberBrick.add(but);pan.add(but);向上键but=newJButton("上");but.setFont(fnt);but.setBounds(160,(11-i)*40,80,40);if(i!=10)but.addActionListener(newUpListener(i));but.setBackground(Color.gray);controlBrick.add(but);pan.add(but);向下键but=newJButton("下");but.setFont(fnt);but.setBounds(240,(11-i)*40,80,40);if(i!=1)but.addActionListener(newDownListener(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=newLiftThread();frame.setVisible(true);frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);}//====================================================构造方法(上)=======================================================////*************************************************填充方块和设置方法*******************************************************publicvoidDrawBrick(){//重新刷新整个table,使每个button显示应该的颜色。for(inti=1;i<=10;i++){for(intj=0;j<10;j++)((JButton)blackBrick.get(j)).setBackground(Color.black);((JButton)blackBrick.get(10-lift.number)).setBackground(Color.blue);}}publicvoidDrawControlBrick(){//将所电梯口的上下键全部重新按当前状态显示颜色。for(inti=0;i<10;i++)for(intj=0;j<2;j++)if(controlTable[i][j]==1){((JButton)controlBrick.get(i*2+j)).setBackground(Color.green);}else{((JButton)controlBrick.get(i*2+j)).setBackground(Color.gray);}}publicvoidDrawNumberBrick(){//将所有电梯内的数字键重新按当前状态显示颜色。for(inti=0;i<10;i++)if(table[i]==1)((JButton)numberBrick.get(i)).setBackground(Color.orange);else((JButton)numberBrick.get(i)).setBackground(Color.gray);}publicbooleanWorkState(){//判断当前电梯内的数字键是否被按下,如有键被按下,则值为1,如果没有任何键被按下,则值为0。for(inti=0;i<10;i++){if(table[i]==1)returntrue;}returnfalse;}publicvoidsetState(intnumber){//如果电梯原来停,则改变电梯状态lift.destination=number;intx=lift.number;if(lift.state==0){if(number>x)lift.state=1;if(number0;i--)if(table[10-i]==1||controlTable[10-i][1]==1||controlTable[10-i][0]==1)count++;if(count==0&&lift.number<=lift.destination){count=0;for(intj=lift.number;j<10;j++){if(table[10-j]==1||controlTable[10-j][1]==1||controlTable[10-j][0]==1){count++;}}if(count>0){lift.state=1;//System.out.println("改变方向:向上");}else{lift.state=0;}}}}publicvoidactionUp(){//检查向上运行的电梯是否还需向上,即检查在此层上还有没有数字键被按下,如果没有,则置电梯状态为停止,并使该电梯内所有数字键还原。if(lift.state==1){intcount=0;for(inti=lift.number;i<10;i++)if(table[10-i]==1||controlTable[10-i][0]==1||controlTable[10-i][1]==1)count++;if(count==0&&lift.number>=lift.destination){count=0;for(intj=lift.number;j>0;j--){if(table[10-j]==1||controlTable[10-j][1]==1||controlTable[10-j][0]==1){count++;}}if(count>0){lift.state=2;//System.out.println("改变方向:向下");}else{lift.state=0;}}}}publicvoidactionPerformed(ActionEventevent){intstate=lift.state;//纪录电梯当前状态。{if(lift.state!=0&&table[10-lift.number]==1)//如果电梯经过电梯内数字键显示的要到达的楼层,则该数字键状态恢复未按,并重新显示数字键颜色。table[10-lift.number]=0;DrawNumberBrick();newopenclosThread();}if(state!=0&&lift.number==lift.destination){//如果电梯属于逆向到达,则此任务完成,从任务数组中删除并重新显示上下键的颜色。if(state==2&&controlTable[10-lift.number][state-1]==0){controlTable[10-lift.number][2-state]=0;DrawControlBrick();newopenclosThread();}if(state==1&&controlTable[10-lift.number][state-1]==0){controlTable[10-lift.number][2-state]=0;newopenclosThread();DrawControlBrick();}}if(state==1){//向上电梯经过的向上任务完成,从任务数组中删除并重新显示上下键的颜色。if(controlTable[10-lift.number][0]==1){controlTable[10-lift.number][0]=0;newopenclosThread();DrawControlBrick();}}if(state==2){//向下电梯经过的向下任务完成,从任务数组中删除并重新显示上下键的颜色。if(controlTable[10-lift.number][1]==1){controlTable[10-lift.number][1]=0;newopenclosThread();DrawControlBrick();}}actionUp();//判断是否继续向上actionDown();//判断是否继续向下state=lift.state;//如果电梯状态不为停止,则按照运行方向运行。if(state==1){lift.number++;//System.out.println("}if(state==2){lift.number--;向上"+lift.number);//System.out.println("}向下"+lift.number);设置相应电梯的显示器sign.setText(""+lift.number);DrawBrick();newReturnfirstfloor(state);//10秒没人按下任何键,则返回第一层}}//***************************************************电梯线程时间控制。****************************************************************************************publicclassopenclosThreadextendsThread{publicopenclosThread(){start();}publicvoidrun(){openclose.setText("开门");try{sleep(1000);}catch(InterruptedExceptione){}openclose.setText("关");}}publicclassReturnfirstfloorextendsThread{//如果在30秒内没有人按下任何,梯自返回第一次;省(*^__^*)嘻嘻⋯⋯intstater;intcount;publicReturnfirstfloor(intstate){count=0;this.stater=state;start();}publicvoidrun(){if(stater==0&&lift.number!=1){try{sleep(10000);}catch(InterruptedExceptione){}for(inti=1;i<=10;i++){if(table[10-i]==1||controlTable[10-i][1]==1||controlTable[10-i][0]==1){count++;}}if(count==0){//如果10秒后没人按,就设第一层为1,电梯方向为向下。table[9]=1;lift.state=2;}}}}publicclassLiftThreadextendsThread{publicintnumber=1;//电梯当前楼层。publicintstate=0;//电梯当前状态,0为停止,1为上升,2为下降。intdestination;inti=0;//电梯的目的楼层。publicLiftThread(){start();i=octime;System.out.println(""+i);}publicvoidrun(){ActionListenertimelistener=newTimeListener();timer=newTimer((1500+i),timelistener);timer.start();}}}课程 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 一开始做电梯调度算法比较困难:因为有许多因素要考虑,而且需要到的许多java界面方面的知识、事件控件方面的知识和时间方面的控制知识都比较薄弱,但经过了一段时间的学习,逐步攻破各方面的弱点。又从书本上、网上了解到做电梯的思想。很快就将电梯调度算法用java语言实现了。这一次的课程设计不但让我重温了java语言,而且学习到了新知识,同时更加清楚地了解到改用怎样的思想去实现一个算法。参考文献
本文档为【电梯调度算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
等雪的鱼
暂无简介~
格式:doc
大小:150KB
软件:Word
页数:39
分类:
上传时间:2022-07-13
浏览量:0