第9章综合应用——网上书店客户端的设计9.1网上购书的基本流程9.2查询图书9.3购物车的实现9.4用户身份确认9.5订单确认和保存9.6订单查询9.7体验购书过程9.1网上购书的基本流程网上书店的购物流程9.2查询图书9.2.1显示图书信息图书信息的显示用两个页面来实现,其中book.asp给出每本图书的概略信息,每页显示10条图书记录;book_detail.asp显示每本图书的详细信息,且一页只显示一条记录。当客户通过各种方式查询图书时,主要是打开book.asp页,然后通过book.asp页面上的详细信息超链接打开对应图书信息的book_detail.asp页。定义book.asp页中的记录集rstBook,该页中定义了较多的参数,以获得后面各种查询方式提交的参数。以book_details.asp页为详细信息页并传递参数isbn(书号)。定义记录集rstBook_detail,以isbn值为参数,以获得其它页面传递来的参数实现筛选。book.asp页的浏览效果图书详细信息页的浏览结果9.2.2精品推荐在页面显著位置上给出一些最新名家名著的书名、作者及价格信息,通过单击图书名称构成的超级连接,直接打开book_detail.asp页给出该书的详细介绍,为图书爱好者提供一个快捷的途径。该页的制作主要是使用服务器行为“转到详细信息页”,通过超级链接传递参数(书号)打开book_detail.asp显示图书的详细信息。精品图书页的浏览结果9.2.3按类别查询图书在页面显示图书的类别,通过单击这些类别名称打开book.asp页并传递参数(图书类别编号),从而列出属于该类别的所有图书,实现按类别查询。制作中也是使用了服务器行为“转到详细信息页”来实现。以book.asp页为详细信息页,设定传递参数为图书类别编号。9.2.4综合查询使用表单向book.asp页提供书名、出版社、出版时间、类别、作者等较多的查询参数,以缩小检索图书的范围,加快图书查询速度。综合查询页面的设计视图9.3.1安装购物车插件购物车的实质是将在浏览商品过程中决定购买的商品信息保存在Session对象或Cookies集合中,在用户需要查看时显示出来并允许用户进行更改和删除的操作。只有在用户确认购买后,才提交保存到数据库中。这里使用第三方提供的购物车插件来实现购物车功能,可以从地址下载最新版本,然后启动MacromediaExtensionManager来安装和管理。9.3购物车的实现当安装并启用插件,则DreamweaverMX的服务器行为面板中自动增加一项服务器行为面板菜单“CharonCart”,其中包括了许多进行购物车操作的命令。9.3.2设置购物车要将商品添加到购物车,首先应该定义购物车。凡是需要购物车功能的页面均必须先定义购物车。如果需要应用某个购物车服务器行为,也必须先定义购物车。由于所需要的购物车是一样的,所以可以给任何页面首先添加购物车,然后在另一个页面上直接引用它。在购物车中,包含如下几个组成部分:商品标识、商品数量、商品价格、商品名称。定义购物车对话框设定购物车项目定义完购物车后,在页面的服务器行为面板窗格中增加了一个服务器行为CharonCart;在绑定面板窗格中增加了一个数据源CharonCart,单击“+”图标展开它,列出购物车中定义的数据项和其他计算数据项。在页面的代码在最前面增加了一行如下的语句:!--#includefile=inc_CharonCart.asp--表明引用与当前页面同目录下的文件inc_CharonCart.asp,这是我们定义购物车行为时自动生成的文件,完全由VBScript代码组成。在inc_CharonCart.asp中包含了两个函数,分别用来将购物车数据写入到Cookie和从Cookie中读取数据到购物车中。函数代码见后页。functionCartToCookie(thearray,cookiename)onerrorresumenextmystring=forj=0toubound(CCcart,2)ifCCcart(CC_ProductID,j)thenfori=0to5mystring=mystring&CCcart(i,j)&^nextmystring=left(mystring,len(mystring)-1)mystring=mystring&|endifnextmystring=left(mystring,len(mystring)-1)Response.Cookies(cookiename)=mystringendfunctionfunctionCookieToCart(cookiename)dimmyarray(5,50)mystring=Request.Cookies(cookiename)productarray=split(mystring,|)forj=0toubound(productarray)itemarray=split(productarray(j),^)fori=0to5ifitemarray(i)thenmyarray(i,j)=itemarray(i)elsemyarray(i,j)=nullendifnextnextCookieToCart=myarrayendfunction9.3.3将商品添加到购物车CharonCart服务器行为菜单提供了两种将商品添加到购物车的命令:AddToCartFromForm(从表单添加到购物车)和AddToCartFromlink(从链接添加到购物车)。1从链接添加到购物车定义从链接添加到购物车购物车数据项信息类型字段或值ProductIDRecsetColumnisbnQuantityLiteral1NameRecsetColumnnamePriceRecsetColumnpriceUniqueKeyRecsetColumnisbn添加到购物车数据项的信息2从表单添加到购物车当一页中显示多条记录时,使用表单来向购物车中添加数据更为合适,因为通过表单能够更方便地标识每本图书的信息。定义从表单添加到购物车9.3.4创建购物车页面购物车页面用来让客户查看和更改购物车中自己选定的图书,包括图书的书号、书名、单价、选购的数量、金额和总金额等。1显示购物车内容定义在页面中显示购物车数据项2更新和清空购物车更新购物车的操作是使客户更改选定图书的数量或者选择清除复选框后从购物车中删除该图书,而清空购物车操作是将购物车中所有的商品清除。定义更新购物车行为定义清空购物车行为当客户在cart.asp页面中确认了当前当前购物车中的商品是自己需要的之后,就可以去收银台填写相关信息和完成后续的购买操作。首先用户必须通过登录(即身份确认)提供自己的正确信息,才能与商品信息一起保存到数据库中,这样才能进行付款操作及商品的配送。9.4用户身份确认9.4.1用户注册1申请帐号申请帐号的实质是向用户表中插入一条新的记录,并且只有帐号。为了避免出现重复的记录,必须使用“检查新用户”行为。注册帐号页面设计视图定义插入记录检查新用户名2填写详细信息客户详细信息页用于让客户填写相关信息提交到数据库中。由于在数据库中已经保存了当前客户的帐号,所以提交详细信息的操作实际上是更新表中记录的操作。详细信息页的页面视图定义记录集rstCustomer定义更新记录行为9.4.2用户登录客户在注册成功后,以后他只要用注册的帐号和密码进行登录以验证身份即可。所以登录过程就是用户提交帐号和密码,在数据库中查找该用户是否存在的过程。登录成功后,创建一个Session(“MM_Username”)变量并保存用户帐号。登录页面视图定义用户登录行为在用户正确登录之后,应该列出用户最终确认购买的商品及价格列表,并让用户填写相关的配送地址,最后将所有相关的信息提交并保存到数据库中。9.5.1显示确认信息在页面上显示用户购买的商品信息,同时在该页中显示收货人的详细信息并允许用户进行修改。9.5订单确认和保存在页面上插入购物车数据填写收货人信息表单及表单元素9.5.2保存订单并获取订单号将订单的保存到数据库的过程分两个步骤:首先将信息保存到订单表并获得订单号,然后再将订单号和订单明细数据保存到订单明细表中。首先将订单保存到订单表,通过定义保存订单并获取订单号行为实现,而订单号由购物车生成的一个JavaScript函数产生。定义保存订单并获取订单号行为scriptlanguage=javascriptrunat=serverfunctionGetTimeInMillisec(){varNow=newDate()varTimeStamp=Now.getTime()returnTimeStamp}/script保存订单并获取订单号的脚本代码9.5.3保存购物车内容到数据库保存购物车到数据库的操作就是将购物车中的数据保存到订单明细表中。完成此功能是通过保存购物车内容到数据库行为实现的。保存购物车数据至数据库9.6.1查看订单列表客户在将订单数据保存到数据库后,他随时有可能会查询自己的订购情况,包括订单号、订购日期以及该订单是否已经处理的信息。只有登录成功的客户才能打开该页。当用户需要了解某个订单的详细情况,就通过链接访问详细信息页。9.6订单查询通过用户名(账号)和密码控制访问该页的用户定义订单查询页面记录集和页面设计视图定义转到订单详细信息页9.6.2查看订单详细内容在订单明细页中包括某张订单所包括的书号、书名、定价、数量和总金额等信息。订单详细页页面定义订单明细页的两个记录集9.7体验购书过程可以以多种方式查询图书查看SQLServer的图书在购物车中显示选择的图书注册和登录系统填写客户详细信息订单页面查询订单查询订单明细