能够同时进出车 可直接运行的基于Java多线程的停车场管理系统( 三 )

< arr.size(); j++) {Object ok = (arr.get(j));Transaction ok1 = (Transaction) ok;lists.add(ok1);top++;System.out.println(ok1.getOrderNumber());}//******************************************//*************提取订单号********************//便于系统根据上次关闭前的订单号序列进行订单号的编写try {order = SerializableTest.deserializecar1int();} catch (Exception e) {e.printStackTrace();}//******************************************//当chose=-1时才退出系统while (chose != -1) {System.out.println("*******欢迎进入停车场管理系统*******");System.out.println("请选择服务");System.out.println("1.停车");System.out.println("2.查看停车时长");System.out.println("3.已停车辆信息");System.out.println("4.查看剩余停车位");System.out.println("5.离开并缴费");System.out.println("6.查看已出库订单信息");System.out.println("0.关闭系统");chose = testInput();switch (chose) {case 0://**********以下为退出系统之前需要进行的操作***********if (chose == 0) {//①将系统关闭之前还未出库的车的信息存入文件内ArrayList arr1 = new ArrayList();for (Transaction transaction : lists) {arr1.add(transaction);}try {SerializableTest.serializecar1(arr1);} catch (IOException e) {e.printStackTrace();}}//②释放系统中lists的空间lists.clear();//③将系统关闭前最后一个订单序号存入文件中中try {SerializableTest.serializecarint(order);} catch (IOException e) {e.printStackTrace();}//*****************************************8chose = -1;break;case 1://制作一辆车Car car = makeCar();while (car == null) {System.out.println("车辆信息不存在,请重新输入");car = makeCar();}//使车入库enter(car, this);//新建一个调用Park内部类(Enter类)线程的匿名类new Thread(this.new Enter()).start();break;case 2://提示用户输入车票号String Number = Number();//根据车牌号获取已停时间placeTime(Number);break;case 3://获取所有在车库内的信息searchAll();break;case 4://获取当前车位placeNumber();break;case 5://汽车出库exit();//新建一个调用Park内部类(Exit类)线程的匿名类new Thread(this.new Exit()).start();break;case 6://获取订单文件内的所有信息readFile();break;default:System.out.println("我无法理解您的需求,请重新输入~");break;}}}//根据用户的输入来获取一辆车private Car makeCar() {String model;String brand;String orderNumber;Scanner sc = new Scanner(System.in);System.out.print("请输入你的车型:");model = sc.next();System.out.print("请输入车的品牌:");brand = sc.next();System.out.print("请输入车牌号:");orderNumber = sc.next();//判断该车是否符合要求(即车型与品牌是有效的)return Transaction.Judging(model, brand, orderNumber);}//获取车牌号private String Number() {System.out.println("请输入车牌号");Scanner sc = new Scanner(System.in);String orderNumber = sc.next();return orderNumber;}//根据车牌号搜寻车辆停的时间private int placeTime(String Number) {int time = -1;for (Transaction transaction : lists) {if (Number.equals(transaction.getCar().getNumber())) {//找到该订单号之后获取当前时间long nowTime = System.currentTimeMillis();time = (int) (((nowTime - transaction.getEnterTime()) / 1000.0) / 3600);break;}}if (time != -1) {System.out.println("车牌号为:" + Number + "的车已停时长为" + time + "小时");} else {System.out.println("您输入的车牌号不存在");}return time;}//获取车库中的车位private void placeNumber() {System.out.println("目前还有" + (maxSize - top) + "个车位");}//给菜单提供一个退出的方法private void exit() {System.out.println("请输入要出库的车牌号(一次最多20辆车进入候车区,若输入为0则结束出库)");Scanner sc = new Scanner(System.in);int flag = 0;//最多一次出库20辆车String[] orderNumbers = new String[20];String orderNumber;orderNumber = sc.next();while (!orderNumber.equals("0")) {orderNumbers[flag] = orderNumber;flag++;orderNumber = sc.next();}//信息传给另一个数组,避免原数组后面null值进行exit操作String[] orderNumbers1 = new String[flag];for (int i = 0; i