在c#中,用堆栈和队列实现停车场管理系统,要求代码完整
时间: 2024-11-07 22:13:36 浏览: 6
在C#中,我们可以使用System.Collections.Generic命名空间下的Stack(堆栈)和Queue(队列)数据结构来设计一个简单的停车场管理系统。这里我们将创建一个抽象的车位类(CarSpot),一个停车场类(ParkingLot)以及相应的进出车辆的方法。假设每个车位都有唯一的编号。
首先,我们定义车位类(CarSpot):
```csharp
public class CarSpot
{
public int Id { get; set; }
public bool IsOccupied { get; set; }
public void Park(Vehicle vehicle)
{
if (IsOccupied)
throw new Exception("车位已占用");
IsOccupied = true;
// 记录车辆信息或其他逻辑
Console.WriteLine($"车辆 {vehicle.Id} 入场, 车位 {Id}");
}
public void Unpark()
{
if (!IsOccupied)
throw new Exception("车位未被占用");
IsOccupied = false;
// 清理车位并记录离开的信息
Console.WriteLine($"车辆 {vehicle.Id} 离场, 车位 {Id} 空闲");
}
}
```
接下来,我们创建停车场类(ParkingLot):
```csharp
using System.Collections.Generic;
public class ParkingLot
{
private Stack<CarSpot> stackParkingArea;
private Queue<CarSpot> queueExitArea;
public ParkingLot(int size)
{
stackParkingArea = new Stack<CarSpot>(size);
queueExitArea = new Queue<CarSpot>(size);
}
public void Park(Vehicle vehicle)
{
if (stackParkingArea.Count == 0)
throw new Exception("没有空余车位");
var spot = stackParkingArea.Pop();
spot.Park(vehicle);
}
public void Exit(Vehicle vehicle)
{
if (queueExitArea.Count == 0)
throw new Exception("找不到对应车辆");
var spot = queueExitArea.Dequeue();
if (spot.Id != vehicle.Id)
throw new Exception("找不到对应的车辆");
spot.Unpark();
}
}
// Vehicle 类用于简化车辆信息
public class Vehicle
{
public int Id { get; set; }
}
```
这个停车场系统的工作原理是这样的:
- 新增车辆时,将车位从停车区域的栈顶取出并分配给车辆;
- 车辆离开时,先检查是否能找到对应车位(在退出区的队列头部),然后释放车位。
注意这只是一个基础示例,实际应用可能还需要处理更多的边界情况和异常处理。如果你想要模拟真实的场景,还可以添加更多的功能,如车辆管理、费用计算等。
阅读全文