.asp
<%
dimrs_room,sql,delurl,editurl
setrs_room=server.CreateObject("adodb.recordset")
sql="select*fromroom"
rs_room.opensql,hotel_conn,3,2
rs_room.movefirst
while(notrs_room.eof)
delurl="del.asp?room_id="&rs_room("room_id")
editurl="admin_edit.asp?room_id="&rs_room("room_id")
%>
<%=rs_room("room_id")%>
<%=rs_room("name")%>
<%=rs_room("type")%>
<%=rs_room("cost")%>
[">删除]
[">修改]
<%
rs_room.movenext
wend
%>
(2)删除房间
当酒店因为某种原因不能提供预约时,管理员可以将该房间从数据库中删除,删除功能的实现是文件del.asp来实现的,程序清单14是实现删除功能的代码。
图15删除房间成功页面
程序清单14删除房间实现代码
<%
dimroom_id,sql,rs_del
room_id=request("room_id")
ifroom_id=""thenresponse.Redirect("error.asp")
setrs_del=server.CreateObject("adodb.recordset")
sql="deletefromroomwhereroom_id="&room_id
rs_del.opensql,hotel_conn,3,2
%>
当管理员成功删除指定房间后会显示删除成功界面,如图15所示。
(3)修改房间信息
修改房间信息的功能是修改存在于数据库中的房间信息,包括房间名称、房间类型和费用,但是不能修改房间ID。
修改房间信息功能有admin_edit.asp和admin_editchk.asp两个文件来完成。第一个文件用来接受管理员填写的更新信息,第二个用来检查数据并写入数据库中。图16所示是填写房间信息表单的页面。
图16修改房间信息
程序清单15修改房间信息核心代码admin_editchk.asp
<%
dimerr(4)
dimroom_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")
iflen(room_name)>30thenerr(1)="房间名称不能超过30个字符"
iflen(room_name)<2thenerr(1)="房间名称不能少于2个字符"
ifnotIsNumeric(cost)thenerr(2)="费用必须是数字"
ifroom_type=""thenerr(3)="房间类型不能位为空"
iflen(cost)>4thenerr(4)="费用不能多于4位数"
fori=1to4
iferr(i)<>""thenhaveerr=1
next
Ifhaveerr=0Then
setrs_edit=server.CreateObject("adodb.recordset")
sql="select*fromroomwhereroom_id="&room_id
rs_edit.opensql,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
<%
dimerr(3)
dimhaveerr,room_name,room_type,cost,i
dimrs_add,sql
room_name=request.Form("name")
room_type=request.Form("type")
cost=request.Form("cost")
iflen(room_name)>30thenerr(1)="房间名称不能超过30个字符"
iflen(room_name)<2thenerr(1)="房间名称不能少于2个字符"
ifnotIsNumeric(cost)thenerr(2)="费用必须是数字"
iflen(cost)>4thenerr(3)="费用不能多于4位数"
fori=1to3
iferr(i)<>""thenhaveerr=1
next
Ifhaveerr=0Then
setrs_add=server.CreateObject("adodb.recordset")
sql="select*fromroom"
rs_add.opensql,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
%>
<%
fori=1to3
iferr(i)<>""thenresponse.Write("●"&err(i)&"")
next
%>
<%EndIf%>
<%
setrs_add=nothing
%>
5.预约管理模块
预约管理模块包括确认预约和删除预约两部分,确认预约是指在用户已经对指定的预约付款后,管理员在预约数据库中将对应的预约信息修改为为已付款操作;删除预约用于在数据库预约表中出现错误预约或恶意预约后,由管理员强制将其删除。
(1)确认预约页面
酒店房间预约系统规定,用户不能取消已经付款的预约,因为这些预约已经被认为是有效预约。同样,管理员不能删除已经付款的预约。预约列表界面是确认预约页面的一部分,它将为管理员显示所有为付款的预约,并提供"确认预约"和"删除"超链接。
图19所示是显示预约列表页面,图20所示是预约确认成功提示信息页面,它们的实现都由文件admin_chk.asp完成,它们的实现代码见程序清单17
图19预约列表
图20预约确认
程序清单17确认预约功能核心代码admin_chk.asp
<%
dimpreengage_id,rs_preengage,sql,rs_room,datetime
preengage_id=request("preengage_id")
setrs_preengage=server.CreateObject("adodb.recordset")
Ifpreengage_id=""Then
sql="select*frompreengagewherepaid=0"
rs_preengage.opensql,hotel_conn,3,2
rs_preengage.movefirst
%>
预约确认
预约用户
房间名称
预约日期
预约时间
费用
操作
<%
while(notrs_preengage.eof)
%>
<%=rs_preengage("user_name")%>
<%
setrs_room=server.CreateObject("adodb.recordset")
sql="select*fromroomwhereroom_id="&rs_preengage("room_id")
rs_room.opensql,hotel_conn,3,2
response.Write(rs_room("name"))
rs_room.close
%>
<%=rs_preengage("pyear")&"-"&rs_preengage("pmonth")&"-"&rs_preengage("pday")%>
<%=rs_preengage("beginhour")&":00-"&(rs_preengage("beginhour")+1)&":00"%>
<%=rs_preengage("cost")%>
[">确认预约][">删除]
<%
rs_preengage.movenext
wend
%>
<%
Else
'已提交preengage_id数据,开始更新预约表preengage的paid字段---------
sql="select*frompreengagewherepreengage_id="&preengage_id
rs_preengage.opensql,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"
%>
预约确认成功
成功确认ID为<%=rs_preengage("preengage_id")%>的预约,它是在<%=datetime%>的预约,费用为<%=rs_preengage("cost")%>元
<%EndIf%>
(2)删除预约页面
图21所示是删除页面成功的提示信息。该功能的实现是由文件chkcancel.asp完成的,在用户面取消预约模块中还会看到该文件的出现,它们的实现都是由该文件完成的。详细代码见程序清单18
程序清单18删除和取消预约功能的实现chkcancel.asp
<%
dimpreengage_id,rs_cancel,rs_del,delok
preengage_id=request("preengage_id")
ifpreengage_id=""then
response.Redirect("error.asp")
response.End()
endif
ifsession("user_name")=""andsession("admin_name")=""then
response.Redirect("error.asp")
response.End()
endif
setrs_cancel=server.CreateObject("adodb.recordset")
sql="select*frompreengagewherepreengage_id="&preengage_id
ifsession("user_name")<>""then
sql=sql&"anduser_name='"&session("user_name")&"'"
endif
rs_cancel.opensql,hotel_conn,3,2
ifrs_cancel.eoforrs_cancel.bofthen
response.Redirect("error.asp")
response.End()
endif
ifdatediff("h",now,rs_cancel("pyear")&"-"&rs_cancel("pmonth")&"-"&rs_cancel("pday")&""&rs_cancel("beginhour")&":00:00")>24then
rs_cancel.close
setrs_del=server.CreateObject("adodb.recordset")
sql="deletefrompreengagewherepreengage_id="&preengage_id
rs_del.opensql,hotel_conn,3,2
delok=1
else
delok=0
endif
%>
6.统计模块
统计模块的功能分为用户统计和预约统计两部分,主要是方便管理员对该酒店运行合理管理。这些功能的实现都是由文件admin_total.asp完成的,请参考程序清单19
程序清单19统计功能实现核心代码admin_total.asp
<%
setrs_preengage=server.CreateObject("adodb.recordset")
sql="selectcount(*)astotalfrompreengage"
rs_preengage.opensql,hotel_conn,3,2
preengage_total=rs_preengage("total")
rs_preengage.close
sql="selectcount(*)astotalfrompreengagewherepaid=1"
rs_preengage.opensql,hotel_conn,3,2
preengage_paid=rs_preengage("total")
rs_preengage.close
preengage_notpaid=preengage_total-preengage_paid
sql="selectsum(cost)astotalfrompreengagewherepaid=1"
rs_preengage.opensql,hotel_conn,3,2
money=rs_preengage("total")
rs_preengage.close
sql="selectsum(cost)astotalfrompreengagewherepaid=0"
rs_preengage.opensql,hotel_conn,3,2
notmoney=rs_preengage("total")
rs_preengage.close
Setrs_user=Server.CreateObject("ADODB.Recordset")
sql="selectcount(*)asmalefromuser_regwheresex='男'"
rs_user.Opensql,hotel_conn,3,2
rs_user_male=rs_user("male")
rs_user.close
sql="selectcount(*)asfemalefromuser_regwheresex='女'"
rs_user.Opensql,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
<%
dimrs_user,room
dimrs_user_total,room_total
Setrs_user=Server.CreateObject("ADODB.Recordset")
sql="SELECTuser_nameFROMuser_reg"
rs_user.Opensql,hotel_conn,3,2
Setroom=Server.CreateObject("ADODB.Recordset")
sql="SELECTroom_idFROMroom"
room.Opensql,hotel_conn,3,2
If(rs_user.RecordCount=-1)Then
rs_user_total=0
rs_user.movefirst
While(Notrs_user.EOF)
rs_user_total=rs_user_total+1
rs_user.MoveNext
Wend
else
rs_user_total=rs_user.RecordCount
EndIf
If(room.RecordCount=-1)Then
room_total=0
room.movefirst
While(Notroom.EOF)
room_total=room_total+1
room.MoveNext
Wend
else
room_total=room.RecordCount
EndIf
%>
<%
If(room_total=-1)Then
room_total=0
While(Notroom.EOF)
room_total=room_total+1
room.MoveNext
Wend
If(room.CursorType>0)Then
room.MoveFirst
Else
room.Requery
EndIf
If(room_numRows<0Orroom_numRows>room_total)Then
room_numRows=room_total
EndIf
room_first=1
room_last=room_first+room_numRows-1
If(room_first>room_total)Then
roomd_first=room_total
EndIf
If(room_last>room_total)Then
room_last=room_total
EndIf
EndIf
%>
<%
ifnotisempty(session("user_name"))then
setrs_user_name=server.CreateObject("adodb.recordset")
sql="select*fromuser_regwhereuser_name='"&session("user_name")&"'"
rs_user_name.opensql,hotel_conn,3,1
response.Write("欢迎您,"&session("user_name")&"")
endif
%>
<%
setrs_user_name=Nothing
rs_user.Close()
Setrs_user=Nothing
room.Close()
Setroom=Nothing
%>
2.注册登录模块
该模块分为注册和登录两个功能模块。
(1)注册模块
图25所示用户注册页面,是由文件reg.asp来实现的。他不需要连接数据库,主要功能是收集信息并传递给reg2.asp文件进行数据有效性验证。
图25用户注册页面
程序清单21生成年、月、日序列reg.asp部分代码
<%fori=1940toyear(date)-3%>
"><%=i%>
<%next%>
年
<%fori=1to12%>
"><%=i%>
<%next%>
月
<%fori=1to31%>
"><%=i%>
<%next%>
日
文件reg.asp接收到的信息传递给reg2.asp文件进行验证,其实现代码见程序清单22所示
<%
dimerr(9)
dimname,psw,psw2,sex,byear,bmonth,bday,tel,email
dimrs_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")
ifis_name(name)then
setrs_test_name=server.CreateObject("adodb.recordset")
sql="select*fromuser_regwhereuser_name='"&name&"'"
rs_test_name.opensql,hotel_conn,3,2
ifnot(rs_test_name.eoforrs_test_name.bof)thenerr(2)="这个用户名已经存在"
else
err(1)="用户名只能使用字母、数字和下划线"
endif
iflen(name)>12thenerr(3)="用户名不能超过12个字符"
iflen(name)<4thenerr(3)="用户名不能少于4个字符"
ifpsw<>psw2thenerr(4)="两次输入的密码不一致"
iflen(psw)>16thenerr(5)="密码不能超过16位"
iflen(psw)<4thenerr(5)="密码不能少于4位"
iflen(tel)>15thenerr(6)="电话号码不能超过15个字符"
iflen(tel)<7thenerr(6)="电话号码不能少于7个字符"
iflen(email)>50thenerr(7)="Email最多只能有50个字符"
ifnotis_email(email)thenerr(8)="Email地址错误"
ifnot(isdate(byear&"-"&bmonth&"-"&bday))thenerr(9)="生日您没有选择或生日日期无效"
fori=1to9
iferr(i)<>""thenhaveerr="yes"
next
%>
<%
setrs_user=server.CreateObject("adodb.recordset")
rs_user.open"select*fromuser_reg",hotel_conn,3,2
rs_user_total=(rs_user.RecordCount)+1
If(rs_user.RecordCount=-1)Then
rs_user_total=0
While(Notrs_user.EOF)
rs_user_total=rs_user_total+1
rs_user.MoveNext
Wend
endif
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
%>
(2)登录模块
登录模块主要是由文件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")
setrs_user=server.CreateObject("adodb.recordset")
sql="select*fromuser_regwhereuser_name='"&user_id&"'andpsw='"&psw&"'"
rs_user.opensql,hotel_conn,3,2
ifnot(rs_user.eoforrs_user.bof)then
session("user_name")=rs_user("user_name")
haveerr=0
else
haveerr=1
endif
%>
3.查看房间模块
查看房间信息是酒店应该提供一个必要功能。图26所示是查看
上一篇:ASP邮件(论文和程序)
下一篇:试析影响公路路面平整度的因素及应采取的施工措施