» 网友学堂 » Dreamweaver教程 » Dreamweaver实现客房预订业务系统 -> 查看 2007年02月15日 更新
Dreamweaver实现客房预订业务系统
作者:问天 发表时间:2007-2-15 00:30 阅读:377次 在百度搜索相关内容

客房预订业务的特点是顾客流动性大,其用户注册方式更为灵活,预订业务除了常用的验证外,还要防止在预订满的情况下继续预订客房。本实例将为读者介绍如何实现客房预订业务。
  效果说明
  图 96-1 所示是预订业务的基本界面,用户可以直接登录或注册并预订客房。



  创作构思
  通过程序检测用户是否成功登录,登录错误的是否能够注册成功,并添加用户的预订资料。通过“ DataTime ”类下的“ Compare ”,将用户预订的时间与其他用户已预订的时间进行比较,以检测是否预订满。
[color=#FFFFFF'][/color]

  操作步骤
[color=#FFFFFF'][/color]

  步骤一 设置应用程序的环境
[color=#FFFFFF'][/color]

  ( 1 )复制光盘中实例 96 的内容。将“光盘 \ 源文件 \ 实例 96 ” 目录下的所有文件复制到“ C:\ Inetpub\wwwroot\ ”目录下。在 IIS 服务器中设置默认网站的主目录为“ C:\ Inetpub\wwwroot\hotel ”(可参考实例 1 中的相关方法)。在 Dreamweaver 中新建站点“ hotel ”,其站点目录为“ C:\ Inetpub\wwwroot\hotel ”,建立站点的方法可参照实例 2 。
  ( 2 )“ hotel.mdb ”结构。运行 Access ,打开“ C:\ Inetpub\wwwroot\adweb\data\hotel.mdb ”,可以看到数据库“ hotel.mdb ”中有“ tbOder ”、“ tbUser ”和“ tbRoom ” 3 个数据表。“ tbOder ”表用于存储用户订房的相关资料,该表的数据结构如图 96-2 所示。“ tbUser ”表用于存储用户的注册信息,该表的数据结构如图 96-3 所示。“ tbRoom ”表用于存储酒店各类客房的价格及相应的客房数,该表的数据结构如图 96-4 所示。数据库“ hotel.mdb ”中还有一个查询表“ UserOrder ”,该查询表在设计视图中的设置如图 96-5 所示。






  ( 3 )建立数据库链接“ ADconn ”,链接数据库“ C:\ Inetpub\wwwroot\adweb \data\hotel.mdb ”,方法可参考实例 75 。
[color=#FFFFFF'][/color]






[color=#FFFFFF'][/color]
步骤二 设计基本页面
  ( 1 )“ index.aspx ”页面结构。打开“ index.aspx ”,该页面是素材直接提供的,初始打开时如图 96-6 所示。图中①、②所示是图像而不是图像按钮,圆角方框①所示的图像其作用是添加“ OnClick ”动作以显示“ Layer1 ”层,该层中添加了一个日历控件,其 ID 为“ MyCalendar1 ”;圆角方框②所示图像的作用是添加“ OnClick ”动作以显示“ Layer2 ”层,该层中添加了一个日历控件,其 ID 为“ MyCalendar2 ”。



  提示:“ index.aspx ”初始页面中其他控件的设置情况如表 96-1 所示。
  表 96-1 “ index.aspx ”初始页面中其他控件的设置情况
  




  控件对应文本

  控件类型

  控件 ID
[color=#FFFFFF'][/color]



  入住时间

  asp :文本框

  StartTime
[color=#FFFFFF'][/color]



  离店时间

  asp :文本框

  LastTime
[color=#FFFFFF'][/color]



  预订数量
[color=#FFFFFF'][/color]


  asp :文本框

  OrderNum


  会员 ID
[color=#FFFFFF'][/color]


  asp :文本框

  UserID1


  会员密码

  asp :文本框

  UserPass1


  注册 ID
[color=#FFFFFF'][/color]


  asp :文本框

  UserID
[color=#FFFFFF'][/color]



  真实姓名

  asp :文本框

  UseName


  登录密码

  asp :文本框

  UserPass


  重复密码

  asp :文本框

  UserPass2


  电子邮件

  asp :文本框
[color=#FFFFFF'][/color]


  UserEmail


  联系电话

  asp :文本框

  UserTel
[color=#FFFFFF'][/color]



  【现在预订】按钮

  asp :按钮

  Orderbt


  【全部重置】按钮

  表单按钮

  Submit (其动作为重置表单)
[color=#FFFFFF'][/color]

  ( 2 )添加数据集【 RoomData 】。在【服务器行为】面板中添加数据集【 RoomData 】,其在【数据集】对话框中的设置如图 96-7 所示。



  ( 3 )修改 SQL 命令。在【数据集】对话框中单击【高级】按钮,切换到【数据集】高级对话框,将 SQL 命令由 SELECT Pice,RoomID, RoomNum,RoomType FROM tbRoom 改为 SELECT Pice,RoomID, RoomNum, trim(RoomType) chr(32) cstr(Pice) As RoomType FROM tbRoom ,如图 96-8 所示。
[color=#FFFFFF'][/color]








( 4 )添加数据列表。单击 ASP.NET 快捷菜单中的【 asp :单选按钮列表】,操作如图 96-9 所示。




  ( 5 )为页面添加“ System.Data ”、“ System.Data.OleDb ”、“ System.Globalization ”和“ System.Threading ” 4 个命名空间,如图 96-10 中圆角方框所示。



  ( 6 )定义页面载入过程“ Page_Load ”,该过程的代码如下所述。
Sub Page_Load(ByVal Src As Object, ByVal E As EventArgs)
Dim i As Integer
If Not Page.IsPostBack Then
For i = 0 To RoomData.RecordCount - 1
Dim str1, str2 As String
str1 = RoomData.DefaultView(i).Row("RoomType")
str2 = CStr(RoomData.DefaultView(i).Row("RoomID"))
RoomRadio.Items.Add(New ListItem(str1, str2))
Next
End If
End Sub
  (读者可打开【光盘】|【源文件】|【实例 96 】|【 96.1.txt 】文件,直接复制)
  程序说明:
  该 “ Page_Load ”过程是在第一次载入页面时,为单选按钮列表“ RoomRadio ”添加列表项,添加列表项的标签值等于“ RoomData ”数据集下的字段“ RoomType ”,而选取值等于字段“ RoomID ”。
  提示:也许有人会问为什么不直接用单选按钮列表的数据绑定呢?这由于通过 Dreamweaver 进行数据绑定,在程序中经常会出现无法获取单选按钮列表选取值的错误。
  ( 7 )定义“ MyCalendar1_SelectionChanged ”过程,用于响应日历控件“ MyCalendar1 ”的“ SelectionChanged ”事件,该过程的代码如下所述。
Protected Sub MyCalendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs)Handles MyCalendar1.SelectionChanged
starttime.text = MyCalendar1.SelectedDate.ToShortDateString
End Sub
[color=#FFFFFF'][/color]

  (读者可打开【光盘】|【源文件】|【实例 96 】|【 96.2.txt 】文件,直接复制)
[color=#FFFFFF'][/color]

  ( 8 )定义“ MyCalendar2_SelectionChanged ”过程,用于响应日历控件“ MyCalendar2 ”的“ SelectionChanged ”事件,该过程的代码如下所述。
[color=#FFFFFF'][/color]

Protected Sub MyCalendar2_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs)Handles MyCalendar2.SelectionChanged
lasttime.text= MyCalendar2.SelectedDate.ToShortDateString
End Sub


 步骤三 实现客户预订业务
  ( 1 )实现客户预订业务的程序流程如图 96-11 所示。



  ( 2 )为页面添加 4 个全局变量,如图 96-12 中圆角方框所示。



  ( 3 )定义“ Usercheck ”函数。该函数用于检测用户是否登录正确,登录不正确时是否注册成功,如果用户登录正确或者注册成功,则该函数返回“ True ”,否则将返回“ False ”,该函数的代码如下所述。
[color=#FFFFFF'][/color]

Function Usercheck() As Boolean
Dim Hotelada1, Hotelada2 As OleDbDataAdapter
Dim HotelDataSet1, HotelDataSet2 As System.Data.DataSet
Dim Hoteldt1, Hoteldt2 As DataTable
Dim tbRow As DataRow
Dim yy As OleDbCommandBuilder
Hotelstring = "Select * From tbUser Where UserId='" &;amp; UserID1.Text &;amp; "' And UserPass='" &;amp; UserPass1.Text &;amp; "'"
Hotelada1 = New OleDbDataAdapter(Hotelstring, conn)
HotelDataSet1 = New System.Data.DataSet
Hotelada1.Fill(HotelDataSet1, "tbUser")
Hoteldt1 = HotelDataSet1.Tables("tbUser")
If Hoteldt1.Rows.Count > 0 Then
strName = Hoteldt1.Rows(0)("UserId")
Else
If (Trim(UserID.Text) <> Nothing) And (Trim(UserPass.Text) <> Nothing) _
And (Trim(UserName.Text) <> Nothing) And (Trim(UserEmail.Text) <> Nothing) _
And (Trim(UserTel.Text) <> Nothing) Then
Hotelstring = "Select * from tbUser"
Hotelada2 = New OleDbDataAdapter(Hotelstring, conn)
yy = New OleDbCommandBuilder(Hotelada2)
HotelDataSet2 = New System.Data.DataSet
Hotelada2.Fill(HotelDataSet2, "tbUser")
Hoteldt2 = HotelDataSet2.Tables("tbUser")
tbRow = Hoteldt2.NewRow
tbRow("UserId") = UserID.Text
tbRow("UserPass") = UserPass.Text
tbRow("UserName") = UserName.Text
tbRow("UserEmail") = UserEmail.Text
tbRow("UserTel") = UserTel.Text
Hoteldt2.Rows.Add(tbRow)
Hotelada2.Update(HotelDataSet2, "tbUser")
strName = UserID.Text
Else
Usercheck = False
Exit Function
End If
End If
Usercheck = True
End Function

( 4 )定义“ Roomcheck ”函数。该函数首先检测用户有没有选择预订客房类型,如果没有选择,则该函数返回“ False ”,接着在用户选择预订客房类型的情况下,检测所选择的客房类型在预订的时间段中是否已预订满,如果是,则返回“ False ”,否则将返回“ True ”,该函数的代码如下所述。
[color=#FFFFFF'][/color]

Function Roomcheck() As Boolean
Dim Hotelada1, Hotelada2 As OleDbDataAdapter
Dim HotelDataSet1, HotelDataSet2 As System.Data.DataSet
Dim Hoteldt1, Hoteldt2 As DataTable
Dim i, RoomI As Integer
If RoomRadio.SelectedItem.Value <> Nothing Then
Hotelstring = "Select * From UserOrder Where RoomID=" &;amp; RoomRadio.SelectedItem.Value
Hotelada1 = New OleDbDataAdapter(Hotelstring, conn)
HotelDataSet1 = New System.Data.DataSet
Hotelada1.Fill(HotelDataSet1, "UserOrder")
Hoteldt1 = HotelDataSet1.Tables("UserOrder")
Dim Date1, Date2 As Date
Date1 = StartTime.Text
Date2 = LastTime.Text
For i = 0 To Hoteldt1.Rows.Count - 1
Dim roomdate1, roomdate2 As Date
roomdate1 = Hoteldt1.Rows(i)("StartTime")
roomdate2 = Hoteldt1.Rows(i)("LastTime")
If (System.DateTime.Compare(Date1, roomdate1) And System.DateTime.Compare(roomdate2, Date1)) _
Or (System.DateTime.Compare(Date2, roomdate1) And System.DateTime.Compare(roomdate2, Date2)) _
Or (System.DateTime.Compare(roomdate1, Date1) And System.DateTime.Compare(Date2, roomdate2)) Then
RoomI = 1
End If
Next
Hotelstring = "select RoomNum From tbRoom where RoomID=" &;amp; RoomRadio.SelectedItem.Value
Hotelada2 = New OleDbDataAdapter(Hotelstring, conn)
HotelDataSet2 = New System.Data.DataSet
Hotelada1.Fill(HotelDataSet2, "tbRoom")
Hoteldt2 = HotelDataSet2.Tables("tbRoom")
If RoomI CInt(OrderNum.Text) > Hoteldt2.Rows(0)("RoomNum") Then
Roomcheck = False
Exit Function
End If
Else
Roomcheck = False
Exit Function
End If
Roomcheck = True
End Function
  (读者可打开【光盘】|【源文件】|【实例 96 】|【 96.5.txt 】文件,直接复制)
  提示:程序中采用“ DataTime ”类下的“ Compare ”方法进行时间比较,查找出现时间重复的订单。以下 3 种情况属于时间重复:① 用户选择的入住时间小于订单中的“ StartTime ”字段值,选择的离店时间大于“ LastTime ”字段值;② 用户选择的入住时间大于订单中的“ StartTime ”字段值,选择的离店时间小于“ LastTime ”字段值;③ 用户选择的入住时间小于订单中的“ StartTime ”字段值,选择的离店时间小于“ LastTime ”字段值。查找得出的重复数如果等于该类型客房的最大客户数,则说明该时间段中该类型的客房已预订满。
  ( 5 )定义“ Orderinser ”过程用于添加用户预订客房的相关信息到“ tbOrder ”表中,该过程的代码如下所述。
[color=#FFFFFF'][/color]

Sub Orderinser()
Dim Hotelada2 As OleDbDataAdapter
Dim HotelDataSet2 As System.Data.DataSet
Dim Hoteldt2 As DataTable
Dim tbRow As DataRow
Dim yy As OleDbCommandBuilder
Hotelstring = "Select * From tbOrder"
Hotelada2 = New OleDbDataAdapter(Hotelstring, conn)
HotelDataSet2 = New System.Data.DataSet
yy = New OleDbCommandBuilder(Hotelada2)
Hotelada2.Fill(HotelDataSet2, "tbOrder")
Hoteldt2 = HotelDataSet2.Tables("tbOrder")
tbRow = Hoteldt2.NewRow
tbRow("UserID") = strName
tbRow("RoomID") = CInt(RoomRadio.SelectedItem.Value)
tbRow("OrderNum") = CInt(OrderNum.Text)
tbRow("StartTime") = StartTime.Text
tbRow("LastTime") = LastTime.Text
HotelDataSet2.Tables("tbOrder").Rows.Add(tbRow)
Hotelada2.Update(HotelDataSet2, "tbOrder")
End Sub


( 6 )定义过程“ ErrInfo ”用于出错时调用该过程显示错误信息,该过程的代码如下所述。
Sub ErrInfo(ByVal Errmess As String)
Dim strScript As String
strScript = "<script language=javascript>"
strScript = "alert('" Errmess "');"
strScript = "<"
strScript = "/"
strScript = "script>"
RegisterClientScriptBlock("showSaveMessage", strScript)
End Sub
  (读者可打开【光盘】|【源文件】|【实例 96 】|【 96.7.txt 】文件,直接复制)
  ( 7 )定义【现在预订】按钮的“ OnClick ”事件响应过程为“ Orderbt_Click ”,并将该过程绑定到【现在预订】按钮的“ OnClick ”事件中。“ Orderbt_Click ”过程的源代码如下所述。
Protected Sub Orderbt_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim Errstr As String
HotelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &;amp; Server.MapPath("data/hotel.mdb")
conn = New OleDbConnection(HotelConn)
If Usercheck() = False Then
Errstr = " 请正确登录或正确输入您的注册信息! "
ErrInfo(Errstr)
Exit Sub
End If
If Roomcheck() = False Then
Errstr = " 您预订客房在您预订时间段中已预订满了! "
ErrInfo(Errstr)
Exit Sub
End If
Orderinser()
End Sub
  ( 8 )预览效果。保存“ index.apsx ”,在 IE 中预览效果,如图 96-1 所示。
  本实例讲解了客房预订业务中最简单的流程:用户注册、登录、验证用户预订客房是否预订满,以完成客房预订业务。本实例没有对服务器控件进行验证,也没有对注册名惟一性的验证进行,有兴趣的读者可以参考实例 76 和实例 77 ,添加相关功能。当提交预订资料时,客房预订业务会把预订资料以电子邮件的方式发给预订客房的用户,本实例也没有对这方面的知识进行讲解,有兴趣的读者可以参考实例 84 中“步骤三 建立订单邮件自动回复”里的相关内容。当提交预订资料时,客房预订业务也会将资料发给酒店的总台,以便更新总台客房预计的相关数据库,由于这方面的知识已经超出 Dreamweaver 的应用范围,所以这里就不再详细介绍了。至此,本实例操作完毕。

#Advertisement