Member 13209355 Ответов: 1

Система бронирования отелей - наличие свободных номеров (поиск)


Я создаю систему бронирования отелей. Однако, поскольку я не эксперт, он не делает того, что я хочу, чтобы он мог делать. На данный момент этот код не работает, и я не совсем уверен, где он идет не так. Я хочу, чтобы она работала как обычная система бронирования отелей, где, например, если номер был забронирован с 21.02.17 по 23.02.17, то кнопка останется Красной в этот период. Однако он все равно сможет быть забронирован на 23/02/17 (из-за выезда). Как я уже сказал, Я довольно новичок, так что может быть что-то, что уже существует, но просто не совсем понял это.

Кроме того, я думал, должен ли мой str1 быть изменен на что-то вроде
Select * from BookingInformation where theDate between Date In and Date Out and Room Number = 'Something'


Private Sub ReadRecords()
Dim btn As Button = Nothing
MyConn = New OleDbConnection
MyConn.ConnectionString = connString
MyConn.Open()

str1 = ("SELECT * FROM [BookingInformation] WHERE [Date Out] = '" & dtpDateOut.Value.Date & "'") 'When searching this searches for the data that you are looking for'

Dim cmd1 As OleDbCommand = New OleDbCommand(str1, MyConn)
dr = cmd1.ExecuteReader
While dr.Read()
    strRoomBooking = dr("Room Booking").ToString
    strDateIn = dr("Date In").ToString
    strDateOut = dr("Date Out").ToString


    If strDateOut > DateTime.Today Then
        If strRoomBooking = btn.Text Then
            btn.BackColor = Color.Red
        End If
    End If
End While
MyConn.Close()
End Sub

Private Sub Room_Booking_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ReadRecords()

End If


Что я уже пробовал:

Я попробовал код выше, а также заглянул в него и подумал
<pre>Select * from BookingInformation where theDate between Date In and Date Out and Room Number = 'Something'

могут работать

Richard MacCutchan

Это зависит от ваших критериев. Если все типы номеров одинаковы, то вам просто нужно выбрать любой, где запрашиваемые даты не пересекаются с забронированными датами. Таким образом, если RequestedStartDate больше или равен DateBookedStart и меньше DateBookedEnd, бронирование не будет выполнено. Другими словами, RequestedEndDtate должен быть до DateBookedStart, а RequestedStartDate - после DateBookedEnd для каждой подходящей комнаты. Напишите несколько примеров настроек на бумаге, чтобы увидеть, как это должно работать.

1 Ответов

Рейтинг:
2

OriginalGriff

Начните с того, что именно вы храните в качестве даты отъезда - проверки равенства требуют точных значений, поэтому, если вы не устанавливаете это как точное время суток с точностью до микросекунды - а я бы предложил "время выезда", которое обычно есть в отелях, - то сравнение не будет совпадать.

Но не делай этого так. Я знаю, что это всего лишь домашнее задание, но это очень важно: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Я бы посоветовал остановиться и подумать о том, что вы пытаетесь сделать: когда вы заказываете номер в отеле, когда вы его арендуете? Фактически, он забронирован с "первого доступного времени "в день начала до" оформления заказа " в день окончания. И у большинства отелей будет час или около того промежутка между "выездом " и" доступным " временем, чтобы дать персоналу возможность проверить и убрать номер. Поэтому сделайте так, чтобы значения БД отражали фактический отель, и когда приходит бронирование, проверьте, перекрывает ли доступное время в первый день с расчетным временем в последний день любой забронированный период. Если это не так, пользователь может забронировать его.