目录摘要随着国内经济形势持续发展,国内酒店业进入难得的发展高峰期,使得中外资本家纷纷将目光投向中低端市场。然而,中国酒店业的区域结构不合理、竞争手段不足和市场对经济型酒店的需求日益显露,以及2008年北京奥运会、2010年上海世界博览会对酒店业的积极影响等诸多力量的交织,使得中国酒店市场演变成了一个淘金圣地。 在信息高度发达的今天,酒店制度的改革已经成为一种更广泛、全面的潮流。该“酒店房间预约系统设计”是基于Access 2003数据库、ASP程序设计的基础上实现的。该系统可以保存和处理多个酒店的名称、星级和地址等基本信息以及每个酒店的房间信息,同时可以保存和处理客户的订单信息,并且对于这些系统提供了相应的查询功能,而且有完善的多用户安全功能。保证在我国经济持续发展、信息时代日益更新的今天,服务行业依然蒸蒸日上。 前言随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。酒店客房管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。无疑,使用网络信息化管理使酒店客房管理更先进、更高效、更科学,信息交流更迅速。酒店房间预约系统是酒店经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要,所以酒店房间预约系统应该能够为用户提供充足的信息和快捷的预约手段。酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。 远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。第二章 编程环境基础知识2.1 ASP基础概述ASP,全称ActiveX Server Page,它提供了一个在服务器端执行脚本指令(包括HTML、VBScript、JavaScript等),通过这种环境,用户可以创建和运行Web应用程序。 ASP文件就是在普通的HTML文件中嵌入VBScript或JavaScript脚本语言。ASP是一个服务器端脚本编写环境,用于创建动态的交互式Web服务器应用程序。在ASP动态网页中,不仅可以包含服务器端代码,也可以使用ASP内建对象和服务器组件,此外还可以包含服务器端文件。2.2 ASP脚本语言——VBScript2.2.1 VBScript的概述VBScript是程序开发语言Visual Basic家族的最新成员,可以将灵活的脚本应用于更广泛的领域,包括Microsoft Internet Explorer中的Web客户端脚本和Microsoft Internet Information Server中的Web服务器端脚本。 VBScript脚本语言有以下主要特点: (1) 易学易用。 (2) ActiveX脚本。 (3) 其他应用程序和浏览器中的VBScript。2.2.2 VBScript 代码的基本格式一般的ASP程序都是将VBScript代码放在服务器端执行的,有两种方法:方法一:<% VBScript 代码 %>方法二:2.2.3 条件语句1.If ……Then…… Else语句用于判断条件是Ture或False,并且根据判断结果指定要运行的语句。2.Select Case 语句是If…… Then…… Else…… EndIf 语句多条件时的另外一种形式,其语句的语法如下:Select Case变量或表达示2.2.4循环语句1.For……Next 循环是一种强制型的循环,用语将语句块运行指定的次数。在循环体中使用计数器变量,该变量随每次循环增加或减少。2.Do ……Loop循环Do循环也是根据某个条件是否成立来决定能否执行相应的循环体部分。与while循环不同的是:While循环只能在初始位置检查条件是否成立;而Do循环可以有两种格式,既可以在初始位置检验条件是否成立,也可以在执行一遍循环体后的结束位置判断条件是否成立,能否进入下一次循环。 3.While……Wend语句While循环用于对条件进行判断,如果条件成立,可以循环执行循环体,直到循环结束为止。结束循环的条件是用于判断的条件不成立。与For循环最大的差别在于:For循环用于循环次数己知的情况,执行一定次数后即可结束循环;而While循环用于不知道循环次数,但可以用一个条件来进行判断是否结束。所以对于循环次数有限,可以用条件限制的情况,使用While循环较好,且使用比较灵活。4.For Each...Next循环该语句对集合中的每个元素进行一次循环,直到集合中无更多的元素时,执行Next后面的语句。2.2.5 过程在VBScript中将过程分为两类:子过程和函数过程。子过程也称为Sub过程,函数过程也称为 Function过程。二者的区别在于:Sub过程没有返回值,相当于其他程语言中的过程;Function过程有返回值,相当于其他编程语言中的函数。1.Sub过程的声明Sub过程的声明语法: [Public][Private] Sub 过程名[(参数表)] [语句块] [Exit Sub] [语句块] End Sub2.Function过程 是由一系列VBScript语句所组成,这些语句是以Function语句作为该过程的开头标记,以End Function语句作为结束。Function过程的声明语法:[Public] [ Private] Function 过程名[(参数表)] [语句块] [过程=表达式] [Exit Function] [语句块] [过程=表达式] End Function与Sub过程的基本相同,不同之处是: 1) 函数有返回值。它的返回值就是通过 “过程=表达式”语句传递的。 2) 可以在函数内部任何地方把返回值赋给函数名,而且允许存在任意次这样的赋值。如果不指定返回值,那么数值函数返回0,字符串函数返回“ ”,对象函数返回Nothing。 ASP内置基本对象Request 负责从用户端接收信息Response负责传送信息给用户Session 负责存储个别用户的信息,以便重复使用Application 负责存储数据以供多个用户重复使用Server 负责控制ASP的运行环境ObjectContext 供ASP程序直接配合 Microsoft Transaction Server进行分布式的事务处理需求分析3.1 功能需求 酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。 远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。 本酒店房间预约系统按照用户部分和管理员部分划分了两块,它们所实现的功能如下。用户部分用户注册:检测用户提供的信息并注册用户。用户登陆:通过用户名和密码核实登陆用户身份。预约房间:预约某个时间的某一房间。查询预约信息:查询该用户的预约信息。取消房间预约:取消某一到期且未付款的有效预约。查询房间信息:按照用户提出的条件列出查询结果。给站长留言:检查用户留言的正确性并保存。注销用户:结束用户会话,保证安全。管理员部分 阅览用户留言:调用用户留言并显示。 删除无用留言:删除需要处理的留言。 添加房间:添加新的房间,注册详细信息。 删除房间:根据用户提交的信息删除指定的房间。 修改房间信息:对于存在的某房间信息进行修改更新。 确认已付款用户的预约:当用户付款后对指定预约进行标记。 删除无用或错误的预约信息。 房间预约统计和用户统计。 安全注销。3.2 性能需求a 硬件环境:Windows 2000 server 是一个功能强大的操作系统,要让系统发挥应有的良好的性能,安装Windows 2000 server的计算机所需的最小配置应为:CPU: 要求是奔腾以上处理器。内存: 建议最少有256MB内存。硬盘:硬盘分区有足够的可用空间来执行安装程序b 软件环境: 操作系统:Windows XP 服务器平台:IIS5.0浏览器:IE5.0应用软件DreamweaverMXc开发语言:Vbscript总体设计4.1系统模块结构设计系统设计主要包括功能模块的划分和系统流程的分析。根据客户的需求总结系统主要完成的功能,以及将来拓展需要完成的功能,然后根据设计好的功能划分出系统的功能模块,这样方便程序员管理和维护,最后设计出系统的流程。接下来,就详细介绍系统设计的前期准备。4.1.1 功能模块划分酒店房间预约系统应该具有用户注册登录、查看预约房间、留言、管理员综合管理等功能。根据对该系统的功能需求分析可以画出系统功能模块图。本系统将功能划分为用户和管理员两部分,图1所示是用户部分的功能模块图。用户模块包括注册、登录和注销3个功能子模块,注册模块提供用户注册成为酒店房间预约系统的会员,拥有预约房间的功能,而只有登录的用户方可以进行房间的预约,因此登录模块提供会员登录功能。为了防止其他用户私自修改用户信息,同时又设计了注销功能模块。房间模块包括查看房间、查询房间、查看预约、预约房间和取消预约等功能。通过查看或者输入条件查询房间,可以获得房间的具体信息,如果为登录用户,此时可以进行房间的预约操作,用户觉得不满意,可以通过取消预约模块取消预约,同时用户可以通过查看预约模块查看用户所有的预约信息。留言模块为用户提供一个发表自己看法的场所,如果遇到什么困难或者不满意的地方。可以通过该模块发表。管理端部分的功能如图2所示。管理员登录模块提供管理员登录的入口,只有成功登录后,才可以执行管理员操作。添加房间功能模块为管理员提供添加新的房间的功能,此时,管理员可以输入详细的房间信息。如果房间出现问题或者该房间已经不存在,管理员可以通过删除房间模块把该房间删除。当房间信息发生改变时,管理员可以通过修改房间信息模块对房间的信息进行修改。管理员可以通过阅读留言模块查看用户发表的留言,并可以进行回复和删除等操作。用户的预约只有等管理员确认后方可生效,管理员就是通过预约管理模块对用户的预约信息进行管理的,包括确定预约和删除预约等。管理员操作结束时需要通过注销登录模块注销登录,防止系统信息被篡改。4.2 数据库设计 数据库结构设计的好坏直接影响到信息管理系统的效率和实现的效果。合理地设计数据库结构可以提高数据库存储的效率,保证数据的完整和统一。数据库设计一般包括如下几个步骤:数据库需求分析数据库概念结构设计数据库逻辑结构分析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-name文本12是无主键,管理员帐号Admin-pwd文本16是无密码管理员信息表(Admin)2.用户信息表用户信息表记录了用户的详细信息,包括用户名、密码、和有关的个人信息,设置用户名为该表主键,如表2所示。用户信息表(user-reg)列 名数 据 类 型字 段 大 小必 填 字 段默 认 值备 注User-name 文本12是无主键,用户名Pas文本16是无密码Sex文本2是无性别Age数字1是无年龄Email文本50是无电子邮件Tel文本15是无电话Byear数字2是无出生年Bmonth数字1是无出生月Bday数字1是无出生日3.房间信息表房间信息表记录了房间的编号、房间名称、房间类型和费用等信息,设置房间编号为该表主键,如表3所示。房间信息表(room)列 名数 据 类 型字 段 大 小必 填 字 段默 认 值备 注Room-id自动编号2是无主键,房间编号Name文本30是无房间名称Type文本12是无房间类型Cost货币2是无费用4.预约信息表预约信息表记录了用户预约房间的详细信息,包括预约帐号、预约编号、预约时间、房间编号、使用费用、是否付款和何时使用等信息,如表4所示。预约信息表(preengage)列 名数 据 类 型字 段 大 小必 填 字 段默 认 值备 注Preengage-id自动编号2是无主键,预约编号User-name文本12是无用户名Room-id文本2是无房间编号Datetime日期/时间8是无预约时间Cost货币2是无费用Pyear数字2是无开始年Pmonth数字1是无开始月Pday数字1是无开始日Beginhour数字1是无开始时间Paid数字1是无是否付款5.留言信息表留言信息表记录了留言的标题、留言编号、留言内容、留言用户等信息,如表5所示。设置留言编号为该表主键。留言信息表(word)列 名数 据 类 型字 段 大 小必 填 字 段默 认 值备 注Word-id自动编号2是无主键,留言编号User-name文本12是无用户名Title文本50是无标题Word文本250是无内容Datetime日期/时间8是无时间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 Then err.clearend ifhotel_conn.Open connstr '关闭数据库连接,在每页中调用此函数,将连接放入连接池sub CloseConn() hotel_conn.Close() Set hotel_conn = Nothingend sub'替换单引号function RealString(strSrc) RealString = Replace(Trim(strSrc), "'", "''")end function%>第五章、编写公共模块文件公共模块主要包括以下几个部分:页面头文件。页面尾文件。管理员登陆判断代码。用户登录判断模块。注销模块。用户名判断函数。电子邮件地址判断函数。错误提示页面。1. 页面头文件本系统的每个可显示的页面都有固定的页面头和页面尾,页面头包括图片和导航菜单,页面尾文件包括版权信息和联系方式。为了减少代码的重复编写,将它们分别单独作为一个文件来操作,使用时使用include命令来调用它们。程序清单2为页面头文件的实现代码。 程序清单 2 页面头文件实现代码 include/head.asp
该头文件指定了页面头部图片,并在图片上设置了“热点”,即用鼠标单击图片某一区域后进入相应的网页。2.页面尾文件程序清单3是页面文件的实现代码。使用该代码采用〈!--#include file=”../Include/foot.asp”--〉语句。程序清单3 页面尾文件实现代码 Include/foot.asp
3.管理员登录判断代码为了防止非管理员用户任意修改系统数据,在页面中需要加入管理员登录判断,其实现代码见程序清单4 程序清单4 管理员登录判断代码 include/is-admin.asp<% '判断管理员登陆------------------if isempty(session("admin_name")) then response.Redirect("error.asp") response.End()end if%>用户登录判断代码酒店房间预约系统是一个多用户系统,某些页面只有用户登录后方可开通,如留言等。为了防止非注册用户直接调用页面的这些功能,需要在页面中加入用户登陆判断代码。程序清单5是用户登录判断代码,和管理员登录判断代码类似。 程序清单5 用户登录判断代码 include/is-user.asp<%if isempty(session("user_name")) then response.Redirect("error.asp") response.End()end if%>注销模块当用户或者管理员完成操作后,为保证系统安全,系统提供了安全注销功能,它是通过程序清单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, c is_name = true for i = 1 to len(name) c = Lcase(Mid(name, i, 1)) if InStr("abcdefghijklmnopqrstuvwxyz_", c) <= 0 and not IsNumeric(c) then is_name = false exit function end if nextend function%>7. 电子邮件地址判断函数与用户名类似,电子邮件地址也需要判断合法性。程序清单8就是电子邮件地址合法性判断函数。 程序清单8 电子邮件合法性判断函数 include/is-email.asp<% '判断管理员登陆------------------if isempty(session("admin_name")) then response.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大部分。生成留言列表为了使管理员及时了解用户意见和建议,该系统把查看留言列表页面设置为管理员登录后的首页面,如图11所示。该功能由administrator.asp文件实现,见程序清单10图11 留言列表见程序清单10 生成留言列表核心代码administrator.asp <% dim rs_word,sql,readurl set rs_word=server.CreateObject("adodb.recordset") sql = "select * from word " rs_word.open sql,hotel_conn,3,2 rs_word.movefirst while (not rs_word.eof) readurl="admin_rword.asp?word_id=" & rs_word("word_id") %> <% rs_word.movenext wend rs_word.close set 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个功能。显示房间列表图13所示为房间列表的显示页面。从图中可以看出,可以对房间进行删除或修改操作。房间列表的功能实现是由文件damin_room.asp完成的,其代码见程序清单14图13 房间列表程序清单13 房间列表实现核心代码damin_room.asp<% dim rs_room,sql,delurl,editurl 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) delurl="del.asp?room_id=" & rs_room("room_id") editurl="admin_edit.asp?room_id=" & rs_room("room_id") %> <% rs_room.movenext wend %>删除房间当酒店因为某种原因不能提供预约时,管理员可以将该房间从数据库中删除,删除功能的实现是文件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所示。修改房间信息修改房间信息的功能是修改存在于数据库中的房间信息,包括房间名称、房间类型和费用,但是不能修改房间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) & "
") 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 %>
<% 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" %>
<% End If %>删除预约页面 图21所示是删除页面成功的提示信息。该功能的实现是由文件chkcancel.asp完成的,在用户面取消预约模块中还会看到该文件的出现,它们的实现都是由该文件完成的。详细代码见程序清单18程序清单18 删除和取消预约功能的实现chkcancel.asp<%dim preengage_id,rs_cancel,rs_del,delokpreengage_id=request("preengage_id") if preengage_id="" then response.Redirect("error.asp") response.End()end ifif session("user_name")="" and session("admin_name")="" then response.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") <> "" then sql = 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 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=1else delok=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) Then rs_user_total=0 rs_user.movefirst While (Not rs_user.EOF) rs_user_total = rs_user_total + 1 rs_user.MoveNext Wendelse rs_user_total = rs_user.RecordCountEnd IfIf (room.RecordCount = -1) Then room_total=0 room.movefirst While (Not room.EOF) room_total = room_total + 1 room.MoveNext Wendelse room_total = room.RecordCountEnd 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 IfEnd If%> <% if not isempty(session("user_name")) then set 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,1 response.Write("欢迎您,"&session("user_name") &"
") end if %><%set rs_user_name = Nothingrs_user.Close()Set rs_user = Nothingroom.Close()Set room = Nothing%>2.注册登录模块该模块分为注册和登录两个功能模块。注册模块图25所示用户注册页面,是由文件reg.asp来实现的。他不需要连接数据库,主要功能是收集信息并传递给reg2.asp文件进行数据有效性验证。图25 用户注册页面程序清单21 生成年、月、日序列reg.asp部分代码 年 月 日
文件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,2 if not(rs_test_name.eof or rs_test_name.bof) then err(2)="这个用户名已经存在"else err(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 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,2if not(rs_user.eof or rs_user.bof) then session("user_name")=rs_user("user_name") haveerr=0else haveerr=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,2 rs_room.movefirst while (not rs_room.eof or rs_room.bof) %>天空酒店管理系统 ©2005 | ||||
E-mail: | 电话: | 010-12345678 | ||
<%= rs_word("user_name") %>
<%= rs_word("word_id") %>
<%= rs_word("datetime") %>
<%= rs_room("room_id") %>
<%= rs_room("name") %>
<%= rs_room("type") %>
<%= rs_room("cost") %>
") 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 %>
预约确认 | |||||
预约用户 | 房间名称 | 预约日期 | 预约时间 | 费用 | 操作 |
<%= rs_preengage("user_name") %> | <% 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 %> | <%= rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday") %> | <%= rs_preengage("beginhour") & ":00-" & (rs_preengage("beginhour")+1) & ":00" %> | <%= rs_preengage("cost") %> | |
预约确认成功 |
成功确认ID为<%= rs_preengage("preengage_id") %>的预约,它是在<%= datetime %>的预约,费用为<%= rs_preengage("cost") %>元 |
") end if %><%set rs_user_name = Nothingrs_user.Close()Set rs_user = Nothingroom.Close()Set room = Nothing%>2.注册登录模块该模块分为注册和登录两个功能模块。注册模块图25所示用户注册页面,是由文件reg.asp来实现的。他不需要连接数据库,主要功能是收集信息并传递给reg2.asp文件进行数据有效性验证。图25 用户注册页面程序清单21 生成年、月、日序列reg.asp部分代码 年 月 日
<%= rs_room("room_id") %>
<%= rs_room("name") %>
<%= rs_room("type") %>
<%= rs_room("cost") %>
查询结果: <% if searchok=1 then response.Write("查看所有开放于"& set_time &"的"& set_room &"房间,费用上限"& set_cost) end if %> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
●没有找到符合要求的房间 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
房间名称 | 房间类型 | 费用(元/小时) | 使用时间 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
<%= rs_search("type") %> | <%= rs_search("cost") %> | 24小时 |
|