- 系统分析
研究背景
目前市面上已经有很多面包手机店专卖店铺,而且有很多店铺已经做出了不错的业绩,是全国连锁店。然而随着时代的进步,人们渐渐倾向于在线购物的消费方式。手机店的销售也应该与时俱进,加强自身的信息化建设,才能在越来越激烈的竞争中保持竞争优势。如今市场上也已经存在了此类的烘焙食品在线销售 站,但是现有的手机店在线销售 站还存在着商品单一、操作难、页面不美观、缺少后台管理等问题,还有很大的进步空间。这些问题因素也导致了 站在市场上的推广受到一定的限制。如何开发出成本低廉、功能齐全、页面美观的烘焙商城 站正是我们目前需要解决的问题。
目的和意义
-
- 系统可行性分析
应用的可行性包括许多方面,整体来讲可以概括为三点,首先是经济上的可行性,毕竟这是任何人都不得不面对的问题;其次,技术上也必须可行,不可脱离实际;最后,操作和法律上的可行性也是不可或缺的。经过一系列的研发之后,还有进行运行和实际操作,从发展的眼光来看,还要考虑这个系统的可持续发展性,一个成功的基于智能推荐的b2c销售 站平台,也许在硬件设备上是有一定的局限性,进一步的优化和创新乃至突破是非常重要的。
-
-
- 经济可行性
-
该系统的研发在经济上并没有非常大的需求,商品信息的获取也只需较少的费用。同时,目的也并非是十分的复杂,这样并不实用,研发的时间整体上来说很长,事实上它达到了为用户带来方便的目的,还可以让该应用有很大的发展空间,这样的话,那它所产生的回 会高于支出。Java平台是一个非常自由的平台,开发人员的经济支出其实是有限的。这样会在很大程度上提升该系统的高效性这一特点,然后就能为研发工作创造一个良好的条件和基础。结果证实,本系统的开发确实科学性较强。
-
-
- 技术可行性
-
该应用采用的是基于JavaEE开发,现阶段来讲,Java发展已经相当成熟,并且以Java为开发平台的研发日益增多,受到很多研发工作人员的欢迎。所以,技术层面上JavaEE其实是能够完成这个平台开发的任务。因此系统开发在技术上是可行的。
-
-
- 操作可行性
-
对于软件来讲,开发之后其操作难度决定了它能否受到大规模推广,这是研发者必须考虑的问题,而本基于智能推荐的b2c销售 站就非常易于操作。使用者能够拥有一个浏览器设备,根本就不需要指导,很自然的就能够自己学会使用,操作完全没有复杂性,因此,在开发这个软件的时候,我并没有提供提示或者帮助这类功能,这完全不影响。多以,该系统在操作上来说,都是广大群众非常熟练的模式,一切的操作都很简单,易于上手。
-
-
- 法律可行性
-
该系统无论在哪一方面都有十分详尽的考虑,包括技术,经济等等,事实上,它也绝不会有任何的法律问题,完全具有法律的可行性,其研发能够进行。
-
- 需求分析
1.2.1 系统目标
本系统的目标是要完成一个基于B/S架构的基于智能推荐的b2c销售 站功能的设计和开发。这些模块主要包括服装订购管理、用户管理、订单管理、商品管理等功能。实现对基于智能推荐的b2c销售 站信息进行管理,实现管理自动化,系统化,规范化。本系统开发过程主要采用基于SSM框架技术,使用JSP页面技术,后台数据库采用MySQL开发而成,保证查询,添加,删除,修改等功能。
1.2.2 用户需求和模块功能
1、注册用户:收藏管理、订单管理、地址管理、安全管理、购物车管理
2、管理员:商品管理、订单管理、用户管理、轮播图管理、评论管理、商品分类管理、账户管理
1.2.3 系统业务流分析
-
- 软件系统的非功能分析
软件的非功能需求是约束系统、支持功能实现的相关需求,包括软件的效率、可靠性、安全性、可用性、适应性等。由于本软件的用户量较大应满足以下非功能需求:
- 效率:基于智能推荐的b2c销售 站数据库访问速度最大延迟为1秒,允许多个用户并行访问,访问站点不能超过2秒的延迟时间。
- 可靠性:保证系统正常工作,具有抗干扰能力,能够对系统检测并自动纠错。出现故障时不会发生崩溃,并且功能重新恢复。
- 安全性:保证信息的可用性、完整性、机密性、用户身份认证。
- 可用性:界面友好、容易学习、方便用户使用。
- 适应性:系统能能够适应外部环境及需求的变化。
1.4 设计目标
设计与实现一个基于智能推荐的b2c销售 站。能够辅助管理员对基于智能推荐的b2c销售 站信息的管理。
在构建系统时,根据不同的模块的特点和功能,新系统必需满足以下目标:
(1)稳定性:保证系统能够稳定的运行,部分硬件的变化不会影响到系统的整体运行,同时系统的运行也不会受到其他错误模块的影响。
(2)准确性:根据官方的操作指南,使用系统管理员操作所产生的“权限数据”,应该是符合所有数据库的实际状态,它是禁止记录错误和错位数据等现象。
(3)开放性:系统可以在保证兼容性的硬件基础上,进行多个站点的操作,作为在Java平台的基础上架构的该系统具有独立的平台,在不同的环境下,具有独立处理能力。
(4)可扩展性:如果有新的业务增加,不需要改变原有系统,你只需要进行扩展。
(5)可维护性:接口参数的变化不需要再写代码,从而大大方便了二次开发。
(6)独立性:尽量减少模块之间的链接,这样用户可以自主选择模块需要安装或不需要安装的模块。
(7)易使用性:系统的用户界面和操作员之间的交互性非常的好,同时和主机使用B/S模式。
(8)先进性:使系统能够跟上技术的发展,不过时。在保证系统稳定性的前提下,我们可以尝试更多的国际上的流行技术。
- .4相关技术以及开发工具
经过第一章节的介绍,已经对课题的研究背景、现状及目的有了初步的理解,接下来介绍在设计实现该系统的过程中所使用到的技术和开发工具。
1.4.1相关技术
-
-
- Spring简介
-
Spring框架是个轻量级的Java开放源代码的技术框架,主要用来管理后段业务各类的Bean对象。其面向切面的编程思想贯穿整个系统的设计过程,以此来实现业务逻辑层与其他层次的解耦,大大的减少了开发人员的工作量。在Spring出现前,开发者需要将配置大量的xml以及编写大量的Servlet配置类,手动的创建大量的对象以实现对对象的引用。而早期的EJB规范是为了简化分布式系统的开发,虽然EJB的出现却有其先进性,但是随着时间的推移,开发者们渴望诞生一种技术能够弥补EJB的缺陷,由此Spring便应运而生。
-
-
- MyBatis简介
-
Mybatis是一种数据库管理框架。前身是Java开源框架ibatis,mybatis框架之所以使用量比是hibernate多,是因为它不同于hibernate的全局性,Mybatis的sql语句非常的灵活,便于更改,是一种弱对应的框架(hibernate是一个强对应的持久化框架),你可以自己在mapper相关的xml文件中轻松的配置对应关系,或者你可以在Java代码中通过竹节轻松编写SQL语句,实现开发0配置,极大的简化了开发人员的工作,降低了开发难度。
-
-
- Tomcat服务器
-
Tomcat是一个免费的轻量级的用于发布中小型项目的JavaWeb服务器,Tomcat虽属于Apache基金会,但是他与Apache服务器不同,他是一个独立的服务器,与Apache相辅相成,可以这么说,Tomcat服务器是Apache的一个独立的进程单元。
-
-
- Navicat简介
-
Navicat 相对来说比较小巧可靠轻盈的数据库管理工具,相对于workbench的笨重,Navicat非常的快速,很适合小型企业或者学术研究使用,它支持连接多种数据库,同时,它还能够集成目前市场上的多品牌(例如:阿里云,亚马逊云)的云数据库。并且它可以对MongoDB、MySQL、Oracle、SQL Server等主流数据库进行支持和管理,非常适合本实验使用,所以选择了Navicat而并未选择其他数据库管理工具。
-
- 本章小结
本章主要介绍系统开发与实现过程中所使用到的相关技术及开发工具,包括SpringMVC框架、MyBatis技术、Eclipse开发环境、Tomcat服务器和MySQL数据库等。
- 系统设计
概要设计的主要任务是把需求分析得到DFD转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分,建立模块的层次结构及调用关系,确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述,确定数据的结构特性,以及数据库的设计,显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。
2.1 系统功能模块
经过对系统的需求分析的了解,我们对系统的功能模块进行了划分,图2.1是本系统所涉及的功能模块图。
- 注册用户:收藏管理、地址管理、购物车管理、安全管理、订单管理
图2.1 功能模块
- 管理员:商品管理、订单管理、用户管理、轮播图管理、评论管理、商品分类管理、账户管理。
图2.1 功能模块
2.2 数据库设计
在一个数据库应用系统的开发过程中,数据库的设计是整个系统的基础。良好的数据结构设计不仅可以减少数据冗余、提高查询效率,而且还可以降低应用程序的编写难度,提高工作效率。
2.2.1 数据库概要设计
概念设计是在分析数据的基础上建立了系统的分析和数据库设计,然后从前面分析的角度,将设计的观点整合在一起,最终完成了系统的结构分析和优化设计。
一般的数据库结构的概念,是一个实体和属性的关系模型。E-R模型一般拥有实体、属性和联系等多方面的信息,E-R模型采用的是E-R图来表示,需要提示用户工作中所以需要用到的事物,属性则是对实体信息的表述。
概念设计的目标是需要反映出系统所要求的数据库概念的结构,也就是概念模型。概念模式是独立于数据库的逻辑结构的,并且是一个独立的DBMS,不需要去依赖计算机系统的。
根据以上对数据库的需求分析,并结合系统概念模型的特点及建立方法,建立E-R模型图。
2.2.2 E-R关系模式的转换
关系模型的逻辑结构是一组关系模式的集合。E-R图则是由实体,实体的属性和实体间的联系三个要素组成。所以将E-R图转换为关系模型实际上就是要将实体,实体的属性和实体间的联系转换为关系模式。转换原则如下:
(1) 实体类型的转换:将每个实体类型转换成一个关系模式,实体的属性及为关系模式的属性,实体标识符及为关系模式的键。
(2) 联系类型的转换,根据不同的情况做不同的处理:
①若实体间的联系是1:1,可以在两个实体类型转换成的两个关系模式中的任意一个关系模式的属性中加入另一各关系模式的键和联系类型的属性。
② 若实体间的联系1:N,则在N端实体类型转换成的关系模式中加入1端实体类型转换成的关系模式的键和联系类型的属性。
③若实体间的联系是M:N,则将联系类型也转换成关系模式,其属性为两端实体类型的键加上关系类型的属性,而键为两端实体间的组合。
依照该规则将 上招聘求职系统的E-R图转换为关系模型如下:
将每一个实体转换成一个关系(关系就是给出关系名,写出属性,并标明该关系的主键)。
管理员信息(流水 ,管理员帐 ,管理员密码)
用户信息(流水 ,姓名,编 ,年龄,性别,用户名,密码,邮箱)
2.2.3 数据表结构
建立一个良好的数据库,需要追寻一下原则:
1. 尽量较少数据沉余和重复。
2. 操作设计和结构设计相结合。
3. 数据结构具有相对的稳定性。
根据系统的需求分析,同时又根据相关部分数据流程,本系统共创建了6张表,
以下为数据库中的表:
数据库名:phonemarket2
表名:userd
序 |
列名 |
数据类型 |
长度 |
主键 |
外键 |
允许空 |
默认值 |
说明 |
1 |
User—id |
Varchar |
32 |
主键 |
否 |
|||
2 |
User-Name |
Varchar |
100 |
是 |
||||
3 |
User-Pass |
Varchar |
32 |
是 |
||||
4 |
User-Phone |
Varchar |
32 |
是 |
||||
5 |
User-email |
Varchar |
32 |
是 |
||||
6 |
User-state |
Varchar |
1 |
是 |
s |
|||
7 |
User-Img |
String |
是 |
表名:admin
序 |
列名 |
数据类型 |
长度 |
主键 |
外键 |
允许空 |
默认值 |
说明 |
1 |
Admin-id |
Varchar |
32 |
是 |
否 |
|||
2 |
Admin-name |
Varchar |
32 |
是 |
||||
3 |
Admin-pass |
Varchar |
32 |
是 |
||||
4 |
Admin-phone |
Varchar |
32 |
是 |
||||
5 |
Admin-date |
Datetime |
是 |
|||||
6 |
Admin-state |
Varchar |
2 |
是 |
1 |
|||
7 |
Admin-role |
Varchar |
3 |
是 |
1 |
表名:address
序 |
列名 |
数据类型 |
长度 |
主键 |
外键 |
允许空 |
默认值 |
说明 |
1 |
Addr-id |
Varchar |
32 |
是 |
否 |
|||
2 |
Addr_province |
Varchar |
32 |
是 |
||||
3 |
Addr-city |
Varchar |
32 |
是 |
||||
4 |
Addr-area |
Varchar |
32 |
是 |
||||
5 |
Addr-detail |
Varchar |
32 |
是 |
||||
6 |
Addr-phone |
Varchar |
32 |
是 |
||||
7 |
Addr-nickname |
Varchar |
32 |
是 |
||||
8 |
Addr-state |
Varchar |
1 |
是 |
表名:goods
序 |
列名 |
数据类型 |
长度 |
主键 |
外键 |
允许空 |
默认值 |
说明 |
1 |
Goods-id |
Varchar |
32 |
是 |
否 |
|||
2 |
Goods-name |
Varchar |
32 |
是 |
||||
3 |
Goods-price |
Double |
10 |
是 |
||||
4 |
Goods-num |
Int |
32 |
是 |
||||
5 |
Goods-type |
Varchar |
32 |
是 |
||||
6 |
Goods-memory |
Varchar |
32 |
是 |
||||
7 |
Goods-color |
Varchar |
32 |
是 |
||||
8 |
Goods-img |
String |
是 |
|||||
9 |
Goods-state |
Varchar |
2 |
是 |
1 |
|||
10 |
Goods-desc |
Varchar |
1000 |
是 |
||||
11 |
Goods-volume |
Varchar |
10 |
是 |
表名:order
序 |
列名 |
数据类型 |
长度 |
主键 |
外键 |
允许空 |
默认值 |
说明 |
1 |
Order-id |
Varchar |
32 |
是 |
否 |
|||
2 |
Order-user |
Varchar |
32 |
是 |
||||
3 |
Order-date |
Datetime |
是 |
|||||
4 |
Order-price |
Double |
32 |
是 |
||||
5 |
Order-state |
Varchar |
5 |
是 |
||||
6 |
Order-username |
Varchar |
32 |
是 |
||||
7 |
Order-phone |
Varchar |
32 |
是 |
||||
8 |
Order-address |
Varchar |
100 |
是 |
||||
9 |
Order-expressno |
Varchar |
32 |
是 |
3 系统实现
系统实现是软件工程中软件开发的一个步骤,就是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。详细设计的主要任务是设计每个模块的实现算法,所需的局部数据结构。
本章将使用图形,代码,语言等工具将系统的每个模块处理过程的详细算法描述出来。
3.1 用户登录
用户登陆模块最基本的作用是为了限制该管理系统资源的使用,只有经过身份确认的操作员才能对其个性化电子商务推荐系统进行相关操作。其基本过程是从客户端取得提交的用户名和密码,然后到数据库中进行核对。如果该信息在数据库中存在,那么就可以成功登录到下一界面,否则就会被该系统拒之门外。
选择连接数据库后,进入用户登陆界面。在用户登陆界面中输入用户名和密码,从数据库表中检查是否有相应的用户名和密码。如果用户名和密码错误,系统就会给出错误提示,并且不会有任何的页面跳转。如果输入的用户名和相应密码正确,则可以点击“确定”进入主控制平台。用户登录的界面如图3.1所示。
3.1 登录界面
3.2 用户注册
用户点击 站首页的注册链接并跳转到注册页面,在注册页面上填写上必填的手机 、密码相关的用户信息。当用户提交时,先由页面判断是否符合提交的基础要求,符合要求则向服务器提交表单数据。如果填写不正确,就会弹出错误提示框,让用户重新输入。
注册模块如图3.2所示:
3.2 用户注册页面
3.3产品浏览
注册用户登录系统可以查看系统的产品的详细信息,如图3.3所示
3.3 产品详细信息界面
3.4 购物车管理
在该模块中,用户必须注册成为会员才可以在 站进行订购,未注册的用户或注册失败的会员只可以浏览物品,不可以把商品添加到购物车中。在购物车中,用户可以输入购买商品的数量,也可以删除购物车中的商品。
3.4 购物车管理
购物车controller层代码:
@RequestMapping(“addCart”)
@ResponseBody
public String addToCart(Integer goodsId,Integer num,HttpServletRequest request){
HttpSession session = request.getSession();
Users user=(Users) session.getAttribute(“user”);
Cart cart = cartService.findCartByUserId(user.getUserId(), goodsId);
if(cart!=null){
cart.setCartNum(cart.getCartNum()+num);
cartService.updateCart(cart);
}else{
Goods goods = goodsService.findById(goodsId);
Cart c=new Cart(goods, num, goods.getGoodsPrice(), user);
cartService.addGoodsToCart(c);
}
return “success”;
}
@RequestMapping(“findCartByUser”)
@ResponseBody
public List<Cart> findCartByUser(HttpServletRequest request){
HttpSession session = request.getSession();
Users user=(Users) session.getAttribute(“user”);
List<Cart> list = cartService.findCartByUserId(user.getUserId());
return list;
}
@RequestMapping(“deleteCart”)
@ResponseBody
public String deleteCart(Integer cartId){
Integer rs = cartService.deleteCart(cartId);
if(rs>0){
return “success”;
}else{
return “fail”;
}
}
@RequestMapping(“reduceCartNum”)
@ResponseBody
public String reduceCartNum(Integer cartId){
Cart cart = cartService.findCartById(cartId);
cart.setCartNum(cart.getCartNum()-1);
Integer rs = cartService.updateCart(cart);
if(rs>0){
return “success”;
}else{
return “fail”;
}
}
@RequestMapping(“addCartNum”)
@ResponseBody
public String addCartNum(Integer cartId){
Cart cart = cartService.findCartById(cartId);
cart.setCartNum(cart.getCartNum()+1);
Integer rs = cartService.updateCart(cart);
if(rs>0){
return “success”;
}else{
return “fail”;
}
}
3.5 账户安全
在该模块中,只有注册并登录成功后的用户才能进入。在该模块中,用户可以修改登录密码。
3.5 账户安全界面
3.6 后台欢迎界面
在这个界面可以查看商城的总订单量,待发货数量,销售额,手机销售排行,热门商品浏览量等等。
欢迎界面前端代码:
<body style=”background-color:#F2F2F2;padding-top:15px;padding-left:15px;padding-bottom:0px;”>
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!