作者简介:全栈开发工程,从事Java、Python、前端、小程序方面的开发和研究,对大数据应用与开发比较感兴趣,
主要内容:Java项目、前端项目、Python项目、小程序开发、大数据项目、单片机
收藏点赞不迷路 关注作者有好处
文末获取源码
感谢您的关注,请收藏以免忘记,点赞以示鼓励,评论给以建议,爱你哟
项目编号:BS-PT-057
随着洋酒与中国市场的相互适应以及电子商务和网上商店的普及,洋酒类商品的网上展示与订购逐渐成为主流,如今洋酒不仅仅是贵族身份的象征,也渐渐进入了寻常百姓家。网上商店的技术实现同时也成为了一个比较常见的课题。本文就网上商店的实现做了一些研究。
此设计主要采用JSP开发技术和mysql数据库技术来开发,根据实际需求构建了基于SSH(Struts+Spring+Hibernate)整合框架的电子商务系统,深入了解了轻量级Java EE应用体系结构。最后实现了一个网上购物系统,该系统分为前台和后台,前台主要功能包括普通会员用户的注册和登录、商品浏览、个人信息管理、购物车、查看订单,后台主要功能包括系统管理员信息管理、用户信息管理、商品管理、商品一级二级分类管理、订单管理。本文详细阐述了整个销售系统的设计思路,并对各部分设计进行了详尽的分析,最终形成了一个完整的设计方案。
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:JavaWeb
随着信息技术的不断发展,人们的生活发生了巨大的变化,特别是在因特网出现之后将世界变得越来越小。电子商务的出现使传统商务模式遭受到巨大的冲击。一种基于浏览器/服务器结构模式,实现了网上购物,在线交易的崭新的运营模式。电子商务在中国发展了一段时间,目前我国国内也有许多电商的平台,经过分析,国内的电子商务网站做的都是综合型,一个平台中几乎各个方面的商务领域都有涉及到。像一些比较流行的网购平台,如:京东商城,淘宝网,拍拍网,涉及的类型很多,分类只是模糊分类而已,并不是特别细致,就洋酒而言,种类特别多,所以更需要单独创建一个平台,可以给消费者提供更多更好的选择。
随着中国经济的不断发展,人民生活水平有所提高,中产阶级和白领继续扩大,中国奢侈品消费形成了较大的市场,特别是沿海经济发达地区的奢侈消费甚至超过有欧美国家的势头。 然而洋酒的消费是商品中最多的奢侈品消费。
本系统采用SSH(Struts+Spring+Hibernate)框架来进行开发。SSH框架是当前J2EE领域里最流行而且较为成熟的开源框架,它是以MVC设计模式为基础,降低了程序的耦合性,提高了应用程序的复用性、移植性、灵活性、扩展性和应用性能。SSH轻量级开发框架相对于EJB开发框架,同时继承了其优势,而且在开发和实现中的效率已经有相当程度的提高。
根据软件需求分析,将洋酒销售系统分为两大模块:前台销售模块和后台管理模块。前台销售模块包括3部分:(1)注册登录模块:用户在前台可以进行注册、登录;(2)产品分类模块:用户可以选择产品分类,然后进行相应的产品选择。(3)购物车模块。
后台管理模块,包括如下几个部分:系统管理、商品分类管理、商品信息管理、订单管理、会员用户管理。
网上洋酒销售系统的系统总体功能结构如图1所示:
主页面是网上洋酒销售系统的门户,所以主页面设计的好坏直接影响到整个销售系统的形象。首页所载的内容有:销售系统工具栏,包括我的订单,购物车,新用户注册,会员用户登录等一些列选项;导航列包括首页以及一级分类属性,还包括新品推荐,热卖推荐。效果如图5-1所示。
图5-1 系统主界面
用户进入主页面,若想点击浏览最上方的销售系统工具栏或者进行购买必须先登录。点击右上角登录进入登录界面。在会员登陆模块输入正确的用户名与密码后,点击“登陆”按钮即可进入登录页面,如图5-2所示。该模块在用户登录要进行用户名和密码的有效性检验,查询用户表。如果该用户存在则跳转到系统首页,同时可以选择用户退出,如图5-3所示。如果不能登录成功则给予提示,用户名不存在或者密码有误,以提示用户再次输入正确的用户名及密码登陆。
图5-2 用户登录界面
图5-3 登录成功后界面
如果用户是首次访问系统,还未注册过,可以单击顶端工具栏的【新用户注册】按钮或左侧的会员登录模块里的【新用户注册】按钮进入新用户注册界面,进行用户注册。这是用户全面能够使用系统功能的通道,是必不可少的部分。效果如图5-4所示。
图5-4用户注册界面
这里是系统人性化的一个体现,显示的是商城里洋酒的具体分类。如图5-5所示,是一级分类,这里已经添加了三个分类,分别是白兰地,威士忌,金酒,伏特加,朗姆酒,特吉拉酒。具体分类的增删改可以在后台管理模块实现。如图5-6所示,是二级分类,根据一级分类分出的二级分类。
图5-5产品一级分类界面
图5-6产品二级分类界面
这里是为客户专门定制的一个模块,为用户主动推荐热门产品,让用户可以在首页就能看到商场为顾客推荐的热门产品。具体推荐的增删改可以在后台管理模块实现。如图5-7所示:
图5-7特别推荐界面
这里显示的是商城里最新上架的商品。可以让顾客及时了解到新品的情况。具体新品的增删改可以在后台管理模块实现。如图5-8所示:
图5-8最新上架界
后台的设计完全是为了前台服务的,前台主要是展现,所以后台必须有支持前台的功能。后台的维护功能主要包括如下:系统管理、商品分类管理、商品管理、订单管理、注册用户管理。
管理员的登陆入口在另一个页面,管理员的账号和密码是数据库里默认已预先存入数据库的,用户名cjh,密码1231。输入完毕无错误提示,点击“登陆”按钮进入后台管理系统。界面如图5-9所示。
图 5-9 后台管理系统登陆界面
后台系统管理员登陆模块主要代码:
管理员登陆进入后系统台管理模块,如图5-10所示是管理员首先看到的页面:
图5-10 后台管理页面
系统后台管理分类为以下模块:注册用户管理,一级分类管理,二级分类管理,商品管理,订单管理。
注册用户管理包括序号,用户名,真实姓名,编辑以及删除。
点击编辑后如图5-11所示:
图 5-11编辑用户
图 5-12 一级分类管理
图 5-13 二级分类管理
这个模块的功能是对商品进行管理的,可以查看商品的图片,名称价格,是否热门和进行编辑。如图5-14所示:
图 5-14 商品管理
这个模块的功能是管理用户订单信息。包括订单的编号,收货人以及订单详情等。如图5-15所示:
图 5-15订单管理
package cn.itbaizhan.shop.adminuser.action;
import org.apache.struts2.ServletActionContext;
import cn.itbaizhan.shop.adminuser.service.AdminUserService;
import cn.itbaizhan.shop.adminuser.vo.AdminUser;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class AdminUserAction extends ActionSupport implements
ModelDriven {
// 模型驱动使用的对象
private AdminUser adminUser = new AdminUser();
public AdminUser getModel() {
return adminUser;
}
// 注入AdminUserService
private AdminUserService adminUserService;
public void setAdminUserService(AdminUserService adminUserService) {
this.adminUserService = adminUserService;
}
// 后台登录的执行的方法
public String login() {
// 调用service方法完成登录
AdminUser existAdminUser = adminUserService.login(adminUser);
// 判断
if (existAdminUser == null) {
// 用户名或密码错误
this.addActionError("用户名或密码错误!");
return "loginFail";
} else {
// 登录成功:
ServletActionContext.getRequest().getSession()
.setAttribute("existAdminUser", existAdminUser);
return "loginSuccess";
}
}
}
package cn.itbaizhan.shop.cart.action;
import org.apache.struts2.ServletActionContext;
import cn.itbaizhan.shop.cart.vo.Cart;
import cn.itbaizhan.shop.cart.vo.CartItem;
import cn.itbaizhan.shop.product.service.ProductService;
import cn.itbaizhan.shop.product.vo.Product;
import com.opensymphony.xwork2.ActionSupport;
/**
* 购物车Action
*/
public class CartAction extends ActionSupport {
// 接收pid
private Integer pid;
// 接收数量count
private Integer count;
// 注入商品的Service
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public void setCount(Integer count) {
this.count = count;
}
// 将购物项添加到购物车:执行的方法
public String addCart() {
// 封装一个CartItem对象.
CartItem cartItem = new CartItem();
// 设置数量:
cartItem.setCount(count);
// 根据pid进行查询商品:
Product product = productService.findByPid(pid);
// 设置商品:
cartItem.setProduct(product);
// 将购物项添加到购物车.
// 购物车应该存在session中.
Cart cart = getCart();
cart.addCart(cartItem);
return "addCart";
}
// 清空购物车的执行的方法:
public String clearCart(){
// 获得购物车对象.
Cart cart = getCart();
// 调用购物车中清空方法.
cart.clearCart();
return "clearCart";
}
// 从购物车中移除购物项的方法:
public String removeCart(){
// 获得购物车对象
Cart cart = getCart();
// 调用购物车中移除的方法:
cart.removeCart(pid);
// 返回页面:
return "removeCart";
}
// 我的购物车:执行的方法
public String myCart(){
return "myCart";
}
/**
* 获得购物车的方法:从session中获得购物车.
* @return
*/
private Cart getCart() {
Cart cart = (Cart) ServletActionContext.getRequest().getSession()
.getAttribute("cart");
if (cart == null) {
cart = new Cart();
ServletActionContext.getRequest().getSession()
.setAttribute("cart", cart);
}
return cart;
}
}
package cn.itbaizhan.shop.order.action;
import java.io.IOException;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import cn.itbaizhan.shop.cart.vo.Cart;
import cn.itbaizhan.shop.cart.vo.CartItem;
import cn.itbaizhan.shop.order.service.OrderService;
import cn.itbaizhan.shop.order.vo.Order;
import cn.itbaizhan.shop.order.vo.OrderItem;
import cn.itbaizhan.shop.user.vo.User;
import cn.itbaizhan.shop.utils.PageBean;
import cn.itbaizhan.shop.utils.PaymentUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 订单Action类
*/
public class OrderAction extends ActionSupport implements ModelDriven {
// 模型驱动使用的对象
private Order order = new Order();
public Order getModel() {
return order;
}
// 接收支付通道编码:
private String pd_FrpId;
public void setPd_FrpId(String pd_FrpId) {
this.pd_FrpId = pd_FrpId;
}
// 接收付款成功后的参数:
private String r3_Amt;
private String r6_Order;
public void setR3_Amt(String r3_Amt) {
this.r3_Amt = r3_Amt;
}
public void setR6_Order(String r6_Order) {
this.r6_Order = r6_Order;
}
// 接收page
private Integer page;
public void setPage(Integer page) {
this.page = page;
}
// 注入OrderService
private OrderService orderService;
public void setOrderService(OrderService orderService) {
this.orderService = orderService;
}
// 生成订单的执行的方法:
public String saveOrder() {
// 调用Service完成数据库插入的操作:
// Order order = new Order();
// 设置订单的总金额:订单的总金额应该是购物车中总金额:
// 购物车在session中,从session总获得购物车信息.
Cart cart = (Cart) ServletActionContext.getRequest().getSession()
.getAttribute("cart");
if (cart == null) {
this.addActionMessage("亲!您还没有购物!");
return "msg";
}
order.setTotal(cart.getTotal());
// 设置订单的状态
order.setState(2); // 1:未付款.
// 设置订单时间
order.setOrdertime(new Date());
// 设置订单关联的客户:
User existUser = (User) ServletActionContext.getRequest().getSession()
.getAttribute("existUser");
if (existUser == null) {
this.addActionMessage("亲!您还没有登录!");
return "msg";
}
order.setUser(existUser);
// 设置订单项集合:
for (CartItem cartItem : cart.getCartItems()) {
// 订单项的信息从购物项获得的.
OrderItem orderItem = new OrderItem();
orderItem.setCount(cartItem.getCount());
orderItem.setSubtotal(cartItem.getSubtotal());
orderItem.setProduct(cartItem.getProduct());
orderItem.setOrder(order);
order.getOrderItems().add(orderItem);
}
orderService.save(order);
// 清空购物车:
cart.clearCart();
// 页面需要回显订单信息:
// 使用模型驱动了 所有可以不使用值栈保存了
// ActionContext.getContext().getValueStack().set("order", order);
return "saveOrder";
}
// 查询我的订单:
public String findByUid() {
// 获得用户的id.
User existUser = (User) ServletActionContext.getRequest().getSession()
.getAttribute("existUser");
// 获得用户的id
Integer uid = existUser.getUid();
// 根据用户的id查询订单:
PageBean pageBean = orderService.findByUid(uid, page);
// 将PageBean数据带到页面上.
ActionContext.getContext().getValueStack().set("pageBean", pageBean);
return "findByUid";
}
// 根据订单id查询订单:
public String findByOid() {
order = orderService.findByOid(order.getOid());
return "findByOid";
}
// 为订单付款:
public String payOrder() throws IOException {
// 1.修改数据:
Order currOrder = orderService.findByOid(order.getOid());
currOrder.setAddr(order.getAddr());
currOrder.setName(order.getName());
currOrder.setPhone(order.getPhone());
// 修改订单
orderService.update(currOrder);
this.addActionMessage("亲!提交成功!");
return "msg";
}
// 付款成功后跳转回来的路径:
public String callBack(){
// 修改订单的状态:
Order currOrder = orderService.findByOid(Integer.parseInt(r6_Order));
// 修改订单状态为2:已经付款:
currOrder.setState(2);
orderService.update(currOrder);
this.addActionMessage("支付成功!订单编号为: "+r6_Order +" 付款金额为: "+r3_Amt);
return "msg";
}
// 修改订单的状态:
public String updateState(){
Order currOrder = orderService.findByOid(order.getOid());
currOrder.setState(4);
orderService.update(currOrder);
return "updateStateSuccess";
}
}
随着计算机技术的发展,使得网络的应用更加广泛。加大信息网络的建设,开展网络交易平台,进行网络交易服务等将成为未来网络建设的具体内容,而网上销售系统平台的出现,能极大的提升大众对于购物的体验。
JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作。因此本论坛采用JSP技术开放能满足这种需求。
论文中详细讨论了网上洋酒销售系统的设计思想,包括系统体系结构的设计、系统功能模块设计、数据库设计、系统的实现等。根据软件设计和实现的情况,重点阐述了系统实现过程中功能模块设计、数据库设计、组件的设计、前台显示部分设计、后台维护部分设计等关键设计。
到论文截稿时,网上洋酒销售系统已通过运行测试,基本完成预期目标的实现。能够达到在线浏览,购买商品,基本满足了大众电脑购买的需求。
网上电脑销售系统在设计和实现过程中,系统从不可用,到可用运行,从字符乱码,到正常的中文显示。一次次的改进,这使本人认识到设计、算法在系统开发中的重要性和理论与实践相结合的重要性。
但由于系统开发的经验不足,水平有限,所以目前此系统的实现上还有许多地方可以进一步改善和提高。
网上洋酒销售系统只是实现了网上销售系统的基本功,同能时由于是第一次编写此类系统,还有很多比较流行的功能,如:用户数据分析,相关产品推荐,模糊查询等都尚未实现,在算法的采用和数据库逻辑的设计上还存在一些不完善的地方。
在经过几个月的努力,我最终顺利完成了网上电脑销售系统的软件开发。在整个开发过程中,我不仅学会了使用MyEclipse,Mysql等一系列开发工具,体验了开发过程中的苦与乐,而且也达到了锻炼自己的目的,同时进一步加深对软件开发工作的理解和认识。可谓是收获颇丰。