基于设计模式的电子商城设计与实现
2017-03-17肖卓宇陈俊旭杨鑫维杨邦平
肖卓宇++陈俊旭++杨鑫维++杨邦平++胡振涛
摘要:该文构建了基于B/S架构的电子商城信息系统,通过对客户调研获取了详细的用户需求,以此为基础逐步对系统功能进行细化,并对电子商城系统的功能模块进行了划分,进而挖掘了模块之间的联系,通过对概要设计与详细设计的实施方案进行了多轮验证,最后使用面向对象的Java语言与SQL Server数据库实现了系统,经过多阶段测试,最终获得了用户的认可,项目取得了较好的效果。
关键词:程序设计能力;设计模式;B/S;MVC; SQLserver;B2C
中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2016)32-0285-04
电子商务是基于internet、以线上交易的用户与商家为基础、以电子货币的形式对购买商品进行支付与结算,这种新型方式有助于将客户与商家紧密地联系起来,并可快速及时了解客户需求,也有助于线上商家在互联网上针对性地选择最优供应商,甚至融入全球范围内产品销售[1]。电子商城为方便用户进行在线购物,提供一种可交互的网络在线购物平台,通过对电子商务网站的研发,从而实现对传统零售业的信息化监控与管理,电子商城网站是一种典型的B2C模式,主要包括如下模块:网上订货、购物、商品目录、用户注册、商品查询等[2]。
在对国内外相关工作进行研究后,设计实现一个基于设计模式的B/S的在电子商城。鉴于项目组先前工作的相关性[3-7]。设计模式技术在项目得到了充分的应用。
在开发该系统前需进行相关的准备工作,用户可通过Internet登录商城,浏览商品的信息,查看商品详细情况。并将感兴趣的产品加入购物车,如果决定购买可以直接下单,之后需要填写联系方式,收货地址和运送方式等信息,最后提交订单。管理员登录后台后可以对商品信息进行增加、删除与修改,对新闻公告模块进行添加、修改和删除;对友情链接模块也可进行添加、修改和删除;管理注册用户信息;管理商品订单,修改发货的状态。该系统将实现用户登录,购物车、新闻公告、注册、商品浏览、商品导航、下订单(模拟实现)等。
1 相关技术
1.1 MyEclipse
MyEclipse 是一款优秀的用于开发的Java运行环境,MyEclipse功能强大,可与众多技术兼容,特别对于开源产品的支持获得较好的效果[8]。MyEclipse目前支持Spring,AJAX,JSP,Servlet,Struts2,Java,Hibernate,EJB3等,JDBC数据库连接工具等多种技术。可以认为MyEclipse几乎包括了目前所有主流开源产品的专属eclipse开发工具。
1.2 SQL Server数据库
SQL Server 是Microsoft公司研发的一款关系数据库管理系统。最初是由Sybase等三家公司共同研发的,并于上世纪80年代推出其第一个OS/2 版本。在Microsoft公司的Windows 系列操作系统推出后,Sybase 公司于Microsoft公司与在SQL Server 的研發上出现了分歧,此后Microsoft 将SQL Server 移植到Windows NT操作系统上,并专注于开发推广SQL Server 的Windows NT 版本[9]。
Microsoft SQL Server 2005 是一类主流的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。Microsoft SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
1.3 MVC模式
MVC是一种软件架构设计的思想,将软件的组成部分划分成如下三个不同的层次:
1)Model(模型)
用来封装业务逻辑(业务逻辑指的是对业务数据的处理过程以及为保证处理能够正常执行的一些基础服务,比如事务、安全、日志等等,封装指的是模型应该提供接口,调用者使用接口来调用模型的功能)[10]。
2)View(视图)
表示逻辑的实现(视图要对模型处理后,所返回的数据提供恰当的表现形式,此外,也需提供用户操作的界面)。
3)Controller(控制器)
将模型与视图进行耦合。即视图发出的请求先交由控制器来处理,控制器会根据请求选择恰当的模型来对请求进行处理,并依据模型返回的结果选择合适的视图,从而生成相应的界面返回给用户。MVC最初的设计目的是为了让一个模型可以被多个不同的视图共享[11]。
图1 MVC流程图
2 系统设计
2.1 系统用例图
图2 前台流程
普通用户可以进行注册,登录。登录的时候要输入正确的密码以及验证码,然后进入商品浏览页面,可以点击商品进入商品详细页面点击加入购物车。进入购物车,增加购买商品的数量,删除商品,以及清空购物车。点击提交我的订单,进入收货地址页面。
图3 后台流程
2.2 系统功能图
系统前台功能主要分为5个主要模块:商品展示、购物车、订单、公告等,如图4所示:
图4 前台功能
后台涉及商品管理,会员管理,公告管理等模块,详见图5:
3 系统实现
3.1 目录图
系统配置图如图6所示:
图6 相关文件配置目录图
3.2 表关系图
本系统采用的是SQL Server2005数据库,SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,Microsoft SQL Server, Access等都采用了SQL语言标准。如下是根据用户需求设定的表结构,以及简单的说明。系统涉及的主要表关系如图7、图8所示:
图7 部分表关系图
图8 后台表关系图
4 系统实现
注册界面由用户名输入框、密码输入框、密码确认框组成和“提交注册信息”按钮组成,这些组件都包含在表单中,如图9所示。
主要源程序:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
Member member = new com.entity.Member(name, password);
member.setName(name);
member.setPassword(password);
System.out.println(member.getName());
if(ShoppingFactory.getMemberDAOImplInstance().addMember(member)){
request.getSession().setAttribute("member", member);
response.sendRedirect("chat/login.jsp"); }
else{
response.sendRedirect("chat/register1.jsp");}}
图9 注册界面
图10 商品浏览页面
部分源程序:
public class Cart extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获得购买物品的Id
String id = request.getParameter("id");
//调添加到购物车的方法addgwc()
addgwc(request, response, id);
// request.getSession().setAttribute("method", method);
// 跳转地址cart.jsp
String path = "cart.jsp";
response.sendRedirect(path);
}
// 添加到购物车
private void addgwc(HttpServletRequest request,
HttpServletResponse response, String id) throws ServletException, IOException {
//获得购物车shoppinglist里的购物记录
ArrayList
//通过Id(商品编号)获得此条商品的具体信息
Goods good = ShoppingFactory.getGoodsDAOImplInstance().selectGoodsById(id);
//定义boolean型的flag,用来标识是否此条商品购物车里是否存在(默认flag为false(不存在相同记录))
boolean flag=false;
//如果購物车为空
if (shoppinglist == null) {
//则new一个Arraylist,用来装购物清单
shoppinglist = new ArrayList
//添加此条购物记录
shoppinglist.add(good);
} else {
//如果存在shoppinglist,则遍历里面的购物记录
for (Goods goods : shoppinglist) {
//如果存在相同的购物物品(商品编号相同),则数量+1,并把flag赋值为真(表示存在相同记录)
if(goods.getId()==Integer.parseInt(id)){
goods.setQuantity(goods.getQuantity()+1);
flag=true;
}}
//如果不存在相同记录,则添加此条商品
if(!flag){
shoppinglist.add(good);
}}
//将购物车存放到session
request.getSession().setAttribute("shoppinglist", shoppinglist);
//调count()方法,统计购物总金额
double money=count(request, response);
//设置double型的总金额money的格式。保留到小数点后两位
DecimalFormat df = new DecimalFormat("#.##");
//将总金额存放到session
request.getSession().setAttribute("money",df.format(money));
}
public Double count(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//获得购物车shoppinglist里的购物记录
ArrayList
//定义一个money。用来存放总金额
double money=0;
//循环遍历每一个购物车的购买记录
for (Goods goods : shoppinglist) {
//总金额=之前的金额+此条商品的free价格*数量
money=money+goods.getFreePrice()*goods.getQuantity();
}
return money;
}}
5 结论
电子购物系统目前取得一定的成效,并初步进行了运营,在今后的工作中将针对用户个性化需求新增新的模块,同时完善现有功能,以期待系统达到更好的使用效果。
参考文献:
[1] 方志远, 许肖生. 电子商务技术[M]. 北京: 中国社会科学出版社, 2004.
[2] 崔红娟. 网上书店建设分析[J]. 农业图书情报学刊, 2005(11).
[3] 肖卓宇, 黎妍, 何锫, 陈俊旭. 基于矩阵积分评估的设计模式检测研究[J]. 小型微型计算机系统, 2016,37(7).
[4] 肖卓宇, 何锫, 余波, 黎妍, 杨鑫维. 一种形式化上下无关文法关系驱动的设计模式检测方法[J]. 工程科学学报, 2016,38(10).
[5] 肖卓宇, 何锫, 余波, 黎妍, 胡振涛. 基于FCA与CBR的设计模式检测[J]. 山东大学学报(工学报), 2016,46(2).
[6] 肖卓宇, 何锫, 黎妍. 基于设计模式角色的附加关系检测研究[J]. 计算机应用研究, 2015, 32(7).
[7] 肖卓宇, 何锫, 黎妍. 基于DPS 表达式类图的设计模式检测[J]. 计算机工程与设计, 2015, 36(10).
[8] 邹竹彪. JSP网络编程从入门到精通[M]. 北京: 清华大学出版社, 2007.
[9] 辛峰. 基于JSP的网上购物系统设计与实现[J]. 哈尔滨职业技术学院报, 2010,14(1).
[10] 李赤林, 王琳. Model-View-Controller设计模式实例研究[J]. 计算机与现代化, 2003,19(3).
[11] 肖卓宇, 何锫. 设计模式在系统集成中的应用与研究[J]. 计算机工程与设计, 2007,28(17).