看过张孝祥老师讲的交通灯控制系统以及移动计费系统之后,想通过张老师传授的系统开发流程,开发一个模拟电梯运行的系统。由于缺乏开发经验,在开发之前系统设计考虑的不周,系统无法继续,希望各位开发高手帮助点拨点拨。同时也欢迎各位想走编程之路的朋友一起来探讨探讨。
以下是项目说明和代码实现:
- 模拟现实中的电梯运行的情况,当某层用户需要电梯提供服务的时候,电梯控制系统自动分配适合的电梯为该请求用户提供服务。
- 电梯的基本功能:打开、关闭、向上运行、向下运行……
- 考虑电梯不能提供服务的可能:比如,维修电梯或者电梯已经达到了承载能力。
需求分析做的不完整,希望大家踊跃参加,给出建议。
目前所完成的代码如下:其中包括BuildingController类、Building类、ElevatorController类、Elevator类、Layer类、LayerThread类以及MainClass类。
由于本人还没有项目设计的经验,类的设计不合理之处,希望大家踊跃参加,给出建议。
1.BuildingController类
[code=java]package cn.zjc.test.elevator;
/**
* 大楼控制器类
* */
public class BuildingController {
/**电梯控制器*/
private ElevatorController elevatorController;
/**电梯*/
private Elevator elevator;
/**
* 构造函数
* */
public BuildingController(){
init();
}
/**
* 初始化方法
* */
private void init(){
Building building = new Building(); //创建大楼
building.setName("宣海家园"); //设置大楼的名称
elevatorController = building.createNewElevatorController("1-1-01"); //创建电梯服务系统
elevator = elevatorController.createNewElevator("神州2号"); //创建一部电梯
new Thread(elevatorController).start(); //启动电梯控制器线程
}
}[/code]
2.Building类
[code=java]package cn.zjc.test.elevator;
/**
* 这是一个大楼类,模拟分为20层
* */
public class Building {
/*private static final int total = 20;*/
/**大楼名称*/
private String name;
public Building(){
//init();
}
//初始化大楼,为每一层创建独立的线程
public void init(){
/*Elevator elevator = new Elevator("第一电梯");
for(int i = 1 ; i <= total ; i ++){
new Thread(new LayerThread(i ,elevator)).start();
}*/
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
/**
* 创建一个新的电梯控制器
* @param name(String)
* @return ElevatorController
* */
public ElevatorController createNewElevatorController(String name){
ElevatorController elevatorController = new ElevatorController(name);
return elevatorController;
}
}[/code]
3.ElevatorController类
[code=java]package cn.zjc.test.elevator;
import java.util.HashMap;
/**
* 电梯控制器类
* @作者 张佳超
* */
public class ElevatorController implements Runnable{
/**电梯控制器的名称*/
private String name;
/**电梯应用*/
private Elevator elevator;
private HashMap<String ,Elevator> elevators;
/**
* 构造函数
* */
public ElevatorController(String name){
init(name);
}
/**
* 初始化电梯控制器
* */
private void init(String name){
this.name = name;
elevators = new HashMap<String, Elevator>();
}
/**
* setter of name
* */
public void setName(String name){
this.name = name;
}
/**
* getter
* */
public String getName(){
return name;
}
/**
* 创建一部新的电梯
* @返回 电梯
* */
public Elevator createNewElevator(String name){
elevator = new Elevator(name);
return elevator;
}
/**
* 拆除一部电梯
* @返回 boolean
* */
public boolean dropElevator(String name){
boolean boo = false;
return boo;
}
/**
* 对某部电梯设置是否为可用状态
*
* */
public boolean setAvailable(boolean bool ,String name){
Elevator elevator = null;
try {
elevator = getElevator(name);
} catch (Exception e) {
e.printStackTrace();
}
boolean boo = false;
if(bool){
elevator.setIsStart();
}
else{
elevator.setIsStop();
}
boo = bool;
return boo;
}
/**
* 通过电梯的名称获得电梯
* */
public Elevator getElevator(String name) throws Exception{
//应该是从集合中取得相应的电梯
Elevator temp = elevators.get(name);
if(temp == null){
throw new Exception("不存在点儿事!");
}
return temp;
}
public void run() {
System.out.println("ElevatorController run invoke!");
elevator = createNewElevator("长征01号"); //创建一部电梯
elevators.put(elevator.getName(), elevator); //将新创建的电梯加入到集合中
boolean boo = elevator.start(); //启动电梯
if(boo){
boolean b = setAvailable(true ,elevator.getName()); //如果电梯启动成功之后 ,将电梯的状态设置为可用状态
if(b){
System.out.println(elevator.getName() + " 启动设置成功");
new Thread(elevator).start(); //如果可用状态设置成功之后,开启电梯运行的线程
}
}
else
System.out.println("电梯启动失败");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
elevators.get(elevator.getName()).stop();
}
}[/code]
由于字数受限,请继续浏览(二) |
|