一,项目简介
网络销售已经成为现在商品销售的一个主流趋势,传统的代理模式己经不再适合现在的商业的生态发展。网络销售可以实现F2C的这种厂家直销到客户手中的方式,这样既能降低销售费用,又能减少中间的程序,可以为顾客提供便利。,而且可以打破地域和时空的限制,让买卖更加的自由灵活。
经过调研开发的这套SSM手机商城系统,主要基于SSM框架进行商城系统的整体开发实现。前端使用Bootstrap进行页面布局,并使用MySql5.7关系型数据库进行商品和业务数据的存储。系统整体功能完整,操作简洁方便。
本商城系统主要实现在线销售各类品牌手机的功能,包含前端商品展示和购买以及后台管理功能。主要实现商品浏览、在线下单购买手机、热销手机查看、个人中心管理、后台的用户数据、订单数据、产品数据的管理等相关功能。本商城的上线必定能为商家的产品销售提供更好的销售渠道。
下面展示一下SSM手机商城的功能结构图
SSM手机商城系统的使用者主要包含两种用户角色,其一是商城后台管理员角色,其二是商城前端用户角色,这两个角色的具体功能如下:
管理员角色:管理员登陆手机商城系统后台管理,管理并操作系统中的相关业务数据,包括前端客户管理、手机商品管理、手机订单管理、手机分类管理等;
前台用户角色:前台用户登录SSM手机商城系统后可以进行手机商品信息浏览、选择手机添加到购物车、在线下单购买、个人中心管理等操作。
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:SSM框架
前台开发技术:Bootstrap+Jquery+Ajax
三,系统展示
3.1 SSM手机商城功能模块的展示
3.1.1 前台首页展示
SSM手机商城前端主要就是实现商品的信息浏览及购买下单操作,采用Bootstrap框架 ,主要基于 HTML、CSS、JAVASCRIPT、JSP,它简洁灵活,且使用便捷,前台首页主要包含商品浏览、在线下单、个人中心、我的订单等。具体操作界面展示如下图3-1所示。
图3-1 前台首页界面
.1.2前台用户购物车模块
SSM手机商场面前台用户登陆系统后可以进入手机详情页面中将手机添加到购物车。然后在购物车中可以实现在线下单购买操作。添加购物车及用户下单操作界面如下图3-2、3-3所示。
图3-2 前台用户添加购物车操作界面
图3-3 前台用户提交订单操作界面
3.1.3前台用户个人订单管理模块
SSM手机商城系统前台用户登陆系统后可以在个人订单管理模块中管理个人的订单信息。可以根据订单状态显示相关信息,并可以对未支付的订单进行支付操作,前端用户个人订单管理操作界面如下图3-4所示。
图3-4前台用户个人订单管理操作界面
3.1.4前台用户个人信息管理模块
SSM手机商城系统前台用户登陆系统后可以在个人信息管理模块中管理个人的相关信息。前端用户个人信息管理操作界面如下图3-5所示。
图3-5前台用户个人信息管理操作界面
3.1.5前台用户注册模块
SSM手机商城系统前台用户可以进行个人信息注册后再进行登陆。前端用户个人账户注册操作界面如下图3-6所示。
图3-6前台用户个人注册操作界面
其中用户密码和密码是必填项,会进行基于JS正则表达式的校验,如果录的数据不符合要求,将进行相应的信息提示。
3.1.6前台用户登陆模块
SSM手机商城系统前台用户可以进行个人信息注册后可以进行系统登陆,登陆系统后方可执行有权限的购买等操作。前端用户个人登陆操作界面如下图3-7所示。
图3-7前台用户个人登陆操作界面
3.2后台功能模块的展示
SSM手机商城系统后台用户如果想要对商城的相关信息进行管理操作,首先要登录系统,才可展开相关的操作。输入手机号和密码后用户登陆界面如下图3-8所示。
图3-8后台用户登录操作界面
3.2.2客户管理功能
SSM手机商城系统系统管理员用户登陆系统后,可以进入客户管理菜单进行相应的管理员客户信息管理。用户管理操作界面如下图3-9、3-10所示:
图3-9后台户管理功能界面图
图3-10后台客户新增界面图
3.2.3 后台手机商品管理操作UI
SSM手机商城系统管理员用户登陆系统后,可以进入商品管理菜单进行相应的手机商品信息管理。其中主要包含手机商品的添加、修改、查询、加入条幅、加入新品、加入热销以及相应的移出操作等。商品信息管理操作界面如下图3-11、3-12所示。
图3-11后台商品管理功能UI界面
图3-12商台餐品新增功能UI界面
SSM手机商城系统系统管理员用户登陆系统后,可以进入商品订单管理菜单进行相应的商品订单信息管理。其中主要包含订单的查询、订单明细的查看等,可以根据订单不同的完成状态来查行查看,并可以根据用户的付款情况,收货情况等来设置订单的不同完成状,订单信息管理操作界面如下图4-13所示。
图4-13后台订单管理功能UI界面
SSM手机商城系统管理员用户登陆系统后,可以进入商品类目管理模块管理餐品的分类信息。商品类目管理界面如下图3-14所示。
图3-14商品类目管理功能UI界面
SSM手机商城系统管理员用户登陆系统后,在后台可以对进自己的密码进行修改管理操作。个人密码管理界面如下图4-15所示。
图3-15个人密码修改功能UI界面
四,核心代码展示
package com.controller; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.entity.Admins; import com.entity.Goods; import com.entity.Tops; import com.entity.Types; import com.entity.Users; import com.service.AdminService; import com.service.GoodService; import com.service.OrderService; import com.service.TopService; import com.service.TypeService; import com.service.UserService; import com.util.PageUtil; import com.util.SafeUtil; import com.util.UploadUtil; /** * 后台相关接口 */ @Controller @RequestMapping("/admin") public class AdminController { private static final int rows = 10; @Autowired private AdminService adminService; @Autowired private OrderService orderService; @Autowired private UserService userService; @Autowired private GoodService goodService; @Autowired private TopService topService; @Autowired private TypeService typeService; /** * 管理员登录 * @return */ @RequestMapping("/login") public String login(Admins admin, HttpServletRequest request, HttpSession session) { if (adminService.checkUser(admin.getUsername(), admin.getPassword())) { session.setAttribute("username", admin.getUsername()); return "redirect:index"; } request.setAttribute("msg", "用户名或密码错误!"); return "/admin/login.jsp"; } /** * 退出 * @return */ @RequestMapping("/logout") public String logout(HttpSession session) { session.removeAttribute("admin"); return "/admin/login.jsp"; } /** * 后台首页 * @return */ @RequestMapping("/index") public String index(HttpServletRequest request) { request.setAttribute("msg", "恭喜你! 登录成功了"); return "/admin/index.jsp"; } /** * 订单列表 * * @return */ @RequestMapping("/orderList") public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { request.setAttribute("flag", 1); request.setAttribute("status", status); request.setAttribute("orderList", orderService.getList(status, page, rows)); request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows)); return "/admin/order_list.jsp"; } /** * 订单发货 * * @return */ @RequestMapping("/orderDispose") public String orderDispose(int id, byte status, @RequestParam(required=false, defaultValue="1") int page) { orderService.dispose(id); return "redirect:orderList?flag=1&status="+status+"&page="+page; } /** * 订单完成 * * @return */ @RequestMapping("/orderFinish") public String orderFinish(int id, byte status, @RequestParam(required=false, defaultValue="1") int page) { orderService.finish(id); return "redirect:orderList?flag=1&status="+status+"&page="+page; } /** * 订单删除 * * @return */ @RequestMapping("/orderDelete") public String orderDelete(int id, byte status, @RequestParam(required=false, defaultValue="1") int page) { orderService.delete(id); return "redirect:orderList?flag=1&status="+status+"&page="+page; } /** * 顾客管理 * * @return */ @RequestMapping("/userList") public String userList(HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { request.setAttribute("flag", 2); request.setAttribute("userList", userService.getList(page, rows)); request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows)); return "/admin/user_list.jsp"; } /** * 顾客添加 * * @return */ @RequestMapping("/userAdd") public String userAdd(HttpServletRequest request) { request.setAttribute("flag", 2); return "/admin/user_add.jsp"; } /** * 顾客添加 * * @return */ @RequestMapping("/userSave") public String userSave(Users user, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { if (userService.isExist(user.getUsername())) { request.setAttribute("msg", "用户名已存在!"); return "/admin/user_add.jsp"; } userService.add(user); return "redirect:userList?flag=2&page="+page; } /** * 顾客密码重置页面 * * @return */ @RequestMapping("/userRe") public String userRe(int id, HttpServletRequest request) { request.setAttribute("flag", 2); request.setAttribute("user", userService.get(id)); return "/admin/user_reset.jsp"; } /** * 顾客密码重置 * * @return */ @RequestMapping("/userReset") public String userReset(Users user, @RequestParam(required=false, defaultValue="1") int page) { String password = SafeUtil.encode(user.getPassword()); user = userService.get(user.getId()); user.setPassword(password); userService.update(user); return "redirect:userList?flag=2&page="+page; } /** * 顾客更新 * * @return */ @RequestMapping("/userEdit") public String userEdit(int id, HttpServletRequest request) { request.setAttribute("flag", 2); request.setAttribute("user", userService.get(id)); return "/admin/user_edit.jsp"; } /** * 顾客更新 * * @return */ @RequestMapping("/userUpdate") public String userUpdate(Users user, @RequestParam(required=false, defaultValue="1") int page) { userService.update(user); return "redirect:userList?flag=2&page="+page; } /** * 顾客删除 * * @return */ @RequestMapping("/userDelete") public String userDelete(Users user, @RequestParam(required=false, defaultValue="1") int page) { userService.delete(user); return "redirect:userList?flag=2&page="+page; } /** * 产品列表 * * @return */ @RequestMapping("/goodList") public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { request.setAttribute("flag", 3); request.setAttribute("page", page); request.setAttribute("status", status); request.setAttribute("goodList", goodService.getList(status, page, rows)); request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows)); return "/admin/good_list.jsp"; } /** * 产品添加 * * @return */ @RequestMapping("/goodAdd") public String goodAdd(HttpServletRequest request) { request.setAttribute("flag", 3); request.setAttribute("typeList", typeService.getList()); return "/admin/good_add.jsp"; } /** * 产品添加 * * @return * @throws Exception */ @RequestMapping("/goodSave") public String goodSave(String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2, @RequestParam(required=false, defaultValue="1") int page) throws Exception { Goods good = new Goods(); good.setName(name); good.setPrice(price); good.setIntro(intro); good.setStock(stock); good.setTypeId(typeId); good.setCover(UploadUtil.fileUpload(cover)); good.setImage1(UploadUtil.fileUpload(image1)); good.setImage2(UploadUtil.fileUpload(image2)); goodService.add(good); return "redirect:goodList?flag=3&page="+page; } /** * 产品更新 * * @return */ @RequestMapping("/goodEdit") public String goodEdit(int id, HttpServletRequest request) { request.setAttribute("flag", 3); request.setAttribute("typeList", typeService.getList()); request.setAttribute("good", goodService.get(id)); return "/admin/good_edit.jsp"; } /** * 产品更新 * * @return * @throws Exception */ @RequestMapping("/goodUpdate") public String goodUpdate(int id, String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2, @RequestParam(required=false, defaultValue="1") int page) throws Exception { Goods good = goodService.get(id); good.setName(name); good.setPrice(price); good.setIntro(intro); good.setStock(stock); good.setTypeId(typeId); if (Objects.nonNull(cover) && !cover.isEmpty()) { good.setCover(UploadUtil.fileUpload(cover)); } if (Objects.nonNull(image1) && !image1.isEmpty()) { good.setImage1(UploadUtil.fileUpload(image1)); } if (Objects.nonNull(image2) && !image2.isEmpty()) { good.setImage2(UploadUtil.fileUpload(image2)); } goodService.update(good); return "redirect:goodList?flag=3&page="+page; } /** * 产品删除 * * @return */ @RequestMapping("/goodDelete") public String goodDelete(int id, @RequestParam(required=false, defaultValue="1") int page) { goodService.delete(id); return "redirect:goodList?flag=3&page="+page; } /** * 添加推荐 * @return */ @RequestMapping("/topSave") public @ResponseBody String topSave(Tops tops, @RequestParam(required=false, defaultValue="0")byte status, @RequestParam(required=false, defaultValue="1") int page) { int id = topService.add(tops); return id > 0 ? "ok" : null; } /** * 删除推荐 * @return */ @RequestMapping("/topDelete") public @ResponseBody String topDelete(Tops tops, @RequestParam(required=false, defaultValue="0")byte status, @RequestParam(required=false, defaultValue="1") int page) { boolean flag = topService.delete(tops); return flag ? "ok" : null; } /** * 类目列表 * * @return */ @RequestMapping("/typeList") public String typeList(HttpServletRequest request) { request.setAttribute("flag", 4); request.setAttribute("typeList", typeService.getList()); return "/admin/type_list.jsp"; } /** * 类目添加 * * @return */ @RequestMapping("/typeSave") public String typeSave(Types type, @RequestParam(required=false, defaultValue="1") int page) { typeService.add(type); return "redirect:typeList?flag=4&page="+page; } /** * 类目更新 * * @return */ @RequestMapping("/typeEdit") public String typeUp(int id, HttpServletRequest request) { request.setAttribute("flag", 4); request.setAttribute("type", typeService.get(id)); return "/admin/type_edit.jsp"; } /** * 类目更新 * * @return */ @RequestMapping("/typeUpdate") public String typeUpdate(Types type, @RequestParam(required=false, defaultValue="1") int page) { typeService.update(type); return "redirect:typeList?flag=4&page="+page; } /** * 类目删除 * * @return */ @RequestMapping("/typeDelete") public String typeDelete(Types type, @RequestParam(required=false, defaultValue="1") int page) { typeService.delete(type); return "redirect:typeList?flag=4&page="+page; } /** * 管理员列表 * * @return */ @RequestMapping("/adminList") public String adminList(HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { request.setAttribute("flag", 5); request.setAttribute("adminList", adminService.getList(page, rows)); request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows)); return "/admin/admin_list.jsp"; } /** * 管理员修改自己密码 * * @return */ @RequestMapping("/adminRe") public String adminRe(HttpServletRequest request, HttpSession session) { request.setAttribute("flag", 5); request.setAttribute("admin", adminService.getByUsername(String.valueOf(session.getAttribute("username")))); return "/admin/admin_reset.jsp"; } /** * 管理员修改自己密码 * * @return */ @RequestMapping("/adminReset") public String adminReset(Admins admin, HttpServletRequest request) { request.setAttribute("flag", 5); if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) { admin.setPassword(SafeUtil.encode(admin.getPasswordNew())); adminService.update(admin); request.setAttribute("admin", admin); request.setAttribute("msg", "修改成功!"); }else { request.setAttribute("msg", "原密码错误!"); } return "/admin/admin_reset.jsp"; } /** * 管理员添加 * * @return */ @RequestMapping("/adminSave") public String adminSave(Admins admin, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) { if (adminService.isExist(admin.getUsername())) { request.setAttribute("msg", "用户名已存在!"); return "/admin/admin_add.jsp"; } adminService.add(admin); return "redirect:adminList?flag=5&page="+page; } /** * 管理员修改 * * @return */ @RequestMapping("/adminEdit") public String adminEdit(int id, HttpServletRequest request) { request.setAttribute("flag", 5); request.setAttribute("admin", adminService.get(id)); return "/admin/admin_edit.jsp"; } /** * 管理员更新 * * @return */ @RequestMapping("/adminUpdate") public String adminUpdate(Admins admin, @RequestParam(required=false, defaultValue="1") int page) { admin.setPassword(SafeUtil.encode(admin.getPassword())); adminService.update(admin); return "redirect:adminList?flag=5&page="+page; } /** * 管理员删除 * * @return */ @RequestMapping("/adminDelete") public String adminDelete(Admins admin, @RequestParam(required=false, defaultValue="1") int page) { adminService.delete(admin); return "redirect:adminList?flag=5&page="+page; } }
package com.controller; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; /** * 后台登录验证拦截器 */ public class AdminInterceptor extends HandlerInterceptorAdapter{ /** * 检测登录状态 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String uri = request.getRequestURI(); if(uri.contains("css/") || uri.contains("js/") || uri.contains("img/") || uri.contains("login") || uri.contains("logout")) { return true; // 不拦截路径 } Object username = request.getSession().getAttribute("username"); if (Objects.nonNull(username) && !username.toString().trim().isEmpty()) { return true; // 登录验证通过 } response.sendRedirect("login.jsp"); return false; // 其他情况一律拦截 } }
五,项目总结
本文设计并实现的商城系统,通过互联网来实现电子商城这一新兴产业,电子商城主要依靠于计算机互联网技术。如果缺少了这个技术,就没有办法实现电子商城,如果要想完美实现,互联网技术就要有重大发展。这样,电子商城就带动了科技的巨大进步。用户就可以随时随地完成搜索商品、挑选商品、购买商品的全部过程。对于商家而言,网上购买商品有如下优点:不受场地限制、购买成本低、降低了风险、有利于更好的刺激用户去消费购买。对于消费者来说,网上购买商品有如下优点:价格便宜方便性、足不出户就能买到满意的商品。对商家而言,网上出售商品有如下优点:可以为商家节省了商店的租金、人力成本,最重要的是商品的价格也会大大降低。