2010-07-08 1 views
0

Было интересно, что было бы самым эффектным в памяти данных strucuture будет для плана сидения театра и визуализации, что в графической форме на экране для пользователя.Бронирование мест в кинотеатрах и структура данных?

Это работало как конверсионная станция, так как мы смотрим на системы бронирования, и есть тип бронирования, который нам нужно для обслуживания, который находится за пределами остальной части типа бронирования, что нам нужно сделать.

Итак - считайте само собой разумеющимся, что данные являются базой данных, и это постоянный магазин. Дискуссия основана на необходимости эффективного отображения этого экрана на экране в виде согласованного плана посадки и записи состояния места после оплаты за это место в организации.

300+ в окружении пользователей компании с необходимостью для публичного веб-сайта для самостоятельного бронирования.

Параллелизм будет учитываться на стороне сайта - например, проверка текущего состояния и таймаута, если резервирование не продолжилось или платеж не удался.

Сценарий

Так клиент звонит агент загружает план рассадки. Страница получает информацию из базы данных, а затем отображает состояние каждого места в соответствии с планом на экране. После некоторого обсуждения того, что доступно, клиент просит заказать и оплатить j56, j57, j58.

Похоже, что какая-либо форма массива состоит из байт, если рисуется каждый раз. ? Будет ли это эффективно?

Альтернативы, которые смотрят на статическое приложение WPF с этим планом посадки уже и заполняют это по данным.

Но подумал, что я попрошу здесь просто для здравомыслия.

Правила.

  • Основной план 26 рядов 100 мест
  • Каждая строка в алфавитном порядке
  • Каждый набор является последовательным от 1 до 100
  • Сиденье имеет следующие состояния
    • Пусто
    • Зарезервировано Не оплачивается
    • Зарезервировано Не оплачено членом
    • Paid
    • Paid ставки-член
+0

Домашнее задание? Если это так, возможно, вы захотите добавить домашнюю метку. – corsiKa

+0

Nope действительно работает честно, и это реальный вопрос. – jpg

+0

Вы пробовали с gridView? – Sharique

ответ

3

Вы имеете дело только с 2600 местами?

Мне кажется, что трата времени беспокоится о сохранении так мало байтов в памяти. Это не похоже на то, что вы представляете стадион со 100k местами.

Почему бы не просто представить каждое место с классом и выполнить эту работу?

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

Я бы также добавил информацию о местоположении, чтобы вы могли нарисовать представление физического макета (поскольку маловероятно, что ряд и число сидений могут действовать как разумная система координат в реальном пространстве - сидения редко выстраиваются в идеальную сетку и часто в некоторых рядах разное количество мест). Это не должно быть фактическое физическое измерение (например,с точностью до дюйма) - это просто нужно быть достаточно точным, чтобы показать это - например, Место A3 находится впереди и на половину сиденья слева от сиденья B3 (если A и B являются рядами, а 3 означает третье место в ряду). – andrew

+0

@andrew у вас есть решение? –

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 

Если вы желаете, чтобы сохранить это в базе данных, ты будешь ld имеют три таблицы:

tbl_Theatre 
tbl_Shows 
tbl_TheatreShowSeats 
1

Принимая ответ Том и немного расширяя его. Может быть, два массива, поскольку мы делаем здесь две работы.

Используйте бит массива для доступности и десятичный массив для платежей. Битовый массив можно вычислить «на лету» из массива платежей и стандартного макета.

Вы можете суммировать массив платежей, чтобы получить итоговые суммы.

bool? IsAvailable

  • нуля: для скрытых (не места здесь)
  • ложных: для недоступного
  • истинной: для доступного

отдельного массива для платежей

  • нулевой: нет платежей/оговорки
  • : зарезервировано, но не оплачены
  • 29,99: сумма, уплаченная в £/$ (скорость станд)
  • 9,99: уплаченная сумма в £/$ (член)
Смежные вопросы