安工大软件开发技术报告

安徽工业大学

软 件 开 发 技 术 报 告

安工大软件开发技术报告

课题名称

学 院

专业班级

组 长 成 员 指导教师

购物商城系统的设计与实现 工商学院 软件工程1041班 XXX XXX XXX XXX

二Ο一三 年 九 月 二十 日

摘 要

网页,购物商城,拍单,发货。

1

目录

1.绪 论......................................................................................................................................... 1

1.1 概述 ................................................................................................................................... 1

1.2 开发环境与工具介绍 ............................................................................................... 1

1.2.1 网上商城项目的研究状况 ................................................................................... 1

2.可行性研究 ................................................................................................................................. 2

2.1 技术可行性 ....................................................................................................................... 2

2.2 经济可行性 ....................................................................................................................... 2

2.3 操作可行性 ....................................................................................................................... 2

2.4 结论 ................................................................................................................................... 2

3.系统需求分析 ............................................................................................................................. 3

3.1 用户需求分析 ................................................................................................................... 3

3.1.1 用户需求 ............................................................................................................... 3

3.1.2 系统功能需求 ....................................................................................................... 3

3.1.3 系统性能需求 ....................................................................................................... 3

3.1.4 数据分析 ............................................................................................................... 3

3.2 系统E-R图 ....................................................................................................................... 3

4.系统设计 ..................................................................................................................................... 6

4.1 数据库逻辑结构设计 ....................................................................................................... 6

4.2 功能模块图及分模块功能描述 ....................................................................................... 6

4.2.1 系统的功能模块图 ............................................................................................... 8

4.2.2 系统功能模块简介 ............................................................................................... 9

5.系统实施 ................................................................................................................................... 10

5.1 建立数据库 ..................................................................................................................... 10

5.2 数据库连接 ..................................................................................................................... 11

5.3 主要模块实施 ................................................................................................................. 12

5.3.1 登录模块的业务开发 ......................................................................................... 12

5.3.2 管理员模块的业务开发 ..................................................................................... 14

5. 3. 3 订单模块的业务开发……………………………………………………………5

5.3.4 购物车模块的业务开发…………………………………………………………5

5.4 系统测试 ......................................................................................................................... 28

5.4.1 软件测试的对象 ................................................................................................. 28

5.4.2 软件测试的结果 ................................................................................................. 28

6.系统说明 ................................................................................................................................... 29

i

6.1 开发环境 ......................................................................................................................... 29

6.2 系统安装与配置 ............................................................................................................. 29

总 结 .............................................................................................................................................. 30

参考文献......................................................................................................................................... 31

ii

1 绪 论

1.1 概述

电子商务在当今已经不再是一种新兴产业,但是在早期由于网站企业的信誉度难以认证、网上交易的法律不健全、物流不发达等一系列原因,一定程度上制约了电子商务发展。进入21世纪以来,随着整个互联网的发展,限制电子商务的各种问题基本上都已经被解决,致使越来越多的企业进入电子商务的洪潮中,到目前为止,国内已经有近1000万的中小企业开始尝试通过互联网来增加对企业的影响力及销售额。传统的购物方式虽然仍处于市场的主导地位,但是这种方式并不具备便捷、随意、时尚等网络购物具有的优势,所以电子商务不仅正在以迅猛之势席卷整个网络,而且还为购物市场做了一次革命性的改变。

1.2 开发环境与工具介绍

此系统用到的软件如下:

Eclipse

MySQL数据库

Web应用服务器:Tomcat

1.2.2 网上商城项目的研究状况

随着社会的不断进步,网络的不断发展,越来越多的网上商城相继出现。列入亚马逊 网上书店,当当网,淘宝,京东等,现在的客户足不出户便可以购买商品,从而节约大量的时间。传统的商店存在许多弊端,最显著的就是商品种类少,经营成本高,相比之下,网上商城具有以下优势:商品种类多,信息量大;方便快捷;成本低;节约客户时间。网上购物,就是通过互联网检索商品信息,并通过电子订购发出购物请求,然后填上私人账号或信用卡,厂商通过邮购的方式发货,或者是通过快递的方式送货上门。

1

2 可行性研究

2.1 技术可行性

该系统必须包含顾客对商品的查询,购买,下订单,管理人员对商品的管理,对订单的管理,对管理员的管理,该系统采用Tomcat+MySQL,严格按照MVC的模式完成。网络应用基础设施完善,由于信息技术全面发展,网站的开发采用比较广泛的JSP+SQLServer数据库架构。

2.2 经济可行性

传统的销售方式是商家把商品放在商店里供消费者挑选,店

铺的规模和位置等客观因素影响着商店的客流量,并且商品的存放与销售需要人力进行管理,雇员的工资、店面的租金等又增加了成本,消费者也不能迅速找到自己需要的商品,而一个网络购物商城只需要一个存放商品的仓库,比租用一个店面节省很多,也不需要太多的人力来管理,更不会因为店面的面积影响客流量,客户足不出户就能够买到自己所需要的商品。

2.3 操作可行性

该项目需在三个礼拜时间内完成,由于前期只需要做出框架,实现简单的业务操作,因此只要我们做出详细的时间规划,可以完成该项目的开发。

2.4 结论

根据以上分析,技术上没问题,时间也充裕,而且还可以锻炼我们的实际操作动手能力,搞好团队内部的合作。

2

3 系统需求分析

3.1 用户需求分析

3.1.1 用户需求

统一友好的操作界面,保证系统的易用性,方便用户操作。

具备商品信息的展示功能,方便浏览者对商品信息进行浏览与比较。

规范的商品分类,方便浏览者分类查找商品。 完美的购物车功能与用户结账功能。 订单信息查询功能,商品信息查询功能。

全面的后台管理功能,以方便管理员对网站的信息进行更新与管理。

3.1.2 系统功能需求

客户端功能:用户的注册,修改,登录;商品的购买,搜索,查看;购物车里面商

品的删除与修改;然后就是订单的提交,以及收货人的信息。

后台功能:管理员的登录与修改密码;商品的增删改查;订单的管理;管理管理员。

3.1.3 系统性能需求

通过相关调查发现,在编写网上购物商城系统时,登陆者分为两种角色用户和管理员。用户在登陆进入该网上购物商城后,可以选择查看各种商品的详细信息并选择购买。此外,用户还能通过输入订单编号查看自己的详细订货信息。管理员登陆后,不仅可以查看商品销售情况,还可以管理会员、商品、仓库和其自身的信息。管理员可以根据实

际情况添加其他管理员以维护该网上购物商城的购物环境和安全。

3.1.4 数据分析

淘宝网——亚洲最大、最安全的网上交易平台,提供各类服饰、美容、家居、数码、话费/点卡充等等,与人们生活所需息息相关商品、服务。淘宝网现在业务跨越C2C(个人对个人)、B2C(商家对个人)两大部分。截止20xx年12月31日,淘宝网注册会员超9800万人,覆盖了中国绝大部分网购人群;20xx年交易额为999.6亿元,占中国网购市场80%的份额。淘宝网8月20日公布了截至20xx年6月30日的上半年业绩报告。报告显示,20xx年上半年淘宝实现交易额809亿元,逼近去年全年999.6亿成交。对比国家统计局公布的上半年社会消费品零售总额58711亿元。

3.2 系统E-R图

1)用户的E-R图

3

安工大软件开发技术报告

安工大软件开发技术报告

2)管理员E-R图

安工大软件开发技术报告

3)商品E-R图

4

安工大软件开发技术报告

4)订单E-R图

5

4 系统设计

4.1 数据库逻辑结构设计

(1)用户基本信息表:

用于记录用户的基本信息,其主要字段为用户名和密码,具体设计如下表所示。

安工大软件开发技术报告

建立本表的SQL语句如下。

Create table UserInfo (Uid int primary key,Uname varchar(50) not null,Upwd varchar(20) not null, Uemail varchar(100));

(2) 管理员基本信息表:

安工大软件开发技术报告

建立本表的SQL语句如下。

Create table AdminInfo(Aid int primary key,Aname varchar(50) not null,Apwd varchar(20) not null,Alevel varchar(10) defalut ‘普通’);

(3)商品基本信息表:

该表用于记录商品的基本信息,其具体实现如下表所示。

安工大软件开发技术报告

6

Create table GoodsInfo(Gid int primary key,Gname varchar(100) not null,Gprice double not nullxx,Gclass varchar(50)default ’杂货’,Gamount int not null,Gdate datetime,Gimgurl varchar(100) defalut ‘img/default.jpg’, Glook int defalut 0,Ginto text,Gbrief text);

(4)订单基本信息表:

该表用来记录用户所下订单的基本信息,包括收货人及订单的基本信息,其各字段的详细信息如下表。

安工大软件开发技术报告

安工大软件开发技术报告

建立本表的SQL语句如下。

Create table OrderInfo(Oid int primary key,Odate datetime not null,Aid int references AdminInfo(Aid),Ostate varchar(20),Orecname varchar(50) not null,Orecadr varchar(200) not null,Orecle varchar(20), Uid int references UserInfo(Uid),Ototalprice double);

(5) 订单明细表:

该表用来记录用户订单中物品的信息,包括商品的ID和商品的数量等。具体设计如下表。 建立本表的SQL语句如下。

Create table OrderGoods (OGid int primary key, Oid int not null references OrderInfo(Oid), Uid int not null references UserInfo(Uid),Gid int not null

7

安工大软件开发技术报告

references GoodsInfo(Gid),OGamount int not null, OGtotalprice double not null);

4.2 功能模块图及分模块功能描述

4.2.1 系统的功能模块图

1)购物商城用户功能模块图

2)购物商城管理员功能模块图

安工大软件开发技术报告

8

4.2.2 系统功能模块简介

用户打开网页之后,首先是登录自己的个人账号,如果没有,可以注册,登录之后,用户也可以修改自己的个人注册信息。然后就是用户浏览商品,选择自己想要买的,然后加入购物车,在购物车里面,用户可以修好购买商品的数量,也可以删除商品,然后就是点击结算,提交订单,这里要填写自己收货人的地址,然后确认信息,提交订单信息交给管理员。 管理员登陆之后,首先可以管理自己的商品,可以添加商品,删除商品,修改商品信息,等等。其次就是可以查看订单,管理订单,确认发货和删除订单也可以查看发送状态,是否发货。还有一个管理员功能,就是管理管理员,有一个超级管理员,可以管理一般的管理员,重置密码等。 以上就是该系统的功能简介。

安工大软件开发技术报告

9

5 系统实施

5.1 建立数据库

1)创建数据库 Create database shopping; Use shopping;

2)管理员信息表

create table AdminInfo

(

Aid int primary key,

Aname varchar(50) not null,

Apwd varchar(20) not null,

Alevel varchar(10) default '普通' );

3)商品信息表

create table GoodsInfo

(

Gid int primary key,

Gname varchar(100) not null,

Gprice double not null,

Gclass varchar(50) default '杂货', Gamount int not null,

Gdate Datetime,

Gimgurl varchar(100) default 'img/default.jpg', Glook int default 0,

Gintro text,

Gbrief text

);

4)物品排序表

create table OrderGoods

(

OGid int primary key,

Oid int not null references OrderInfo(Oid), Uid int not null references UserInfo(Uid), Gid int not null references GoodsInfo(Gid), OGamount int not null,

10

OGtotalprice double not null

);

5)排序信息表

create table OrderInfo

(

Oid int primary key,

Odate Datetime not null,

Aid int references AdminInfo(Aid),

Ostate varchar(20),

Orecname varchar(50) not null,

Orecadr varchar(200) not null,

Orectel varchar(20),

Uid int references UserInfo(Uid),

Ototalprice double

);

6)用户信息表

create table UserInfo

(

Uid int primary key,

Uname varchar(50) not null,

Upwd varchar(20) not null,

Uemail varchar(100)

);

5.2 数据库连接

安工大软件开发技术报告

1) 在Tomcat安装目录下conf目录下server.xml中最后的“</Host>”标记之前添加

如下配置:

<Context path="/mycart" docBase="mycart"

debug="5" reloadable="true" crossContext="true" workDir=""> <Resource name="jdbc/cartds"

auth="Container"

type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="root" password=""

driverClassName="org.gjt.mm.mysql.Driver"

11

url="jdbc:mysql://localhost/shopping"/>

</Context>

2)在本应用的WEB-INF目录下web.xml文件中添加如下配置

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/cartds</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

5.3 主要模块实施

5.3.1 登录模块的业务处理开发

1)登录部分

if(action.equals("login"))

{//当动作为登录动作时

} //获得用户名和密码 String uid = request.getParameter("uid").trim(); String pwd = request.getParameter("pwd").trim(); String uname = new String(uid.getBytes(),"ISO-8859-1"); String sql = "select Uid from UserInfo where Uname='"+uname+"' and boolean flag = DBcart.isLegal(sql); if(flag) {//当该用户存在时 } else { } String msg = "对不起,登录失败,请重新登录!!!"; pageForward(msg,request,response); //将用户名存入session中 session.setAttribute("user",uid); //页面重定向到首页 response.sendRedirect("index.jsp"); Upwd='"+pwd+"'";

2)注册部分

else if(action.equals("register"))

{//用户注册

String uname = request.getParameter("uname").trim();

12

"+

String fpwd = request.getParameter("fpwd").trim(); String email = request.getParameter("email").trim(); String sql = "select Uid from UserInfo where Uname='"+uname+"'"; boolean flag = DBcart.isLegal(sql); if(flag) {//该用户名已经被注册时 } else { int uid = DBcart.getID("UserInfo","Uid"); //将编码gb2312转码为ISO-8859-1 uname = new String(uname.getBytes(),"ISO-8859-1"); fpwd = new String(fpwd.getBytes(),"ISO-8859-1"); //插入用户注册信息 String temp = "insert into UserInfo(Uid,Uname,Upwd,Uemail) int i = DBcart.updateTable(temp); if(i==0) {//没有插入数据库 String msg = "对不起,注册失败,请重新注册!!!"; pageForward(msg,request,response); } else { } String msg = "恭喜您,注册成功!!!"; pageForward(msg,request,response); String msg = "对不起,该用户名已经存在,请重新注册!!!"; pageForward(msg,request,response); "values("+uid+",'"+uname+"','"+fpwd+"','"+email+"')";

}

}

3)用户修改个人信息

else if(action.equals("uinfomodify"))

{//用户修改个人信息

//得到用户修改后的信息 String upwd = request.getParameter("upwd").trim(); String uemail = request.getParameter("uemail").trim(); String uname = (String)session.getAttribute("user"); //将汉字转码 uname = new String(uname.getBytes(),"ISO-8859-1");

13

} //更新数据库用户信息 String sql = "update UserInfo set upwd='"+upwd +"',uemail='"+uemail+"' where uname='"+uname+"'"; int i = DBcart.updateTable(sql); if(i==0) {//更改信息失败 } else {//信息修改成功 } String msg = "恭喜您,信息修改成功!!!"; pageForward(msg,request,response); String msg = "对不起,信息修改失败!!!"; pageForward(msg,request,response);

5.3.2 管理员模块的业务处理开发

1)登录部分

if(action.equals("login")) {//管理员登陆时

} //得到登陆的用户名和密码 String apwd = request.getParameter("apwd").trim(); String aname = request.getParameter("aname").trim(); String sql = "select Aid from AdminInfo where Aname='"+ aname+"' and Apwd='"+apwd+"'"; sql = new String(sql.getBytes(),"ISO-8859-1"); //判断该用户是否正确 boolean flag = DBcart.isLegal(sql); if(flag) {//管理员登陆成功 session.setAttribute("admin",aname); } else {//登陆失败 } String msg = "对不起,登陆失败,请重新登陆!!!"; String url = "/error.jsp"; pageForward(msg,url,request,response); response.sendRedirect("adminindex.jsp");

2)商品管理部分

14

else if(action.equals("goodsManage"))

{//管理商品时

//得到要修改或删除商品的ID String gid = request.getParameter("gid").trim(); String sql = "select "Gintro,Gbrief from GoodsInfo where Gid,Gname,Gprice,Gamount,Gclass,Gdate,Gimgurl,"+ Gid="+Integer.parseInt(gid); //得到该商品的信息 Vector<String[]> vgoods = DBcart.getInfoArr(sql); request.setAttribute("vgoods",vgoods); ServletContext sc = getServletContext(); RequestDispatcher rd = rd.forward(request,response); sc.getRequestDispatcher("/modifygoods.jsp");

}

else if(action.equals("addgoods"))

{//增加商品

//接受新添加商品的各个属性 String gname = request.getParameter("gname").trim(); String gprice = request.getParameter("gprice").trim(); String gamount = request.getParameter("gamount").trim(); String gclass = request.getParameter("gclass").trim(); String gurl = request.getParameter("gurl").trim(); String gintro = request.getParameter("gintro").trim(); String gbrief = request.getParameter("gbrief").trim(); int gid = DBcart.getID("GoodsInfo","Gid"); String sql = ""; if(!gclass.equals("")&&!gurl.equals("")) {//均输入商品类别和图片URL //组合成sql语句 sql = "insert into GoodsInfo(Gid,Gname,Gprice,"+ "','"+gurl+"','"+gintro+"','"+gbrief+"')"; "

} "Gamount,Gdate,Gclass,Gimgurl,Gintro,Gbrief)"+ values("+gid+",'"+gname+"',"+Double.parseDouble(gprice)+ ","+Integer.parseInt(gamount)+",now(),'"+gclass+

else if(!gclass.equals("")&&gurl.equals("")) {//输入商品类别,但图片URL没有输入

sql = "insert into GoodsInfo(Gid,Gname,Gprice,"+

15

} "Gamount,Gdate,Gclass,Gintro,Gbrief)"+ " values("+gid+",'"+gname+"',"+Double.parseDouble(gprice)+ ","+Integer.parseInt(gamount)+",now(),'"+gclass+ "','"+gintro+"','"+gbrief+"')";

else if(gclass.equals("")&&!gurl.equals("")) {//输入图片URL,但没有商品类别

sql = "insert into GoodsInfo(Gid,Gname,Gprice,"+

}

else "Gamount,Gdate,Gimgurl,Gintro,Gbrief)"+ " ","+Integer.parseInt(gamount)+",now(),'"+ gurl+"','"+gintro+"','"+gbrief+"')"; values("+gid+",'"+gname+"',"+Double.parseDouble(gprice)+

{//商品类别和图片URL均没有输入

sql = "insert into GoodsInfo(Gid,Gname,Gprice,"+

;

}

else if(action.equals("modify"))

{//修改商品信息

//接受修改后商品的各个属性值 String gid = request.getParameter("gid").trim(); } //将gb2312转码为iso-8859-1并更新数据库 sql = new String(sql.getBytes(),"ISO-8859-1"); int i = DBcart.updateTable(sql); String msg = ""; if(i==1) { msg = "恭喜您,商品添加成功!!!"; } else { msg = "对不起,商品添加失败!!!"; } pageForward(msg,"/error.jsp",request,response); "Gamount,Gdate,Gintro,Gbrief)"+ " values("+gid+",'"+gname+"',"+Double.parseDouble(gprice)+ ","+Integer.parseInt(gamount)+",now(),'"+gintro+"','"+gbrief+"')"

16

} String gname = request.getParameter("gname").trim(); String gprice = request.getParameter("gprice").trim(); String gamount = request.getParameter("gamount").trim(); String gclass = request.getParameter("gclass").trim(); String gdate = request.getParameter("gdate").trim(); String gurl = request.getParameter("gurl").trim(); String gintro = request.getParameter("gintro").trim(); String gbrief = request.getParameter("gbrief").trim(); //将字符串转换为数值型 int id = Integer.parseInt(gid); double price = Double.parseDouble(gprice); int amount = Integer.parseInt(gamount); //得到要更新的Sql语句 String sql = "update GoodsInfo set gname=\""+gname+"\","+ "gintro='"+gintro+"',gbrief='"+gbrief+"' where "gprice="+price+",gamount="+amount+",gclass='"+ gclass+"',gdate='"+gdate+"',gimgurl='"+gurl+"',"+ gid="+id; //将sql转码,并执行更新 sql = new String(sql.getBytes(),"ISO-8859-1"); int i = DBcart.updateTable(sql); String msg = ""; if(i==1) { msg = "恭喜您,商品修改成功!!!"; } else { msg = "对不起,商品修改失败!!!"; } pageForward(msg,"/error.jsp",request,response);

else if(action.equals("delete")) {//删除商品

//得到要删除商品的ID String gid = request.getParameter("gid"); //将ID转换为数值型 int id = Integer.parseInt(gid); //当删除商品时,只将该商品数量置为0 String sql = "update GoodsInfo set gamount=0 where Gid="+id; int i = DBcart.updateTable(sql); String msg = ""; if(i==1)

17

} { msg = "恭喜您,商品修改成功!!!"; } else { msg = "对不起,商品修改失败!!!"; } pageForward(msg,"/error.jsp",request,response);

5.3.3 订单模块的业务处理开发

1)用户订单业务

else if(action.equals("saveRec"))

{//保存收货人信息放入session

}

else if(action.equals("recModify"))

{//用户修改收货人信息时

String recname = request.getParameter("recname").trim();

String recadr = request.getParameter("recadr").trim(); String rectel = request.getParameter("rectel").trim(); String[] recMsg = (String[])session.getAttribute("recMsg"); //当收货人信息为空时 if(recMsg==null) { } else {

//修改session里面收货人的信息

recMsg[0] = recname;

recMsg[1] = recadr; //重定向到首页 response.sendRedirect("index.jsp"); //收到各参数 String recname = request.getParameter("recname"); String recadr = request.getParameter("recadr"); String rectel = request.getParameter("rectel"); String[] recMsg = new String[3]; recMsg[0] = recname.trim(); recMsg[1] = recadr.trim(); recMsg[2] = rectel.trim(); //放入session并重定向到订单页 session.setAttribute("recMsg",recMsg); response.sendRedirect("order.jsp");

18

} recMsg[2] = rectel; session.setAttribute("recMsg",recMsg); response.sendRedirect("order.jsp");

}

else if(action.equals("orderConfirm"))

{//当用户确认订单动作时

CartBean mycart = (CartBean)session.getAttribute("mycart"); //该对象为空,则返回首页

if(mycart==null)

{ response.sendRedirect("index.jsp"); } else { //得到向订单基本信息表中插入数据的sql String[] recMsg = (String[])session.getAttribute("recMsg"); double oprice = mycart.getAccount(); int oid = DBcart.getID("OrderInfo","Oid"); String uname = (String)session.getAttribute("user"); String sql = "select Uid from UserInfo where int uid = DBcart.getSelectId(sql); String upsql = "insert into "Orecadr,Orectel,Uid,Ototalprice) values("+oid+ Uname='"+uname+"'"; OrderInfo(Oid,Odate,Ostate,Orecname,"+ ",now(),'未发货

','"+recMsg[0]+"','"+recMsg[1]+"','"+

recMsg[2]+"',"+uid+","+oprice+")"; //得到向订单货物表中插入数据的sql Vector<String[]> vgoods = mycart.getCartContent(); int ogid = DBcart.getID("OrderGoods","OGid"); String[] sqlarr = new String[vgoods.size()+1]; for(int i=0;i<vgoods.size();i++) { String[] ginfo = vgoods.get(i); int gid = Integer.parseInt(ginfo[3]); int gamount = Integer.parseInt(ginfo[2]); double gprice = Double.parseDouble(ginfo[1]); double totalprice = gprice*gamount; String temp = "insert into "OGtotalprice) OrderGoods(OGid,Oid,Uid,Gid,OGamount,"+

19

values("+ogid+","+oid+","+uid+","+gid+

} } sqlarr[vgoods.size()] = upsql; //执行该事务 boolean flag = DBcart.batchSql(sqlarr); String msg = ""; if(!flag) { msg = "对不起,订单提交失败"; } else { msg = "恭喜你,订单提交成功"; } //将收货人信息和javaBean对象设为空 session.setAttribute("recMsg",null); session.setAttribute("mycart",null); pageForward(msg,request,response); ","+gamount+","+totalprice+")"; sqlarr[i] = temp; ogid++;

}

2)管理员订单业务

else if(action.equals("orderPageChange")) {//订单换页时

//得到javaBean对象 AdminBean adBean = (AdminBean)session.getAttribute("adBean"); if(adBean==null) { } //接受参数 String curPage = request.getParameter("curPage"); String selPage = request.getParameter("selPage"); //设置当前页记录条数为10 DBcart.setSpan(10); if(curPage!=null) {//用户通过点击上,下一页按钮时 int page = Integer.parseInt(curPage.trim()); } //记住当前页 adBean.setCurPage(page); adBean = new AdminBean();

20

else {//当用户点击下拉列表框时 int page = Integer.parseInt(selPage.trim()); } //得到当前换页所执行的sql String sql = adBean.getSql(); //得到换页后页面的内容 Vector<String[]> vorder = request.setAttribute("vorder",vorder); adBean.setCurPage(page); DBcart.getPageContent(adBean.getCurPage(),sql);

session.setAttribute("adBean",adBean); //恢复记录跨度为2 DBcart.setSpan(2); //forward到修改的主页面 String url = "/ordermanage.jsp"; ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request,response);

}

else if(action.equals("orderSearch"))

{//订单搜索

//得到javaBean对象 AdminBean adBean = (AdminBean)session.getAttribute("adBean"); if(adBean==null) { } String txtsearch = request.getParameter("txtsearch"); String type = request.getParameter("type"); String sql = ""; //将每页记录数定为10 DBcart.setSpan(10); adBean.setCurPage(1); if(txtsearch!=null) adBean = new AdminBean();

{//用户在文本框中输入内容搜索

int oid = Integer.parseInt(txtsearch.trim());

sql = "select Oid,Uname,Odate,Ostate from " where Oid="+oid+" and OrderInfo,UserInfo"+ OrderInfo.Uid=UserInfo.Uid"; adBean.setSql(sql); //设置总页数 adBean.setTotalPage(1);

21

} else { String sqlpage = ""; if(type.trim().equals("all")) {//查询所有定单 sql = "select Oid,Uname,Odate,Ostate from } else if(type.trim().equals("yes")) {//查询所有已发货定单 sql = "select Oid,Uname,Odate,Ostate from " where OrderInfo.Uid=UserInfo.Uid"; OrderInfo,UserInfo"+ sqlpage = "select count(*) from OrderInfo"; OrderInfo,UserInfo"+

" where Ostate='已发货' and

OrderInfo.Uid=UserInfo.Uid order by Oid";

sqlpage = "select count(*) from OrderInfo where Ostate='已发货'";

}

else if(type.trim().equals("no")) {//查询所有未发货定单 sql = "select Oid,Uname,Odate,Ostate from OrderInfo,UserInfo"+

" where Ostate='未发货' and

OrderInfo.Uid=UserInfo.Uid order by Oid";

sqlpage = "select count(*) from OrderInfo where Ostate='未发货'";

}

//转码 sqlpage = new String(sqlpage.getBytes(),"ISO-8859-1");

}

session.setAttribute("adBean",adBean);

//得到第一页的内容

Vector<String[]> vorder = DBcart.getPageContent(1,sql);

DBcart.setSpan(2);

if(vorder.size()==0)

{//没有搜索到用户要找的商品

String msg = "对不起,没有搜到你要查询的定单!!!"; sql = new String(sql.getBytes(),"ISO-8859-1"); int totalpage = DBcart.getTotalPage(sqlpage); adBean.setSql(sql); //记住当前总页数 adBean.setTotalPage(totalpage);

22

} String url = "/error.jsp"; pageForward(msg,url,request,response); else {//搜索到信息并返回 request.setAttribute("vorder",vorder);

} String url = "/ordermanage.jsp"; ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request,response);

}

else if(action.equals("ordermanage"))

{//点击查看/管理时

String oid = request.getParameter("oid").trim();

int id = Integer.parseInt(oid); //得到订单的基本信息 String osql = "select Orecname,Orecadr,Orectel,Odate,Ostate,Oid " where Oid="+id; from OrderInfo"+ Vector<String[]> vorderinfo = DBcart.getInfoArr(osql); //得到订单中货物信息 String ogsql = "select Gname,OGamount,OGtotalprice from "OrderGoods where " and Oid="+id; GoodsInfo,"+ GoodsInfo.Gid=OrderGoods.Gid"+ Vector<String[]> vordergoods = DBcart.getInfoArr(ogsql); request.setAttribute("vorderinfo",vorderinfo); request.setAttribute("vordergoods",vordergoods); String url = "/ordermodify.jsp"; ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request,response);

}

else if(action.equals("orderEnsure"))

{//某订单确认时

String oid = request.getParameter("oid");

int id = Integer.parseInt(oid); String aname = (String)session.getAttribute("admin"); int aid = DBcart.getSelectId("select Aid from AdminInfo where

Aname='"+aname+"'");

String sql = "update OrderInfo set Aid="+aid+",Ostate='已发货' where Oid="+id;

23

} String temp = "select Gid,OGamount from OrderGoods where Oid="+id; Vector<String[]> vtemp = DBcart.getInfoArr(temp); String[] str = new String[vtemp.size()+1]; for(int i=0;i<vtemp.size();i++) { } str[vtemp.size()] = sql; boolean flag = DBcart.batchSql(str); String msg = ""; if(flag) { msg = "恭喜您,订单确定成功!!!"; } else { msg = "对不起,订单确定失败!!!"; } pageForward(msg,"/error.jsp",request,response); String[] arr = vtemp.get(i); str[i] = "update GoodsInfo set Gamount=Gamount-"+ Integer.parseInt(arr[1])+" where Gid="+arr[0];

else if(action.equals("orderDelete")) {//删除某订单时

String oid = request.getParameter("oid");

}

int id = Integer.parseInt(oid); String[] str = new String[2]; str[0] = "delete from OrderGoods where Oid="+id; str[1] = "delete from OrderInfo where Oid="+id; boolean flag = DBcart.batchSql(str); String msg = ""; if(flag) { msg = "恭喜您,订单删除成功!!!"; } else { msg = "对不起,订单删除失败!!!"; } pageForward(msg,"/error.jsp",request,response);

5.3.4购物车模块的业务开发

24

else if(action.equals("buy"))

{//用户点击购买时

CartBean mycart = (CartBean)session.getAttribute("mycart");

if(mycart==null) { } mycart = new CartBean();

//得到要购买东西的ID

String gid = request.getParameter("gid").trim();

//判断是在那儿点的购买,0-在缩略图中买,1-在详细信息中买的 String flag = request.getParameter("flag").trim(); mycart.buy(gid); //得到搜索当前内容的sql String sql = mycart.getSql(); int page = mycart.getCurPage(); session.setAttribute("mycart",mycart);

String url = ""; if(flag.equals("0")) { } else { } url = "/goodsdetail.jsp"; sql = "select Gimgurl,Gname,Gintro,Gclass,Gprice,"+ "Glook,Gid,Gbrief from GoodsInfo where Gid="+gid; url = "/index.jsp";

page = 1; //返回后,得到页面内容 Vector<String[]> vgoods = DBcart.getPageContent(page,sql); if(vgoods.size()==0) {//没有搜索到用户要找的商品 } request.setAttribute("vgoods",vgoods); //forward到要去的页面 ServletContext sc = getServletContext(); String msg = "对不起,没有搜到你要的商品11xxxxxxxxxxxx11!!!"; pageForward(msg,request,response);

25

RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request,response);

}

else if(action.equals("changeNum"))

{//用户修改购物车中商品数量时

//得到修改物品的ID和修改后的数量 String gnum = request.getParameter("gnum").trim(); String gid = request.getParameter("gid").trim(); int num = 0; try { } catch(Exception e) { } int id = Integer.parseInt(gid); //得到库存数量 String sql = "select Gamount from GoodsInfo where Gid="+id; int count = DBcart.getSelectId(sql); if(count<num) {//当库存少于修改的值时 } else String msg = "对不起,库存不够,库存数量只有 "+count; pageForward(msg,request,response); //修改的数量不合法时 String msg = "对不起,数量修改错误!!!"; pageForward(msg,request,response); num = Integer.parseInt(gnum);

{//当库存够时

CartBean mycart = (CartBean)session.getAttribute("mycart");

} if(mycart==null) { } //得到用户的购物车 Map<String,Integer> cart = mycart.getCart(); //修改商品数量 cart.put(gid,num); session.setAttribute("mycart",mycart); response.sendRedirect("cart.jsp"); mycart = new CartBean();

}

else if(action.equals("balance"))

26

{//当点击结算时,判断各商品数量是否够

CartBean mycart = (CartBean)session.getAttribute("mycart");

if(mycart==null) { } //得到用户的购物车 Map<String,Integer> cart = mycart.getCart(); Set<String> gid = cart.keySet(); String msg = ""; for(String str:gid) { //得到商品ID和数量 int id = Integer.parseInt(str); int count = cart.get(str);

//得到库存里商品的数量

String sql = "select Gamount from GoodsInfo where Gid="+id;

{

//得到该商品的名字 String temp = "select Gname from GoodsInfo where Gid="+id; Vector<String> vname = DBcart.getInfo(temp); String name = vname.get(0); int gamount = DBcart.getSelectId(sql); if(gamount<count) mycart = new CartBean();

}

} msg += "对不起,"+name+"的库存只有"+gamount+"<br/>"; } if(msg.equals("")) {//当msg为空时,代表库存够 response.sendRedirect("receiverinfo.jsp"); } else {//提示用户库存不够 pageForward(msg,request,response); }

else if(action.equals("delete"))

{//用户删除购物车中的商品时

//得到删除商品的ID String gid = request.getParameter("gid").trim(); //得到javaBean对象 CartBean mycart = (CartBean)session.getAttribute("mycart"); if(mycart==null) {

27

} } mycart = new CartBean(); mycart.removeItem(gid); session.setAttribute("mycart",mycart); response.sendRedirect("cart.jsp");

5.4 系统测试

5.4.1 软件测试的对象

1:用户功能:注册,修改,登录 2:购物车功能:修改,删除,结账 3:商品管理:查询,添加,修改,删除 4:订单管理:查找,删除订单 5:管理员:添加,删除,查看,重置密码

5.4.2 软件测试的结果

经过测试,以上测试对象均可正常运行,没有出现bug。

28

6 系统说明

6.1 开发环境

本系统的是在.NET平台下开发的,系统的后台数据库为SQL Server;因此在使用本系统前,应先安装.NET框架和SQL Server 2005数据库,否则该系统无法运行。

6.2 系统安装与配置

系统的原文件直接复制到机器上后,在数据库管理系统上建立一个名为Design的数据库后,系统便可以运行。

29

总 结

至此,网上商城购物系统的开发已全部完毕,在开发过程中用到了很多开发技巧以及重要知识点,下面对这些技巧及知识点进行介绍。

(1)Form 表单的应用:Form表单实现了系统与用户之间的交互,本系统中多处用到了Form表单,如用户的登录、注册,商品的添加、搜索灯。其中最重要的是对hidden类型的使用,其实现了Servlet端动作的传递。

(2)Table 的应用:在本系统中,基本上每个页面都使用了Table,对Table的灵活运用,可以是页面变得绚丽多彩。

(3)Javascript中正则表达式的应用:当用户填写完信息,在向服务器端提交前,首先要进行本地验证,其中最重要的是要学会对正则表达式的使用,其可以对用户输入的信息按某种规定的格式进行匹配。

(4)Map的应用:在用户的整个购物过程中,Map担当着购物车的角色。在本系统中利用Map键值对应的特点,可以记住用户所购买的商品及数量,其中键对应所买商品的ID,值对应商品的数量。合理的使用Map,可以大大简化开打过程。

(5)数据源的应用:本系统中对数据库的连接使用了数据源连接池。这样不必每次在进行数据库连接时进行驱动的加载,只需从连接池中借一个连接,当用完后关闭即可,提高了系统的性能。

(6)分页功能的应用:当进行商品或订单显示时,若记录数太多,会占用服务器大量内存,运行速度缓慢,而且使显示页面不太友好。因此,需要将搜索出的结果集中的记录分为多个页面显示出来。

(7)结果集元数据的应用:结果集的元数据中包含了结果集中各个字段的信息,包括字段的名称、标题、列数等信息。在开发过程中合理的使用元数据,可以提升开发效率,实现代码复用。

MVC模式的使用:MVC模式的使用,实现了表示层于业务层的分离,使程序的扩展性、可重用性大大提高。在MVC模式中,各层之间分工明确,JSP只实现页面的表示,Servlet对JSP页面传递过来的动作进行处理,JavaBean对业务功能进行处理。

30

参考文献

[1] 江北. 场论. 北京: 科学技术出版社, 20xx年2月.

[2] JAVA项目案列开发 北京:电子工业出版社,20xx年7月。

31

相关推荐