停车场管理系统java实现进入和出去还有计时收费用栈和队列的 方式实现
时间: 2024-03-25 11:40:41 浏览: 87
好的,我可以为您演示使用栈和队列实现停车场管理系统的方法。下面是一个简单的Java实现示例:
```java
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Queue;
public class ParkingLot {
private Deque<Car> entranceStack; // 进入栈
private Queue<Car> exitQueue; // 出去队列
private int capacity; // 停车场容量
// 构造函数
public ParkingLot(int capacity) {
this.entranceStack = new ArrayDeque<>();
this.exitQueue = new ArrayDeque<>();
this.capacity = capacity;
}
// 进入停车场
public boolean enter(Car car) {
if (this.entranceStack.size() < this.capacity) {
this.entranceStack.push(car);
return true;
} else {
return false;
}
}
// 离开停车场
public void exit() {
if (!this.entranceStack.isEmpty()) {
Car car = this.entranceStack.pop();
car.leave(); // 设置出去时间
this.exitQueue.offer(car); // 加入出去队列
}
}
// 计算停车费用
public double calculateFee() {
if (!this.exitQueue.isEmpty()) {
Car car = this.exitQueue.peek();
long duration = car.getExitTime().getTime() - car.getEnterTime().getTime(); // 停车时长
double fee = duration / 1000.0 / 60.0 / 60.0 * 5.0; // 停车费用:每小时5元
return fee;
} else {
return 0.0;
}
}
// 获取停车场剩余车位
public int getAvailableSpaces() {
return this.capacity - this.entranceStack.size();
}
}
import java.util.Date;
public class Car {
private String plateNumber; // 车牌号
private Date enterTime; // 进入时间
private Date exitTime; // 出去时间
// 构造函数
public Car(String plateNumber) {
this.plateNumber = plateNumber;
this.enterTime = new Date(); // 进入时间为当前时间
}
// 离开停车场
public void leave() {
this.exitTime = new Date(); // 出去时间为当前时间
}
// 获取车牌号
public String getPlateNumber() {
return this.plateNumber;
}
// 获取进入时间
public Date getEnterTime() {
return this.enterTime;
}
// 获取出去时间
public Date getExitTime() {
return this.exitTime;
}
}
import java.util.Scanner;
public class ParkingManagementSystem {
public static void main(String[] args) {
ParkingLot parkingLot = new ParkingLot(10); // 初始化停车场,容量为10
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入指令:");
String command = scanner.nextLine();
if (command.equals("enter")) { // 进入停车场
System.out.println("请输入车牌号:");
String plateNumber = scanner.nextLine();
Car car = new Car(plateNumber);
boolean success = parkingLot.enter(car);
if (success) {
System.out.println("车辆已进入停车场!");
} else {
System.out.println("停车场已满,无法进入!");
}
} else if (command.equals("exit")) { // 离开停车场
parkingLot.exit();
double fee = parkingLot.calculateFee();
if (fee > 0) {
System.out.println("车辆已离开停车场,停车费用为:" + fee + "元。");
}
} else if (command.equals("status")) { // 查看停车场状态
int availableSpaces = parkingLot.getAvailableSpaces();
int usedSpaces = parkingLot.getEntranceStack().size();
System.out.println("停车场状态:空位" + availableSpaces + "个,已用" + usedSpaces + "个。");
} else if (command.equals("quit")) { // 退出程序
break;
} else { // 无效指令
System.out.println("无效指令,请重新输入!");
}
}
scanner.close();
}
}
```
在这个实现中,我们使用了一个进入栈和一个出去队列来管理停车场内的车辆。当车辆进入停车场时,我们将其加入进入栈中;当车辆离开停车场时,我们将其从进入栈中弹出,并将其加入出去队列中。在计算停车费用时,我们从出去队列中获取车辆的进入时间和出去时间,并根据停车时长计算费用。您可以根据自己的需求进行修改和扩展。
阅读全文