版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、A1 系统描述1 功能描述本电梯系统用来控制一台运行于一个具有N层的大楼电梯,它具有上升、下降、开门、关门、载客的基本功能。大楼的每一层都有:(1) 两个指示灯 这两个指示灯分别用于指示当前所在的层数和电梯的当前状态(上行、下行或停止);(2) 电梯锁 用于将本层的电梯门锁住,并使本楼层的电梯按钮失效,电梯里相应的按钮也失效,使得电梯不能也不可能停在本层;(3) 按钮 除了第一层和顶层,每一层都有两个按钮(上行、下行),乘客可以呼叫上楼或下楼,顶楼只有一个下楼按钮,而第一层只有一个上楼按钮。电梯里面具有:(1) 标示从“1”到“N”的N个按钮,用于让乘客选择所要的层数;(2) 关门按钮 当乘客
2、按下此按钮时,电梯门如果开着将关上,否则不执行任何操作;(3) 开门按钮 当乘客按下此按钮时,电梯如果停在某一层,电梯门将打开,否则不执行任何操作;(4) 超重测试和警报装置 电梯的地面有超重感应装置,当电梯载重达到某一个值时,电梯“超重警报铃”发出超重警报,并且不执行关门命令。2 关键实现方法描述用“最大距离循环”来说明电梯的运行方式。也说是说,电梯处于上行状态时就一直上行直到不再有上行任务,电梯处于下行状态时就一直下行直到不再有下行任务。当电梯正在上行时,如果上行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起队列头的改变。(1) 新的请求插入到上行
3、队列头。(2) 电梯到达某个楼层将这个楼层的请求从上行队列的队列头删除,后继的更高楼层号成为对列头。当电梯正在下行时,如果下行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起下行队列头的改变。(1) 新的请求插入到下行队列头。(2) 电梯到达某个楼层将这个楼层的请求从下行队列的队列头删除,后继的更高楼层号成为对列头。在电梯上行过程中,当上行队列中没有比电梯当前所在的楼层更高的楼层号时,发送电梯目的地的开始从下行队列中取得。同样,在电梯下行过程中,当下行队列中没有比电梯当前所在的楼层更低的楼层号时,发送电梯目的地的开始从上行队列中取得。如此反复,当两个队列
4、中都没有数据时,电梯暂停。当电梯到达某层时,此层的所有请求按钮全部复位(包括楼层和电梯里的按钮),电梯门自动开启,在一段时间内如果乘客没有按下开门或关门的按钮,电梯将自动关门。为了保证电梯系统的安全,在任何不安全的情况下,紧急制动就会被促发,电梯被强制停止。A2 用例模型1 角色识别根据前面系统的描述,可以确定与该系统交互的两个角色:电梯管理员(elevator manager)和乘客(passenger),其中乘客是电梯的主要使用者,电梯管理员的责任是对电梯进行维护(见图A1)。角色:乘客角色职责:乘电梯上下楼开电梯门关电梯门角色识别问题:(1) 使用系统主要部分(2)对系统运行结果感兴趣角
5、色:电梯管理员角色职责:开电梯锁关电梯锁处理电梯紧急事故角色识别问题:(1)维护管理,保持系统正常运行(2)对系统运行结果感兴趣图A12 用例识别在角色的基础上,可以确定系统的用例,做法是针对每一个角色考查它要求系统提供的功能,它使用系统的哪些功能,经过分析,可得到如下的用例。乘客相关的用例:l 按下某楼层的上行按钮(go up stair)。l 按下某楼层的下行按钮(go down stair)。l 按下某电梯内的某一层楼按钮(go to floor request)。l 按下关门按钮 (close door)。l 按下开门按钮(open door)。l 超重测试(overweight te
6、st)。电梯管理员的用例:l 锁住某层电梯锁(lock floor)。l 打开某层电梯锁(open floor)。用例的描述如下:用例1 按下某楼层的上行按钮(go up stair)(1) 乘客按下第M层的上行按钮。(2) M被插入到上行队列的合适位置。(3) 如果M被插到上行队列头。l 如果电梯正处于上行状态。将M发送给电梯作为目的地。l 如果电梯处于停止状态。将M发送给电梯作为目的地。(4)电梯到达此楼层。 (5)电梯自动打开门(用例9)。(6)乘客进入电梯。(7)超重测试(用例6)。用例2 按下某楼层的下行按钮(go down stair)。(1) 乘客按下第M层的下行按钮。(2) M
7、被插入到下行队列的合适位置。(3) 如果M被插到下行队列头。l 如果电梯正处于下行状态。将M发送给电梯作为目的地。l 如果电梯处于停止状态 将M发送给电梯作为目的地。(4) 电梯到达此楼层。(5) 电梯自动打开门(用例9)。(6) 乘客进入电梯。(7) 超重测试(用例9)。用例3 按下电梯内的某一楼层按钮(go to floor request)(1) 乘客按下电梯内L层的按钮。(2) 如果被按下的楼层号L比电梯当前所在的楼层号高。l 将此楼层号插入到上行队列的合适位置。l 如果L被插入到上行队列头。如果电梯正处于上行状态。将L发送给电梯作为电梯的目的地。(3) 如果被按下的层号L比电梯当前所
8、在的楼层低。l 将此楼层号L插入到下行队列的合适位置。l 如果L被插入到下行队列头。如果电梯正处于下行状态。将L发送给电梯作为目的地。(4) 电梯到达目的楼层。(5) 电梯自动开门(用例9)。用例4按下关门按钮(request close door)(1) 如果电梯门关着。保持电梯门关闭状态。(2) 如果电梯门开着。关闭电梯门。用例5 按下开门按钮(request open door)如果电梯停在某一层。l 如果电梯门关着。打开电梯门。l 如果电梯门开着。保持电梯门开状态。用例6 超重测试(overweight test)(1) 乘客进入电梯。(2) 如果电梯超重感应装置检测到超重。l 电梯发
9、出超重警报,并拒绝关闭电梯门。l 乘客走出电梯。l 电梯解除超重警报,并允许关闭电梯门。用例7 锁住某层电梯锁(lock floor)此层的楼层请求按钮和电梯内的楼层按钮失效。用例8 打开某层电梯锁(open floor)此层的楼层请求按钮和电梯内的楼层按钮恢复正常。用例9 自动打开电梯门(auto open door)(1) 电梯到达某楼层。(2) 电梯自动开门。用例10 自动关闭电梯门(auto close door)(1) 电梯门打开的状态达到设置的时限。(2) 关闭电梯门。A3 类模型 根据分析,我们可以得到下面这些类。 乘客类(Passenger)、管理员类(Manager)、电梯类
10、(Elevator)、电梯门类(ElevatorDoor)、楼层的上行请求按钮类(Go Up Request)、楼层的下请求按钮类(Go Down Request)、电梯里的楼层按钮类(Go To Floor Request)、楼层锁类(lock)、指示灯类(Indicate Light)、队列类(Queue)、定时器类(Timer)、异常处理类(Expection)。1 乘客类(Passenger)PassengerPress()2 管理员类(Manager)ManagerLockFloor()OpenFloor()3 电梯类(Elevator)属性State表示电梯的状态(停止、上行、下行
11、),Position表示电梯所在的楼层(1-N),IsOverWeight标识电梯是否超重,IsNormal用于标识电梯是否正常。方法StartUp(Floor)表示启动电梯上行到Floor层,StartDown(Floor)表示启动电梯下行到Floor层,Stop表示电梯停下来,Warn()启动电梯超重警报,CancelWarn取消电梯超重警报。ElevatorStatePositionIsOverWeightIsNormalStartUp(Floor)StartDown(Floor)Stop()Warn()CancelWarn()4 梯门类(ElevatorDoor)属性State表示电梯
12、门的状态(开或关),方法Open()表示打开电梯门,Close()表示关闭电梯门。ElevatorDoorStateOpen()Close5 楼层的上行请求按钮类(Go Up Request)、楼层的下行请求按钮类(Go Down Request)、电梯里的楼层按钮类(Go To Floor Request)属性State表示按钮是否已经被按下,Enabled表示按钮是否能用(如果被管理员锁住就不能用),OnFloor表示按钮对应的楼层号,方法Press()表示按下按钮,Reset()表示复位按钮, 6 指示灯类(Indicate Light)指示灯分为楼层指示灯和电梯状态指示灯,其中Stat
13、e属性表示指示灯的状态(亮或灭)。楼层指示灯有Show(Floor)方法用于显示电梯所在楼层数,电梯状态指示灯有Show(UporDown)方法用于显示电梯上行或下行。7 楼层锁类(lock)属性State表示楼层锁的状态(关或开),OnFloor表示锁所在的楼层数,方法On()表示开锁,Off()表示关锁。LockFloorStateOnFloorOn()Off()8 队列类(Queue)队列类用于创建上行和下行队列,IsEmpty属性表示队列是否为空,方法Insert(Elevator)用于插入元素,DeleteHead()方法用于删除队列头元素,Send(HeadElement)用于将队
14、列头发送给电梯。QueueIsEmptyInsert(Elevator)DeleteHead()Send(HeadElement)9 定时器类(Timer) Time属性用于设置定时的时间长,StartTimer()方法用于启动计时,当计时结束时执行Doing()方法并停止计时。TimerTimeStartTimer()Doing()10 异常处理类(Expection)Type属性用语标识发生的异常类型,Source记录异常源,Doing()方法用于当发生异常时做出的处理。ExceptionTypeSourceDoing()11 类关系图。 实训内容实训内容一 绘制电梯图形实训目的(1) 学
15、会使用Java.awt包中的Graphics类控制和显示用户自定义界面成分,如字体、颜色和图形。(2) 掌握简单的图形动画效果。实训要求创建Applet程序,实现土5-1(a)所示简单的电梯二维图形,并当单击“开门“、“关门”按钮时实现图形上的关门、开门动作。如图5-1(b)就是单击开门后正在开门的过程中。实训指导java.awt包提供了控制字体的Font类、控制颜色的Color类。通过这两个类的属性的设置可以实现对界面上的字体和颜色的控制。如closeDoor.setFont(new Font(“TimesRoman”,Font.BOLD,12);这个语句将closeDoor上显示的文字颜色
16、设置成红色。Java.awt包还提供了用户绘图操作的类Graphics,其中包括了许多绘制文字和图形的相关方法。使用Graphics类可以绘制线、圆和椭圆、矩形和多边形、显示图像、动画和各种字体。如draeLine(int x1,int y1,int x2,int y2),在坐标(x1,y1)、(x2,y2)之间画一条直线。drawRect(int x,int y,int width,int height)方法和fillRect(int x,int y,int width,int height)方法分别用当前颜色在指定位置绘制一个矩形框和一个填充的矩形,其中参数x,y分别是矩形的左上角坐标;w
17、idth,height分别用语指定矩形的宽和高。DrawOval(int x,int y,int width,int height)方法和fillOval(int x,int y,int width,int height)方法可以在指定的矩形区域内绘制椭圆,其中的参数x、y、width、height分别表示矩形的左上角x、y坐标、宽和高。要实现以上自定义成分,还要借助于Applet类的paint()方法,由该方法画出实际的图形。当Applet运行时,将自动创建一个Graphics类的对象g,并把这个对象参数传递给paint()方法。在paint()方法中,就可以调用Graphics类提供的绘制
18、图形和文字的方法了。下面是程序的实现部分。import java.awt.*;import java.applet.*;public class Applet1 extends java.applet.Applet Button closeDoor=new Button(关门); Button openDoor=new Button(开门); int yPos=60,50,50,60,60; int xPos=30,40,90,100,30; int flag=2; public void init() closeDoor.setFont(new Font(TimesRoman,Font.BO
19、LD,12); closeDoor.setForeground(new Color(255,0,0); add(closeDoor); openDoor.setFont(new Font(TimesRoman,Font.BOLD,12); openDoor.setForeground(new Color(0,255,0); add(openDoor); public boolean action(Event e,Object o) if(e.target=closeDoor) flag=0; else if(e.target=openDoor) flag=1; repaint(); retur
20、n true; public void paint(Graphics g) g.setColor(new Color(150,150,50); g.fillRect(30,60,70,90); g.setColor(new Color(20,20,150); g.fillPolygon(xPos,yPos,4); g.setColor(new Color(190,150,150); g.drawRect(30,60,70,2); g.setColor(new Color(0,0,0); g.drawOval(105,72,18,18); g.setColor(new Color(0,0,255
21、); g.fillArc(101,75,27,27,60,60); g.setColor(new Color(0,0,0); g.drawOval(105,100,18,18); g.setColor(new Color(0,0,255); g.fillArc(102,88,27,27,-120,60); if(flag=0) g.setColor(new Color(150,40,40); for(int i=0;i=33;i+) g.draw3DRect(30,63,1+i,86,true); g.draw3DRect(99-i,63,1+i,86,true); else if(flag=
22、1) g.setColor(new Color(150,40,50); g.draw3DRect(30,63,34,86,true); g.setColor(new Color(150,40,50); g.draw3DRect(66,63,34,86,true); g.setColor(new Color(150,150,40); for(int i=0;i=50;ElePositionPix-) g.drawImage(Elevator_Image,50,ElePositionPix,this); try Thread.sleep(100); catch(InterruptedExcepti
23、on e) showStatus(e.toString(); else if(flag=1) for(;ElePositionPix3000) throw(new OverWeightExpception(Integer.parseInt(Weight_T.getText(); else Prompt_T.setText(电梯正常启动); class OverWeightExpception extends Exception private int Weight=0; OverWeightExpception() super(电梯超重,不能正常运行!); OverWeightExpcepti
24、on(int TmpWeight) Weight=TmpWeight; public String toString() String TmpStr; if(Weight0) TmpStr=电梯当前的承重为+Integer.toString(Weight)+Kg,超过了电梯的最大载重3000Kg; else TmpStr=电梯超重!; return TmpStr; 实训内容五 完成电梯的控制运行功能实训目的(1) 掌握多线程编程思维。(2) 学会控制多线程的运行,并进一步加强较复杂程序的编写。实训要求在第6章中的实训范例一中,我们完成了电梯控制界面的程序编写。现在要在这个界面色基础上实现真正的
25、电梯控制功能,既当单击某一层楼的按钮时,电梯模拟图片实现上下运动。实训指导电梯的运行程序控制实际上由两部分组成:(1) 电梯的任务管理程序;(2) 电梯的任务监控程序。这两部分程序通过对两个队列(上行队列和下行队列)的读写来实现数据通信。任务管理程序在负责管理操作界面,如按下按钮时按钮变成红色、电梯到达某层时相应的按钮复位;另外,当按钮被按下时,任务管理程序负责将数据插入到队列中的合适位置。任务监控程序时刻监控着上行和下行队列,负责读取队列中的数据作为电梯的目的楼层,并且还负责电梯的实际运行过程,如什么时候该上行、什么时候该下行、什么时候要改变电梯的状态等。上行队列和下行分别存放电梯的上行任务
26、和下行任务,所谓的上行任务表示需要电梯向上运行的任务,下行任务表示需要电梯向下运行的任务。 为了使监控程序一直处于运行状态,我们在run()方法中用while(true)的永真循环来实现。 另外,几个常用的线程类方法需要熟练使用。l public void start():启动线程。l public void suspend():将线程挂起。l public void resume():将线程从挂起状态恢复成就绪状态。l public void stop():使线程进入死亡状态。 下面是参考程序: import java.awt.*;import java.applet.*;import ja
27、va.awt.event.*;public class Applet5 extends java.applet.Applet implements ActionListener,Runnable Panel Floor_Panel=new Panel(); Panel Elevator_Panel=new Panel(); Panel Indication_Panel=new Panel(); Panel Floor1_Panel=new Panel(); Panel Floor2_Panel=new Panel(); Panel Floor3_Panel=new Panel(); Panel Floor4_Panel=new Panel(); Panel Floor5_Panel=new Panel(); Panel Floor6_Panel=new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 与零点、极值点有关的证明课件-2026届高三数学二轮复习
- 特教自闭症考试试题及答案
- 抗真菌药试题及答案
- 企业安全生产制度
- 万达物业奖惩制度规定
- 报考事业编没写奖惩制度
- 项目部精测室奖惩制度
- 临时人员用工制度
- 学校教练员奖惩制度
- 高三管理奖惩制度细则
- 中药师中药合理用药培训方案
- 家电销售实战话术
- 2025年吉林省高校单招职教对口高考数学试题真题(含答案详解)
- 2025年及未来5年中国大输液市场竞争态势及行业投资前景预测报告
- 2026年新疆生产建设兵团兴新职业技术学院单招职业技能测试必刷测试卷附答案
- 课件宝宝起名
- 现浇坞墙施工质量通病、原因分析及应对措施
- 2025-2030住房租赁市场监测指标体系与预警机制构建
- 达芬奇调色培训课件
- 2025-2030TPU材料在运动鞋领域应用拓展与性能优化方向
- 2025年9月20日云南省直机关遴选公务员笔试真题及答案解析
评论
0/150
提交评论