频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

9.2 下订单

作者: 程伟 汪孝宜 出处:电子工业出版社  2008-06-06 15:10    砖    好    评论   进入论坛
阅读提示:《开发者突击——JSP网络开发经典模块实现全集》精选了当前较为热门的因特网应用中的经典模块/子系统,进行解读分析,部分章节也可作为全站系统使用。本文介绍了下订单页面的制作方法。

9.2  下订单

当完成了在线购物后,就可以给产品下订单了,下订单时需要将产品发给客户以备核对,本实例就来讲解其实现过程。

顾客在通过邮局汇款或者网上支付后,可以再次进入网站,查看订单状态。

如果要查询已经下过的订单处理情况或历史订单记录,只要登录网站,输入您的账号、密码,点击“用户信息”→“查看订单情况”,即可查询到所有的订单记录。

用户下订单的界面如图9-7所示,其实现代码如程序9-10所示。

程序9-10  下订单功能程序

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page import="ch09.web.book.bookclass" %>
<%@ page session="true" %>
<%@ page import="ch09.web.book.books"%>
<%@ page import="ch09.web.book.indentlist" %>
<jsp:useBean id="book_list" scope="page" class="ch09.web.booksmn" />
<jsp:useBean id="classlist" scope="page" class="ch09.web.bookclasslist" />
<jsp:useBean id="shop" scope="page" class="ch09.web.purchase" />
<% 
String userid = (String) session.getAttribute("userid");
if ( userid == null )
userid = "";
String modi = request.getParameter("modi");
String del = request.getParameter("del");
String payoutCar = request.getParameter("payout");
String clearCar = request.getParameter("clear");
String mesg = "";
if (modi!=null && !modi.equals("")) {
if ( !shop.modiShoper(request) ){
if (shop.getIsEmpty())
mesg = "你要修改购买的图书数量不足你的购买数量!";
else
mesg = "修改购买数量出错!";
} else {
mesg = "修改成功";
}
}else if ( del != null && !del.equals("") ) {
if ( !shop.delShoper(request) ) {
mesg = "删除清单中的图书时出错!" ;
}
}else if (payoutCar != null && !payoutCar.equals("") ) {
if (shop.payout(request) ) {
mesg = "你的购物车中的物品已提交给本店,你的订单号为 "+
shop.getIndentNo() + "<br>请及时付款,
以便我们发货!";
session.removeAttribute("shopcar");
} else {
if(!shop.getIsLogin())
mesg = "你还没有登录,请先<a href=login.jsp>登录</a>后再提交";
else
mesg = "对不起,提交出错,请稍后重试";

} else if (clearCar != null && ! clearCar.equals("") ) {
session.removeAttribute("shopcar");
mesg = "购物车中的物品清单已清空";
}
%>
<html>
<head>
<title>网络电子书店-我的购物车</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
function openScript(url,name, width, height){
var Win = window.open(url,name,'width=' + width + ',
height=' + height + ',resizable=1,
scrollbars=yes,menubar=no,status=yes' );
}
function checklogin() {
if (document.payout.userid.value=="")
{
alert("你还没有登录,请登录后再提交购物清单。");
return false;
}
return true;
}
function check()
{
if (document.change.amount.value<1){
alert("你的购买数量有问题");
document.change.amount.focus();
return false;
}
return true;
}
</script>
<link rel="stylesheet" href="books.css" type="text/css">
</head>
<body bgcolor="#BF9AFE" text="#000000">
<div align="center">
<table width="750" border="1" bgcolor="#A4F99F" cellspacing="1" cellpadding="1">
<tr>
<td width="120" align="center"><img src="images/Img20625.jpg"
width="50" height="50"><br>
<font color="#0066CC">网络电子书店</font></td>
<td align="center" height="60">书店BANNER</td>
<td align="center" width="80"><a href="#">本站公告</a><br>
<br>
<a href="manage/login.jsp">网站管理</a></td>
</tr>
</table>
  <table width="750" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="200">&nbsp;</td>
<td width="55"><a href="index.jsp">首页</a></td>
<td width="100"><a href="booklist.jsp">在线购物</a></td>
<td width="100"><a href="shoperlist.jsp">我的购物车</a></td>
<td width="100"><a href="userinfo.jsp">用户信息</a></td>
<td><a href="login.jsp">用户登录</a></td>
</tr>
</table>
<table width="750" border="0" cellspacing="1" cellpadding="1">
<tr valign="top">
<td width="150">
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="20">&nbsp;</td>
<td>本店图书分类:</td>
</tr>
<% if (classlist.excute()){
for (int i=0;i<classlist.getClasslist().size();i++){
bookclass bc = (bookclass) classlist
.getClasslist().elementAt(i); %>
<tr>
<td width="20">&nbsp;</td>
<td><a href="booklist.jsp?classid=<%= bc.getId()%>">
<%= bc.getClassName() %></a></td>
</tr>
<% }   
}%>
<tr>
<td width="20">&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
<td align="center">
<p><br>
<b><font color="#0000FF">我的购物车物品清单</font></b></p>
<%
if (!mesg.equals("") )
out.println("<p ><font color=#ff0000>" + mesg + "</font></p>");
Vector shoplist = (Vector) session.getAttribute("shopcar");
if (shoplist==null || shoplist.size()<0 ){
if (mesg.equals(""))
out.println("<p><font color=#ff0000>
你还没有选择购买图书!请先购买</font></p>");
} else {
%>
<table width="100%" border="1" cellspacing="1" cellpadding="1" bordercolor="#CC9966">
<tr align="center">
<td>图书名称</td>
<td>作者</td>
<td>图书类别</td>
<td>单价(元)</td>
<td>数量</td>
<td colspan =2>选择</td>
</tr>
<%
float totalprice =0;
int totalamount = 0;
for (int i=0; i<shoplist.size();i++){
indentlist iList = (indentlist) shoplist.elementAt(i); 
if (book_list.getOnebook((int)iList.getBookNo())) {
books bk = (books) book_list.getBooklist().elementAt(0);
totalprice = totalprice + bk.getPrince() * iList.getAmount();
totalamount = totalamount + iList.getAmount();
%>
<tr>
<td><%= bk.getBookName() %></td>
<td align="center"><%= bk.getAuthor() %></td>
<td align="center"><%= bk.getClassname() %></td>
<td align="center"><%= bk.getPrince() %></td>
<form name="change" method="post" action="shoperlist.jsp">
<td align="center">
<input type="text" name="amount" maxlength="4" size="3" value="
<%= iList.getAmount() %>" >    
</td>
<td align="center" width=55 >
<input type="hidden" name="bookid" value="
<%= iList.getBookNo() %>" >
<input type="submit" name="modi" value="修改"
onclick="return(check());"></td>
<form name="del" method="post" action="shoperlist.jsp">
<input type="hidden" name="bookid"
value="<%= iList.getBookNo() %>" >
<td align=center width=55>
<input type="submit" name="del" value="删除">
</td></form>
</tr>
<% }
} %>  <tr><td colspan=7 align="right"><br>你选择的图书的总金额:
<%= totalprice%>元&nbsp;&nbsp;
总数量:<%= totalamount%>本&nbsp;</td></tr>
</table>
<p></p>
<table width="90%" border="0" cellspacing="1" cellpadding="1">
<tr> <form name="payout" method="post" action="shoperlist.jsp">
<td align="right" valign="bottom">
<a href="booklist.jsp">继续购书</a>&nbsp;&nbsp;&nbsp;

<input type="hidden" name="userid" value="<%= userid %>">
<input type="hidden" name="totalprice" value="<%= totalprice %>">
<TEXTAREA NAME="content" ROWS="3" COLS="20">附言:</TEXTAREA><br>
<input type="submit" name="payout" value="提交我的购物车" onclick="javascript:return
(checklogin());">&nbsp;</td></form>
<form name="form1" method="post" action="shoperlist.jsp">
<td valign="bottom">&nbsp;
<input type="submit" name="clear" value="清空我的购物车">
</td></form>
</tr>
</table>
</form>
<% } %>
</td>
</tr>
</table>

</div>
</body>
</html>

图9-7  用户下订单界面

程序9-10说明如下。

(1)在下订单前,对购物车做最后的确认

包括修改、删除已经购买的物品数量,清空购物车,确认无误后提交购物车,即下定单。使用如下的代码:

if (modi!=null && !modi.equals("")) {
if ( !shop.modiShoper(request) ){
if (shop.getIsEmpty())
mesg = "你要修改购买的图书数量不足你的购买数量!";
else
mesg = "修改购买数量出错!";
} else {
mesg = "修改成功";
}
}else if ( del != null && !del.equals("") ) {
if ( !shop.delShoper(request) ) {
mesg = "删除清单中的图书时出错!" ;
}
}else if (payoutCar != null && !payoutCar.equals("") ) {
if (shop.payout(request) ) {
mesg = "你的购物车中的物品已提交给本店,你的订单号为 "+
shop.getIndentNo() + "<br>请及时付款,以便我们发货!";
session.removeAttribute("shopcar");
} else {
if(!shop.getIsLogin())
mesg = "你还没有登录,请先<a href=login.jsp>登录</a>后再提交";
else
mesg = "对不起,提交出错,请稍后重试";

} else if (clearCar != null && ! clearCar.equals("") ) {
session.removeAttribute("shopcar");
mesg = "购物车中的物品清单已清空";
}

根据传递参数的不同,确认是哪种操作,上面的示例中,参数为“modi”为修改物品数目,“del”为删除该物品,“clear”为清空购物车,“payout”为下订单,具体参数分别调用程序9-13的操作方法。比如下定单操作,则对应调用“shop.payout(request)”方法,对数据库进行相关的操作,增加一条用户的订单数目,同时把系统该物品的剩余数量减去用户购买的数目。

(2)购物车数据的处理

购物车的数据处理包括两部分:一个是下订单前,用户购物车数据的显示;另一个是下订单后,用户购物车数据的处理。

下订单前,购物车数据显示,代码如下:

Vector shoplist = (Vector) session.getAttribute("shopcar");
//其他操作
float totalprice =0;
int totalamount = 0;
for (int i=0; i<shoplist.size();i++){
indentlist iList = (indentlist) shoplist.elementAt(i); 
if (book_list.getOnebook((int)iList.getBookNo())) {
books bk = (books) book_list.getBooklist().elementAt(0);
totalprice = totalprice + bk.getPrince() * iList.getAmount();
totalamount = totalamount + iList.getAmount();
//页面显示操作,此处略
}
}

首先从session中获取当前用户的购物车对象,然后把详细信息循环显示出来。本小节的例子中,session对象保存的是一个Vector,其中每一条数据都是一个用户订单详细信息资料,该资料以JavaBean的形式存储了ID序号、订单号表序列号、图书表序列号和订货数量,结合图书类Books一起完成详细信息的展示。

下订单后后,用户购物车数据的处理,如下所示。

if (shop.payout(request) ) 
{
mesg = "你的购物车中的物品已提交给本店,你的订单号为 "+
shop.getIndentNo() + "<br>请及时付款,以便我们发货!";
session.removeAttribute("shopcar");
}

该部分没有数据库部分的操作,主要就是把保存在session会话中的用户购物车数据删除,保证用户下次浏览购物车界面的时候,已经下定单的物品不再存在,所以这里使用了session的removeAttribute(String)方法。用户点击“提交我的购物车”功能按钮后,执行生成订单的操作,执行成功后显示界面如图9-8所示。

前面已经介绍过,当订单功能完成后,用户的购物车将被清空,用户可以通过相应的查看功能,跟踪自己订单的进度信息,以及自己在本次购物中所购买的物品列表详细信息。查看订单物品详细信息的界面,如图9-9所示。

图9-8  下定单完成

图9-9  查看订单的详细资料

【责任编辑:杜书 TEL:(010)68476606】

回书目   上一节   下一节
关于 JSP  JAVA
专题
Java实用开发全集
Java类的基础教程专题
Java发展动态专题
Java编程开发手册
Java基础教程
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
中国互联网大会2008
中国互联网大会2008
微软出价446亿美元收购雅虎
微软出价446亿美元收购雅虎
技术人求职简历完备手册
技术人求职简历完备手册
· 技术人求职简历完备手册
· 访问控制列表(ACL)介绍
· 隐私保护技术探讨
· Windows Server 2008专..
· 华为员工自杀频频拷问..
· 勇闯IT培训黑色围城
· CISSP认证成长之路
· 解析35岁技术人的价值..
· 网络工程师职业规划与..
· LAMP技术精解
· AMD Phenom三核处理器..
· 充电计划之热门IT认证..
· 如何有效防御SQL注入攻..
· 2008年上半年全国软考..
· 选择适合自己的IT认证
· IPv6协议--拓展网络无..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
· 专题:AIX操作系统管理..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册
· 专题:AIX操作系统管理..