⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emluatordemo.java

📁 高速公路客运仿真
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    StringBuffer information=new StringBuffer();//存储车站信息
    BusStation bs;//station所代表的车站(西安或宝鸡)
    if(station.equals(jTextAreaXN)){//根据文本框station的名字取站
      bs=solve.XNStation;
    }else{
      bs=solve.BJStation;
    }
    information.append("站内乘客数:"+solve.XNStation.passNum()+"\n");
    information.append("依维柯:\n");
    //从车站station中的依维柯队列中取出所有Iveco车辆的车牌号
    for(int i=0;i<bs.ivecoQueue.size();i++){
      information.append(((Iveco)bs.ivecoQueue.get(i)).getLicenseNumber());
      information.append("  ");
      if((i+1)%6==0) information.append("\n");
    }
    information.append("\n沃尔沃:\n");
     //从车站station中的沃尔沃队列中取出所有Volvo车辆的车牌号
    for(int j=0;j<bs.volvoQueue.size();j++){
      information.append(((Volvo)bs.volvoQueue.get(j)).getLicenseNumber());
      information.append("  ");
      if((j+1)%6==0) information.append("\n");
    }
    station.setText(information.toString());
  }
  //更新监控车辆信息
   public  void refreshCarInfo(){
     String carType=jComboBoxCar.getSelectedItem().toString().substring(0,3);
     String carNum=jSpinnerCarNum.getValue().toString();
     String carLicenceNum=carType+carNum;
     System.out.println(carLicenceNum);
     Vehicle car=null;
     //检查所监控的车辆是否在西安站内,在则取出
     for(int i=0;i<solve.XNStation.ivecoQueue.size();i++){
       String testLicenceNum=((Vehicle)solve.XNStation.ivecoQueue.get(i)).getLicenseNumber();
        if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.XNStation.ivecoQueue.get(i);
     }
     for(int i=0;i<solve.XNStation.volvoQueue.size();i++){
       String testLicenceNum=((Vehicle)solve.XNStation.volvoQueue.get(i)).getLicenseNumber();
        if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.XNStation.volvoQueue.get(i);
     }
     //检查所监控的车辆是否在宝鸡站内,在则取出
     for(int i=0;i<solve.BJStation.ivecoQueue.size();i++){
       String testLicenceNum=((Vehicle)solve.BJStation.ivecoQueue.get(i)).getLicenseNumber();
        if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.BJStation.ivecoQueue.get(i);
     }

     for(int i=0;i<solve.BJStation.volvoQueue.size();i++){
       String testLicenceNum=((Vehicle)solve.BJStation.volvoQueue.get(i)).getLicenseNumber();
        if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.BJStation.volvoQueue.get(i);
     }
     //检查所监控的车辆是否在开往宝鸡的路上,在则取出
     for(int i=0;i<solve.carMovingToBJ.size();i++){
       String testLicenceNum=((Vehicle)solve.carMovingToBJ.get(i)).getLicenseNumber();
       if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.carMovingToBJ.get(i);
     }
     //检查所监控的车辆是否在开往西安的路上,在则取出
     for(int i=0;i<solve.carMovingToXN.size();i++){
       String testLicenceNum=((Vehicle)solve.carMovingToXN.get(i)).getLicenseNumber();
       if(testLicenceNum.equals(carLicenceNum)) car=(Vehicle)solve.carMovingToXN.get(i);
     }
     StringBuffer carInfo=new StringBuffer();//存储监控车辆的信息
     //根据取出的车辆设置车辆信息
     if(car==null) carInfo.append("此编号车辆不存在");
       else{
         carInfo.append("车牌号:" + carLicenceNum + "\n");
         carInfo.append("车辆限载:"+car.maxPass()+"\n");
         NumberFormat s = NumberFormat.getInstance();
         s.setMaximumFractionDigits(1);
         carInfo.append("车速:"+s.format(car.getSpeed())+"km/m\n");
         carInfo.append("车内有乘客:"+car.getPassNum()+"人\n");
         if(car.isMoving()) {
           NumberFormat a = NumberFormat.getInstance();//创建NumberFormat对象,用来格式化输出double类型的距离变量的值
           a.setMaximumFractionDigits(1);//设置只显示一位小数
           if (car.getDisAwayLasted() < car.speed)
             carInfo.append("车正停在" + car.getLastedStation() + "站\n");
           else {
             if (car.getDirection() == 1) {
               carInfo.append(carLicenceNum + "在距离" + car.getLastedStation() +
                              "以西" + a.format(car.getDisAwayLasted()) + "\n");
             } else {
               carInfo.append(carLicenceNum + "在距离" + car.getLastedStation() +
                              "以东" + a.format(car.getDisAwayLasted()) + "\n");
             }
           }
         }
         else carInfo.append("车正停在"+car.getLastedStation()+"站\n");
       }
     jTextAreaCar.setText(carInfo.toString());
   }
  //线程的运行
  public void run(){
    for(int i=0;i<770;i++){
        emluatorSpeed=jSliderSpeed.getValue();//获取本次循环的仿真速度
        hour = (int) (i + 30) / 60 + 7;
        minute = (i + 30) % 60;
        try{
          Thread.sleep(emluatorSpeed);
        }catch(Exception e){
          System.out.println(e.getMessage());
        }
        solve.simulate(i);//仿真逻辑的一次运行
        jLabelTime.setText(hour + ":" + minute);//更新时间
        refreshStationInfo(jTextAreaXN);//更新西安车站情况
        refreshStationInfo(jTextAreaBJ);//更新宝鸡车站情况
        refreshCarInfo();//更新监控车辆信息
        jPanelDisplay.repaint();
      }
  }

  void jButtonStart_actionPerformed(ActionEvent e) {
    //从UI中获取初始化参数
    XN_V=((Integer)jSpinnerXNV.getValue()).intValue();//获取西安沃尔沃数量
    XN_I=((Integer)jSpinnerXNI.getValue()).intValue();//获取西安依维柯数量
    BJ_V=((Integer)jSpinnerBJV.getValue()).intValue();//获取宝鸡沃尔沃数量
    BJ_I=((Integer)jSpinnerBJI.getValue()).intValue();//获取宝鸡依维柯数量
    P_MAX=((Integer)jSpinnerPNM.getValue()).intValue();//获取每分钟产生的人数上限
    if (emluator == null) {//第一次点击“开始”按钮,此时emluator=null
      solve=new Emluator(XN_V,XN_I,BJ_V,BJ_I,P_MAX);//创建仿真逻辑对象
      jSpinnerXNV.setEnabled(false);
      jSpinnerXNI.setEnabled(false);
      jSpinnerBJV.setEnabled(false);
      jSpinnerBJI.setEnabled(false);
      jSpinnerPNM.setEnabled(false);
      emluator=new Thread(this);//创建主线程,实现仿真及显示的更新
      emluator.start();//启动线程
    }else{
      emluator.resume();
    }
    jButtonStart.setEnabled(false);
    jButtonStop.setEnabled(true);
  }

  void jButtonStop_actionPerformed(ActionEvent e) {
    if(emluator!=null) {
      emluator.suspend();//挂起线程
    }
      jButtonStop.setEnabled(false);
      jButtonStart.setEnabled(true);
  }

  void jButtonCancel_actionPerformed(ActionEvent e) {
     System.exit(0);
  }
}

class EmluatorDemo_jButtonStart_actionAdapter implements java.awt.event.ActionListener {
  EmluatorDemo adaptee;

  EmluatorDemo_jButtonStart_actionAdapter(EmluatorDemo adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButtonStart_actionPerformed(e);
  }
}

class EmluatorDemo_jButtonStop_actionAdapter implements java.awt.event.ActionListener {
  EmluatorDemo adaptee;

  EmluatorDemo_jButtonStop_actionAdapter(EmluatorDemo adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButtonStop_actionPerformed(e);
  }
}

class EmluatorDemo_jButtonCancel_actionAdapter implements java.awt.event.ActionListener {
  EmluatorDemo adaptee;

  EmluatorDemo_jButtonCancel_actionAdapter(EmluatorDemo adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButtonCancel_actionPerformed(e);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -