A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

  • 项目需求:
  • 模拟现实中的电梯运行的情况,当某层用户需要电梯提供服务的时候,电梯控制系统自动分配适合的电梯为该请求用户提供服务。
  • 电梯的基本功能:打开、关闭、向上运行、向下运行……
  • 考虑电梯不能提供服务的可能:比如,维修电梯或者电梯已经达到了承载能力。
需求分析做的不完整,希望大家踊跃参加,给出建议。

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


由于字数受限,请继续浏览(二)

3 个回复

倒序浏览
黑马网友  发表于 2011-8-1 20:37:36
沙发
:lol 自己先顶一个
回复 使用道具 举报
黑马网友  发表于 2011-8-1 20:41:37
藤椅
帮顶一下!:lol 回去研究研究!我大一时拿C#做过,当时虽然完成了功能,但到现在看来,我当时程序设计的并不好,现在来看看java做的这个!:lol
回复 使用道具 举报
黑马网友  发表于 2011-8-1 20:42:54
板凳

回复 藤椅 的帖子

恩,一起研究
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马