黑马程序员技术交流社区

标题: 龙舌兰:模拟电梯运行系统,望大家踊跃参加(一) [打印本页]

作者: 龙舌兰    时间: 2011-8-1 20:26
标题: 龙舌兰:模拟电梯运行系统,望大家踊跃参加(一)
看过张孝祥老师讲的交通灯控制系统以及移动计费系统之后,想通过张老师传授的系统开发流程,开发一个模拟电梯运行的系统。由于缺乏开发经验,在开发之前系统设计考虑的不周,系统无法继续,希望各位开发高手帮助点拨点拨。同时也欢迎各位想走编程之路的朋友一起来探讨探讨。
以下是项目说明和代码实现

需求分析做的不完整,希望大家踊跃参加,给出建议。

目前所完成的代码如下:其中包括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]


由于字数受限,请继续浏览(二)
作者: 匿名    时间: 2011-8-1 20:37
:lol 自己先顶一个
作者: 匿名    时间: 2011-8-1 20:41
帮顶一下!:lol 回去研究研究!我大一时拿C#做过,当时虽然完成了功能,但到现在看来,我当时程序设计的并不好,现在来看看java做的这个!:lol
作者: 匿名    时间: 2011-8-1 20:42
标题: 回复 藤椅 的帖子
恩,一起研究




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2