65.9K
CodeProject 正在变化。 阅读更多。
Home

酒店预订系统

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.16/5 (16投票s)

2009 年 3 月 28 日

GPL3

6分钟阅读

viewsIcon

458049

downloadIcon

37249

对酒店预订系统中实用代码的解释

Hotel_Management_System_VB

引言

在本文中,我将解释我在酒店预订系统中使用的重要过程或函数。我写这篇文章的目的是让您能够使用我应用程序中的一些有用的代码。无论是薪资系统、库存系统,还是任何具有类似列表视图或组合框填充概念的应用程序。

背景

我之前在这里发布过一篇关于我使用 Visual Basic 6.0 编写的酒店预订系统的文章。当时,我以为这个网站就像 www.planet-source-code.com。所以我没有费心去很好地解释这个程序的重要性。结果,那篇文章被 CodeProject.com 的版主删除了。
过去,我收到了一个关于我使用过时版本的 visual basic 的差评。所以我将我的酒店预订系统从 VB 6.0 升级到了 VB.NET。只是给 VB 6.0 程序员一个小提示——如果您觉得在 6.0 版本中效率更高,请继续您现在正在做的事情。但如果您想升级您的知识,那么我推荐使用新版本,也就是 VB.Net。

使用软件

我的酒店预订系统将帮助您管理酒店的数据集合。此外,您可以记录预订、入住、退房、付款等。
由于本文的目的是教您此程序中源代码的重要性,我在此链接了您可以从我的网站 http://www.sourcecodester.com/blog/free-hotel-management-system-manual.html 阅读的简单教程。

Using the Code

也许这段代码对你们来说并不新,但我相信仍然有程序员需要它。我有三个重要的代码片段要分享,我在这款程序——酒店预订系统中使用了它们。

填充 ListView 控件

概述

Windows Forms ListView 控件显示带有图标的项目列表。您可以使用列表视图来创建类似 Windows Explorer 右侧窗格的用户界面。该控件有四种视图模式:LargeIcon、SmallIcon、List 和 Details。来源:Microsoft Visual Studio 2008 文档

在上一段中,listview 用于显示项目列表。所以,在我的应用程序中,我使用它来显示一个具有自定义列的表中的项目列表。
要填充我程序中的 listview,您可以这样调用它:

  FillListView(lvList, GetData(sSql))

其中第一个参数的 lvList 是 FillListView 过程中的一个 ListView 控件。第二个参数——GetData(sSql) 将首先调用 GetData 函数并返回使用 OleDbDataReader 的数据。

在调用 FillListView 过程之前,我们将先调用名为 FillList 的过程。在这个过程中,您可以自定义要在 listview 中显示的列数。

这是 FillList 过程的代码:

Public Sub FillList()
    With lvList
    .Clear()
    
        .View = View.Details
        .FullRowSelect = True
        .GridLines = True
        .Columns.Add("Room Number", 90)
        .Columns.Add("Room Type", 120)
        .Columns.Add("Status", 90)

        FillListView(lvList, GetData(sSql))
    End With
End Sub

此过程可以在具有 listview 控件以列出表中所有记录的任何窗体中找到。唯一的区别是您可以设置 listview 中每列的属性。当然,FillList 过程在窗体加载事件中被调用。因此,在窗体完全显示之前,它会将数据从表加载到 listview 控件中。

以下是 FillListView 过程的代码:

Public Sub FillListView(ByRef lvList As ListView, ByRef myData As OleDbDataReader)
    Dim itmListItem As ListViewItem

    Dim strValue As String

    Do While myData.Read
        itmListItem = New ListViewItem()
        strValue = IIf(myData.IsDBNull(0), "", myData.GetValue(0))
        itmListItem.Text = strValue

        For shtCntr = 1 To myData.FieldCount() - 1
            If myData.IsDBNull(shtCntr) Then
            itmListItem.SubItems.Add("")
        Else
            itmListItem.SubItems.Add(myData.GetValue(shtCntr))
        End If
        Next shtCntr

        lvList.Items.Add(itmListItem)
    Loop
End Sub

由于此过程中的 ListView 来自调用过程,因此您无需再调用窗体的名称,例如 form1.lvList。相反,您将 listview 填充为:

  lvList.Items.Add(itmListItem)

关注点

由于我使用 listview 从表中检索数据,特别是在我的主文件中,我无需再次创建相同的代码来填充 listview。所有您需要做的就是将 listview 的名称作为第一个参数传递,并将 OleDbDataReader 返回的 SQL 字符串传递给 listview 控件。

填充 ComboBox 控件

概述

Windows Forms ComboBox 控件用于在下拉组合框中显示数据。默认情况下,ComboBox 控件分为两部分:上半部分是一个文本框,允许用户输入列表项。下半部分是一个列表框,显示项目列表,用户可以从中选择一个。来源:Microsoft Visual Studio 2008 文档

ComboBox 同样是一个不需要使用冗余代码填充数据的控件。在这段代码中,我们可以通过传递调用窗体的参数,仅用一个过程来填充 combobox。

使用此语法调用该过程:

FillCombobox(cboCountry, "SELECT * FROM Countries", "Countries", "Country", "CountryID")

请注意,有 5 个参数将传递给 FillCombobox 过程。第一个参数 cboCountry 是您窗体中将被填充数据的 combobox 的名称,第二个参数是来自 Countries 表的数据,第三个参数只是一个占位符,实际上是在 FillCombobox 过程中用于数据源的表名,第四个参数 (Country) 是包含实际数据的字段名。第五个参数 (CountryID) 将用于标记 Country 字段中的实际数据。

FillCombobox 过程

Public Sub FillCombobox(ByVal cboCombo As ComboBox, ByVal sSQL As String, ByVal strTable As String, ByVal strDisplayMember As String, ByVal strValueMember As String)
    Dim cnHotel As OleDbConnection
    cnHotel = New OleDbConnection

    Try
        With cnHotel
            If .State = ConnectionState.Open Then .Close()

            .ConnectionString = cnString
            .Open()
        End With

        Dim da As OleDbDataAdapter = New OleDbDataAdapter(sSQL, cnHotel)
        Dim dt As New DataSet

        da.Fill(dt, strTable)

        cboCombo.DataSource = dt.Tables(strTable).DefaultView
        cboCombo.DisplayMember = strDisplayMember
        cboCombo.ValueMember = strValueMember
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        cnHotel.Close()
    End Try
End Sub

正如您在此代码中所见:

    cboCombo.DataSource =  dt.Tables(strTable).DefaultView
      cboCombo.DisplayMember =  strDisplayMember
      cboCombo.ValueMember =  strValueMember

cboCombo 的 3 个属性将使用从调用过程中传递的参数。最好的部分是 DisplayMember 和 ValueMember,它们实际保存数据。我记得在 Visual Basic 6.0 版本中用数据填充 combobox 肯定需要很多代码。但现在使用 vb.net 就容易多了。

DisplayMember 实际上是这个 combobox 的占位符字段,因为保存在数据库中的实际数据是 ValueMember 的值。

示例

ValueMember (CountyID)         DisplayMember (Country)
1                 United States
2                 India
3                 Canada

这意味着只有 CountryID 的值将被保存在表中,而不是 Country。

计算表中的记录数

在 visual basic 6.0 中,如果您要确定记录集中的记录数,您所要做的就是添加一个像 rs.recordcount 这样的代码,其中 rs 是保存数据的变量的名称。

然而,在 VB.NET 中,此功能已被移除。那么,我们如何确定记录集的大小呢?

以下是酒店预订系统的另一个例子:

Dim sqlQRY As String = "SELECT * FROM [Room_Rates] WHERE RoomNumber = " & RoomNumber & " AND RateTypeID = " & cboRateType.SelectedValue
Dim cmd As OleDbCommand = New OleDbCommand(sqlQRY, cnHotel)
Dim RecordCount As Integer

RecordCount = CountRows("SELECT Count(*) FROM [Room_Rates]")

这对于您想先确定记录集是否包含数据以避免以后代码中出现错误非常重要。
这只是酒店预订系统中一些有用的代码。

以下是一些我发现非常有用的常见问题。

  1. 如何从 DatePicker 中减去一天
    dtpDateOut.Value.AddDays(-1)
  2. 如何向 DatePicker 添加天数

dtpDateOut.Value = dtpDateIn.Value.AddDays(1)

待办事项列表

  1. 添加登录窗体
  2. 添加工具栏
  3. 修复房间库存
  4. 报告
    • 客房报告
    • 预订报告
    • 应收账款报告
    • 办理入住客人报告
    • 办理退房报告
    • 客人名单报告
    • 其他费用报告
    • 房间历史记录
© . All rights reserved.