用c#的栈和队列设计一个航空客运订票系统
时间: 2024-12-14 17:22:00 浏览: 2
在C#中,我们可以使用Stack(栈)和Queue(队列)数据结构来设计一个简单的航空客运订票系统的部分功能。这里我们以飞机座位预订为例:
1. **栈**可以用于模拟登机过程。首先,所有的乘客信息(如姓名、座位编号等)作为节点存储在栈中。当开始登机时,按照先进后出(Last In First Out, LIFO)的原则,乘客依次登机。这可以模拟先到的乘客先上飞机的情况。
```csharp
public class Passenger
{
public string Name { get; set; }
public int SeatNumber { get; set; }
}
public class AirlineTicketSystem
{
private Stack<Passenger> boardingPasses = new Stack<Passenger>();
public void BookSeat(Passenger passenger)
{
// 先添加乘客到系统
boardingPasses.Push(passenger);
}
public bool CheckIn()
{
if (boardingPasses.Count > 0)
{
Passenger passenger = boardingPasses.Pop();
// 登机操作,返回座位已被占用或空位情况
return ProcessCheckIn(passenger.SeatNumber);
}
else
{
return false; // 没有乘客了
}
}
private bool ProcessCheckIn(int seatNumber)
{
// 根据实际业务逻辑处理座位是否可用,此处仅作示例
return true;
}
}
```
2. **队列**可以代表航班的座位安排。乘客通过BookSeat方法预购座位,然后将他们加入队列。在起飞前,按照先进先出(First In First Out, FIFO)的原则对所有乘客进行检查,确保先订座的乘客能先就座。
```csharp
public class BoardingQueue
{
private Queue<Passenger> queue = new Queue<Passenger>();
public void BookSeat(Passenger passenger)
{
queue.Enqueue(passenger);
}
public bool BoardPlane()
{
while (!queue.IsEmpty())
{
Passenger passenger = queue.Dequeue();
// 起飞前操作,例如确认座位已预留
if (ConfirmSeat(reservation))
{
// 预留成功,告知乘客
passenger.HasBoarded = true;
} else
{
// 预留失败,记录并通知乘客
passenger.ReservationFailed = true;
}
}
return !queue.Any(); // 所有乘客都上了飞机
}
private bool ConfirmSeat(Passenger passenger)
{
// 真实场景下,这里会查询数据库确认座位是否被其他乘客预定
// 这里仅为示例,假设座位一直有效
return true;
}
}
```
阅读全文