基于asp+access的酒店房间预约系统设计与实现(毕业论文+程序源码)
大家好,今天给大家介绍基于asp+access的酒店房间预约系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。
文章目录:
基于asp+access的酒店房间预约系统设计与实现(毕业论文+程序源码)1、项目简介2、资源详情3、关键词:4、毕设简介5、资源下载
1、项目简介
该“酒店房间预约系统设计”是基于Access 数据库、ASP程序设计的基础上实现的。该系统可以保存和处理多个酒店的名称、星级和地址等基本信息以及每个酒店的房间信息,同时可以保存和处理客户的订单信息,并且对于这些系统提供了相应的查询功能,而且有完善的多用户安全功能。2、资源详情
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:13062个字44页
包含内容:整套源码+完整毕业论文
3、关键词:
ASP 酒店房间预约系统 Access4、毕设简介
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
前言
酒店房间预约系统是酒店经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要,所以酒店房间预约系统应该能够为用户提供充足的信息和快捷的预约手段。酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。
远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。
第二章 编程环境基础知识
2.1 ASP基础概述
ASP,全称ActiveX Server Page,它提供了一个在服务器端执行脚本指令(包括HTML、VBScript、JavaScript等),通过这种环境,用户可以创建和运行Web应用程序。
ASP文件就是在普通的HTML文件中嵌入VBScript或JavaScript脚本语言。
ASP是一个服务器端脚本编写环境,用于创建动态的交互式Web服务器应用程序。在ASP动态网页中,不仅可以包含服务器端代码,也可以使用ASP内建对象和服务器组件,此外还可以包含服务器端文件。
2.2 ASP脚本语言——VBScript
2.2.1 VBScript的概述
VBScript是程序开发语言Visual Basic家族的最新成员,可以将灵活的脚本应用于更广泛的领域,包括Microsoft Internet Explorer中的Web客户端脚本和Microsoft Internet Information Server中的Web服务器端脚本。
VBScript脚本语言有以下主要特点:
(1) 易学易用。
(2) ActiveX脚本。
(3) 其他应用程序和浏览器中的VBScript。
2.3 ASP内置基本对象
Request 负责从用户端接收信息
Response负责传送信息给用户
Session 负责存储个别用户的信息,以便重复使用
Application 负责存储数据以供多个用户重复使用
Server 负责控制ASP的运行环境
ObjectContext 供ASP程序直接配合 Microsoft Transaction Server进行分布式的事务处理
第三章 需求分析
3.1 功能需求
酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。
远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。
本酒店房间预约系统按照用户部分和管理员部分划分了两块,它们所实现的功能如下。
用户部分
用户注册:检测用户提供的信息并注册用户。
用户登陆:通过用户名和密码核实登陆用户身份。
预约房间:预约某个时间的某一房间。
查询预约信息:查询该用户的预约信息。
取消房间预约:取消某一到期且未付款的有效预约。
查询房间信息:按照用户提出的条件列出查询结果。
给站长留言:检查用户留言的正确性并保存。
注销用户:结束用户会话,保证安全。
管理员部分
阅览用户留言:调用用户留言并显示。
删除无用留言:删除需要处理的留言。
添加房间:添加新的房间,注册详细信息。
删除房间:根据用户提交的信息删除指定的房间。
修改房间信息:对于存在的某房间信息进行修改更新。
确认已付款用户的预约:当用户付款后对指定预约进行标记。
删除无用或错误的预约信息。
房间预约统计和用户统计。
安全注销。
第四章 总体设计
4.1系统模块结构设计
系统设计主要包括功能模块的划分和系统流程的分析。根据客户的需求总结系统主要完成的功能,以及将来拓展需要完成的功能,然后根据设计好的功能划分出系统的功能模块,这样方便程序员管理和维护,最后设计出系统的流程。接下来,就详细介绍系统设计的前期准备。
4.1.1 功能模块划分
酒店房间预约系统应该具有用户注册登录、查看预约房间、留言、管理员综合管理等功能。根据对该系统的功能需求分析可以画出系统功能模块图。本系统将功能划分为用户和管理员两部分,图1所示是用户部分的功能模块图。
● 用户模块包括注册、登录和注销3个功能子模块,注册模块提供用户注册成为酒店房间预约系统的会员,拥有预约房间的功能,而只有登录的用户方可以进行房间的预约,因此登录模块提供会员登录功能。为了防止其他用户私自修改用户信息,同时又设计了注销功能模块。
● 房间模块包括查看房间、查询房间、查看预约、预约房间和取消预约等功能。通过查看或者输入条件查询房间,可以获得房间的具体信息,如果为登录用户,此时可以进行房间的预约操作,用户觉得不满意,可以通过取消预约模块取消预约,同时用户可以通过查看预约模块查看用户所有的预约信息。
● 留言模块为用户提供一个发表自己看法的场所,如果遇到什么困难或者不满意的地方。可以通过该模块发表。
管理端部分的功能如图2所示。
● 管理员登录模块提供管理员登录的入口,只有成功登录后,才可以执行管理员操作。
● 添加房间功能模块为管理员提供添加新的房间的功能,此时,管理员可以输入详细的房间信息。
● 如果房间出现问题或者该房间已经不存在,管理员可以通过删除房间模块把该房间删除。
● 当房间信息发生改变时,管理员可以通过修改房间信息模块对房间的信息进行修改。
● 管理员可以通过阅读留言模块查看用户发表的留言,并可以进行回复和删除等操作。
● 用户的预约只有等管理员确认后方可生效,管理员就是通过预约管理模块对用户的预约信息进行管理的,包括确定预约和删除预约等。
● 管理员操作结束时需要通过注销登录模块注销登录,防止系统信息被篡改。
4.2 数据库设计
数据库结构设计的好坏直接影响到信息管理系统的效率和实现的效果。合理地设计数据库结构可以提高数据库存储的效率,保证数据的完整和统一。数据库设计一般包括如下几个步骤:
(1) 数据库需求分析
(2) 数据库概念结构设计
(3) 数据库逻辑结构分析
4.2.1数据库需求分析
酒店房间预约系统的数据库功能主要体现在对各种信息的提供、保存、查询和更新操作上,包括用户信息、管理员信息、房间信息、预约信息和留言信息,各个部分的数据有着内在的联系。
通过前面对系统功能模块的分析,总结出该数据库需要满足以下信息需求:
● 用户和管理员具有不同的身份。
● 用户信息记录用户的资料。
● 房间信息包括房间类型和费用等。
● 预约信息包括预约时间、预约用户等信息。
● 留言包括标题、内容等信息。
综合上面对酒店房间预约的数据库的需求分析,考虑到未来功能上的扩展,设计如下的数据项和数据结构。
● 管理员信息包括的数据项:管理员名和密码。
● 用户信息包括的数据项:用户名、密码等。
● 房间信息包括的数据项:房间ID、房间名称、类型等。
● 预约信息包括的数据项:预约ID、预约用户名、房间ID等。
● 留言信息包括的数据项:留言用户名、留言标题、内容等。
4.2.2数据库概念结构设计
得到上述的数据项和数据结构以后,就可以设计出满足客户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计做好铺垫。
该系统的实体有管理员信息实体、用户信息实体、房间信息实体、预约信息实体、预约信息实体和留言信息实体,它们之间的关系如图3所示。
信息实体之间的关系示意图
用户信息试题的E-R图,如图4所示。
管理员信息试题E-R图,如图5所示。
房间信息实体E-R图,如图6所示。
预约信息实体E-R图,如图7所示。
留言信息实体E-R图,如图8所示。
4.3 数据库逻辑结构设计
数据库的概念结构设计之后,就可以将上面的数据库概念转化为某种数据库系统所支持的实际数据模型,也就是数据库的逻辑结构
本系统采用的数据库软件是Microsoft Access.首先打开Microsoft Access,新建一个新空的数据库,命名为golfers.mdb。然后通过表设计器创建本系统的几个表。下面分别介绍各个表的内容。
1.管理员信息表
管理员信息包括管理员帐号和管理员密码,其属性如表1所示。设置管理员帐号Admin-name为主键。
管理员信息表(Admin)
2.用户信息表
用户信息表记录了用户的详细信息,包括用户名、密码、和有关的个人信息,设置用户名为该表主键,如表2所示。
用户信息表(user-reg)
3.房间信息表
房间信息表记录了房间的编号、房间名称、房间类型和费用等信息,设置房间编号为该表主键,如表3所示。
房间信息表(room)
4.预约信息表
预约信息表记录了用户预约房间的详细信息,包括预约帐号、预约编号、预约时间、房间编号、使用费用、是否付款和何时使用等信息,如表4所示。
预约信息表(preengage)
5.留言信息表
留言信息表记录了留言的标题、留言编号、留言内容、留言用户等信息,如表5所示。设置留言编号为该表主键。
留言信息表(word)
4.4 数据库的实现
酒店房间预约系统使用ASP+Access的工作模式,为了是系统正常工作,需要建立与数据库系统的连接来读取和写入数据。
使用数据库文件的语法为:〈!–#include file=”…/Include/conndb.asp”–〉.使用过程中,file后面的路径应该根据实际文件的位置稍微调整。该文件代码的实现参见程序清单1
程序清单1 数据库连接代码 hotel.asp
<%Dim hotel_conndb = "database/hotel.mdb"connstr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)Set hotel_conn = Server.CreateObject("ADODB.Connection")if err Thenerr.clearend ifhotel_conn.Open connstr '关闭数据库连接,在每页中调用此函数,将连接放入连接池sub CloseConn()hotel_conn.Close()Set hotel_conn = Nothingend sub'替换单引号function RealString(strSrc)RealString = Replace(Trim(strSrc), "'", "''")end function%>
第五章、编写公共模块文件
公共模块主要包括以下几个部分:
● 页面头文件。
● 页面尾文件。
● 管理员登陆判断代码。
● 用户登录判断模块。
● 注销模块。
● 用户名判断函数。
● 电子邮件地址判断函数。
● 错误提示页面。
页面头文件
本系统的每个可显示的页面都有固定的页面头和页面尾,页面头包括图片和导航菜单,页面尾文件包括版权信息和联系方式。为了减少代码的重复编写,将它们分别单独作为一个文件来操作,使用时使用include命令来调用它们。程序清单2为页面头文件的实现代码。
程序清单 2 页面头文件实现代码
include/head.asp<table width="200" border="0" cellspacing="0"><tr><td><img src="image/top.gif" width="760" height="110" border="0" usemap="#MapMapMap"></td></tr></table><map name="MapMapMap"><area shape="rect" coords="222,92,273,110" href="index.asp"><area shape="rect" coords="301,92,356,110" href="room.asp"><area shape="rect" coords="643,92,697,110" href="logout.asp"><area shape="rect" coords="389,92,444,110" href="search.asp"><area shape="rect" coords="558,92,616,110" href="lword.asp"><area shape="rect" coords="474,92,531,110" href="mine.asp"></map>
该头文件指定了页面头部图片,并在图片上设置了“热点”,即用鼠标单击图片某一区域后进入相应的网页。
2.页面尾文件
程序清单3是页面文件的实现代码。使用该代码采用〈!–#include file=”…/Include/foot.asp”–〉语句。
程序清单3 页面尾文件实现代码 Include/foot.asp
<table border="0"><tr class="text"><td colspan="5"><div align="center">天空酒店管理系统 ©</div></td></tr><tr class="text"><td><div align="left">E-mail:</div></td><td><div align="left"><a href="mailto:rickywon@">tiandiren_886@</a></div></td><td><div align="left">电话:</div></td><td><div align="left">010-12345678</div></td><td><div align="left"><a href="adminlogin.asp">管理员登录</a></div></td></tr><tr class="text"><td colspan="5"><div align="center"></div></td></tr></table>
3.管理员登录判断代码
为了防止非管理员用户任意修改系统数据,在页面中需要加入管理员登录判断,其实现代码见程序清单4
程序清单4 管理员登录判断代码
include/is-admin.asp<% '判断管理员登陆------------------if isempty(session("admin_name")) thenresponse.Redirect("error.asp")response.End()end if%>
4 用户登录判断代码
酒店房间预约系统是一个多用户系统,某些页面只有用户登录后方可开通,如留言等。为了防止非注册用户直接调用页面的这些功能,需要在页面中加入用户登陆判断代码。程序清单5是用户登录判断代码,和管理员登录判断代码类似。
程序清单5 用户登录判断代码 include/is-
user.asp<%if isempty(session("user_name")) thenresponse.Redirect("error.asp")response.End()end if%>
5 注销模块
当用户或者管理员完成操作后,为保证系统安全,系统提供了安全注销功能,它是通过程序清单6所示的代码实现的。
程序清单6 安全注销 logout.asp
<%session("user_name")=emptysession("admin_name")=emptyresponse.Redirect("index.asp") %>
安全注销代码的使用,首先把用户名清空,进入首页。当用户再次进入该系统时通过用户判断或者管理员判断代码进行安全确认。这样就实现了安全注销功能。
6. 用户名判断函数
注册某些网站用户的时候,会得到这样的提示“您的用户名出现非法字符”。在本系统中,规定用户名只能使用字母、数字和下划线,其实现过程见程序清单7
程序清单7 判断合法用户名 include/is-
name.asp<%'用户名规则判定函数------------------function is_name(name)dim i, cis_name = truefor i = 1 to len(name)c = Lcase(Mid(name, i, 1))if InStr("abcdefghijklmnopqrstuvwxyz_", c) <= 0 and not IsNumeric(c) thenis_name = falseexit functionend ifnextend function%>
7 电子邮件地址判断函数
与用户名类似,电子邮件地址也需要判断合法性。程序清单8就是电子邮件地址合法性判断函数。
程序清单8 电子邮件合法性判断函数 include/is-
email.asp<% '判断管理员登陆------------------if isempty(session("admin_name")) thenresponse.Redirect("error.asp")response.End()end if%>
8.错误提示页面
当用户违规操作是,系统会跳转到错误提示页面,如图9所示。
第六章、管理功能模块
有关管理员操作的各个页面必须在管理员登入后方可进入,因此,在这些页面的头部都加入了管理员登入验证代码。
1.登入模块
登入模块是管理员进入管理系统的入口,通过核实管理员名和密码来核实管理员身份,图10所示管理员页面。
图10 管理员登录页面
提交的用户名和密码文件由admin.asp进行处理,并由它完成判断和跳转,程序清单9是admin.asp文件的实现代码。
程序清单9 管理员登录验证admin.asp
<%dim admin_name,admin_psw,rs_adminadmin_name=request.Form("admin_name")admin_psw=request.Form("admin_psw")Set rs_admin = Server.CreateObject("ADODB.Recordset")sql = "SELECT * FROM admin where admin_name='" & admin_name & "'" & "and admin_psw='" & admin_psw & "'"rs_admin.Open sql,hotel_conn,3,2if rs_admin.eof or rs_admin.bof then response.Redirect("adminerr.asp")response.End()else session("admin_name")= rs_admin("admin_name")response.Redirect("administrator.asp") rs_admin.closeend if %>
如果管理员验证成功则进入查看留言模块administrator.asp文件,反之则转至提示管理员错误登录页面adminerr.asp文件。
2.查看和管理留言页面模块
留言功能是为了提供与用户的交互活动而设计的,它包括生成留言列表、阅读留言和删除留言3大部分。
(1) 生成留言列表
为了使管理员及时了解用户意见和建议,该系统把查看留言列表页面设置为管理员登录后的首页面,如图11所示。该功能由administrator.asp文件实现,见程序清单10
图11 留言列表
见程序清单10 生成留言列表核心代码administrator.asp
<%dim rs_word,sql,readurlset rs_word=server.CreateObject("adodb.recordset")sql = "select * from word "rs_word.open sql,hotel_conn,3,2rs_word.movefirstwhile (not rs_word.eof)readurl="admin_rword.asp?word_id=" & rs_word("word_id")%><tr class="text"><td><div align="left"><%= rs_word("user_name") %></div></td><td><div align="left"><%= rs_word("word_id") %></div></td><td><div align="left"><%= rs_word("datetime") %></div></td><td><div align="left"><a href="<%= readurl %>" target="_blank"><%= rs_word("title") %></a></div></td></tr><%rs_word.movenextwendrs_word.closeset rs_word = nothing%>
(2)阅读留言模块
当管理员在留言列表中单击留言标题时会弹出阅读流言界面,如图12所示。
阅读留言代码的实现比较简单,直接读取数据库留言表word中的留言信息,并构造删除留言链接,其实现代码见程序清单11
图12 阅读留言
程序清单11 阅读留言核心代码admin_rword.asp
<%dim word_id,rs_word,sqlword_id=request("word_id")if word_id="" then response.Redirect("error.asp")set rs_word=server.CreateObject("adodb.recordset")sql = "select * from word where word_id =" & word_idrs_word.open sql,hotel_conn,3,2delurl="delword.asp?word_id=" & word_id%>
(3)删除留言模块
删除功能基本上是每个含有数据库的网站的必要功能。当管理员需要删除无用留言时,就会使用文件delword.asp,程序清单12是其实现代码。
<%dim word_id,rs_del,sqlword_id=request("word_id")if word_id="" then response.Redirect("error.asp")set rs_del=server.CreateObject("adodb.recordset")sql = "delete from word where word_id = " & word_idrs_del.open sql,hotel_conn,3,2set rs_del=nothing%>
3.维护房间信息模块
维护房间模块包括显示房间列表、删除房间和修改房间信息3个功能。
(1) 显示房间列表
图13所示为房间列表的显示页面。从图中可以看出,可以对房间进行删除或修改操作。
房间列表的功能实现是由文件damin_room.asp完成的,其代码见程序清单14
图13 房间列表
程序清单13 房间列表实现核心代码damin_room.asp
<%dim rs_room,sql,delurl,editurlset rs_room=server.CreateObject("adodb.recordset")sql = "select * from room "rs_room.open sql,hotel_conn,3,2rs_room.movefirstwhile (not rs_room.eof)delurl="del.asp?room_id=" & rs_room("room_id")editurl="admin_edit.asp?room_id=" & rs_room("room_id")%><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.movenextwend%>
(2) 删除房间
当酒店因为某种原因不能提供预约时,管理员可以将该房间从数据库中删除,删除功能的实现是文件del.asp来实现的,程序清单14是实现删除功能的代码。
图15删除房间成功页面
程序清单14 删除房间实现代码
<%dim room_id,sql,rs_delroom_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所示。
(3) 修改房间信息
修改房间信息的功能是修改存在于数据库中的房间信息,包括房间名称、房间类型和费用,但是不能修改房间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,sqlroom_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 4if err(i)<>"" then haveerr=1nextIf haveerr = 0 Thenset rs_edit=server.CreateObject("adodb.recordset")sql = "select * from room where room_id=" & room_idrs_edit.open sql,hotel_conn,3,2rs_edit("name")=room_namers_edit("type")=room_typers_edit("cost")=costrs_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,idim rs_add,sqlroom_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 3if err(i)<>"" then haveerr=1nextIf haveerr=0 Thenset rs_add=server.CreateObject("adodb.recordset")sql = "select * from room"rs_add.open sql,hotel_conn,3,2rs_add.addnewrs_add("name")=room_namers_add("room_id")=room_namers_add("type")=room_typers_add("cost")=costrs_add.update%><%for i=1 to 3if err(i) <> "" then response.Write("●" & err(i) & "<br>")next%><% End If %><%set rs_add=nothing%>
5.预约管理模块
预约管理模块包括确认预约和删除预约两部分,确认预约是指在用户已经对指定的预约付款后,管理员在预约数据库中将对应的预约信息修改为为已付款操作;删除预约用于在数据库预约表中出现错误预约或恶意预约后,由管理员强制将其删除。
(1) 确认预约页面
酒店房间预约系统规定,用户不能取消已经付款的预约,因为这些预约已经被认为是有效预约。同样,管理员不能删除已经付款的预约。预约列表界面是确认预约页面的一部分,它将为管理员显示所有为付款的预约,并提供“确认预约”和“删除”超链接。
图19所示是显示预约列表页面,图20所示是预约确认成功提示信息页面,它们的实现都由文件admin_chk.asp完成,它们的实现代码见程序清单17
图19 预约列表
图20 预约确认
程序清单17 确认预约功能核心代码admin_chk.asp
<%dim preengage_id,rs_preengage,sql,rs_room,datetimepreengage_id=request("preengage_id")set rs_preengage=server.CreateObject("adodb.recordset")If preengage_id="" Thensql = "select * from preengage where paid = 0"rs_preengage.open sql,hotel_conn,3,2rs_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,2response.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.movenextwend%><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_idrs_preengage.open sql,hotel_conn,3,2rs_preengage("paid")=1rs_preengage.updatedatetime= 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 %>
(2) 删除预约页面
图21所示是删除页面成功的提示信息。该功能的实现是由文件chkcancel.asp完成的,在用户面取消预约模块中还会看到该文件的出现,它们的实现都是由该文件完成的。详细代码见程序清单18
程序清单18 删除和取消预约功能的实现chkcancel.asp
<%dim preengage_id,rs_cancel,rs_del,delokpreengage_id=request("preengage_id") if preengage_id="" thenresponse.Redirect("error.asp")response.End()end ifif session("user_name")="" and session("admin_name")="" thenresponse.Redirect("error.asp")response.End()end ifset rs_cancel=server.CreateObject("adodb.recordset")sql = "select * from preengage where preengage_id=" & preengage_idif session("user_name") <> "" thensql = sql & "and user_name = '" & session("user_name") &"'" end if rs_cancel.open sql,hotel_conn,3,2if rs_cancel.eof or rs_cancel.bof then response.Redirect("error.asp")response.End()end ifif datediff("h",now,rs_cancel("pyear") & "-" & rs_cancel("pmonth") & "-" & rs_cancel("pday") & " " & rs_cancel("beginhour") & ":00:00") > 24 thenrs_cancel.closeset rs_del=server.CreateObject("adodb.recordset")sql = "delete from preengage where preengage_id=" & preengage_idrs_del.open sql,hotel_conn,3,2delok=1elsedelok=0end 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,2preengage_total=rs_preengage("total")rs_preengage.closesql = "select count(*) as total from preengage where paid =1 "rs_preengage.open sql,hotel_conn,3,2preengage_paid=rs_preengage("total")rs_preengage.closepreengage_notpaid = preengage_total - preengage_paidsql = "select sum(cost) as total from preengage where paid =1"rs_preengage.open sql,hotel_conn,3,2money = rs_preengage("total")rs_preengage.closesql = "select sum(cost) as total from preengage where paid =0"rs_preengage.open sql,hotel_conn,3,2notmoney =rs_preengage("total")rs_preengage.closeSet rs_user = Server.CreateObject("ADODB.Recordset")sql = "select count(*) as male from user_reg where sex = '男'"rs_user.Open sql,hotel_conn,3,2rs_user_male = rs_user("male")rs_user.closesql = "select count(*) as female from user_reg where sex = '女'"rs_user.Open sql,hotel_conn,3,2rs_user_female = rs_user("female")rs_user.closers_user_total = rs_user_male + rs_user_female%>
用户统计实现了统计用户总数和计算男女用户比例的功能,其界面如图22所示。预约统计实现了对预约总数、已付款预约数、实际收入和未付清预约款的统计功能,如图23所示。
图5-22 预约统计
图23 用户统计
第七章、.用户功能模块
用户功能模块主要包括用户登录、用户注册、发表留言、浏览房间信息、查看房间信息、预约房间、取消预约等功能。
1.首页设计
图24所示用户进入网站看到的界面,包括了简单的房间统计,及用户登录系统等功能。
图24 网站首页
程序清单20所示是首页实现的核心代码,即文件index.asp
<%dim rs_user,roomdim rs_user_total,room_totalSet rs_user = Server.CreateObject("ADODB.Recordset")sql = "SELECT user_name FROM user_reg"rs_user.Open sql,hotel_conn,3,2Set room = Server.CreateObject("ADODB.Recordset")sql = "SELECT room_id FROM room"room.Open sql,hotel_conn,3,2If (rs_user.RecordCount = -1) Thenrs_user_total=0rs_user.movefirstWhile (Not rs_user.EOF)rs_user_total = rs_user_total + 1rs_user.MoveNextWendelsers_user_total = rs_user.RecordCountEnd IfIf (room.RecordCount = -1) Thenroom_total=0room.movefirstWhile (Not room.EOF)room_total = room_total + 1room.MoveNextWendelseroom_total = room.RecordCountEnd If%><%If (room_total = -1) Thenroom_total=0While (Not room.EOF)room_total = room_total + 1room.MoveNextWendIf (room.CursorType > 0) Thenroom.MoveFirstElseroom.RequeryEnd IfIf (room_numRows < 0 Or room_numRows > room_total) Thenroom_numRows = room_totalEnd Ifroom_first = 1room_last = room_first + room_numRows - 1If (room_first > room_total) Thenroomd_first = room_totalEnd IfIf (room_last > room_total) Thenroom_last = room_totalEnd IfEnd If%><%if not isempty(session("user_name")) thenset rs_user_name=server.CreateObject("adodb.recordset")sql="select * from user_reg where user_name ='" & session("user_name") &"'"rs_user_name.open sql,hotel_conn,3,1response.Write("欢迎您,"&session("user_name") &" <br>")end if %><%set rs_user_name = Nothingrs_user.Close()Set rs_user = Nothingroom.Close()Set room = Nothing%>
2.注册登录模块
该模块分为注册和登录两个功能模块。
(1) 注册模块
图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,emaildim rs_test_name,rs_username=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,2if not(rs_test_name.eof or rs_test_name.bof) then err(2)="这个用户名已经存在"elseerr(1)="用户名只能使用字母、数字和下划线"end ifif 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 9if err(i)<>"" then haveerr="yes"next%><%set rs_user=server.CreateObject("adodb.recordset")rs_user.open "select * from user_reg",hotel_conn,3,2rs_user_total=(rs_user.RecordCount)+1If (rs_user.RecordCount = -1) Thenrs_user_total=0While (Not rs_user.EOF)rs_user_total = rs_user_total + 1rs_user.MoveNextWendend if rs_user.addnewrs_user("user_name")=namers_user("psw")=pswrs_user("sex")=sexrs_user("age")=datediff("yyyy",byear & "-" & bmonth & "-" & bday,date)rs_user("email")=emailrs_user("tel")=telrs_user("byear")=byearrs_user("bmonth")=bmonthrs_user("bday")=bdayrs_user.updatesession("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")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,2if not(rs_user.eof or rs_user.bof) thensession("user_name")=rs_user("user_name")haveerr=0elsehaveerr=1end 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,2rs_room.movefirstwhile (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.movenextwend%>
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 = "所有" )thensql = sql & "where "end ifif set_room <> "所有" thensql = sql & "type = '" & set_room& "'"end ifif set_cost <> "不作要求" and set_room <> "所有" thensql = 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元" thensql = sql & "cost <=400" elseif set_cost = "600元" thensql = sql & "cost <= 600" elseif set_cost = "600元以上" thensql = sql & "cost > 600"end if'response.Write(sql)'打开房间数据库---------------rs_search.open sql,hotel_conn,3,2if rs_search.eof or rs_search.bof then searchok=0else searchok=1end 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 thenresponse.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.movefirstwhile (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.movenextWend%>
5预约房间和取消预约模块
预约是本系统的核心所在,该模块接收用户提交的房间编号和预约时间,并判断房间在指定时间内是否空闲,最后给出用户预约结果,如果预约成功则要将信息写入数据库。
图28所示是预约房间界面,图29显示房间预约成功
图28 预约房间
图29 预约成功界面
由preengage.asp文件获取的表单信息给chkpre.asp文件处理。本系统要求用户提出预约时刻要比开始使用时间提前24小时,因此首先由chkpre.asp判断用户提交的时刻是否符合要求,然后查询数据库中该房间在这个时间是否空闲,最后给出预约成功的提示,并将预约信息写入数据库,代码见程序清单26
<%dim room_id,pyear,pmonth,pday,ptime,chkok,errdim rs_preengage,rs_room,rs_saveroom_id=request.Form("room_id")pyear=request.Form("pyear") pmonth=request.Form("pmonth")pday=request.Form("pday")ptime=request.Form("ptime")%><%if not isdate(pyear & "-" & pmonth & "-" & pday) thenerr=1end ifif err=1 then%><%= "<title>出现错误!</title>" %><%set rs_preengage=server.CreateObject("adodb.recordset")sql = "select * from preengage where room_id =" & room_id & " and beginhour =" & ptimesql = sql & "and pyear= " & pyear & "and pmonth=" & pmonth & "and pday=" & pday rs_preengage.open sql,hotel_conn,3,2if rs_preengage.eof or rs_preengage.bof thenchkok=1elsechkok=0end ifif chkok=1 thenset rs_save=server.CreateObject("adodb.recordset")sql = "select * from preengage"rs_save.open sql,hotel_conn,3,2set rs_room=server.CreateObject("adodb.recordset")sql = "select * from room where room_id=" & room_idrs_room.open sql,hotel_conn,3,2rs_save.addnewrs_save("user_name")=session("user_name")rs_save("room_id")=room_idrs_save("datetime")=now()rs_save("cost")=rs_room("cost")rs_save("pyear")=pyearrs_save("pmonth")=pmonthrs_save("pday")=pdayrs_save("beginhour")=ptimers_save.updaters_save.movelast%><%= "<title>预约成功</title>" %><%= "<title>预约未被接受!</title>" %>
取消预约模块的实现和管理端删除模块使用一个文件,这里就不再详细论述。
6.查看预约模块
用户在预约房间后会有查询预约情况的需求,查询页面主要由文件mine.asp实现,如图30所示。程序清单27是查看预约信息的核心代码。
图30 查看预约
程序清单27 查看预约的关键代码
<%dim rs_preengage,rs_grounddim time_outset rs_preengage=server.CreateObject("adodb.recordset")sql = "select * from preengage where user_name='" & session("user_name") & "'"rs_preengage.open sql,hotel_conn,3,2%><body><div align="center"><table width="706" height="281" border="0" class="table_big"><tr><td valign="top"><div align="center"><!--#include file="include/head.asp" --><br><table width="605" border="0" class="table_small"><tr><td colspan="7"> </td></tr><tr><td colspan="7" class="text_title"><div align="left">我的预约信息</div></td></tr><tr><td colspan="7" class="table_title"> </td></tr><% If rs_preengage.eof or rs_preengage.bof Then %><tr><td colspan="7" class="text"><div align="left">您还没有进行任何预约!</div></td></tr><% Else %><tr class="text"><td width="105"><div align="left">房间名称</div></td><td width="68"><div align="left">房间类型</div></td><td width="50"><div align="left">费用</div></td><td width="69"><div align="left">预约日期</div></td><td width="86"><div align="left">预约时间</div></td><td width="117"><div align="left">状态</div></td><td width="80">操作</td></tr><%rs_preengage.movefirstwhile (not rs_preengage.eof)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%><tr class="text"><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"><%= 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"><%If rs_preengage("paid")=1 Thenresponse.Write("已经付款 ")elseresponse.Write("尚未付款 ")end if time_out=datediff("d",now,rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday") & " " & rs_preengage("beginhour") & ":00:00")if time_out < 0 thenresponse.Write("已经过期")elseresponse.Write("尚未到期")end if %></div></td><td><% if rs_preengage("paid")=0 and time_out > 0then %><a href="cancel.asp?preengage_id=<%= rs_preengage("preengage_id") %>">取消预约</a><% end if %> </td></tr><%rs_preengage.movenextwend%><% End If %>
7.留言模块
留言模块是给用户发表意见和看法的场所。图31所示为发表留言界面。程序清单28是留言功能实现的代码主要部分。
图31 发表留言界面
程序清单28 留言功能实现部分代码lword.asp
<%dim title,word,check,lwordtitle=request.Form("title")word=request.Form("word")if title="" and word="" thenlword=1 elsecheck=""if title="" then check="●没有输入留言标题<br>"if word="" then check=check & "●没有输入留言内容<br>"if len(title) > 50 then check=check & "●标题超过50个字符<br>"if len(word) > 250 then check=check & "●留言超过250个字符<br>"end if %><body><div align="center"><table width="706" height="281" border="0" class="table_big"><tr><td valign="top"><div align="center"><!--#include file="include/head.asp" --><% If lword=1 Then %><br><form name="form1" method="post" action=""><table width="532" border="0" class="table_small"><tr><td colspan="4"> </td></tr><tr><td colspan="4" class="text_title"><div align="left">站长留言</div></td></tr><tr><td colspan="4" class="table_title"> </td></tr><tr class="text"><td width="40" class="text"><div align="left">标题:</div></td><td colspan="3" class="text"><div align="left"><input name="title" type="text" class="textfield" id="title"></div></td></tr><tr class="text"><td valign="top" class="text"><div align="left">内容: </div></td><td colspan="3" valign="top"><div align="left"><textarea name="word" class="textfield2" id="word"></textarea></div></td></tr><tr><td colspan="4" valign="top"> </td></tr><tr><td> </td><td width="58"> </td><td width="51"><input name="lword" type="submit" class="button_" id="lword" value="留言"></td><td width="361"><div align="left"><input name="reset" type="reset" class="button_" id="reset" value="清空"></div></td></tr><tr><td colspan="4"> </td></tr></table></form><% Else %><% If check<>"" Then %><br><table width="480" 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_error"><div align="left"><%= check %></div></td></tr><tr><td class="text"><div align="center">[<a href="lword.asp">返回留言页面</a>]</div></td></tr><tr><td class="text_error"> </td></tr></table><% Else %><%set rs_word=server.CreateObject("adodb.recordset")sql="select * from word where user_name ='" & session("user_name") & "'"rs_word.open sql,hotel_conn,3,2num=rs_word.recordcountrs_word.closesql="select * from word"rs_word.open sql,hotel_conn,3,2rs_word.addnewrs_word("user_name")=session("user_name")rs_word("datetime")=now()rs_word("title")=titlers_word("word")=wordrs_word.updaters_word.close%><br><table width="480" 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"><%= "您给站长的留言一共有" & (num+1) & "条" %> </div></td></tr><tr><td class="text"><div align="center">[<a href="index.asp" class="text">返回首页</a>]</div></td></tr><tr><td> </td></tr></table><% End If %><% End If %>
结束语
省略
致谢
省略
参考文献
ASP数据库系统开发完全手册 人民邮电出版社 3月Visual Basic数据库系统开发完全手册 人民邮电出版社 3月ASP 信息系统开发实例精选 机械工业出版社 王国辉、牛强、李南南等 7月Visual Basic信息系统开发实例精选 机械工业出版社 宋坤、赵智勇、刘强等 7月Access数据库开发实例解析 机械工业出版社 李俊民、高春燕等 1月Visual Basic精彩编程200例 机械工业出版社 赛奎春、高春艳等 2002年1月ASP数据库开发实例解析 机械工业出版社 李严、于亚芳、王国辉 12月Visual Basic工程应用与项目实践 机械工业出版社 高春艳、李俊民等 1月ASP工程应用与项目实践 机械工业出版社 陈威、白伟明、李楠 2月ASP工程应用与项目实践 机械工业出版社 王国辉、牛强、李南南 4月Visual Basic 信息系统开发实例精选 机械工业出版社 高春艳、李俊民、张耀庭等
5、资源下载
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
asp毕业设计—— 基于asp+access的酒店房间预约系统设计与实现(毕业论文+程序源码)——酒店房间预约系统