五.系统功能模块设计 5.1客户端 5.1.1购物篮 paper51.com 在设计购物篮中,首先要考虑到的是购物篮中商品信息的存储,而且在整个的商品购买中没有改变,这里就要用到ASP中的内置Session组件,它是访问者从的到达某个特定主页到离开为止的那段时间,服务器端给他分配一个用来储存信息的全局变量的集合,这些变量可以自动生成,也可以是程序人员在服务器端脚本程序中定义的。 paper51.com Session可以用来存储访问者的特定信息,创建访问者信息容器。我们使用它来作为虚拟购物篮,无论什么时候用户在我网站中选择了一种商品,那么这种商品就会进入购物篮,当用户准备离开时,就可以立即进行以上所有选择的商品的订购。这些购物信息可以保存在 Session中。用户在Web应用程序中访问同一页面时,Session变量始终存在,当用户在应用程序的页之间跳转时,存储在Session对象中的变量也不会清除。 paper51.com
在建立购物篮中,其实是对全局变量的操作。在这里我定义了一个全局变量:ProductList = Session("ProductList"),将购物信息保存到此全局变量中。另外还定义了一个全局变量Products,通过函数PutToShopBag()将ProductList的值赋给Products,使用函数Split()将读取到的字符串进行分割,以得到购物信息:Products =Split(Request("cpbm"), ", ")。 内容来自www.paper51.com /*建立购物篮的详细代码*/ copyright paper51.com ProductList =Session("ProductList") http://www.paper51.com Products = Split(Request("cpbm"),", ") http://www.paper51.com
For i=0 ToUBound(Products) copyright paper51.com
PutToShopBag Products(i),ProductList http://www.paper51.com Next copyright paper51.com
Session("ProductList")= ProductList paper51.com /*函数PutToShopBag()代码*/ paper51.com
<% http://www.paper51.com
Sub PutToShopBag( cpbm, ProductList ) 内容来自论文无忧网 www.paper51.com
If Len(ProductList)= 0 Then paper51.com ProductList = "'" & cpbm & "'" http://www.paper51.com ElseIf InStr(ProductList, cpbm ) <= 0 Then paper51.com
ProductList = ProductList & ", '" & cpbm &"'" 内容来自论文无忧网 www.paper51.com End If copyright paper51.com
End Sub 内容来自论文无忧网 www.paper51.com %> copyright paper51.com 购物篮界面如下图所示: http://www.paper51.com http://www.paper51.com 在我的购物篮中可操作的事件为: 内容来自论文无忧网 www.paper51.com ◇ 确认更改:在数量项目文本框中可以更改数目,该事件是用以更新购物篮中的商品数量; 内容来自论文无忧网 www.paper51.com ◇ 继续购物:该事件是关闭窗口; paper51.com ◇ 订单取消:该事件清空购物篮; 内容来自www.paper51.com
◇ 去收银台:该事件是用来关闭窗口并重新打开新的窗口。 内容来自论文无忧网 www.paper51.com 除了购物篮中的可视化操作外,还有就是商品购入事件(即在网上商店的点击购买的事件)。现在我们称这些事件是用来触发购物篮中的工作模式,在每次的触发模式时,都有一个传递的数值变量通过来判断触发的是哪个工作模块。下面详细介绍购物篮(check.asp)各工作模式的具体实现: copyright paper51.com 1) Add模式(购买添加) copyright paper51.com 用户点击他想购买的商品的“订购”链接时,通过调用函数OpenBag()来打开页面check.asp,“订购”链接把有关商品信息的资料字符传到check.asp,如下例: 内容来自www.paper51.com function openbag(id) { paper51.com window.open("check.asp?cpbm="+id,"","height=200,width=600,left=190,top=0,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,location=no");} copyright paper51.com
在该触发事件触发时,执行check.asp, copyright paper51.com 内容来自论文无忧网 www.paper51.com 对购物车执行了这次添加后,大部分其余的ASP代码就不再执行,因为它应用于其他的工作模式,模式的选择都是采用IF语句来实现的,而每次check.asp只会在一个模式下工作的。 http://www.paper51.com 2) Record模式(更新数量) 内容来自论文无忧网 www.paper51.com 该模式用于顾客项购买多件货物时,自动重新计算所需的货物总价格。用户以用它马上看到改过的数量后的结果。 http://www.paper51.com
如下面的语句: copyright paper51.com Sum = 0 http://www.paper51.com
While Not rs.EOF 内容来自论文无忧网 www.paper51.com Quatity = CInt(Request( "Q_" & rs("Product_Id")) ) paper51.com If Quatity <= 0Then 内容来自论文无忧网 www.paper51.com Quatity = CInt( Session(rs("Product_Id")) ) 内容来自www.paper51.com IfQuatity <= 0 Then Quatity = 1 end if 内容来自www.paper51.com
End If copyright paper51.com
Session(rs("Product_Id")) = Quatity http://www.paper51.com
Sum = Sum +ccur(rs("P_NewPrice")) * Quatity paper51.com 在输入文本框中时,该程序将对其输入的值进行判断,是否是数字的字符,以避免存储出错,造成不必要的麻烦。其判断函数如下(采用Javascript脚本语言编写): paper51.com //功能介绍:检查是否为数字 内容来自www.paper51.com //参数说明:要检查的数字 内容来自论文无忧网 www.paper51.com //返回值:1为是数字,0为不是数字 内容来自www.paper51.com function fucCheckNUM(NUM) 内容来自论文无忧网 www.paper51.com { http://www.paper51.com var i,j,strTemp; 内容来自www.paper51.com
strTemp="0123456789"; 内容来自www.paper51.com
if ( NUM.length== 0) paper51.com return 0 http://www.paper51.com
for (i=0;i<NUM.length;i++) paper51.com { http://www.paper51.com j=strTemp.indexOf(NUM.charAt(i)); 内容来自www.paper51.com if (j==-1) paper51.com { 内容来自论文无忧网 www.paper51.com //说明有字符不是数字 http://www.paper51.com return 0; 内容来自www.paper51.com } 内容来自www.paper51.com
} 内容来自www.paper51.com //说明是数字 paper51.com return 1; 内容来自www.paper51.com } copyright paper51.com 这种预先判断的处理方式,很大的程度上解决了非法输入对后面的存储所带来的一系列问题。 copyright paper51.com 3) DelAll模式(清空购物篮) 内容来自www.paper51.com 这个是对购物篮的商品进行清空的处理,其实就是对全局变量ProductList赋空值(Session("ProductList") = "")。通过调用函数clean()来执行clear.asp. copyright paper51.com
4) LinkTo模式(去收银台) 内容来自论文无忧网 www.paper51.com
onclick="window.opener.location.href='PayMent.asp';window.close();" 内容来自论文无忧网 www.paper51.com 该模式通过点击触发事件onclick来调用并执行PayMent.asp,并关闭当前购物篮。该事件不能对所购买的商品数量的更改而更改,只能通过确认更改来实现。 内容来自论文无忧网 www.paper51.com 5) 继续购物 http://www.paper51.com 该摸块也是调用Window对象中的window.close()函数,它回自动的关闭购物篮的窗口,该事件也不能对所购买的商品数量的更改而更改。 paper51.com 说明:在这里会出现一种情况,就是说如果未购买任何商品的话,则将返回一提示信息。 copyright paper51.com 内容来自www.paper51.com |