rs_user_name.open sql,hotel_conn,3,1
response.Write("欢迎您,"&session("user_name") &" <br>")
end if
%>
<%
set rs_user_name = Nothing
rs_user.Close()
Set rs_user = Nothing
room.Close()
Set room = Nothing
%>
2.注册登录模块
该模块分为注册和登录两个功能模块。
注册模块
图25所示用户注册页面,是由文件reg.asp来实现的。他不需要连接数据库,主要功能是收集信息并传递给reg2.asp文件进行数据有效性验证。
图25 用户注册页面
程序清单21 生成年、月、日序列reg.asp部分代码
<!-- 生成年 -->
<select name="byear" class="select_filed" id="byear" tabindex="7">
<%for i=1940 to year(date)-3%>
<option value="<%=i%>"><%=i%></option>
<%next%>
</select>年
<!-- 生成月 -->
<select name="bmonth" class="select_filed" id="bmonth" tabindex="8">
<%for i=1 to 12%>
<option value="<%=i%>"><%=i%></option>
<%next%>
</select>月
<!-- 生成日 -->
<select name="bday" class="select_filed" id="bday" tabindex="9">
<%for i=1 to 31%>
<option value="<%=i%>"><%=i%></option>
<%next%>
</select>日</div></td>
文件reg.asp接收到的信息传递给reg2.asp文件进行验证,其实现代码见程序清单22所示
<%
dim err(9)
dim name,psw,psw2,sex,byear,bmonth,bday,tel,email
dim rs_test_name,rs_user
name=request("name")
psw=request("psw")
psw2=request("psw2")
sex=request("sex")
byear=request("byear")
bmonth=request("bmonth")
bday=request("bday")
tel=request("tel")
email=request("email")
if is_name(name) then
set rs_test_name=server.CreateObject("adodb.recordset")
sql = "select * from user_reg where user_name='" & name & "'"
rs_test_name.open sql,hotel_conn,3,2
if not(rs_test_name.eof or rs_test_name.bof) then err(2)="这个用户名已经存在"
else
err(1)="用户名只能使用字母、数字和下划线"
end if
if len(name)>12 then err(3)="用户名不能超过12个字符"
if len(name)<4 then err(3)="用户名不能少于4个字符"
if psw <> psw2 then err(4)="两次输入的密码不一致"
if len(psw)>16 then err(5)="密码不能超过16位"
if len(psw)<4 then err(5)="密码不能少于4位"
if len(tel)>15 then err(6)="电话号码不能超过15个字符"
if len(tel)<7 then err(6)="电话号码不能少于7个字符"
if len(email)>50 then err(7)="Email最多只能有50个字符"
if not is_email(email) then err(8)="Email地址错误"
if not(isdate(byear & "-" & bmonth & "-" & bday)) then err(9)="生日您没有选择或生日日期无效"
for i=1 to 9
if err(i)<>"" then haveerr="yes"
next
%>
<%
set rs_user=server.CreateObject("adodb.recordset")
rs_user.open "select * from user_reg",hotel_conn,3,2
rs_user_total=(rs_user.RecordCount)+1
If (rs_user.RecordCount = -1) Then
rs_user_total=0
While (Not rs_user.EOF)
rs_user_total = rs_user_total + 1
rs_user.MoveNext
Wend
end if
rs_user.addnew
rs_user("user_name")=name
rs_user("psw")=psw
rs_user("sex")=sex
rs_user("age")=datediff("yyyy",byear & "-" & bmonth & "-" & bday,date)
rs_user("email")=email
rs_user("tel")=tel
rs_user("byear")=byear
rs_user("bmonth")=bmonth
rs_user("bday")=bday
rs_user.update
session("user_name") = name
%>
登录模块
登录模块主要是由文件login.asp来实现的。其登录核心代码见程序清单23.通过user_id和psw接收用户在首页填写的用户和密码,并打开数据库在user_reg用户信息表中查询,如果找到了相应的记录则将用户名写入session(“user_name”),并给变量haverr赋值为0作为显示正确登录的标识。
程序清单23 用户登录验证login.asp部分代码
<%
user_id=request.Form("user_name")
psw=request.Form("psw")
set rs_user=server.CreateObject("adodb.recordset")
sql="select * from user_reg where user_name = '" & user_id & "' and psw='" & psw & "'"
rs_user.open sql,hotel_conn,3,2
if not(rs_user.eof or rs_user.bof) then
session("user_name")=rs_user("user_name")
haveerr=0
else
haveerr=1
end if
%>
3.查看房间模块
查看房间信息是酒店应该提供一个必要功能。图26所示是查看房间页面的示意图,从图中可以看出在该页面显示了房间名称、房间类型、费用和预约操作。
图26 查看房价
在查看房间页面room.asp中首先要打开房间信息表room来获取信息,然后通过循环来逐条列出房间信息,见程序清单24
见程序清单24 显示房间信息核心代码room.asp
<%
set rs_room=server.CreateObject("adodb.recordset")
sql = "select * from room"
rs_room.open sql,hotel_conn,3,2
rs_room.movefirst
while (not rs_room.eof or rs_room.bof)
%>
<tr>
<td class="text"><div align="left"><%= rs_room("room_id") %></div></td>
<td class="text"><div align="left"><%= rs_room("name") %></div></td>
<td class="text"><div align="left"><%= rs_room("type") %></div></td>
<td class="text"><div align="left"><%= rs_room("cost") %></div></td>
<td class="text"><div align="left">
<a href="preengage.asp?room_id=<%= rs_room("room_id") %>">我要预约</a>
</div></td>
</tr>
<%
rs_room.movenext
wend
%>
4.查询房间模块
当房间信息过多的时候,用户为了快速获得满足自己要求的房间就比较麻烦。本系统设计了查询功能,方便用户输入条件获得需求房间。图27所示为了一个简单查询结果的页面。实现代码见程序清单25
图27 查询房间
程序清单25 查询功能实现代码search.asp
<%
set_room=request.Form("set_room")
set_cost=request.Form("set_cost")
%>
<form name="form1" method="post" action="">
<table width="533" border="0" class="table_small">
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2" class="text_title"><div align="left">请给出查询条件:</div></td>
</tr>
<tr>
<td colspan="2" class="table_title"> </td>
</tr>
<tr>
<td colspan="2" class="text"><div align="left">
<p>查看所有费用上限
<select name="set_cost" class="select_filed2" id="set_cost">
<option selected>不作要求</option>
<option>50元</option>
<option>200元</option>
<option>400元</option>
<option>600元</option>
<option>600元以上</option>
</select>
的
<select name="set_room" class="select_filed2" id="set_room">
<option selected>所有</option>
<option >总统套房</option>
<option>观光二人间</option>
<option>标准间</option>
<option>普通二人间</option>
<option>单人间</option>
<option>普通四人间</option>
<option>其他</option>
</select>
房间</p>
</div></td>
</tr>
<tr>
<td width="341" class="text"> </td>
<td width="121" class="text"><div align="center">
<input name="search" type="submit" class="button_" id="search" value="查询">
</div></td>
</tr>
</table>
</form>
<%
if set_room="" and set_cost="" then
response.End()
else
%>
<%
set rs_search=server.CreateObject("adodb.recordset")
sql = "select * from room "
'如果输入查询条件,构造where结构-----------
if not (set_cost = "不作要求" and set_room = "所有" )then
sql = sql & "where "
end if
if set_room <> "所有" then
sql = sql & "type = '" & set_room& "'"
end if
if set_cost <> "不作要求" and set_room <> "所有" then
sql = sql & " and "
end if
if set_cost = "50元" then
sql = sql & "cost <= 50"
elseif set_cost = "200元" then
sql = sql & "cost <= 200"
elseif set_cost = "400元" then
sql = sql & "cost <=400"
elseif set_cost = "600元" then
sql = sql & "cost <= 600"
elseif set_cost = "600元以上" then
sql = sql & "cost > 600"
end if
'response.Write(sql)
'打开房间数据库---------------
rs_search.open sql,hotel_conn,3,2
if rs_search.eof or rs_search.bof then
searchok=0
else
searchok=1
end if
%>
<table width="533" border="0" class="table_small">
<tr>
<td colspan="4"> </td>
</tr>
<tr>
<td colspan="4" class="text_title"><div align="left">查询结果:
<%
if searchok=1 then
response.Write("查看所有开放于"& set_time &"的"& set_room &"房间,费用上限"& set_cost)
end if
%>
</div></td>
</tr>
<tr>
<td colspan="4" class="table_title"> </td>
</tr>
<% If searchok=0 Then %>
<tr>
<td colspan="4" class="text_error"><div align="left">●没有找到符合要求的房间</div></td>
</tr>
<% Else %>
<tr class="text_title">
<td width="145"><div align="left">房间名称</div></td>
<td width="112"><div align="left">房间类型</a></div></td>
<td width="136"><div align="left">费用(元/小时)</div></td>
<td width="118"><div align="left">使用时间</div></td>
</tr>
<%
rs_search.movefirst
while (not rs_search.eof)
%>
<tr class="text">
<% urltext="preengage.asp?room_id="& rs_search("room_id") %>
<td><div align="left"><a href="<%= urltext %>"><%= rs_search("name") %></a></div></td>
<td><div align="left"><%= rs_search("type") %></div></td>
<td><div align="left"><%= rs_search("cost") %></div></td>
<td><div align="left">24小时</div></td>
</tr>
<%
rs_search.movenext
Wend
%>
5预约房间和取消预约模块
预约是本系统的核心所在,该模块接收用户提交的房间编号和预约时间,并判断房间在指定时间内是否空闲,最后给出用户预约结果,如果预约成功则要将信息写入数据库。
图28所示是预约房间界面,图29显示房间预约成功
图28 预约房间
图29 预约成功界面
由preengage.asp文件获取的表单信息给chkpre.asp文件处理。本系统要求用户提出预约时刻要比开始使用时