如何知道Reservation / CheckIn Program中的可用时间和日期

时间:2015-03-24 02:22:59

标签: vb.net ms-access

我正在使用Visual Basic.Net,我知道酒店/度假村预订计划的预订/签入的可用日期,时间和房间有问题。在下面提供的代码中,当我尝试在特定日期和时间保留特定房间时,然后重新启动程序,当我尝试使用不可用的房间/日期/时间再次保存时,程序的条件已经错误地允许再次使用冲突计划保存它。我正在使用visual basic。谢谢:))

Program Output

Database using MSAccess

Dim varConflictSched As Boolean = False

        Dim dsCheckIn As New DataSet
        Dim daCheckIn As OdbcDataAdapter = New OdbcDataAdapter("SELECT * FROM tblCheckIn ORDER BY ID", MyConn)
        daCheckIn.Fill(dsCheckIn, "tblCheckIn")

        Dim DateTimeRangeNewIn(Val(Me.txtstaying.Text)) As DateTime
        Dim DateCheckInNew As DateTime = Me.dtpCheckIn.Value

        For a As Integer = 0 To dsCheckIn.Tables("tblCheckIn").Rows.Count - 1
            Dim DateTimeRangeOldIn(dsCheckIn.Tables("tblCheckIn").Rows(a)("Staying")) As DateTime

            REM Check if the room number is in used
            If Me.cbRoomNumber.SelectedItem = dsCheckIn.Tables("tblCheckIn").Rows(a)("RoomNumber").ToString Then

                REM Check if the date and time of the specified room number is in used
                Dim varCheckInDate As DateTime = dsCheckIn.Tables("tblCheckIn").Rows(a)("CheckInDate")

                For b As Integer = 0 To dsCheckIn.Tables("tblCheckIn").Rows(a)("Staying")
                    For c As Integer = 0 To Val(Me.txtstaying.Text)
                        DateTimeRangeOldIn(b) = varCheckInDate.AddDays(b)
                        DateTimeRangeNewIn(c) = DateCheckInNew.AddDays(c)

                        If DateTimeRangeOldIn(b).Date = DateTimeRangeNewIn(c).Date Then
                            If DateDiff(DateInterval.Minute, DateTimeRangeOldIn(b), DateTimeRangeNewIn(c)) <= 0 Then
                                varConflictSched = True
                                Exit For

                            End If

                        End If

                    Next

                Next

            End If

        Next

        If Me.txtAmount.Text = "" Or Me.txtSearch.Text = "" Or Me.txtstaying.Text = "" Or Me.txtTotal.Text = "" Or Me.cbRoomNumber.SelectedIndex = -1 Or Me.cbRoomtype.SelectedIndex = -1 Then
            MessageBox.Show("Required field(s) should not be left blank" & vbCrLf & "Please try again", "NO BLANK SPACE", MessageBoxButtons.OK, MessageBoxIcon.Error)

        ElseIf varConflictSched = True Then
            MessageBox.Show("Can't set schedule with this date." & vbCrLf & "Please insert another date.", "CONFLICT", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Else
            Dim DAdapter As OdbcDataAdapter = New OdbcDataAdapter("SELECT * FROM tblCheckIN ORDER BY ID ", MyConn)
            Dim DSet As New DataSet
            DAdapter.Fill(DSet, "tblCheckIN")
            Dim NewID As Integer = DSet.Tables("tblCheckIN").Rows(DSet.Tables("tblCheckIN").Rows.Count - 1)("ID") + 1

            Dim CommCheckIn As OdbcCommand = New OdbcCommand("INSERT INTO tblCheckIN (ID,CustomerID,Roomtype,RoomNumber,Amount,CheckInDate,Staying)VALUES(" & NewID & ",'" & Me.txtSearch.Text & "','" & Me.cbRoomtype.SelectedItem & "','" & Me.cbRoomNumber.SelectedItem & "','" & Me.txtAmount.Text & "','" & Me.dtpCheckIn.Value & "' , '" & Me.txtstaying.Text & "')", MyConn)

            MyConn.Open()
            CommCheckIn.ExecuteNonQuery()
            MyConn.Close()

            MessageBox.Show("Your Checking-In is succesfully saved. ", "SAVED", MessageBoxButtons.OK, MessageBoxIcon.Information)

            Me.ClearAll()

        End If

1 个答案:

答案 0 :(得分:1)

您不需要循环代码来查找冲突。

在以下情况下发生碰撞:

RequestionStartDate <= EndDate
   And 
RequestEndDate >= StartDate

当然你必须在上面添加roomnumber,但它相当简单。

因此,在书籍按钮上,您的代码将执行此操作:

Dim strSQL As String
Dim rstData As New DataSet
Dim daRead As SqlDataAdapter
strSQL = "select * from tblCheckIn where RoomNumber = @RoomNum " & _
         " AND ( (@CheckIn <= CheckOutDate) AND (@CheckOut >= CheckInDate) )"
Dim MySql As SqlCommand = New SqlCommand(strSQL, GetCon)
MySql.Parameters.Add("@RoomNum", SqlDbType.Int).Value = Me.RoomNumber.Value
MySql.Parameters.Add("@CheckIn", SqlDbType.DateTime).Value = Me.dtpCheckIn.Value
MySql.Parameters.Add("@CheckOut", SqlDbType.DateTime).Value = Me.dtpCheckOut.Value

daRead.SelectCommand = MySql
daRead.Fill(rstData)
If rstData.Tables(0).Rows.Count > 0 Then
    MsgBox("you have a booking collsion")
End If

以上作品因为你从不允许collsion,以上将返回你在#lap;#34;的任何记录。这包括这样的情况:

RequestStart                   RequestEnd
  |                              |
       | exsiting Start/end |

    RequestStart                   RequestEnd
      |                              |
  | exist Start                         Exist end |

RequestStart               RequestEnd
    |                           |
          | exist Start                    Exist end |

实际上,上述简单查询可以找到任何重叠的任意组合。