剧院座位预订和数据结构?
Posted
技术标签:
【中文标题】剧院座位预订和数据结构?【英文标题】:Theatre Seat booking and Data Structure? 【发布时间】:2010-07-08 13:09:57 【问题描述】:想知道对于剧院座位计划以及在屏幕上以图形形式为用户呈现的内存数据结构最有效的是什么。
这是工作中的一个转换,因为我们正在研究预订系统,我们需要满足的预订类型超出了我们需要做的其他预订类型。
所以 - 理所当然地认为数据是一个数据库,那就是持久存储。讨论的基础是需要在屏幕上有效地将其显示为一致的座位计划,并在组织内为该座位付款后记录座位的状态。
300+ 公司用户环境需要公共网站进行自助预订。
将在网站方面满足并发性 - 例如检查当前状态和超时,如果预订未继续或付款失败。
场景
因此,客户致电代理加载座位计划。页面从数据库中获取信息,然后根据屏幕上的计划绘制每个座位的状态。在讨论了哪些可用内容后,客户要求预订并支付 j56、j57、j58。
看起来像是某种形式的由字节组成的数组,如果每次都绘制的话。 ?这会有效吗?
查看的替代方案是静态 WPF 应用程序,这些应用程序已经具有这些座位计划并从数据中填充。
但我想我会在这里问只是为了理智。
规则。
主要规划为26排100个座位 每一行都按字母顺序排列 每组从 1 到 100 是连续的 席位有以下状态 空 保留未付款 保留会员未付费 付费 付费会员价【问题讨论】:
家庭作业?如果是这样,可能需要添加一个作业标签。 不,真的是诚实的工作,这是一个真正的问题。 你试过 gridView 吗? 【参考方案1】:您只处理 2600 个座位?
在我看来,担心在内存中保存这么少的字节是浪费时间。这不像您代表一个拥有 10 万个座位的体育场。
为什么不只用班级代表每个座位,然后完成工作?
public class Seat
public char SeatRow get; set;
public byte SeatNum get; set;
public SeatState State get; set;
public Seat(char row, byte seat, SeatState state)
this.SeatRow = row;
this.SeatNum = seat;
this.State = state;
public enum SeatState
Empty,
ReservedNotPaid,
ReservedNotPaidMember,
Paid,
PaidMemberRate
【讨论】:
我还要添加位置信息,以便您可以绘制物理布局的表示(因为座位排和 num 不太可能充当真实空间中的合理坐标系 - 座位很少排成一个完美的网格,通常有些行有不同数量的座位)。它不必是实际的物理测量(例如精确到英寸) - 它只需要足够精确以表明 - 例如座位 A3 位于座位 B3 的前面和左侧半个座位(如果 A 和 B 排成一排,3 表示排中的第三个座位)。 @andrew 你有解决办法吗?【参考方案2】:只要有一个数组,其中每个单元格代表一个座位。
例如,您可以有一个 26x100 的数组。
然后只需将数组的每个单元格值设置为座位的状态,您甚至可以为“隐藏”座位添加自己的类型(即无法预订的座位,因此您可以进行锯齿状排列席位)。
简单示例:
0 = hidden
1 = empty
2 = reserved
3 = paid
空布局:
FRONT
0 0 1 1 1 0 0
0 1 1 1 1 1 0
1 1 1 1 1 1 1
1 1 1 1 1 1 1
BACK
部分完整布局:
FRONT
0 0 1 1 1 0 0
0 1 2 2 2 3 0
3 3 1 2 2 3 3
1 1 3 3 1 2 2
BACK
如果您想将其存储在数据库中,您将拥有三个表:
tbl_Theatre
tbl_Shows
tbl_TheatreShowSeats
【讨论】:
【参考方案3】:接受汤姆的回答并稍微扩展一下。可能是两个数组,因为我们在这里做两份工作。
使用位数组表示可用性,使用十进制数组表示付款。位数组可以根据支付数组和标准布局动态计算。
您也可以对支付数组求和以获得总收入。
布尔?可用
null:用于隐藏(此处没有座位) false:表示不可用 true:可用用于支付的单独数组
null:没有付款/预订 0:保留但未付费 29.99:以英镑/美元支付的金额(标准汇率) 9.99:支付金额为 £/$(会员费)【讨论】:
以上是关于剧院座位预订和数据结构?的主要内容,如果未能解决你的问题,请参考以下文章
我在 Postgresql 中制作了一个公共汽车预订系统,并被困在如何在预订时检查座位是不是可用