用C#中的栈和队列方法设计一个停车场管理系统,只需要显示十行十列的停车位号,以及每次输入车牌号后停车位相应的也按顺序在停车位号处显示车牌号
时间: 2024-11-04 21:15:06 浏览: 29
要设计一个简单的停车场管理系统,我们可以使用C#中的Stack(堆栈)数据结构来模拟车位的分配过程,因为当我们进入停车场时,通常是先找到最近的空位停车。队列则可以用来表示车辆进出的顺序。这里是一个基础的设计思路:
```csharp
using System;
using System.Collections.Generic;
class ParkingLot
{
// 使用二维数组模拟停车位
private int[,] parkingSpaces = new int[10, 10];
public void DisplayParkings()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.Write(parkingSpaces[i, j] != -1 ? $"{i * 10 + j}: {"空" if (parkingSpaces[i, j] == 0) else "已占用"}" : " ");
}
Console.WriteLine();
}
}
// 假设Push方法用于分配车位
public void Push(int carId)
{
int row = 0, col = 9; // 从最后一排开始找空位
while (row < 10 && col >= 0 && parkingSpaces[row, col] != 0)
{
col--;
}
if (col >= 0)
{
parkingSpaces[row, col] = carId;
DisplayParkings(); // 更新显示
}
else
{
Console.WriteLine("没有空位了!");
}
}
// 假设Pop方法用于释放车位并返回车牌号
public int Pop()
{
int? removedCarId = null;
if (CanPop())
{
removedCarId = parkingSpaces[0, 0]; // 从最前一排第一个位置移除
parkingSpaces[0, 0] = -1; // 标记为空
DisplayParkings();
}
return removedCarId ?? -1; // 返回-1表示没有车被移除
}
private bool CanPop()
{
// 判断是否有车停在第一排第一个位置
return parkingSpaces[0, 0] != 0;
}
}
public class ParkingSystem
{
public static void Main(string[] args)
{
var parkingLot = new ParkingLot();
// 输入车牌号并停车
string carIdInput;
do
{
Console.Write("请输入车牌号(或'q'退出): ");
carIdInput = Console.ReadLine().Trim();
if (carIdInput != "q")
{
parkingLot.Push(int.Parse(carIdInput));
}
} while (carIdInput != "q");
// 输出停车场状态
Console.WriteLine("\n停车场状态:");
parkingLot.DisplayParkings();
// 如果有车离开
while (true)
{
int removedCarId = parkingLot.Pop();
if (removedCarId != -1)
{
Console.WriteLine($"车辆 {removedCarId} 离开");
}
else
{
break;
}
}
}
}
```
这个代码示例中,`ParkingLot`类代表停车场,其中包含停车位数组`parkingSpaces`。`DisplayParkings()`用于显示当前车位状况,`Push()`用于插入新的车辆,`Pop()`用于移除并返回最后一个停车的车辆信息。`Main`方法则是整个程序的入口点。
阅读全文