剧院座位预订和数据结构?

时间:2010-07-08 13:09:57

标签: c# data-structures c#-4.0

想知道什么是最有效的记忆数据结构将用于剧院座位计划并在屏幕上以图形形式呈现给用户。

当我们正在考虑预订系统时,这是一种工作中的对话,我们需要提供一种类型的预订,这是我们需要做的其他预订类型之外的。

所以 - 理所当然地认为数据是数据库而且是持久存储。讨论的基础是需要在屏幕上有效地显示这个作为一个相关的座位计划,并在组织内的该座位付款后记录座位的状态。

300+公司用户环境,需要公共网站进行自助预订。

在网站方面可以满足并发性 - 比如检查当前状态和超时,如果预订没有继续或付款失败。

方案

因此,客户致电代理商加载座位计划。页面从数据库中获取信息,然后根据屏幕上的计划绘制每个座位的状态。在讨论了什么是可用的,客户要求预订并支付j56,j57,j58。

看起来某种形式的数组由字节组成,如果每次都绘制的话。 ?这会有效吗?

正在寻找的替代方案是具有这些座位计划的静态WPF应用程序,并从数据填充该数据。

但是我想在这里只是为了理智而问。

规则。

  • 主要计划是26排100个席位
  • 每行按字母顺序排列
  • 每组顺序从1到100
  • 座位具有以下状态
    • 清空
    • 保留未付款
    • 保留未由会员支付
    • 付费
    • 付费会员费率

3 个答案:

答案 0 :(得分:3)

你只处理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
}

答案 1 :(得分:1)

只需要一个阵列,每个单元代表一个座位。

例如,您可以拥有26x100阵列。

然后只需将阵列的每个单元格值设置为座位的状态,您甚至可以添加自己的类型为“隐藏”座位(IE是一个无法预订的座位,因此您可以进行锯齿状排列座位)。

简单示例:

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

答案 2 :(得分:1)

采取汤姆的回答并稍微扩展一下。也许是两个阵列,因为我们在这里做两份工作。

使用位数组表示可用性,使用小数组表示付款。位数组可以从支付数组和标准布局中即时计算。

您可以将付款数组相加以获得总收入。

BOOL? IsAvailable

  • null :隐藏(此处不是座位)
  • false :for unavailable
  • true :可用

单独支付数组

  • null :无付款/预订
  • 0 :保留但未支付
  • 29.99 :以英镑/美元(标准费率)支付的金额
  • 9.99 :以英镑/美元(会员)支付的金额