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

📄 park.java

📁 停车场的程序
💻 JAVA
字号:
package parkproject;

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.File;
import java.io.FileWriter;
import java.text.*;

class park
    implements Runnable {
  int carplace_width, carplace_height;
  int carWidth, carHeight;
  int n, e;
  int parkWidth, parkHeight;
  door entranceDoor, exitDoor;
  // thread of entrancedoor and exitdoor
  int roadWidth = 50;
  Thread door1, door2;
  //
  JPanel box;
  int roadholder[];
  int placeholder[];
  int x0 = 100, y0 = 100;
  int px = 100, py = 0;
  int doorx1 = 0, doory1 = 0;
  int doorx2 = 0, doory2 = 0;
  //reader and sensor
  cardReader readerEntrance,readerExit;
  sensor sensorEntrance,sensorExit;
  //the display data and its label
  JLabel jLabel3 = new JLabel();
  JLabel currentTotal = new JLabel();
  JLabel jLabel4 = new JLabel();
  JLabel total_in = new JLabel();
  JLabel jLabel5 = new JLabel();
  JLabel total_out = new JLabel();
  JLabel jLabel6 = new JLabel();
  JLabel average_stop_time = new JLabel();
  JLabel currentTime = new JLabel();
  JLabel signOfFull = new JLabel();
  //parkCar used to store the thread of car;
  Vector parkCar = new Vector(3, 2);
  int flagIncar[];

  //to indicate which car has been in park
  int totalCar = 0;
  String beginTime;
  int totalStopTime = 0; //the total stop time,unit is s;
  public park(int n, int e, JPanel b) {
    box = b;
    carplace_width = 25;
    carplace_height = 50; //car place 's length and  height
    carWidth = 25;
    carHeight = 50;
    this.n = n; //
    this.e = e;
    parkWidth = (n + 2) * carplace_width; //park's total width and height
    parkHeight = 3 * carplace_height;
    //add door here
    entranceDoor = new door(roadWidth);
    exitDoor = new door(roadWidth);
    //entranceDoor's XY
    doorx1 = x0 + px - carplace_width;
    doory1 = y0 + py + carplace_height;
    //exitDoor's XY
    doorx2 = x0 + px + (n + 1) * carplace_width;
    doory2 = y0 + py + carplace_height;
    entranceDoor.setBounds(doorx1, doory1, 5, carplace_height);
    exitDoor.setBounds(doorx2, doory2, 5, carplace_height);
    box.add(entranceDoor, null);
    box.add(exitDoor, null);
    //initial the holders
    initialroadHolder();
    initplaceHolder();
    //draw park
    drawPlace();
    drawparkRect();
    //create two threads,door1 and door2
    door1 = new Thread(entranceDoor);
    door2 = new Thread(exitDoor);
    flagIncar = new int[e + 1];
    initflag();
    //start thread
    door1.start();
    door2.start();
    //init the display information
    initData();
    Thread tempx = new Thread(this);
    tempx.start();
    //start
    //init and add cardReader and Sensor
    addReader();
    addSensor();
    SimpleDateFormat sdf = new SimpleDateFormat("hhmmss");
    beginTime = sdf.format(new Date());
  }

  public void initflag() {
    for (int i = 0; i < e + 1; i++)
      flagIncar[i] = -1;
  }

  public void addCar(car mycar) {
    parkCar.add(mycar);
    int carNum = mycar.getNumid();
    flagIncar[carNum] = 1;
    totalCar++;
  }

  synchronized public boolean checkCar(int numid) {

    if (numid < 0 || numid > e) //car num is not valid
    {
    signOfFull.setText("不是公司的车");
    return false;
    }
    if (totalCar >= 2 * n) // the park is full
    {
    signOfFull.setText("无车位");
    return false;
    }
    if (flagIncar[numid] == 1) //a car with same id has been in the park
    {
      signOfFull.setText("当前车已在车场");
      return false;
    }

    return true;
  }
  synchronized public void setSign()
  {
  signOfFull.setText("");
  }
  synchronized public void addTime() {
    totalStopTime++;
  }

  public void run() {
    int temp = 0;
    while (true) {
      car_InPark();
      car_totalIn();
      car_totalOut();
      car_averageStop();
      currentTime.setText(Integer.toString(temp));
      //to set the time
      try {
        Thread.sleep(1000);
        temp++;
      }
      catch (InterruptedException e) {}
    }
  }

  public void car_InPark() {
    currentTotal.setText(Integer.toString(totalCar));
  }

  public void car_totalIn() {
    total_in.setText(Integer.toString(parkCar.size()));
  }

  public void car_totalOut() {
    total_out.setText(Integer.toString(parkCar.size() - totalCar));
  }

  public void car_averageStop() {
    String temp;
    if (parkCar.size() > 0) {
      temp = Integer.toString(totalStopTime / parkCar.size());
      average_stop_time.setText(temp+"  s");
    }
    else
      average_stop_time.setText("0");
  }

  public void initData() {
    jLabel3.setText("当前场内车数:");
    jLabel3.setBounds(new Rectangle(35, 416, 92, 25));
    currentTotal.setText("22");
    currentTotal.setBounds(new Rectangle(85, 436, 79, 23));
    jLabel4.setText("本次仿真累计入场车数:");
    jLabel4.setBounds(new Rectangle(157, 419, 146, 19));
    total_in.setText("22");
    total_in.setBounds(new Rectangle(187, 439, 63, 18));
    jLabel5.setText("本次仿真累计出场车数:");
    jLabel5.setBounds(new Rectangle(348, 417, 130, 21));
    total_out.setText("22");
    total_out.setBounds(new Rectangle(378, 437, 105, 20));
    jLabel6.setText("本次仿真汽车的平均停车时间:");
    jLabel6.setBounds(new Rectangle(536, 419, 169, 16));
    average_stop_time.setText("22");
    average_stop_time.setBounds(new Rectangle(586, 439, 128, 20));
    currentTime.setText("");
    currentTime.setBounds(new Rectangle(480, 14, 64, 24));
    signOfFull.setText(" ");
    signOfFull.setBounds(doorx1-100,y0+2*carplace_height,100,20);
    box.add(signOfFull,null);
    box.add(jLabel3, null);
    box.add(currentTotal, null);
    box.add(jLabel4, null);
    box.add(total_in, null);
    box.add(jLabel5, null);
    box.add(total_out, null);
    box.add(jLabel6, null);
    box.add(average_stop_time, null);
    box.add(currentTime, null);
  }

  public void drawparkRect() {
    //top line
    JPanel top = new JPanel();
    top.setBorder(BorderFactory.createLineBorder(Color.black));
    top.setBounds(new Rectangle(doorx1, y0, parkWidth, 1));
    box.add(top, null);
    //low line
    JPanel low = new JPanel();
    low.setBorder(BorderFactory.createLineBorder(Color.black));
    low.setBounds(new Rectangle(doorx1, y0 + parkHeight, parkWidth, 1));
    box.add(low, null);
    //left
    //left top
    JPanel tmp = new JPanel();
    tmp.setBorder(BorderFactory.createLineBorder(Color.black));
    tmp.setBounds(new Rectangle(doorx1, y0 + py, 1, carplace_height));
    box.add(tmp, null);
    //left low
    tmp = new JPanel();
    tmp.setBorder(BorderFactory.createLineBorder(Color.black));
    tmp.setBounds(new Rectangle(doorx1, y0 + py + 2 * carplace_height, 1,
                                carplace_height));
    box.add(tmp, null);
    //right top
    tmp = new JPanel();
    tmp.setBorder(BorderFactory.createLineBorder(Color.black));
    tmp.setBounds(new Rectangle(doorx2, y0 + py, 1, carplace_height));
    box.add(tmp, null);
    //right low
    tmp = new JPanel();
    tmp.setBorder(BorderFactory.createLineBorder(Color.black));
    tmp.setBounds(new Rectangle(doorx2, y0 + py + 2 * carplace_height, 1,
                                carplace_height));
    box.add(tmp, null);
  }

  public void drawPlace() {
    int x, y, width, height;
    y = y0;
    width = carplace_width;
    height = carplace_height;
    x = x0 + px;
    Graphics g;
    g = box.getGraphics();
    //draw the north car place
    for (int i = 1; i <= n + 1; i = i + 1) {
      JPanel jPanel3 = new JPanel();
      jPanel3.setBorder(BorderFactory.createLineBorder(Color.black));
      jPanel3.setBounds(new Rectangle(x, y, 1, height));
      box.add(jPanel3, null);
      x = x + width;
    }
    x = x0 + px;
    y = y0 + 2 * height;
    //draw the south car place
    for (int i = 1; i <= n + 1; i = i + 1) {

      JPanel jPanel3 = new JPanel();
      jPanel3.setBorder(BorderFactory.createLineBorder(Color.black));
      jPanel3.setBounds(new Rectangle(x, y, 1, height));
      box.add(jPanel3, null);
      x = x + width;
    }

  }

  public void initialroadHolder() { //road
    roadholder = new int[n + 6];
    for (int i = 0; i < roadholder.length; i++)
      roadholder[i] = -1;
  }

  public void initplaceHolder() {
    placeholder = new int[2 * n + 1];
    for (int i = 0; i < placeholder.length; i++)
      placeholder[i] = -1;
  }

  synchronized public void setRoadHolder(int k, int num) {
    roadholder[k] = num;
  }

  synchronized public int getRoadHolder(int k) {
    return roadholder[k];
  }

  synchronized public void setEntranceDoorFlag() {
    readerEntrance.setBackground(Color.GREEN);
    entranceDoor.open();
  }

  synchronized public void SetEntranceDoorCloseFlag() {
   // sensorEntrance.changeColor(Color.GREEN);
    readerEntrance.setBackground(Color.red);
    entranceDoor.close();
  }

  synchronized public void setExitDoorFlag() {
   // sensorEntrance.changeColor(Color.GREEN);
    readerExit.setBackground(Color.GREEN);
    exitDoor.open();
  }

  synchronized public void SetExitDoorCloseFlag() {
    //sensorEntrance.changeColor(Color.GREEN);
    readerExit.setBackground(Color.red);
    exitDoor.close();
  }

  synchronized public void deleteOneCar(int carNum) {
    flagIncar[carNum] = -1;
    totalCar--;
  }

  public int getX0() {
    return x0 + px;
  }

  public int getY0() {
    return y0 + py;
  }

  public boolean getdoor1Flag() {
    return entranceDoor.getFlag();
  }

  synchronized public boolean getdoor2Flag() {
    return exitDoor.getFlag();
  }

  synchronized public int getplaceHolder(int k) {
    return placeholder[k];
  }

  synchronized public void setplaceHolder(int k, int n) {
    placeholder[k] = n;

  }
  synchronized public boolean checkout(int num)
  {

  if(num == e || num == e/2)
   return false;
//if(num%2==0)
 //   return false;
  return true;
  }
  public int getN() {
    return n;
  }

  public int getE() {
    return e;
  }
  public int getEmptyPlace()
  {
  for(int i = 2*n; i>=1;i--)
  {
  if(placeholder[i]==-1)
    return i;
  }
  return -1;
  }
  public boolean checkback(int k1,int k2)
  {
  for(int i=k1;i<k2;i++)
  {
  if(roadholder[i]==-1)
    continue;
  else
    return false;
  }
  return true;
  }
//to save the Data
  public void saveData() throws Exception {
    String thedate;
    //String beginTime;
    String endTime;
    String filename;
    Date date = new Date();
    SimpleDateFormat df;
    df = new SimpleDateFormat("yyMMdd");
    thedate = df.format(date);
    //begin date
    df = new SimpleDateFormat("hhmmss");
    endTime = df.format(date);
    filename = thedate + "_" + beginTime + "_" + endTime + ".rpt";
    File myfile = new File(filename);
    FileWriter f = new FileWriter(myfile);
    f.write("本次累计入场车数:" + total_in.getText() + "\n");
    f.write("本次仿真累计出场车数:" + total_out.getText() + "\n");
    f.write("本次仿真汽车的平均停车时间:" + average_stop_time.getText() + "\n");
    f.close();
  }
  public void addReader()
  {
  readerEntrance = new cardReader(doorx1-15,y0 + carplace_height-10);
  box.add(readerEntrance,null);
  readerExit = new cardReader(doorx2-15,y0 + carplace_height-10);
  box.add(readerExit,null);
  }
  public void addSensor()
  {
  sensorEntrance = new sensor(doorx1+10,y0+carplace_height+carplace_height/2-5);
  box.add(sensorEntrance,null);
  sensorExit = new sensor(doorx2+10,y0+carplace_height+carplace_height/2-5);
  box.add(sensorExit,null);
  }
  class cardReader
      extends JPanel {
    public cardReader(int x,int y) {
      super.setBorder(BorderFactory.createLineBorder(Color.black));
      this.setBounds(x, y, 10, 10);
      this.setBackground(Color.red);
    }
 //  public void paint(Graphics g)
 //  {
 //  g.drawLine(0,0,5,10);
 //  g.drawLine(0,10,5,10);
 //  g.drawLine(0,0,10,0);
 //  }
  }

  class sensor
      extends JPanel {
    Color c = Color.red;
    public sensor(int x, int y) {
      super.setBorder(BorderFactory.createLineBorder(Color.black));
      this.setBounds(x, y, 10, 10);
      //this.setBackground(Color.red);
    }

    public void paint(Graphics g) {
      g.setColor(c);
      g.fillOval(0, 0, 10, 10);
    }

    public void changeColor(Color c) {
      this.c = c;
      this.repaint();
    }
  }
}

⌨️ 快捷键说明

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