<tr class="text">
<td><div align="left"><%= rs_room("room_id") %></div></td>
<td><div align="left"><%= rs_room("name") %></div></td>
<td><div align="left"><%= rs_room("type") %></div></td>
<td><div align="left"><%= rs_room("cost") %></div></td>
<td>
<div align="left">
[<a href="<%= delurl %>">删除</a>]
[<a href="<%= editurl %>">修改</a>]
</div>
</td>
</tr>
<%
rs_room.movenext
wend
%>
删除房间
当酒店因为某种原因不能提供预约时,管理员可以将该房间从数据库中删除,删除功能的实现是文件del.asp来实现的,程序清单14是实现删除功能的代码。
图15删除房间成功页面
程序清单14 删除房间实现代码
<%
dim room_id,sql,rs_del
room_id=request("room_id")
if room_id="" then response.Redirect("error.asp")
set rs_del=server.CreateObject("adodb.recordset")
sql = "delete from room where room_id=" & room_id
rs_del.open sql,hotel_conn,3,2
%>
当管理员成功删除指定房间后会显示删除成功界面,如图15所示。
修改房间信息
修改房间信息的功能是修改存在于数据库中的房间信息,包括房间名称、房间类型和费用,但是不能修改房间ID。
修改房间信息功能有admin_edit.asp和admin_editchk.asp两个文件来完成。第一个文件用来接受管理员填写的更新信息,第二个用来检查数据并写入数据库中。图16所示是填写房间信息表单的页面。
图16 修改房间信息
程序清单15 修改房间信息核心代码admin_editchk.asp
<%
dim err(4)
dim room_id,room_name,room_type,cost,haveerr,rs_edit,sql
room_id=request.Form("room_id")
room_name=request.Form("name")
room_type=request.Form("type")
cost=request.Form("cost")
if len(room_name) > 30 then err(1)="房间名称不能超过30个字符"
if len(room_name) < 2 then err(1)="房间名称不能少于2个字符"
if not IsNumeric(cost) then err(2)="费用必须是数字"
if room_type="" then err(3)="房间类型不能位为空"
if len(cost) >4 then err(4)="费用不能多于4位数"
for i=1 to 4
if err(i)<>"" then haveerr=1
next
If haveerr = 0 Then
set rs_edit=server.CreateObject("adodb.recordset")
sql = "select * from room where room_id=" & room_id
rs_edit.open sql,hotel_conn,3,2
rs_edit("name")=room_name
rs_edit("type")=room_type
rs_edit("cost")=cost
rs_edit.update
%>
4.添加房间模块
该功能模块的实现是由文件admin_addnew.asp完成的。添加房间的页面如图17所示。其实实现代码比较简单就不再详细论述。
当管理员正确提交了要添加新房间的信息后就会出现如图18所示的成功提示,该功能是由文件admin_addnewchk.asp完成的,其实现代码见程序清单16
图17 添加新房间
程序清单16 添加房间页面关键代码admin_addnewchk.asp
<%
dim err(3)
dim haveerr,room_name,room_type,cost,i
dim rs_add,sql
room_name=request.Form("name")
room_type=request.Form("type")
cost=request.Form("cost")
if len(room_name) > 30 then err(1)="房间名称不能超过30个字符"
if len(room_name) < 2 then err(1)="房间名称不能少于2个字符"
if not IsNumeric(cost) then err(2)="费用必须是数字"
if len(cost) >4 then err(3)="费用不能多于4位数"
for i=1 to 3
if err(i)<>"" then haveerr=1
next
If haveerr=0 Then
set rs_add=server.CreateObject("adodb.recordset")
sql = "select * from room"
rs_add.open sql,hotel_conn,3,2
rs_add.addnew
rs_add("name")=room_name
rs_add("room_id")=room_name
rs_add("type")=room_type
rs_add("cost")=cost
rs_add.update
%>
<%
for i=1 to 3
if err(i) <> "" then response.Write("●" & err(i) & "<br>")
next
%>
<% End If %>
<%
set rs_add=nothing
%>
5.预约管理模块
预约管理模块包括确认预约和删除预约两部分,确认预约是指在用户已经对指定的预约付款后,管理员在预约数据库中将对应的预约信息修改为为已付款操作;删除预约用于在数据库预约表中出现错误预约或恶意预约后,由管理员强制将其删除。
确认预约页面
酒店房间预约系统规定,用户不能取消已经付款的预约,因为这些预约已经被认为是有效预约。同样,管理员不能删除已经付款的预约。预约列表界面是确认预约页面的一部分,它将为管理员显示所有为付款的预约,并提供“确认预约”和“删除”超链接。
图19所示是显示预约列表页面,图20所示是预约确认成功提示信息页面,它们的实现都由文件admin_chk.asp完成,它们的实现代码见程序清单17
图19 预约列表
图20 预约确认
程序清单17 确认预约功能核心代码admin_chk.asp
<%
dim preengage_id,rs_preengage,sql,rs_room,datetime
preengage_id=request("preengage_id")
set rs_preengage=server.CreateObject("adodb.recordset")
If preengage_id="" Then
sql = "select * from preengage where paid = 0"
rs_preengage.open sql,hotel_conn,3,2
rs_preengage.movefirst
%>
<br>
<table width="584" border="0" class="table_small">
<tr>
<td colspan="6"> </td>
</tr>
<tr>
<td colspan="6" class="text_title"><div align="left">预约确认</div></td>
</tr>
<tr>
<td colspan="6" class="table_title"> </td>
</tr>
<tr class="text">
<td width="86"><div align="left">预约用户</div></td>
<td width="125" class="text"><div align="left">房间名称</div></td>
<td width="89"><div align="left">预约日期</div></td>
<td width="89"><div align="left">预约时间</div></td>
<td width="61"><div align="left">费用</div></td>
<td width="104"><div align="left">操作</div></td>
</tr>
<%
while (not rs_preengage.eof)
%>
<tr class="text">
<td><div align="left"><%= rs_preengage("user_name") %></div></td>
<td class="text">
<div align="left">
<%
set rs_room=server.CreateObject("adodb.recordset")
sql = "select * from room where room_id=" & rs_preengage("room_id")
rs_room.open sql,hotel_conn,3,2
response.Write(rs_room("name"))
rs_room.close
%>
</div></td>
<td><div align="left"><%= rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday") %></div></td>
<td><div align="left"><%= rs_preengage("beginhour") & ":00-" & (rs_preengage("beginhour")+1) & ":00" %></div></td>
<td><div align="left"><%= rs_preengage("cost") %></div></td>
<td><div align="left">[<a href="admin_chk.asp?preengage_id=<%= rs_preengage("preengage_id") %>">确认预约</a>][<a href="chkcancel.asp?preengage_id=<%= rs_preengage("preengage_id") %>">删除</a>]</div></td>
</tr>
<%
rs_preengage.movenext
wend
%>
<tr>
<td colspan="6"> </td>
</tr>
<tr>
<td colspan="6"> </td>
</tr>
</table>
<%
Else
'已提交preengage_id数据,开始更新预约表preengage的paid字段---------
sql = "select * from preengage where preengage_id=" & preengage_id
rs_preengage.open sql,hotel_conn,3,2
rs_preengage("paid")=1
rs_preengage.update
datetime= rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday")
datetime=datetime & " " & rs_preengage("beginhour") & ":00-" & (rs_preengage("beginhour")+1) & ":00"
%>
<br>
<table width="488" border="0" class="table_small">
<tr>
<td> </td>
</tr>
<tr>
<td class="text_title"><div align="left">预约确认成功</div></td>
</tr>
<tr>
<td class="table_title"> </td>
</tr>
<tr>
<td class="text"><div align="left">成功确认ID为<%= rs_preengage("preengage_id") %>的预约,它是在<%= datetime %>的预约,费用为<%= rs_preengage("cost") %>元</div></td>
</tr>
<tr>
<td> </td>
</tr>
</table>
<% End If %>
删除预约页面
图21所示是删除页面成功的提示信息。该功能的实现是由文件chkcancel.asp完成的,在用户面取消预约模块中还会看到该文件的出现,它们的实现都是由该文件完成的。详细代码见程序清单18
程序清单18 删除和取消预约功能的实现chkcancel.asp
<%
dim preengage_id,rs_cancel,rs_del,delok
preengage_id=request("preengage_id")
if preengage_id="" then
response.Redirect("error.asp")
response.End()
end if
if session("user_name")="" and session("admin_name")="" then
response.Redirect("error.asp")
response.End()
end if
set rs_cancel=server.CreateObject("adodb.recordset")
sql = "select * from preengage where preengage_id=" & preengage_id
if session("user_name") <> "" then
sql = sql & "and user_name = '" & session("user_name") &"'"
end if
rs_cancel.open sql,hotel_conn,3,2
if rs_cancel.eof or rs_cancel.bof then
response.Redirect("error.asp")
response.End()
end if
if datediff("h",now,rs_cancel("pyear") & "-" & rs_cancel("pmonth") & "-" & rs_cancel("pday") & " " & rs_cancel("beginhour") & ":00:00") > 24 then
rs_cancel.close
set rs_del=server.CreateObject("adodb.recordset")
sql = "delete from preengage where preengage_id=" & preengage_id
rs_del.open sql,hotel_conn,3,2
delok=1
else
delok=0
end if
%>
6.统计模块
统计模块的功能分为用户统计和预约统计两部分,主要是方便管理员对该酒店运行合理管理。这些功能的实现都是由文件admin_total.asp完成的,请参考程序清单19
程序清单19 统计功能实现核心代码admin_total.asp
<%
set rs_preengage=server.CreateObject("adodb.recordset")
sql = "select count(*) as total from preengage "
rs_preengage.open sql,hotel_conn,3,2
preengage_total=rs_preengage("total")
rs_preengage.close
sql = "select count(*) as total from preengage where paid =1 "
rs_preengage.open sql,hotel_conn,3,2
preengage_paid=rs_preengage("total")
rs_preengage.close
preengage_notpaid = preengage_total - preengage_paid
sql = "select sum(cost) as total from preengage where paid =1"
rs_preengage.open sql,hotel_conn,3,2
money = rs_preengage("total")
rs_preengage.close
sql = "select sum(cost) as total from preengage where paid =0"
rs_preengage.open sql,hotel_conn,3,2
notmoney =rs_preengage("total")
rs_preengage.close
Set rs_user = Server.CreateObject("ADODB.Recordset")
sql = "select count(*) as male from user_reg where sex = '男'"
rs_user.Open sql,hotel_conn,3,2
rs_user_male = rs_user("male")
rs_user.close
sql = "select count(*) as female from user_reg where sex = '女'"
rs_user.Open sql,hotel_conn,3,2
rs_user_female = rs_user("female")
rs_user.close
rs_user_total = rs_user_male + rs_user_female
%>
用户统计实现了统计用户总数和计算男女用户比例的功能,其界面如图22所示。预约统计实现了对预约总数、已付款预约数、实际收入和未付清预约款的统计功能,如图23所示。
图5-22 预约统计
图23 用户统计
第七章、.用户功能模块
用户功能模块主要包括用户登录、用户注册、发表留言、浏览房间信息、查看房间信息、预约房间、取消预约等功能。
1.首页设计
图24所示用户进入网站看到的界面,包括了简单的房间统计,及用户登录系统等功能。
图24 网站首页
程序清单20所示是首页实现的核心代码,即文件index.asp
<%
dim rs_user,room
dim rs_user_total,room_total
Set rs_user = Server.CreateObject("ADODB.Recordset")
sql = "SELECT user_name FROM user_reg"
rs_user.Open sql,hotel_conn,3,2
Set room = Server.CreateObject("ADODB.Recordset")
sql = "SELECT room_id FROM room"
room.Open sql,hotel_conn,3,2
If (rs_user.RecordCount = -1) Then
rs_user_total=0
rs_user.movefirst
While (Not rs_user.EOF)
rs_user_total = rs_user_total + 1
rs_user.MoveNext
Wend
else
rs_user_total = rs_user.RecordCount
End If
If (room.RecordCount = -1) Then
room_total=0
room.movefirst
While (Not room.EOF)
room_total = room_total + 1
room.MoveNext
Wend
else
room_total = room.RecordCount
End If
%>
<%
If (room_total = -1) Then
room_total=0
While (Not room.EOF)
room_total = room_total + 1
room.MoveNext
Wend
If (room.CursorType > 0) Then
room.MoveFirst
Else
room.Requery
End If
If (room_numRows < 0 Or room_numRows > room_total) Then
room_numRows = room_total
End If
room_first = 1
room_last = room_first + room_numRows - 1
If (room_first > room_total) Then
roomd_first = room_total
End If
If (room_last > room_total) Then
room_last = room_total
End If
End If
%>
<%
if not isempty(session("user_name")) then
set rs_user_name=server.CreateObject("adodb.recordset")
sql="select * from user_reg where us