电梯模拟程序(Java语言编写)
JAVA模拟电梯
1.import javax.swing.*;2.import java.awt.*;3.import java.util.*;4.public class Hufan extends JFrame{5.static HuPanel hp;6.public static void main(String[] args) {7.new Hufan();8.}9.public Hufan(){10.hp=new HuPanel();11.this.add(hp);12.this.setTitle("模拟电梯");13.this.setSize(350, 650);14.this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);15.this.setVisible(true);16.}17.}18.class HuPanel extends JPanel{19.DianTi dt;20.Person ps;21.public HuPanel(){22.init();23.dt=new DianTi(45, 0);24.//启动电梯线程25.Thread t=new Thread(dt);26.t.start();27.}28.public DianTi getDianTi(){29.return dt;30.}31.public Person getPerson(){32.return ps;33.}34.public void init(){35.Random r=new Random();36.int i=r.nextInt(4)+1;37.switch(i){38.case 1:39.ps=new Person(350,500,0,1);40.break;41.case 2:42.ps=new Person(350,350,0,2);43.break;44.case 3:45.ps=new Person(350,200,0,3);46.break;47.case 4:48.ps=new Person(350,50,0,4);49.break;50.}51.Thread t=new Thread(ps);52.t.start();53.}54.public void paint(Graphics g){55.super.paint(g);56.//画楼梯与楼层57.g.fillRect(30, 0, 6, 600);58.g.fillRect(200, 0, 6, 600);59.g.fillRect(200, 150, 330, 6);60.g.fillRect(200, 300, 330, 6);61.g.fillRect(200, 450, 330, 6);62.g.fillRect(30, 600, 500, 6);63.//画电梯64.g.setColor(Color.gray);65.g.fillRect(dt.x, dt.y, 150, 150);66.//画人67.g.setColor(Color.red);68.g.fillRect(ps.x, ps.y, 50, 100);69.//画要上几楼70.g.setColor(Color.black);71.g.setFont(new Font("宋体",Font.BOLD,17));72.if(ps.endFloor!=0&&ps.direct==0){73.g.drawString("去"+ps.endFloor+"楼", ps.x, ps.y+20);74.}75.//画我走了76.if(ps.direct==1){77.g.drawString("我走了", ps.x, ps.y+20);78.}79.}80.81.}82.class Person implements Runnable{83.int x;84.int y;85.int direct;86.int startFloor;87.int endFloor;88.int speed=5;89.boolean isStop=true;90.boolean isDead=true;91.DianTi dt;92.public Person(int x,int y,int direct,int startFloor){93.this.x=x;94.this.y=y;95.this.direct=direct;96.this.startFloor=startFloor;97.}98.//得到目的楼99.public void getEndF(){100.endFloor=new Random().nextInt(4)+1;101.}102.@Override103.public void run() {104.// TODO Auto-generated method stub105.//得到ps106.dt=Hufan.hp.dt;107.while(isDead){108.if(isStop){109.if(direct==0){110.x-=speed;111.if(x==200){112.while(true){113.this.getEndF();114.//如果目的楼和自己等,重新得到endFloor 115.if(startFloor==endFloor){116.this.getEndF();117.}else{118.break;119.}120.}121.//到了电梯,这时让电梯到自己在的楼层122.dt.topDown=startFloor;123.//启动电梯124.dt.isStop=true;125.//人停止126.isStop=false;127.}128.}else if(direct==1){129.x+=speed;130.//如果到边界。
电梯模拟程序课程设计
电梯模拟程序课程设计一、课程目标知识目标:1. 让学生理解电梯的工作原理,掌握电梯运行的模拟编程知识。
2. 使学生掌握利用流程图描述电梯运行逻辑的方法。
3. 帮助学生理解并运用条件语句和循环语句实现电梯模拟程序。
技能目标:1. 培养学生运用编程语言(如Scratch或Python)编写简单电梯模拟程序的能力。
2. 培养学生通过流程图分析问题、解决问题的能力。
3. 提高学生团队协作、沟通交流的能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生主动探索新知识的热情。
2. 培养学生严谨、细心的学习态度,增强面对困难的勇气和毅力。
3. 培养学生遵守程序设计规范,养成良好的编程习惯。
课程性质:本课程为信息技术学科的课程,以项目式学习为主,注重实践操作和团队合作。
学生特点:学生为五年级学生,具备一定的信息技术基础,对新事物充满好奇,喜欢动手操作。
教学要求:教师需引导学生通过自主探究、小组合作等方式完成课程内容,注重培养学生的实践能力和创新精神。
同时,关注学生的个体差异,提供有针对性的指导。
通过本课程的学习,使学生能够达到上述课程目标,实现具体的学习成果。
二、教学内容1. 电梯工作原理介绍:包括电梯的基本结构、运行原理、信号控制系统等,让学生对电梯的运行机制有整体认识。
2. 编程语言基础:回顾并巩固Scratch或Python编程语言的基础知识,如变量、列表、条件语句、循环语句等,为编写电梯模拟程序打下基础。
3. 流程图设计:学习如何利用流程图描述电梯运行的逻辑过程,分析电梯运行中的各种情况,并进行流程图设计。
4. 电梯模拟程序编写:根据流程图,运用所学编程知识,分组合作编写电梯模拟程序,实现基本的运行、停止、开门、关门等功能。
5. 程序调试与优化:指导学生如何调试程序,发现并解决程序中的问题,提高程序的稳定性和运行效率。
教学内容安排和进度:第一课时:电梯工作原理介绍,回顾编程语言基础知识。
第二课时:学习流程图设计,分析电梯运行逻辑。
层电梯楼层组态王模拟程序
层电梯楼层组态王模拟程序/*电梯楼层指示*/if(一层门开关>0)//一层指示//{L1=1;}else{L1=0;} if(二层门开关>0)//二层指示//{L2=1;}else{L2=0;} if(三层门开关>0)//二层指示//{L3=1;}else{L3=0;} if(四层门开关>0)//二层指示//{L4=1;}else{L4=0;} /*电梯在一层时,四楼电梯外下呼*/if(D4==1&&J轿厢==0){一层门开关=一层门开关-10;DN4=1;}if(D4==1&&一层门开关==0&&SN1==0&&SN2==0&&SN3==0&&SN4==0) {J轿厢=J轿厢+2;}if(J轿厢>=102&&J轿厢<105){J轿厢=102;DN4=0;D4=0;}if(J轿厢==102&&SN1==0&&SN2==0&&SN3==0&&SN4==0) {if(四层门开关<60)四层门开关=四层门开关+10;} /*电梯在一层时,三楼电梯外下呼*/ if(D3==1&&J轿厢==0){一层门开关=一层门开关-10;DN3=1;}if(D3==1&&一层门开关==0){J轿厢=J轿厢+2;}if(D3==1&&J轿厢>=68&&J轿厢<74){J轿厢=68;DN3=0;if(三层门开关<60)三层门开关=三层门开关+10;}?/*电梯在一层时,二楼电梯外下呼*/if(D2==1&&J轿厢==0){一层门开关=一层门开关-10;DN2=1;}if(D2==1&&一层门开关==0){J轿厢=J轿厢+2;}if(D2==1&&J轿厢>=34&&J轿厢<40){J轿厢=34;DN2=0;if(二层门开关<60)二层门开关=二层门开关+10;}?/*电梯内呼*/if(J轿厢==102&&SN1==1)//电梯在四楼时,内呼一层//{四层门开关=四层门开关-10;}if(四层门开关==0&&SN1==1){J轿厢=J轿厢-2;}if(J轿厢==0&&D2==0&&D3==0&&D4==0&&U1==0&&U2==0&&U 3==0){if(一层门开关<60)一层门开关=一层门开关+10;SN1=0;}?if(J轿厢==102&&SN2==1)//电梯在四楼时,内呼二层//{四层门开关=四层门开关-10;}if(四层门开关==0&&SN2==1){J轿厢=J轿厢-2;}if(SN2==1&&J轿厢<=34&&J轿厢>30){J轿厢=34;}if(J轿厢==34&&D2==0&&D3==0&&D4==0&&U1==0&&U2==0&& U3==0&&SN1==0){if(二层门开关<60)二层门开关=二层门开关+10;SN2=0;}?if(J轿厢==102&&SN3==1)//电梯在四楼时,内呼三层//{四层门开关=四层门开关-10;}if(四层门开关==0&&SN3==1){J轿厢=J轿厢-2;}if(SN3==1&&J轿厢<=68&&J轿厢>64){J轿厢=68;}if(J轿厢==68&&D2==0&&D3==0&&D4==0&&U1==0&&U2==0&& U3==0&&SN2==0&&SN1==0){if(三层门开关<60)三层门开关=三层门开关+10;SN3=0;} /*电梯上升信号*/if(J轿厢==0&&(D2==1||D3==1||D4==1||U2==1||U3==1||SN2==1||SN3 ==1||SN4==1))//电梯在一层时的上升信号//{UP=1;DOWN=0;}if(J轿厢==34&&(D3==1||D4==1||U3==1||SN3==1||SN4==1))//电梯在二层时的上升信号// {UP=1;DOWN=0;}if(J轿厢==68&&(D4==1||SN4==1))//电梯在三层时的上升信号//{UP=1;DOWN=0;} /*电梯下降信号*/if(J轿厢==102&&(D2==1||D3==1||U1==1||U2==1||U3==1||SN1==1||S N2==1||SN3==1))//电梯在四层时的下降信号//{DOWN=1;UP=0;}if(J轿厢==68&&(D2==1||U1==1||U2==1||SN1==1||SN2==1))//电梯在三层时的下降信号// {DOWN=1;UP=0;}if(J轿厢==34&&U1==1||SN1==1)//电梯在二层时的下降信号//{DOWN=1;UP=0;}。
电梯模拟程序(Java语言编写)
import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;public class LiftMainTest{public static void main(String args[]){new LiftTest("电梯测试");}}//批量数据测试对话框class Dialog extends JDialog implements ActionListener {int Message=0;JPanel DJPanel=new JPanel();JTextField TestField[]=new JTextField[16];JLabel TestLabel1=new JLabel("时间");JLabel TestLabel2=new JLabel("人数");JLabel TestLabel3=new JLabel("起始楼层");JLabel TestLabel4=new JLabel("目标楼层");JButton ok=new JButton("确定");JButton cancel=new JButton("取消");Dialog(JFrame f,String s,boolean b){super(f,s,b);DJPanel.setLayout(new GridLayout(7,3));for(int i=0;i<=15;i++){TestField[i]=new JTextField(4);}DJPanel.add(TestLabel1);DJPanel.add(TestLabel2);DJPanel.add(TestLabel3);DJPanel.add(TestLabel4);DJPanel.add(TestField[0]);DJPanel.add(TestField[1]);DJPanel.add(TestField[2]);DJPanel.add(TestField[3]);DJPanel.add(TestField[4]);DJPanel.add(TestField[5]);DJPanel.add(TestField[6]);DJPanel.add(TestField[7]);DJPanel.add(TestField[8]);DJPanel.add(TestField[9]);DJPanel.add(TestField[10]);DJPanel.add(TestField[11]);DJPanel.add(TestField[12]);DJPanel.add(TestField[13]);DJPanel.add(TestField[14]);DJPanel.add(TestField[15]);DJPanel.add(ok);DJPanel.add(cancel);add(DJPanel);ok.addActionListener(this);cancel.addActionListener(this);setBounds(450,170,300,300);}public void actionPerformed(ActionEvent e)//Dialog监听函数{if(e.getSource()==ok){Message=1;setVisible(false);}else if(e.getSource()==cancel){Message=-1;setVisible(false);}else{;}}}//LiftTest类class LiftTest extends JFrame implements ActionListener {Dialog mydialog;JMenuBar menubar;JMenu menu,submenu,submenuhelp;JMenuItem item1,item2,menuitemhelp;//变量定义int x;int y;int LIsRun=0;//左电梯是否在运行(0或1)int RIsRun=0;//右电梯是否在运行(0或1)int LDirection=0;//左电梯运行方向int RDirection=0;//右电梯运行方向int LWantLevel=0;//乘客目的层数int RWantLevel=0;int LNowLevel=0;//乘客开始时所在层数int RNowLevel=0;int LLiftNowLevel=1;//左电梯目前所在层数int RLiftNowLevel=1;//右电梯目前所在层数int WantDirection=0;//乘客目标运行方向int WaitPeopleNum[]=new int[11];//保留数组(未用)int a=0;int b=0;//线程定义LIO lio=new LIO();RIO rio=new RIO();Thread LStartThread=new Thread(lio);Thread RStartThread=new Thread(rio);//上下电梯的按钮定义JButton Blue10=new JButton(new ImageIcon("10x.gif"));JButton Blue9=new JButton(new ImageIcon("9x.gif"));JButton Blue8=new JButton(new ImageIcon("8x.gif"));JButton Blue7=new JButton(new ImageIcon("7x.gif"));JButton Blue6=new JButton(new ImageIcon("6x.gif"));JButton Blue5=new JButton(new ImageIcon("5x.gif"));JButton Blue4=new JButton(new ImageIcon("4x.gif"));JButton Blue3=new JButton(new ImageIcon("3x.gif"));JButton Blue2=new JButton(new ImageIcon("2x.gif"));JButton Red9=new JButton(new ImageIcon("9s.gif"));JButton Red8=new JButton(new ImageIcon("8s.gif"));JButton Red7=new JButton(new ImageIcon("7s.gif"));JButton Red6=new JButton(new ImageIcon("6s.gif"));JButton Red5=new JButton(new ImageIcon("5s.gif"));JButton Red4=new JButton(new ImageIcon("4s.gif"));JButton Red3=new JButton(new ImageIcon("3s.gif"));JButton Red2=new JButton(new ImageIcon("2s.gif"));JButton Red1=new JButton(new ImageIcon("1s.gif"));//电梯门定义JButton LLiftLDoor=new JButton(new ImageIcon("LLiftLDoor.gif"));//设置门图标JButton LLiftRDoor=new JButton(new ImageIcon("LLiftRDoor.gif"));//设置门图标JButton RLiftLDoor=new JButton(new ImageIcon("RLiftLDoor.gif"));//设置门图标JButton RLiftRDoor=new JButton(new ImageIcon("RLiftRDoor.gif"));//设置门图标//电梯内部按钮定义JButton LPressButton1=new JButton("1");JButton LPressButton2=new JButton("2");JButton LPressButton3=new JButton("3");JButton LPressButton4=new JButton("4");JButton LPressButton5=new JButton("5");JButton LPressButton6=new JButton("6");JButton LPressButton7=new JButton("7");JButton LPressButton8=new JButton("8");JButton LPressButton9=new JButton("9");JButton LPressButton10=new JButton("10");JButton RPressButton1=new JButton("1");JButton RPressButton2=new JButton("2");JButton RPressButton3=new JButton("3");JButton RPressButton4=new JButton("4");JButton RPressButton5=new JButton("5");JButton RPressButton6=new JButton("6");JButton RPressButton7=new JButton("7");JButton RPressButton8=new JButton("8");JButton RPressButton9=new JButton("9");JButton RPressButton10=new JButton("10");量数据测试”按钮的Panel //组件定义JLabel LL=new JLabel("当前电梯内部人数:");JLabel RL=new JLabel("当前电梯内部人数:");JButton Start=new JButton("开始电梯调度模拟");//开始电梯调度模拟按钮JButton Test=new JButton("开始批量数据测试");//开始批量数据测试按钮JTextArea LTextArea=new JTextArea(5,5);JTextArea RTextArea=new JTextArea(5,5);//电梯调度函数Cal(LIsRun,LLiftNowLevel,q,LDirection)int Cal(int x,int y,int z,int w){return(x*(y-z)*w);}//方法函数LiftTest(String s){super(s);setSize(1000,600);setLocation(100,50);//Dialogmydialog=new Dialog(this,"批量数据测试",true);//菜单项设置menubar=new JMenuBar();menu=new JMenu("菜单");submenu=new JMenu("联系作者");submenuhelp=new JMenu("帮助");item1=new JMenuItem("程序简介");item2=new JMenuItem("源代码");menu.add(item1);menu.addSeparator();menu.add(item2);menu.addSeparator();menu.add(submenu);menu.addSeparator();menu.add(submenuhelp);submenu.add(new JMenuItem("作者简介"));submenuhelp.add(new JMenuItem("使用帮助"));menubar.add(menu);setJMenuBar(menubar);//面板布局管理器设置WindowsPanel.setLayout(new GridLayout(1,6)); WaitPeopleNumPanel.setLayout(new GridLayout(10,1)); LeftPanel.setLayout(new GridLayout(3,1));RightPanel.setLayout(new GridLayout(3,1));LeftLiftPanel.setLayout(null);//左电梯运动轨道Panel布局管理器设为空RightLiftPanel.setLayout(null);//右电梯运动轨道Panel布局管理器设为空UpDownButtonPanel.setLayout(new GridLayout(10,2)); LButtonPanel.setLayout(new GridLayout(4,3));RButtonPanel.setLayout(new GridLayout(4,3));LeftLiftPanel.setBackground(Color.green);RightLiftPanel.setBackground(Color.green); UpDownButtonPanel.setBackground(Color.yellow); UpMainPanel.setLayout(new GridLayout(1,2));LBoxPanel.setLayout(null);//左电梯箱Panel布局管理器设为空RBoxPanel.setLayout(null);//右电梯箱Panel布局管理器设为空//电梯箱设置LBoxPanel.setSize(165,51);RBoxPanel.setSize(165,51);LBoxPanel.setLocation(0,459);RBoxPanel.setLocation(0,459);LeftLiftPanel.add(LBoxPanel);RightLiftPanel.add(RBoxPanel);//电梯门设置LLiftLDoor.setEnabled(false);LLiftRDoor.setEnabled(false);RLiftLDoor.setEnabled(false);RLiftRDoor.setEnabled(false);LLiftLDoor.setSize(82,51);LLiftRDoor.setSize(82,51);RLiftLDoor.setSize(82,51);RLiftRDoor.setSize(82,51);LLiftLDoor.setLocation(0,0);LLiftRDoor.setLocation(82,0);RLiftLDoor.setLocation(0,0);RLiftRDoor.setLocation(82,0);LBoxPanel.add(LLiftLDoor);LBoxPanel.add(LLiftRDoor);RBoxPanel.add(RLiftLDoor);RBoxPanel.add(RLiftRDoor);//分别添加两个电梯的10个按钮LButtonPanel.add(LPressButton1);//左电梯LButtonPanel.add(LPressButton2); LButtonPanel.add(LPressButton3); LButtonPanel.add(LPressButton4); LButtonPanel.add(LPressButton5); LButtonPanel.add(LPressButton6); LButtonPanel.add(LPressButton7); LButtonPanel.add(LPressButton8); LButtonPanel.add(LPressButton9); LButtonPanel.add(LPressButton10); RButtonPanel.add(RPressButton1);//右电梯RButtonPanel.add(RPressButton2); RButtonPanel.add(RPressButton3); RButtonPanel.add(RPressButton4); RButtonPanel.add(RPressButton5); RButtonPanel.add(RPressButton6); RButtonPanel.add(RPressButton7); RButtonPanel.add(RPressButton8); RButtonPanel.add(RPressButton9); RButtonPanel.add(RPressButton10);//添加上下电梯按钮至UpDownButtonPanel面板JButton Unabled1=new JButton();Unabled1.setEnabled(false);JButton Unabled2=new JButton();Unabled2.setEnabled(false); UpDownButtonPanel.add(Unabled1);//开始第一个空着UpDownButtonPanel.add(Blue10); UpDownButtonPanel.add(Red9); UpDownButtonPanel.add(Blue9); UpDownButtonPanel.add(Red8); UpDownButtonPanel.add(Blue8);UpDownButtonPanel.add(Red7); UpDownButtonPanel.add(Blue7); UpDownButtonPanel.add(Red6); UpDownButtonPanel.add(Blue6); UpDownButtonPanel.add(Red5); UpDownButtonPanel.add(Blue5); UpDownButtonPanel.add(Red4); UpDownButtonPanel.add(Blue4); UpDownButtonPanel.add(Red3); UpDownButtonPanel.add(Blue3); UpDownButtonPanel.add(Red2); UpDownButtonPanel.add(Blue2); UpDownButtonPanel.add(Red1); UpDownButtonPanel.add(Unabled2);//最后一个空着//等待人数文本框定义JTextField Text10=new JTextField(" 10楼等待人数:",8); Text10.setEditable(false);JTextField Text9=new JTextField(" 9楼等待人数:",8); Text9.setEditable(false);JTextField Text8=new JTextField(" 8楼等待人数:",8); Text8.setEditable(false);JTextField Text7=new JTextField(" 7楼等待人数:",8); Text7.setEditable(false);JTextField Text6=new JTextField(" 6楼等待人数:",8); Text6.setEditable(false);JTextField Text5=new JTextField(" 5楼等待人数:",8); Text5.setEditable(false);JTextField Text4=new JTextField(" 4楼等待人数:",8); Text4.setEditable(false);JTextField Text3=new JTextField(" 3楼等待人数:",8); Text3.setEditable(false);JTextField Text2=new JTextField(" 2楼等待人数:",8); Text2.setEditable(false);JTextField Text1=new JTextField(" 1楼等待人数:",8); Text1.setEditable(false);//向UpMainPanel中添加组件UpMainPanel.add(Start);UpMainPanel.add(Test);//添加等待人数文本框至WaitPeopleNumPanel面板WaitPeopleNumPanel.add(Text10); WaitPeopleNumPanel.add(Text9); WaitPeopleNumPanel.add(Text8); WaitPeopleNumPanel.add(Text7); WaitPeopleNumPanel.add(Text6);WaitPeopleNumPanel.add(Text5);WaitPeopleNumPanel.add(Text4);WaitPeopleNumPanel.add(Text3);WaitPeopleNumPanel.add(Text2);WaitPeopleNumPanel.add(Text1);//分别向LeftPanel(左电梯提示器),RightPanel(右电梯提示器)添加相应组件LeftPanel.add(LButtonPanel);LeftPanel.add(LL);LeftPanel.add(LTextArea);RightPanel.add(RButtonPanel);RightPanel.add(RL);RightPanel.add(RTextArea);//添加至总面板WindowsPanel.add(WaitPeopleNumPanel);WindowsPanel.add(LeftPanel);WindowsPanel.add(LeftLiftPanel);WindowsPanel.add(UpDownButtonPanel);WindowsPanel.add(RightLiftPanel);WindowsPanel.add(RightPanel);//添加监听器Start.addActionListener(this);Test.addActionListener(this);Blue10.addActionListener(this);Blue9.addActionListener(this);Blue8.addActionListener(this);Blue7.addActionListener(this);Blue6.addActionListener(this);Blue5.addActionListener(this);Blue4.addActionListener(this);Blue3.addActionListener(this);Blue2.addActionListener(this);Red9.addActionListener(this);Red8.addActionListener(this);Red7.addActionListener(this);Red6.addActionListener(this);Red5.addActionListener(this);Red4.addActionListener(this);Red3.addActionListener(this);Red2.addActionListener(this);Red1.addActionListener(this);Monitor mon=new Monitor();//新建监听器对象LPressButton1.addActionListener(mon);LPressButton2.addActionListener(mon);LPressButton3.addActionListener(mon);LPressButton4.addActionListener(mon);LPressButton5.addActionListener(mon);LPressButton6.addActionListener(mon);LPressButton7.addActionListener(mon);LPressButton8.addActionListener(mon);LPressButton9.addActionListener(mon);LPressButton10.addActionListener(mon);RPressButton1.addActionListener(mon);RPressButton2.addActionListener(mon);RPressButton3.addActionListener(mon);RPressButton4.addActionListener(mon);RPressButton5.addActionListener(mon);RPressButton6.addActionListener(mon);RPressButton7.addActionListener(mon);RPressButton8.addActionListener(mon);RPressButton9.addActionListener(mon);RPressButton10.addActionListener(mon);//添加至窗口add(WindowsPanel,BorderLayout.CENTER);//主窗体添加至中间add(UpMainPanel,BorderLayout.NORTH);//UpMainPanel添加至北面setVisible(true);//Frame默认是不可见的,所有Panel都是默认可见的validate();//设置组件可见setResizable(false);//设置整个窗体是不可调整大小的setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//右上角“叉号”关闭按钮响应函数}//Runnable接口函数定义class LIO implements Runnable//左电梯接口函数{public void run(){while(true){try{Thread.sleep(5);}//避免CPU使用率达到100%catch(InterruptedException a){}while(LNowLevel!=0){int q=x;if(Cal(LIsRun,LLiftNowLevel,q,LDirection)<=Cal(RIsRun,RLiftNowLevel,q, RDirection))//左电梯近{LNowLevel=0;if(LLiftNowLevel<=q){for(int i=LLiftNowLevel;i<q;i++){LBoxPanel.setLocation(0,(459-i*51));LTextArea.append("妹妹\n");RTextArea.append("哥哥\n");LLiftNowLevel=i;LIsRun=1;LDirection=1;if(LNowLevel!=0&&i==(LNowLevel-1)&&LDirection==1&&WantDirecti on==1)//停留等待4秒{for(int v=1;v<=82;v++)//开门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-v),0);LLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++)//关门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((v-82),0);LLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}else{for(int i=LLiftNowLevel;i>q;i--){LBoxPanel.setLocation(0,(459-(i-2)*51));LTextArea.append("妹妹");RTextArea.append("哥哥");LLiftNowLevel=i;LIsRun=1;LDirection=-1;if(LNowLevel!=0&&i==(LNowLevel+1)&&LDirection==-1&&WantDirection= =-1)//停留等待4秒{for(int v=1;v<=82;v++)//开门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-v),0);LLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++)//关门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((v-82),0);LLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}LIsRun=0;LDirection=0;LLiftNowLevel=q;}else{break;}for(int e=1;e<=82;e++)//开门{if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-e),0);LLiftRDoor.setLocation((82+e),0);}for(int e=1;e<=82;e++){if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}}for(int e=1;e<=82;e++)//关门{if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((e-82),0);LLiftRDoor.setLocation((163-e),0);}}}}}class RIO implements Runnable//右电梯接口函数{public void run(){while(true){try{Thread.sleep(5);}catch(InterruptedException a){}while(RNowLevel!=0){int p=y;if(Cal(LIsRun,LLiftNowLevel,p,LDirection)>=Cal(RIsRun,RLiftNowLevel,p,RDir ection))//右电梯近{RNowLevel=0;if(RLiftNowLevel<=p){for(int i=RLiftNowLevel;i<p;i++){RBoxPanel.setLocation(0,(459-i*51));LTextArea.append("妹妹\n");RTextArea.append("哥哥\n");RLiftNowLevel=i;RIsRun=1;RDirection=1;if(RNowLevel!=0&&i==(RNowLevel-1)&&RDirection==1&&WantDirec tion==1)//停留等待4秒{for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-v),0);RLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((v-82),0);RLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}else{for(int i=RLiftNowLevel;i>p;i--){RBoxPanel.setLocation(0,(459-(i-2)*51));LTextArea.append("妹妹");RTextArea.append("哥哥");RLiftNowLevel=i;RIsRun=1;RDirection=-1;if(RNowLevel!=0&&i==(RNowLevel+1)&&RDirection==-1&&WantDirection ==-1)//停留等待4秒{for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-v),0);RLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((v-82),0);RLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}RIsRun=0;RDirection=0;RLiftNowLevel=p;}else{break;}for(int e=1;e<=82;e++){if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-e),0);RLiftRDoor.setLocation((82+e),0);}for(int e=1;e<=82;e++)if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}}for(int e=1;e<=82;e++){if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((e-82),0);RLiftRDoor.setLocation((163-e),0);}}}}}//"开始"按钮和"上下键"接口函数public void actionPerformed(ActionEvent e){if(e.getSource()==Start){LStartThread.start();RStartThread.start();}else if(e.getSource()==Test){mydialog.setVisible(true);}else if(e.getSource()==Red1){LNowLevel=1;RNowLevel=1;x=1;y=1;WantDirection=1; }else if(e.getSource()==Red2)LNowLevel=2;RNowLevel=2;x=2;y=2;WantDirection=1;}else if(e.getSource()==Red3){LNowLevel=3;RNowLevel=3;x=3;y=3;WantDirection=1;}else if(e.getSource()==Red4){LNowLevel=4;RNowLevel=4;x=4;y=4;WantDirection=1;}else if(e.getSource()==Red5){LNowLevel=5;RNowLevel=5;x=5;y=5;WantDirection=1;}else if(e.getSource()==Red6){LNowLevel=6;RNowLevel=6;x=6;y=6;WantDirection=1;}else if(e.getSource()==Red7){LNowLevel=7;RNowLevel=7;x=7;y=7;WantDirection=1;}else if(e.getSource()==Red8){LNowLevel=8;RNowLevel=8;x=8;y=8;WantDirection=1;}else if(e.getSource()==Red9){LNowLevel=9;RNowLevel=9;x=9;y=9;WantDirection=1;}else if(e.getSource()==Blue10){LNowLevel=10;RNowLevel=10;x=10;y=10;WantDirection=-1; }else if(e.getSource()==Blue9){LNowLevel=9;RNowLevel=9;x=9;y=9;WantDirection=-1;}else if(e.getSource()==Blue8){LNowLevel=8;RNowLevel=8;x=8;y=8;WantDirection=-1;}else if(e.getSource()==Blue7)LNowLevel=7;RNowLevel=7;x=7;y=7;WantDirection=-1; }else if(e.getSource()==Blue6){LNowLevel=6;RNowLevel=6;x=6;y=6;WantDirection=-1; }else if(e.getSource()==Blue5){LNowLevel=5;RNowLevel=5;x=5;y=5;WantDirection=-1; }else if(e.getSource()==Blue4){LNowLevel=4;RNowLevel=4;x=4;y=4;WantDirection=-1; }else if(e.getSource()==Blue3){LNowLevel=3;RNowLevel=3;x=3;y=3;WantDirection=-1; }else if(e.getSource()==Blue2){LNowLevel=2;RNowLevel=2;x=2;y=2;WantDirection=-1; }else{;}}//左右电梯电梯箱内小按钮监听器class Monitor implements ActionListener{public void actionPerformed(ActionEvent e){if(e.getSource()==LPressButton1){LWantLevel=1;a=1;}else if(e.getSource()==LPressButton2){LWantLevel=2;a=1;}else if(e.getSource()==LPressButton3){LWantLevel=3;a=1;else if(e.getSource()==LPressButton4) {LWantLevel=4;a=1;}else if(e.getSource()==LPressButton5) {LWantLevel=5;a=1;}else if(e.getSource()==LPressButton6) {LWantLevel=6;a=1;}else if(e.getSource()==LPressButton7) {LWantLevel=7;a=1;}else if(e.getSource()==LPressButton8) {LWantLevel=8;a=1;}else if(e.getSource()==LPressButton9) {LWantLevel=9;a=1;}else if(e.getSource()==LPressButton10) {LWantLevel=10;a=1;}else if(e.getSource()==RPressButton1) {RWantLevel=1;b=1;}else if(e.getSource()==RPressButton2) {RWantLevel=2;b=1;}else if(e.getSource()==RPressButton3) {RWantLevel=3;b=1;}else if(e.getSource()==RPressButton4) {RWantLevel=4;b=1;else if(e.getSource()==RPressButton5){RWantLevel=5;b=1;}else if(e.getSource()==RPressButton6){RWantLevel=6;b=1;}else if(e.getSource()==RPressButton7){RWantLevel=7;b=1;}else if(e.getSource()==RPressButton8){RWantLevel=8;b=1;}else if(e.getSource()==RPressButton9){RWantLevel=9;b=1;}else if(e.getSource()==RPressButton10){RWantLevel=10;b=1;}else{;}}}}/*//////////////////////////////////////////////////////////////////////////////////文件说明:程序用java语言编写,自行安装JDK(下载网址:)。
电梯控制系统(Java课程设计)内容
(1)新的请求插入到上行队列头。
(2)电梯到达某个楼层将这个楼层的请求从上行队列的队列头删除,后继的更高楼层号成为对列头。
当电梯正在下行时,如果下行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起下行队列头的改变。
(2)M被插入到上行队列的合适位置。
(3)如果M被插到上行队列头。
如果电梯正处于上行状态。将M发送给电梯作为目的地。
如果电梯处于停止状态。将M发送给电梯作为目的地。
(4)电梯到达此楼层。
(5)电梯自动打开门(用例9)。
(6)乘客进入电梯。
(7)超重测试(用例6)。
用例2按下某楼层的下行按钮(go down stair)。
用例8打开某层电梯锁(open floor)
此层的楼层请求按钮和电梯内的楼层按钮恢复正常。
用例9自动打开电梯门(auto open door)
(1)电梯到达某楼层。
(2)电梯自动开门。
用例10自动关闭电梯门(auto close door)
(1)电梯门打开的状态达到设置的时限。
(2)关闭电梯门。
A3 类模型
根据分析,我们可以得到下面这些类。
乘客类(Passenger)、管理员类(Manager)、电梯类(Elevator)、电梯门类(ElevatorDoor)、楼层的上行请求按钮类(Go Up Request)、楼层的下请求按钮类(Gequest)、楼层锁类(lock)、指示灯类(Indicate Light)、队列类(Queue)、定时器类(Timer)、异常处理类(Expection)。
电梯模拟系统
4 电梯系统的演示
查看
(1) 电 梯 电 路 模 型 设 计
电梯电路模型设计说明
1.电路模型说明 :
采用了两部电梯,分别用左右两排黄灯表示,黄灯亮表示当前电 梯位置,中间蓝灯亮表示对应楼层有人等待(蓝色灯为随即点亮)。
2.实际运行效果为:
按照前面规定的调度规则,去响应请求,模型的效果为依次点亮 电梯经过处相应的LED灯,时间间隔为3S,然后到达目标楼层,持 续点亮当前楼层对应的灯,表示电梯停止等待,随即灭掉所在楼层 对应的蓝色LED灯,表示人进入电梯。然后电梯继续运行到目标楼 层,持续点亮当前楼层对应的灯。表示电梯停止,再点亮对应楼层 的蓝色LED,蓝色灯亮2S,然后灭掉,表示人离开电梯。若其他楼 层没有请求,则电梯停在当前位置,表示为该楼层对应的LED所代 表的电梯一直亮,直到再去响应请求。
turn =TRUE;
..................................................................
相关代码实例如下:
else if(point[0].y==point[goFloor].y&&m_arrive==FALSE) {//m_arrive表示人员是否到达目标楼层 FALSE表示到达
说明:模拟电梯采用MFC界面设计。
2 电梯模拟系统需求分析
1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。
2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标 对应的楼层可能不是电梯当前运行方向可达的楼层。(每个楼层出现的 乘客数量,以及所要到达的目标楼层的方向是随机产生的)
3.电梯系统依照某种预先定义好的调度策略对随机出现的呼叫和目 标进行分析和响应。
java电梯仿真(java实验设计)
用面向对象方法和面向对象程序设计语言,实现满足下述要求的一个高层建筑电梯活动仿真程序。
问题域概述某国际展览中心共40 层,设有载客电梯10 部(用E0~E9 标识)。
限定条件(1)电梯的运行规则是:E0、E1:可到达每层。
E2、E3:可到达1、25~40 层。
E4、E5:可到达1~25 层。
E6、E7:可到达1、2~40 层中的偶数层。
E8、E9:可到达1~39 层中的奇数层。
(2)每部电梯的最大乘员量均为K 人(K 值可以根据仿真情况在10~18 人之间确定)。
(3)仿真开始时,各电梯随机地处于其符合运行规则的任意一层,为空梯。
(4)仿真开始后,有N 人(0<N<1000)在M 分钟(0<M<10)内随机地到达该国际展览中心的1 层,开始乘梯活动。
(5)每位乘客初次所要到达的楼层是随机的,令其在合适的电梯处等待电梯到来。
(6)每位乘客乘坐合适的电梯到达指定楼层后,随机地停留10-120 秒后,再随机地去往另一楼层,依此类推,当每人乘坐过L 次(每人的L 值不同,在产生乘客时随机地在1~10 次之间确定)电梯后,第L+1 次为下至底层并结束乘梯行为。
到所有乘客结束乘梯行为时,本次仿真结束。
(7)电梯运行速度为S 秒/层(S 值可以根据仿真情况在1~5 之间确定),每人上下时间为T 秒(T 值可以根据仿真情况在2~10 之间确定)。
(8)电梯运行的方向由先发出请求者决定,不允许后发出请求者改变电梯的当前运行方向,除非是未被请求的空梯。
(9)当某层有乘客按下乘梯电钮时,优先考虑离该层最近的满足条件(8)能够最快到达目标层的电梯。
(10)不允许电梯超员。
开发结果的行为特征(1)产生事件的周期为1 秒,每次可产生0 个或多个事件。
(2)各随机事件由互不相关的伪随机数发生器决定。
(3)设计一个易于理解的界面,动态显示各梯的载客与运行情况,动态显示各楼层的人员停留情况与要求乘梯情况;动态显示从仿真开始到目前的时间。
Lifta.java
but.addActionListener(new UpListener(i));
but.setBackground(Color.gray);
controlBrick.add(but);
pan.add(but);
//向下键
upSignalTable[i] = 0;
downSignalTable[i] = 0;
}
//********************画图************************
for(int i=10;i>0;i--){
//最左边黑色列
controlTable = new int[10][2];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 2; j++)
controlTable[i][j] [10];
public Brick(){
sign.setBounds(0, 0, 80, 40); //起始位置
//开关门部分
openclose.setBounds(80, 0, 80, 40);
openclose.setBackground(Color.yellow);
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;
电梯模拟程序--从设计到实现
电梯模拟程序--从设计到实现电梯模拟程序--从设计到实现 ---结对项⽬开发:张永&吴盈盈 这是⼀个⼤家都很熟悉的题⽬,很多⼈也做过类似的题⽬。
最近博客园最近也发表了很多的关于电梯模拟的程序。
下⾯说⼀下我们⼩组的基本思想。
题⽬拿到后,我们先是讨论了⼀下电梯的整体设想。
对这个题⽬进⾏了粗略的分析。
从⾯向对象的⾓度对问题剖析: 下⾯开始电梯的界⾯设计:界⾯设计涉及到的按钮⽐较多,所以每个按钮的命名必须要符合规范,光变量命名就花费了很长时间,举个例⼦:每个电梯都有左右门,那么为了见名知意,命名规则采⽤“elevator_电梯号_左右门”,⼀号电梯的左门命名为“elevator_ID1_Left”,其他的按钮也都有相应的命名规则,这⾥不⼀⼀的列举了。
为了有⼀个友好的界⾯,在这引⼊了⼀个开关门的特效:先介绍⼀下怎么实现的,以⼀个门为例,C#中Timer控件⽐较好⽤,每个门对应⼀个Timer 控件(就是每隔⼀段时间调⽤⼀个⽅法):/*** @Name: openElevator* @Description: 打开电梯门* @Version: V1.00 (版本号)* @Create Date: 2014-3-16 (创建⽇期)* @Parameters:Panel elevator_ID_Left, Panel elevator_ID_Right,电梯的两个门* @Return: 电梯的状态(开和关)*/public int openElevator(Panel elevator_ID_Left, Panel elevator_ID_Right){elevator_ID_Left.Width = elevator_ID_Left.Width - 1;elevator_ID_Right.Width = elevator_ID_Right.Width - 1;elevator_ID_Right.Location = new System.Drawing.Point(elevator_ID_Right.Location.X + 1, elevator_ID_Right.Location.Y);if (elevator_ID_Left.Width == 10){flag = Number.OPEN;}return flag;}在Timer控件中每隔⼀定的时间就调⽤openElevator⽅法,就实现了开门的动作,关门类似。
电梯模拟实现
#pragma comment(lib, "Winmm.lib")
using namespace std;
class elevator
{
public:
elevator(int mo,int lo,int s[5],int *od,int *ou):most(mo),lowest(lo)
for( i=lowest;i<=most;i++)outdown[i]=0;
outup=new int[most+1];
for( i=lowest;i<=most;i++)outup[i]=0;
meet=0;
}
void pressout();
void pressin();
// 用背景色清空屏幕
// cleardevice();
// clearcliprgn();
int a=x,b=y,i,j;j=y/40;
for( i=0;i<=1;i++)
{
line(x,y,6*40,y);
y=y+40;
}
x=a;y=b;
void pressopen();
void pressclose();
void run();
void gotoxy(int x, int y) //定位函数
{
int xx=0x0b;
HANDLE hOutput;
COORD loc;
loc.X=x;
if(t1==1)states[3]=1;
模拟电梯系统原代码
outtextxy(525,165,"?");
settextstyle(0,0,1);
outtextxy(563,230,"GO");
setcolor(BLUE);
outtextxy(525,140,"Button");
bar(410,80,500,98);
outtextxy(410,80,"close door");
setfillstyle(1,BLUE);
/*关门*/
for(i=1;i<16;i++)
{
bar(405+i*3,130,(405+(i-1)*3),250);
printf("\nreduce people(>=%d):",renshu-20);
scanf("%d",&m);
renshu=renshu-m;
if(renshu<=20)
break;
}
}
char blue,white;
void door()
{
int i,j,n;
settextstyle(0,0,1);
setcolor(BLUE);
outtextxy(410,80,"open door");
setfillstyle(1,BLUE);
bar(400,130,500,250);
}
}
red_button(floor);
movepicture(floor);
java电梯模拟系统
目录第一章问题描述 (3)第二章使用语言及涉及的知识 (3)第三章界面设计 (3)第四章模块设计 (7)1.启动界面: (7)2.管理界面(主界面): (7)3.情境模拟界面 (7)4.更改用户楼层: (7)5.设置电梯信息: (8)6.关于: (8)第五章详细设计 (8)1.本程序总共有15个类: (8)2.各类之间的关系:(如下图) (8)3.主要类的属性和主要方法图: (9)第六章程序测试 (10)第七章关键代码段 (15)1.启动电梯: (15)2.电梯载人: (22)3.电梯到达目标层停止: (22)4.电梯门开关: (23)第八章程序缺点及其扩展 (24)1.程序的缺点: (24)2.程序扩展: (25)第一章问题描述电梯管理算法某一幢楼20层,有两部互联的电梯。
基于线程思想,编写一个电梯调度程序。
要求:a)每个电梯里面应该有一些按键:数字键,开门键,关门键等。
b)每层楼的每部电梯门口,应该有上行和下行按钮。
c)两部电梯门口的按钮是互联的,即当一个电梯的按钮按下去的时候,其他电梯的相应按钮也同时点亮,表示也按下去了。
d)调度算法是根据这两部电梯的状态,寻找离当前楼层最近的且和请求同方向的电梯予以响应。
e)所有电梯初始状态都在第一层。
每个电梯如果在它的上层或者下层没有相应请求情况下,则应该停在原地不动。
第二章使用语言及涉及的知识使用语言:Java涉及的知识: java基础知识,Java界面编程,Java绘图技术,Java多线程编程第三章界面设计程序启动界面:程序主界面:情境模拟界面电梯外面:电梯里面更改用户楼层初始化电梯信息界面:版本信息界面:第四章模块设计1.启动界面:在程序启动时,首先启动一个闪屏,显示程序的基本信息,使用户对程序的名称及功能有个大致的印象。
2.管理界面(主界面):管理界面主要分为两大部分,即AB电梯的按钮及显示屏,而每部电梯都包括外面版和内面板。
外面版由上下行按钮和液晶屏组成,内面板包括数字键(楼层号)和开关门键。
电梯程序模拟课程设计
电梯程序模拟课程设计一、课程目标知识目标:1. 理解电梯的基本工作原理,掌握电梯程序设计的关键概念;2. 学会使用流程图和伪代码表达程序设计思路;3. 掌握运用顺序、选择和循环结构进行电梯程序设计。
技能目标:1. 能够运用所学知识,设计出符合实际需求的电梯程序;2. 通过编程实践,提高逻辑思维和问题解决能力;3. 学会与同伴合作,进行程序调试和优化。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发创新精神;2. 培养学生面对问题时的耐心和毅力,增强克服困难的信心;3. 增强学生的团队协作意识,培养良好的沟通与表达能力。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在理解电梯工作原理的基础上,通过学习程序设计方法,培养其逻辑思维和问题解决能力。
课程将引导学生从实际需求出发,学会分解问题、设计算法,并通过编程实践,实现电梯程序的模拟。
通过本课程的学习,学生将能够将所学知识应用于实际情境,提高其编程技能,并在团队合作中培养良好的沟通与协作能力。
二、教学内容1. 电梯工作原理介绍:分析电梯的基本结构、运行模式和控制系统;- 教材章节:第二章“自动控制系统原理”,第三节“电梯控制系统”。
2. 程序设计基本概念:流程图、伪代码及其在电梯程序设计中的应用;- 教材章节:第四章“程序设计基础”,第一节“流程图与伪代码”。
3. 程序设计结构:顺序结构、选择结构、循环结构在电梯程序设计中的应用;- 教材章节:第四章“程序设计基础”,第二节“程序设计结构”。
4. 电梯程序设计实践:- 任务一:设计一个简单的电梯召唤程序;- 任务二:设计一个具有楼层选择功能的电梯程序;- 任务三:优化电梯程序,实现连续召唤和节能控制。
5. 团队合作与程序调试:分组进行程序设计,相互协作完成程序调试与优化;- 教材章节:第五章“程序调试与优化”,第一节“团队合作与问题解决”。
教学内容安排与进度:第一课时:电梯工作原理介绍,程序设计基本概念;第二课时:程序设计结构,任务一设计;第三课时:任务二设计,团队合作与程序调试;第四课时:任务三优化,总结与展示。
电梯调度编写(oo-java编程)
电梯调度编写(oo-java编程)第⼆单元的问题是写⼀个关于电梯调度的程序。
需要模拟⼀个多线程实时电梯系统,从标准输⼊中输⼊请求信息,程序进⾏接收和处理,模拟电梯运⾏,将必要的运⾏信息通过输出接⼝进⾏输出。
主要锻炼学⽣的多线程程序编写能⼒。
由于需要实时的输⼊和输出,我们不得不采⽤多线程。
在这个单元中任务仍然被分为三个⼩任务:①完成单电梯(随时允许输⼊)②单电梯+(楼层增加负层,必须使⽤⽐先来先服务更加⾼效的算法)③多电梯调度(增加重量限制、楼层停靠限制、换乘)⼀、调度算法设计单电梯的调度算法:我在⽹上寻找调度算法后发现,⽹上⼤多的算法采⽤的都是静态算法,⼏乎没有动态算法。
所以,我⾃⼰设计⼀个算法(或者说是参照实际使⽤中电梯的运转⽅式设计的算法),如下:①查看该楼层是否有请求(包括进电梯和出电梯),有则开门转②,否则转③②让请求的⼈进出,并进⾏输出,所有请求进的⼈将这些⼈的出电梯请求同时加⼊电梯的请求序列中。
关门转③③沿电梯运动⽅向查看是否有任意类型的请求,如果有请求则向该⽅向运动⼀层转④,否则改变⽅向查看请求。
如果在另⼀⽅向上有请求,则想这⼀⽅向移动⼀层转④。
如果两个⽅向都没有请求则进程休息(wait),等待唤醒,唤醒后转④。
④如果不在输⼊任何需求则结束,否则转①。
多电梯的调度算法:多电梯我觉得可以在原来的基础上进⾏修改,在调度器分配请求时通过某种⽅式将请求分给不同的电梯,然后每台电梯按照单电梯的调度算法进⾏运⾏即可。
由于本⼈的多电梯的调度算法效率⽐较低,所以这⾥就不多赘述,可以参考其他同学的多电梯调度算法。
⼆、程序分析对每次的程序使⽤进⾏oo度量,使⽤描绘类图重要符号意义说明:ev(G)基本复杂度是⽤来衡量程序⾮结构化程度的.Iv(G)模块设计复杂度是⽤来衡量模块判定结构,即模块和其他模块的调⽤关系。
v(G)是⽤来衡量⼀个模块判定结构的复杂程度,数量上表现为独⽴路径的条数。
LOC: Line of CodeNCLOC:Non-Commented Line Of CodeP1oo度量LOC NCLOC⽅法个数属性个数Elevator18316952Main9910Midlist262652OrderClass464227diagram类图Sequence DiagramP2oo度量LOC NLOC⽅法个数属性个数Elevator219206107Main111110Midlist333362OrderClass466225diagram类图Sequence DiagramP3oo度量LOC NLOC⽅法个数属性个数Chart 626251Elevator 3072781314Entry 8810Main 121210Midlist 3673222119Orderlist 46 4225类图Sequence Diagram前⾯的时序图看着太复杂,⽽三次作业的结构⼤致⼀致,于是我做了⼀个简易版的sequence diagram。
基于Java的电梯系统实现过程
基于Java的电梯系统实现过程⼀、思路写⼀个简单的电梯系统,⾸先根据⽼师提供的需求,写⼀下基础思路:电梯有最⾼层和最低层,输⼊数字选择正确楼层数输⼊数字⼤于当前楼层,则为上⾏;⼩于当前楼层,则为下⾏每次输⼊数字的时候,需要对同为上⾏的数字或者同为下⾏的数字,进⾏排序所输⼊的⽬标楼层⽤集合存放,循环最低层到最⾼层,如果当前层在集合中存在,显⽰开门,若还有⽬标楼层,则关门,继续到下⼀⽬标楼层。
当选择⼀个⽬标楼层,会⽣成随机重量记录在⽬标楼层,上⾏⽤原来重量加上⽬标楼层重量,下⾏则⽤原来重量减去⽬标楼层重量⼆、实现2.1 电梯类package Ele;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Random;public class Elevator {private List<Integer> upFloorList = new ArrayList<Integer>(); // 上升楼层private List<Integer> downFloorList = new ArrayList<Integer>(); // 下降楼层private int[] storeyWeight; // ⽬标层重量private int capacity; // 电梯最⼤重量private int topFloor; // 电梯最⾼层private int bottomFloor; // 电梯最底层private int nowFloor = 1; // 当前层public Elevator(int bottomFloor, int topFloor, int capacity) { //有参构造⽅法this.topFloor = topFloor;this.bottomFloor = bottomFloor;this.capacity = capacity;// 当前楼层减最低层,就是当前层重量的下标假如当前楼层为5楼,5楼下标就是 5-1 = 4// 初始化⽬标楼层重量,数组⼤⼩ = 最⾼层 - 最低层 + 1storeyWeight = new int[(topFloor - bottomFloor + 1)];}// 设置楼层public void SetFloor(int floorNum) {//如果所选楼层与所在楼层相同,则提⽰if (floorNum == nowFloor) {System.out.println("请选择其它楼层");return;}// ⽣成90-500之间的随机重量Random random = new Random();int thisFloorWeight = random.nextInt(500 - 90 + 1) + 90;int sum = 0;//⽬标楼层增加的重量for (int i = 0; i < storeyWeight.length; i++) {sum += storeyWeight[i];}//原重量+增加重量=当前重量System.out.println(floorNum + "层上来重量:" + thisFloorWeight + ",此时总重:" + (sum + thisFloorWeight));// 如果⽬标楼层总重量 > 最⼤重量,提⽰if (sum + thisFloorWeight > this.capacity) {System.out.println("超重了哟");return;}// 当前输⼊楼层重量加上该楼层新增加重量后的重量storeyWeight[floorNum - bottomFloor] += thisFloorWeight;//如果输⼊楼层数已经在上升或下降楼层的集合中,则只新增重量,不添加楼层if (!upFloorList.contains(floorNum) && !downFloorList.contains(floorNum)) {if (floorNum > nowFloor) {upFloorList.add(floorNum);// 上升楼层升序排序Collections.sort(upFloorList);} else {downFloorList.add(floorNum);// 下降楼层降序排序downFloorList.sort(Collections.reverseOrder());}}}// 上升:从所在层到所选楼层中的最⾼层// 下降:从所在层到所选楼层中的最低层// 获得集合中最后⼀个元素:list.get(list.size()-1);// 启动电梯public void StartElevator() throws InterruptedException {System.out.println("当前第 < " + nowFloor + " > 层");// 上⾏if (upFloorList.size() > 0) {System.out.println("---电梯上⾏---");for (int i = nowFloor + 1; i <= upFloorList.get(upFloorList.size() - 1); i++) {Thread.sleep(500);System.out.println("---第" + i + "层---");if (upFloorList.contains(i)) {System.out.println(" ☆开门☆");nowFloor = i;upFloorList.remove(upFloorList.indexOf(i));storeyWeight[i - bottomFloor] = 0;if (upFloorList.size() > 0) {System.out.println("剩余所选层数为:");Iterator it = upFloorList.iterator();while (it.hasNext()) {int floor = (int) it.next();System.out.print(floor + "层重量:" + storeyWeight[floor - bottomFloor] + " "); }System.out.println();}return;}}}// 下⾏if (downFloorList.size() > 0) {System.out.println("---电梯下⾏---");for (int i = nowFloor - 1; i >= bottomFloor; i--) {Thread.sleep(500);System.out.println("---第" + i + "层---");if (downFloorList.contains(i)) {System.out.println(" ☆开门☆");nowFloor = i;downFloorList.remove(downFloorList.indexOf(i));storeyWeight[i - bottomFloor] = 0;if (downFloorList.size() > 0) {System.out.println("剩余所选层数为:");Iterator it = downFloorList.iterator();while (it.hasNext()) {int floor = (int) it.next();System.out.print(floor + "层重量:" + storeyWeight[floor - bottomFloor] + " "); }System.out.println();}return;}}}System.out.println("⽆客");}}2.2 程序⼊⼝package pany;import Ele.Elevator;import java.util.Scanner;public class Main {public static void main(String[] args) throws InterruptedException {// 创建⼀个电梯int bottomFloor = 1; // 最低层1楼int topFloor = 12; // 最⾼层12楼int capacity = 1000; // 最⼤承重1000Elevator elvator = new Elevator(bottomFloor, topFloor, capacity);System.out.println("当前电梯可选择" + bottomFloor + "-" + topFloor + "层,请选择楼层数(输⼊-1表⽰关闭电梯门):");//输⼊内容Scanner scanner = new Scanner(System.in);while (scanner.hasNextLine()) {//如果输⼊不是数字,提⽰后,再次输⼊if (!scanner.hasNextInt()) {System.out.println("请输⼊数字!");scanner.next();}//输⼊是数字则进⾏以下操作else {int num = scanner.nextInt();//若输⼊数字为-1,意为结束输⼊,启动电梯if (num == -1) {System.out.println("------------------------");System.out.println("电梯门关闭,开始启动");elvator.StartElevator();} else if (num > topFloor || num < bottomFloor || num == 0) {//若输⼊数字不符合楼层数,则提⽰并再次输⼊System.out.println("请选择1-12楼层。
电梯模拟源代码
flag=1;}
}
if(flag==1)
{
time=Time+OutLift;
RequestShow(fp,Time,time);
Time=time;
}
}
int LiftNotFull()
{
int i;
for(i=1;i<24;i=i+2)
if(PassengerInLift[i]==-1) return 1;
{
QueueGet(Passenger[2],&I);
if(I.sign==1)
{Up=1,Down=0;break;}
else {Down=1,Up=0;break;}
}
if(QueueNotEmpty(Passenger[0]))
{
QueueGet(Passenger[0],&I);
if(I.sign==1)
{
if(QueueNotEmpty(Passenger[LiftNow]))
{Time=time;GoinLift(fp);}
else {Time=time;break;}
}
}
}
void LiftStop1(FILE *fp)
{
int i,j,small=8;
LQNode I;
LiftNow=1;
while(1)
{
I.Num=data[j-1];
I.WaitFloor=data[j];
I.TargetFloor=data[j+1];
I.AskTime=data[j+2];
I.sign=0;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;public class LiftMainTest{public static void main(String args[]){new LiftTest("电梯测试");}}//批量数据测试对话框class Dialog extends JDialog implements ActionListener {int Message=0;JPanel DJPanel=new JPanel();JTextField TestField[]=new JTextField[16];JLabel TestLabel1=new JLabel("时间");JLabel TestLabel2=new JLabel("人数");JLabel TestLabel3=new JLabel("起始楼层");JLabel TestLabel4=new JLabel("目标楼层");JButton ok=new JButton("确定");JButton cancel=new JButton("取消");Dialog(JFrame f,String s,boolean b){super(f,s,b);DJPanel.setLayout(new GridLayout(7,3));for(int i=0;i<=15;i++){TestField[i]=new JTextField(4);}DJPanel.add(TestLabel1);DJPanel.add(TestLabel2);DJPanel.add(TestLabel3);DJPanel.add(TestLabel4);DJPanel.add(TestField[0]);DJPanel.add(TestField[1]);DJPanel.add(TestField[2]);DJPanel.add(TestField[3]);DJPanel.add(TestField[4]);DJPanel.add(TestField[5]);DJPanel.add(TestField[6]);DJPanel.add(TestField[7]);DJPanel.add(TestField[8]);DJPanel.add(TestField[9]);DJPanel.add(TestField[10]);DJPanel.add(TestField[11]);DJPanel.add(TestField[12]);DJPanel.add(TestField[13]);DJPanel.add(TestField[14]);DJPanel.add(TestField[15]);DJPanel.add(ok);DJPanel.add(cancel);add(DJPanel);ok.addActionListener(this);cancel.addActionListener(this);setBounds(450,170,300,300);}public void actionPerformed(ActionEvent e)//Dialog监听函数{if(e.getSource()==ok){Message=1;setVisible(false);}else if(e.getSource()==cancel){Message=-1;setVisible(false);}else{;}}}//LiftTest类class LiftTest extends JFrame implements ActionListener {Dialog mydialog;JMenuBar menubar;JMenu menu,submenu,submenuhelp;JMenuItem item1,item2,menuitemhelp;//变量定义int x;int y;int LIsRun=0;//左电梯是否在运行(0或1)int RIsRun=0;//右电梯是否在运行(0或1)int LDirection=0;//左电梯运行方向int RDirection=0;//右电梯运行方向int LWantLevel=0;//乘客目的层数int RWantLevel=0;int LNowLevel=0;//乘客开始时所在层数int RNowLevel=0;int LLiftNowLevel=1;//左电梯目前所在层数int RLiftNowLevel=1;//右电梯目前所在层数int WantDirection=0;//乘客目标运行方向int WaitPeopleNum[]=new int[11];//保留数组(未用)int a=0;int b=0;//线程定义LIO lio=new LIO();RIO rio=new RIO();Thread LStartThread=new Thread(lio);Thread RStartThread=new Thread(rio);//上下电梯的按钮定义JButton Blue10=new JButton(new ImageIcon("10x.gif"));JButton Blue9=new JButton(new ImageIcon("9x.gif"));JButton Blue8=new JButton(new ImageIcon("8x.gif"));JButton Blue7=new JButton(new ImageIcon("7x.gif"));JButton Blue6=new JButton(new ImageIcon("6x.gif"));JButton Blue5=new JButton(new ImageIcon("5x.gif"));JButton Blue4=new JButton(new ImageIcon("4x.gif"));JButton Blue3=new JButton(new ImageIcon("3x.gif"));JButton Blue2=new JButton(new ImageIcon("2x.gif"));JButton Red9=new JButton(new ImageIcon("9s.gif"));JButton Red8=new JButton(new ImageIcon("8s.gif"));JButton Red7=new JButton(new ImageIcon("7s.gif"));JButton Red6=new JButton(new ImageIcon("6s.gif"));JButton Red5=new JButton(new ImageIcon("5s.gif"));JButton Red4=new JButton(new ImageIcon("4s.gif"));JButton Red3=new JButton(new ImageIcon("3s.gif"));JButton Red2=new JButton(new ImageIcon("2s.gif"));JButton Red1=new JButton(new ImageIcon("1s.gif"));//电梯门定义JButton LLiftLDoor=new JButton(new ImageIcon("LLiftLDoor.gif"));//设置门图标JButton LLiftRDoor=new JButton(new ImageIcon("LLiftRDoor.gif"));//设置门图标JButton RLiftLDoor=new JButton(new ImageIcon("RLiftLDoor.gif"));//设置门图标JButton RLiftRDoor=new JButton(new ImageIcon("RLiftRDoor.gif"));//设置门图标//电梯内部按钮定义JButton LPressButton1=new JButton("1");JButton LPressButton2=new JButton("2");JButton LPressButton3=new JButton("3");JButton LPressButton4=new JButton("4");JButton LPressButton5=new JButton("5");JButton LPressButton6=new JButton("6");JButton LPressButton7=new JButton("7");JButton LPressButton8=new JButton("8");JButton LPressButton9=new JButton("9");JButton LPressButton10=new JButton("10");JButton RPressButton1=new JButton("1");JButton RPressButton2=new JButton("2");JButton RPressButton3=new JButton("3");JButton RPressButton4=new JButton("4");JButton RPressButton5=new JButton("5");JButton RPressButton6=new JButton("6");JButton RPressButton7=new JButton("7");JButton RPressButton8=new JButton("8");JButton RPressButton9=new JButton("9");JButton RPressButton10=new JButton("10");量数据测试”按钮的Panel //组件定义JLabel LL=new JLabel("当前电梯内部人数:");JLabel RL=new JLabel("当前电梯内部人数:");JButton Start=new JButton("开始电梯调度模拟");//开始电梯调度模拟按钮JButton Test=new JButton("开始批量数据测试");//开始批量数据测试按钮JTextArea LTextArea=new JTextArea(5,5);JTextArea RTextArea=new JTextArea(5,5);//电梯调度函数Cal(LIsRun,LLiftNowLevel,q,LDirection)int Cal(int x,int y,int z,int w){return(x*(y-z)*w);}//方法函数LiftTest(String s){super(s);setSize(1000,600);setLocation(100,50);//Dialogmydialog=new Dialog(this,"批量数据测试",true);//菜单项设置menubar=new JMenuBar();menu=new JMenu("菜单");submenu=new JMenu("联系作者");submenuhelp=new JMenu("帮助");item1=new JMenuItem("程序简介");item2=new JMenuItem("源代码");menu.add(item1);menu.addSeparator();menu.add(item2);menu.addSeparator();menu.add(submenu);menu.addSeparator();menu.add(submenuhelp);submenu.add(new JMenuItem("作者简介"));submenuhelp.add(new JMenuItem("使用帮助"));menubar.add(menu);setJMenuBar(menubar);//面板布局管理器设置WindowsPanel.setLayout(new GridLayout(1,6)); WaitPeopleNumPanel.setLayout(new GridLayout(10,1)); LeftPanel.setLayout(new GridLayout(3,1));RightPanel.setLayout(new GridLayout(3,1));LeftLiftPanel.setLayout(null);//左电梯运动轨道Panel布局管理器设为空RightLiftPanel.setLayout(null);//右电梯运动轨道Panel布局管理器设为空UpDownButtonPanel.setLayout(new GridLayout(10,2)); LButtonPanel.setLayout(new GridLayout(4,3));RButtonPanel.setLayout(new GridLayout(4,3));LeftLiftPanel.setBackground(Color.green);RightLiftPanel.setBackground(Color.green); UpDownButtonPanel.setBackground(Color.yellow); UpMainPanel.setLayout(new GridLayout(1,2));LBoxPanel.setLayout(null);//左电梯箱Panel布局管理器设为空RBoxPanel.setLayout(null);//右电梯箱Panel布局管理器设为空//电梯箱设置LBoxPanel.setSize(165,51);RBoxPanel.setSize(165,51);LBoxPanel.setLocation(0,459);RBoxPanel.setLocation(0,459);LeftLiftPanel.add(LBoxPanel);RightLiftPanel.add(RBoxPanel);//电梯门设置LLiftLDoor.setEnabled(false);LLiftRDoor.setEnabled(false);RLiftLDoor.setEnabled(false);RLiftRDoor.setEnabled(false);LLiftLDoor.setSize(82,51);LLiftRDoor.setSize(82,51);RLiftLDoor.setSize(82,51);RLiftRDoor.setSize(82,51);LLiftLDoor.setLocation(0,0);LLiftRDoor.setLocation(82,0);RLiftLDoor.setLocation(0,0);RLiftRDoor.setLocation(82,0);LBoxPanel.add(LLiftLDoor);LBoxPanel.add(LLiftRDoor);RBoxPanel.add(RLiftLDoor);RBoxPanel.add(RLiftRDoor);//分别添加两个电梯的10个按钮LButtonPanel.add(LPressButton1);//左电梯LButtonPanel.add(LPressButton2); LButtonPanel.add(LPressButton3); LButtonPanel.add(LPressButton4); LButtonPanel.add(LPressButton5); LButtonPanel.add(LPressButton6); LButtonPanel.add(LPressButton7); LButtonPanel.add(LPressButton8); LButtonPanel.add(LPressButton9); LButtonPanel.add(LPressButton10); RButtonPanel.add(RPressButton1);//右电梯RButtonPanel.add(RPressButton2); RButtonPanel.add(RPressButton3); RButtonPanel.add(RPressButton4); RButtonPanel.add(RPressButton5); RButtonPanel.add(RPressButton6); RButtonPanel.add(RPressButton7); RButtonPanel.add(RPressButton8); RButtonPanel.add(RPressButton9); RButtonPanel.add(RPressButton10);//添加上下电梯按钮至UpDownButtonPanel面板JButton Unabled1=new JButton();Unabled1.setEnabled(false);JButton Unabled2=new JButton();Unabled2.setEnabled(false); UpDownButtonPanel.add(Unabled1);//开始第一个空着UpDownButtonPanel.add(Blue10); UpDownButtonPanel.add(Red9); UpDownButtonPanel.add(Blue9); UpDownButtonPanel.add(Red8); UpDownButtonPanel.add(Blue8);UpDownButtonPanel.add(Red7); UpDownButtonPanel.add(Blue7); UpDownButtonPanel.add(Red6); UpDownButtonPanel.add(Blue6); UpDownButtonPanel.add(Red5); UpDownButtonPanel.add(Blue5); UpDownButtonPanel.add(Red4); UpDownButtonPanel.add(Blue4); UpDownButtonPanel.add(Red3); UpDownButtonPanel.add(Blue3); UpDownButtonPanel.add(Red2); UpDownButtonPanel.add(Blue2); UpDownButtonPanel.add(Red1); UpDownButtonPanel.add(Unabled2);//最后一个空着//等待人数文本框定义JTextField Text10=new JTextField(" 10楼等待人数:",8); Text10.setEditable(false);JTextField Text9=new JTextField(" 9楼等待人数:",8); Text9.setEditable(false);JTextField Text8=new JTextField(" 8楼等待人数:",8); Text8.setEditable(false);JTextField Text7=new JTextField(" 7楼等待人数:",8); Text7.setEditable(false);JTextField Text6=new JTextField(" 6楼等待人数:",8); Text6.setEditable(false);JTextField Text5=new JTextField(" 5楼等待人数:",8); Text5.setEditable(false);JTextField Text4=new JTextField(" 4楼等待人数:",8); Text4.setEditable(false);JTextField Text3=new JTextField(" 3楼等待人数:",8); Text3.setEditable(false);JTextField Text2=new JTextField(" 2楼等待人数:",8); Text2.setEditable(false);JTextField Text1=new JTextField(" 1楼等待人数:",8); Text1.setEditable(false);//向UpMainPanel中添加组件UpMainPanel.add(Start);UpMainPanel.add(Test);//添加等待人数文本框至WaitPeopleNumPanel面板WaitPeopleNumPanel.add(Text10); WaitPeopleNumPanel.add(Text9); WaitPeopleNumPanel.add(Text8); WaitPeopleNumPanel.add(Text7); WaitPeopleNumPanel.add(Text6);WaitPeopleNumPanel.add(Text5);WaitPeopleNumPanel.add(Text4);WaitPeopleNumPanel.add(Text3);WaitPeopleNumPanel.add(Text2);WaitPeopleNumPanel.add(Text1);//分别向LeftPanel(左电梯提示器),RightPanel(右电梯提示器)添加相应组件LeftPanel.add(LButtonPanel);LeftPanel.add(LL);LeftPanel.add(LTextArea);RightPanel.add(RButtonPanel);RightPanel.add(RL);RightPanel.add(RTextArea);//添加至总面板WindowsPanel.add(WaitPeopleNumPanel);WindowsPanel.add(LeftPanel);WindowsPanel.add(LeftLiftPanel);WindowsPanel.add(UpDownButtonPanel);WindowsPanel.add(RightLiftPanel);WindowsPanel.add(RightPanel);//添加监听器Start.addActionListener(this);Test.addActionListener(this);Blue10.addActionListener(this);Blue9.addActionListener(this);Blue8.addActionListener(this);Blue7.addActionListener(this);Blue6.addActionListener(this);Blue5.addActionListener(this);Blue4.addActionListener(this);Blue3.addActionListener(this);Blue2.addActionListener(this);Red9.addActionListener(this);Red8.addActionListener(this);Red7.addActionListener(this);Red6.addActionListener(this);Red5.addActionListener(this);Red4.addActionListener(this);Red3.addActionListener(this);Red2.addActionListener(this);Red1.addActionListener(this);Monitor mon=new Monitor();//新建监听器对象LPressButton1.addActionListener(mon);LPressButton2.addActionListener(mon);LPressButton3.addActionListener(mon);LPressButton4.addActionListener(mon);LPressButton5.addActionListener(mon);LPressButton6.addActionListener(mon);LPressButton7.addActionListener(mon);LPressButton8.addActionListener(mon);LPressButton9.addActionListener(mon);LPressButton10.addActionListener(mon);RPressButton1.addActionListener(mon);RPressButton2.addActionListener(mon);RPressButton3.addActionListener(mon);RPressButton4.addActionListener(mon);RPressButton5.addActionListener(mon);RPressButton6.addActionListener(mon);RPressButton7.addActionListener(mon);RPressButton8.addActionListener(mon);RPressButton9.addActionListener(mon);RPressButton10.addActionListener(mon);//添加至窗口add(WindowsPanel,BorderLayout.CENTER);//主窗体添加至中间add(UpMainPanel,BorderLayout.NORTH);//UpMainPanel添加至北面setVisible(true);//Frame默认是不可见的,所有Panel都是默认可见的validate();//设置组件可见setResizable(false);//设置整个窗体是不可调整大小的setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//右上角“叉号”关闭按钮响应函数}//Runnable接口函数定义class LIO implements Runnable//左电梯接口函数{public void run(){while(true){try{Thread.sleep(5);}//避免CPU使用率达到100%catch(InterruptedException a){}while(LNowLevel!=0){int q=x;if(Cal(LIsRun,LLiftNowLevel,q,LDirection)<=Cal(RIsRun,RLiftNowLevel,q, RDirection))//左电梯近{LNowLevel=0;if(LLiftNowLevel<=q){for(int i=LLiftNowLevel;i<q;i++){LBoxPanel.setLocation(0,(459-i*51));LTextArea.append("妹妹\n");RTextArea.append("哥哥\n");LLiftNowLevel=i;LIsRun=1;LDirection=1;if(LNowLevel!=0&&i==(LNowLevel-1)&&LDirection==1&&WantDirecti on==1)//停留等待4秒{for(int v=1;v<=82;v++)//开门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-v),0);LLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++)//关门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((v-82),0);LLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}else{for(int i=LLiftNowLevel;i>q;i--){LBoxPanel.setLocation(0,(459-(i-2)*51));LTextArea.append("妹妹");RTextArea.append("哥哥");LLiftNowLevel=i;LIsRun=1;LDirection=-1;if(LNowLevel!=0&&i==(LNowLevel+1)&&LDirection==-1&&WantDirection= =-1)//停留等待4秒{for(int v=1;v<=82;v++)//开门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-v),0);LLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++)//关门{try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((v-82),0);LLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}LIsRun=0;LDirection=0;LLiftNowLevel=q;}else{break;}for(int e=1;e<=82;e++)//开门{if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((-e),0);LLiftRDoor.setLocation((82+e),0);}for(int e=1;e<=82;e++){if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}}for(int e=1;e<=82;e++)//关门{if(a==1)//识别用户按下电梯箱内小按钮{x=LWantLevel;LNowLevel=LWantLevel;a=0;//"a"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}LLiftLDoor.setLocation((e-82),0);LLiftRDoor.setLocation((163-e),0);}}}}}class RIO implements Runnable//右电梯接口函数{public void run(){while(true){try{Thread.sleep(5);}catch(InterruptedException a){}while(RNowLevel!=0){int p=y;if(Cal(LIsRun,LLiftNowLevel,p,LDirection)>=Cal(RIsRun,RLiftNowLevel,p,RDir ection))//右电梯近{RNowLevel=0;if(RLiftNowLevel<=p){for(int i=RLiftNowLevel;i<p;i++){RBoxPanel.setLocation(0,(459-i*51));LTextArea.append("妹妹\n");RTextArea.append("哥哥\n");RLiftNowLevel=i;RIsRun=1;RDirection=1;if(RNowLevel!=0&&i==(RNowLevel-1)&&RDirection==1&&WantDirec tion==1)//停留等待4秒{for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-v),0);RLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((v-82),0);RLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}else{for(int i=RLiftNowLevel;i>p;i--){RBoxPanel.setLocation(0,(459-(i-2)*51));LTextArea.append("妹妹");RTextArea.append("哥哥");RLiftNowLevel=i;RIsRun=1;RDirection=-1;if(RNowLevel!=0&&i==(RNowLevel+1)&&RDirection==-1&&WantDirection ==-1)//停留等待4秒{for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-v),0);RLiftRDoor.setLocation((82+v),0);}try{Thread.sleep(4000);}catch(InterruptedException a){}for(int v=1;v<=82;v++){try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((v-82),0);RLiftRDoor.setLocation((163-v),0);}}try{Thread.sleep(1000);}catch(InterruptedException a){}}}RIsRun=0;RDirection=0;RLiftNowLevel=p;}else{break;}for(int e=1;e<=82;e++){if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((-e),0);RLiftRDoor.setLocation((82+e),0);}for(int e=1;e<=82;e++)if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}}for(int e=1;e<=82;e++){if(b==1)//识别用户按下电梯箱内小按钮{y=RWantLevel;RNowLevel=RWantLevel;b=0;//"b"值复位}try{Thread.sleep(49);}catch(InterruptedException a){}RLiftLDoor.setLocation((e-82),0);RLiftRDoor.setLocation((163-e),0);}}}}}//"开始"按钮和"上下键"接口函数public void actionPerformed(ActionEvent e){if(e.getSource()==Start){LStartThread.start();RStartThread.start();}else if(e.getSource()==Test){mydialog.setVisible(true);}else if(e.getSource()==Red1){LNowLevel=1;RNowLevel=1;x=1;y=1;WantDirection=1; }else if(e.getSource()==Red2)LNowLevel=2;RNowLevel=2;x=2;y=2;WantDirection=1;}else if(e.getSource()==Red3){LNowLevel=3;RNowLevel=3;x=3;y=3;WantDirection=1;}else if(e.getSource()==Red4){LNowLevel=4;RNowLevel=4;x=4;y=4;WantDirection=1;}else if(e.getSource()==Red5){LNowLevel=5;RNowLevel=5;x=5;y=5;WantDirection=1;}else if(e.getSource()==Red6){LNowLevel=6;RNowLevel=6;x=6;y=6;WantDirection=1;}else if(e.getSource()==Red7){LNowLevel=7;RNowLevel=7;x=7;y=7;WantDirection=1;}else if(e.getSource()==Red8){LNowLevel=8;RNowLevel=8;x=8;y=8;WantDirection=1;}else if(e.getSource()==Red9){LNowLevel=9;RNowLevel=9;x=9;y=9;WantDirection=1;}else if(e.getSource()==Blue10){LNowLevel=10;RNowLevel=10;x=10;y=10;WantDirection=-1; }else if(e.getSource()==Blue9){LNowLevel=9;RNowLevel=9;x=9;y=9;WantDirection=-1;}else if(e.getSource()==Blue8){LNowLevel=8;RNowLevel=8;x=8;y=8;WantDirection=-1;}else if(e.getSource()==Blue7)LNowLevel=7;RNowLevel=7;x=7;y=7;WantDirection=-1; }else if(e.getSource()==Blue6){LNowLevel=6;RNowLevel=6;x=6;y=6;WantDirection=-1; }else if(e.getSource()==Blue5){LNowLevel=5;RNowLevel=5;x=5;y=5;WantDirection=-1; }else if(e.getSource()==Blue4){LNowLevel=4;RNowLevel=4;x=4;y=4;WantDirection=-1; }else if(e.getSource()==Blue3){LNowLevel=3;RNowLevel=3;x=3;y=3;WantDirection=-1; }else if(e.getSource()==Blue2){LNowLevel=2;RNowLevel=2;x=2;y=2;WantDirection=-1; }else{;}}//左右电梯电梯箱内小按钮监听器class Monitor implements ActionListener{public void actionPerformed(ActionEvent e){if(e.getSource()==LPressButton1){LWantLevel=1;a=1;}else if(e.getSource()==LPressButton2){LWantLevel=2;a=1;}else if(e.getSource()==LPressButton3){LWantLevel=3;a=1;else if(e.getSource()==LPressButton4) {LWantLevel=4;a=1;}else if(e.getSource()==LPressButton5) {LWantLevel=5;a=1;}else if(e.getSource()==LPressButton6) {LWantLevel=6;a=1;}else if(e.getSource()==LPressButton7) {LWantLevel=7;a=1;}else if(e.getSource()==LPressButton8) {LWantLevel=8;a=1;}else if(e.getSource()==LPressButton9) {LWantLevel=9;a=1;}else if(e.getSource()==LPressButton10) {LWantLevel=10;a=1;}else if(e.getSource()==RPressButton1) {RWantLevel=1;b=1;}else if(e.getSource()==RPressButton2) {RWantLevel=2;b=1;}else if(e.getSource()==RPressButton3) {RWantLevel=3;b=1;}else if(e.getSource()==RPressButton4) {RWantLevel=4;b=1;else if(e.getSource()==RPressButton5){RWantLevel=5;b=1;}else if(e.getSource()==RPressButton6){RWantLevel=6;b=1;}else if(e.getSource()==RPressButton7){RWantLevel=7;b=1;}else if(e.getSource()==RPressButton8){RWantLevel=8;b=1;}else if(e.getSource()==RPressButton9){RWantLevel=9;b=1;}else if(e.getSource()==RPressButton10){RWantLevel=10;b=1;}else{;}}}}/*//////////////////////////////////////////////////////////////////////////////////文件说明:程序用java语言编写,自行安装JDK(下载网址:)。