1. 需求陈述
一个无人值守电梯的轿箱通常停放在大楼的第一层.当某楼层有乘客按下按钮,电梯轿箱便会按照指令上升到该楼层接乘客,然后按照乘客的指令升降到指定楼层,到达后的乘客走下电梯。电梯轿箱停在该楼层,等待下一个乘客的按钮指令。系统对于等待的时间有一定的限制,在时间限制之内又有乘客按下按钮,电梯则重复前面的动作,电梯轿箱仍按照指令上升或下降到指定楼层,到达后,电梯轿箱继续等待下一个乘客的按钮指令,在每次的等待中,如果等待时间超过限制,电梯轿箱会自动返回到大楼的第一层,在那里继续等待乘客。
2.1 用例图
电梯系统用例图如下,主要包括用例、角色和关系。
用例图
乘客作为电梯里的角色,参与系统的5个用例,呼叫电梯、指定楼层、打开电梯门、关闭电梯门和拨打报警电话。工作人员参与接受报警的用例。
2.2 类图
类图对系统进行静态建模,静态图主要描述系统功能需求-系统给最终用户提供服务。类图描述一组类、接口和协作,及他们的关系。
类图
各类的详细声明如下:
(1) Button类
一个抽象类,电梯停或启动的指示器。
(2) Elevator_button
电梯内的人需要到达的楼层。
(3) Building_button
处于某楼层的人需要进入电梯上行或下行的指示。
(4) help_button
紧急情况下的报警。
(5) controlor
用来控制电梯的上行、下行、关门、开门以及电梯调度工作等。
BState:电梯或楼层按钮的状态,若按下,则给控制器发送一个上行下行命令,否则,控制器控制电梯开门或停止。
3.1建动态模型
用户A在3楼按上行按钮呼叫电梯,用户希望到7楼去
上行按钮指示灯亮
一部电梯到达3楼,电梯内的用户B已按下到9楼的按钮
上行按钮指示灯熄灭
电梯开门
用户A进入电梯
用户A按下电梯内到7楼的按钮
7楼按钮指示灯亮
电梯关门
电梯到达7楼
7楼按钮指示灯熄灭
电梯开门
用户B走出电梯
电梯在等待超时到后关门
电梯载着用户A继续下行到达1楼
3.2异常情况
用户A在3楼按上行按钮呼叫电梯,用户A希望到1楼去
上行按钮指示灯亮
一部电梯到达3楼,电梯内的用户B已按下了到9楼的按钮
上行按钮指示灯熄灭
电梯开门
用户A进入电梯
用户A按下电梯内到1楼的按钮
1楼按钮指示灯亮
电梯在等待超时后关门
电梯上行到9楼
电梯内9楼按钮指示灯熄灭
电梯开门
用户B走出电梯
电梯在等待超时后关门
电梯载着用户A继续下行到达1楼
3.3状态图
状态图
4.1序列图
序列图
4.2协作图
协作图
5. 其它工作及部分代码:
电梯设置
电梯分为三种状态:静止,上升,下降。跟随着电梯还有一个数据,就是电梯
当前所在楼层数floor_lift,其中floor_lift<=30&&floor_lift>=1。
在系统中我们用数组来保存进入电梯的乘客的信息,即目标层数。。
关于超时问题,我们定义时间上限为30分钟。
乘客分析
乘客的需求分为“上”和“下”两种。此外乘客还有当前层数floor_from以
及目标层数floor_to。当然floor_from、floor_to也是在1~30之间的整数。
初始化
电梯需要初始化,其中状态为静止state=0,层数floor_lift设置为1。目标
层数数组需要初始化,即: for(i=0;i<30,i++)
floor[i]=0;
电梯工作分析
电梯的上升下降
电梯的上升下降设置为一秒一层,即
Switch(state) //state分为0—静止,1—下降,2—上升
{
case 0:
break;
case 1:
floor_lift-=1;
break;
case 2:
floor_lift+=1;
break;
default:
cout<<”error state”< 静止状态检测 当数组全部为0时,将state设置为0. 电梯为静止状态时 用户输入,信息分为direction和floor_from。Floor_from跟电梯所在楼层floor_lift进行比较,floor_from>floor_lift,那么把电梯状态改为上升,相对的当小于时改为下降。当floor_from=floor_lift的时候,将乘客的信息加入数组,将乘客目标层数对应的数组元素设置为1。即floor[floor_to-1]=1。 此时将电梯的状态改为用户的目标方向,即state==direction。 电梯为上升或下降状态时 将用户输入与电梯状态相比: if((direction==state)&&(floor_lift==floor_from)) 一致时 //用户目标方向与电梯方向 floor[floor_to-1]=1; //允许用户进入并且输入目标层数 超时设置 当电梯的状态state为0时开始计时 While(i<1800) //每秒检测一次,静止状态保持30分钟则回到一层 { If(state=!0) //检测状态,一旦状态改变,则停止计时 break; Sleep(1000); i++; } State=1; //设置为下降状态,目标层数改为1楼 floor[0]=1; 6. 设计总结 经过了一个学期的学习和小组成员的共同努力,终于完成了这个作业。由于我们只是在系统的设计思想上进行了统一的分析,并没有进行系统代码的设计,所以每人负责部分的方法可能名字上有些出入,不影响实际设计。虽然完成的效果可能不是很好,但是小组的每个成员都很努力了,我们觉得还是有很多收获的。由于刚刚学习UML这种统一建模语言,对很多概念和问题的理解不是很到位,所以肯定会犯很多错误,希望老师多多指正。不过,虽然遇到好多不懂的问题,但是小组的每一位成员都能主动地去查阅相关资料了解并在一起讨论,通过这次作业,不仅让我们学到了知识,而且培养了团队协作精神,我想这也是我们在课堂里面学不到的东西吧。 7.小组成员信息: 姓 名 学 号 李洪岩 2012110238 负责序列图及协作图 李东豫 2012110021 负责用例分析及类图建模 张建华 2012111177 负责状态图实现及实验报告 因篇幅问题不能全部显示,请点此查看更多更全内容