APP下载

基于SSH框架的B2C网上书店系统

2014-05-09

网络安全技术与应用 2014年1期
关键词:数据模型开店数据流

张 蕾

(河西学院信息技术中心 甘肃 734000)

0 引言

网上书店系统目前主要是以B2C的方式进行经营,向读者出售书籍。本文系统的开发理念更贴近于消费者,引入C2C的经营理念,增加读者开店的功能,读者可以将自己不需要的书本或音像资料售给需要它的人,从而吸引更多的消费者,增加用户粘性,更为书店市场打开一个新的渠道。本系统面向以学生为主的用户群体,为他们提供C2C交易的平台。卖者发布出售商品的信息,买者也可发布求购信息。本系统的用户分为普通用户、个人店铺用户和管理员。通过Struts+Spring+Hibernate架构开发。

1 系统分析

1.1 用例图

系统中主要的角色包括未注册用户、已注册用户和管理员。

未注册用户:该角色可以对系统进行最基本的查看、搜索商品操作,如果该角色想进行更多操作,则需进行用户注册操作,成为该交易平台的会员之一。

已注册用户:该角色在未开店之前,角色功能仍是买家,可以进行查看/修改个人资料,查看/搜索商品,查看/修改个人收藏夹,查看订单,购物,留言等操作。而在注册开店之后,除去买家角色,还增加了个卖家角色,可以上传自己想卖出的商品,对自己的商品信息进行增、删、改、查等操作,还可以查看有无已购买但未发货的商品,并进行发货确认。

管理员:前2个角色主要体现在前台,而该角色是在后台中运行,系统管理员可以对下层管理员进行注册和权限操作,管理员登陆后台界面后,可以对应自己的权限进行操作,主要起到监控、管理和中介的作用。用例图如下:

图1 用例图

1.2 顶层数据流图

平台主要有2个外部实体:用户和管理员。这两个实体是存在于软件本身系统之外的人员,指出了数据信息所需要的发源地或系统所产生的数据的归属地。而加工之地就是业务中心,描述了输入数据流通过业务中心的加工处理后变成了输出数据。本系统的具体顶层数据流情况如图

图2 顶层数据流

2 系统设计

2.1 数据模型设计

本系统中所涉及的可以抽象出来的实体模型有用户(user)、管理员(admin)、商店(shop)、商品(merchandise)、商品类别(kind)、留言(message)、收藏夹(favourite)、订单(orders)、选购记录(cartselectedmer)、购物车(cart)、账户(account)、公告(affiche),具体的关系数据模型图如图。

图3 关系数据模型图

2.2 店铺商品管理设计

用户在注册开店之后,除去买家角色,还增加了个卖家角色,可以上传自己想卖出的商品,对自己的商品信息进行增、删、改、查等操作。

增、删、改和查四个操作是管理系统中最基本的功能。下面以增加商品为例,分析这个操作在系统中是如何设计和实现的。

视图层上,增加商品操作在JSP页面addMerchandise.jsp中实现,当店铺用户填毕想添加的商品的信息并提交后,Struts把用户输入的表单数据(包括商品的种类、名称、价格、存货数量和描述等商品信息)保存在merchandiseForm Bean中,通过它来进行视图和控制器之间表单数据的传递。通过在struts-config.xml配置文件中的这段代码,可以看出merchandiseForm在经过validate后把表单数据传送给了Action类MerchandiseAction。

attribute="merchandiseForm" parameter="method"path="/add"

type="com.moon.struts.action.MerchandiseAcion" />

然后,该Action类会调用MerService的实现类中的addMer()方法来添加商品,saveImage()方法来保存用户上传的图片。保存图片的代码如下:

//MerchandiseAction类中

FormFile ff = f.getPic();//定义图片文件,并赋值

boolean res = MerService.saveImage(uploadPath,ff);//保存图片到磁盘

//MerServiceImpl类中,保存图片方法

//参数:保存图片的物理路径,封装图片的文件

public boolean saveImage(String path,FormFile f){

boolean result = false; //定义返回类型,并赋值为false;

try { //定义输出流对象,并实例化

OutputStream out = new FileOutputStream(new File(path));

byte[]b = f.getFileData();//获取图片文件的字节数;

out.write(b); //向磁盘写入图片

out.close(); //关闭输出流

result = true;

} catch(Exception e){

result = false; // TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

这里的上传文件用到了struts技术,首先在jsp文件中使用标记生成文件上传控件。由于Struts针对上传文件进行了相应的处理,所以,在MerchandiseAction中对上传文件的访问也就变得异常简单了,直接通过MerchandiseForm中所定义的Formfile对象就可以操作用户所上传的文件。

通过上面的代码实现可以看到,通过FormFile对象可以得到用户上传文件/图片的字节数。此外,还可以得到文件的名称、类型,如果是一般文件,还能得到文件的内容信息。在本系统实现中,将用户上传的文件保存到指定的磁盘上。

因为系统统一使用了struts+spring+hibernate框架,所以这里在编写代码时的原则仍不变,即利用Spring框架,方便地把执行业务逻辑(这里是增加商品)、调用持久层方法、从表示层获得用户请求、进行数据库事务处理和异常处理这几个任务通过Bean管理器进行管理,使系统可以在最大程度上降低程序的复杂度和耦合度。Spring通过反转控制(IoC)或者设置依赖注入(Dependency Injection)将配置在扩展的XML文件中的这些对象联系起来,这样可以自由地创建各种对象以及降低系统的耦合度。

图4 时序图

MerchandiseAction类调用了业务逻辑接口的实现类中的方法后,MerServiceImpl实现类分别调用了MerchandiseDao接口、ShopDao接口和UserDao接口来进行实际的添加商品操作。具体的操作是首先由实现后两个接口的Support类取得添加商品的用户帐号和商店id信息,然后把这2个参数传给MerchandiseDao接口实现类,通过sql语句和Merchandise数据表进行实际添加操作。如果保存图片成功且添加商品成功,则会给出成功提示,否则就弹出对话框告知用户添加失败,但是不论失败还是成功,事务完成后都仍跳转到添加商品页面。具体时序图如图4所示:

[1][美]Xin Chen 著,温昱,靳向阳译,应用框架的设计与实现.电子工业出版社.2006.

[2]陈天河 等著,Struts,Hibernate,Spring集成开发宝典.电子工业出版社.2007.

[3]阳雪峰,陈文臣著,Java Web 2.0:基于Spring、Struts、Hibernate轻量级架构开发.机械工业出版社.2009.

[4]刘乃丽.精通Java EE项目案例.人民邮电出版社.2008.

猜你喜欢

数据模型开店数据流
汽车维修数据流基础(上)
汽车维修数据流基础(下)
蜘蛛开店
面板数据模型截面相关检验方法综述
在家“开店”记
财政支出效率与产业结构:要素积累与流动——基于DEA 和省级面板数据模型的实证研究
基于数据流聚类的多目标跟踪算法
巴巴熊开店
北医三院 数据流疏通就诊量
基于数据模型的编程应用