1 前言

本次课程设计旨在考察学生对工程的规划与设计能力。本次课程设计中,我选择的题目是web应用,目的在于在对JAVAEE的兴趣的前提下,增加自己对WEB应用开发的项目经验,从项目中找到自己编码的闪光点,增加自信;又可以从中找到自己的不足,锻炼自己设计功能需求的思维能力,为以后正式步入开发岗位做好准备。

2 需求分析

随着网络的迅速发展和普及,以及网络支付手段的逐步完善,使得越来越多的人逐渐相信以及依赖于网上购物。只需在家,打开网上商城,就可以享受与实体店一般的选择购物以及送货上门的购物体验。传统的线下商城和超市已经越来越难满足现阶段越来越快的生活节奏,越来越多的人会因为时间关系而逐渐转移到网上商城,线下购物已经逐渐成为一种生活消遣放松的方式。而且网上商城能借助网络的便利性和跨地域的特点,能改良线下商城只能满足周边居民的这一缺点,实现跨地域的交易,从而大大增加了客户的数量。

我们这次所设计的网上商城“FPShop”,在满足用户各项需求的同时,也对各项功能进行了强化完善,目的是为了让用户能在享受网上购物的便利的同时,也能有个很流畅很舒服的购物体验。“FPShop”的个性和功能主要体现在下面几点:

  1. 简洁美观的操作界面。这次网上商城的总体页面颜色采用了粉色,可爱温馨的颜色是为了能让用户在打开商城时能有个舒畅的心情。而简单的操作界面又能让用户在使用的时候不会因为过于繁琐而频繁出现错误操作,因此留下不愉快的购物体验。所以一个简单美观的操作界面能给用户留下好印象,从而留住用户。
  2. 种类丰富的商品选择。为了能满足更多用户的要求,我们的网上商城设置了多个分类,让我们的商城不仅仅只能满足一部分商品需求。用户能通过分类搜索,简单快捷的找到自己想要的商品,也能通过分类列表,简单明了的知道这个网上商城所卖的商品。
  3. 操作简便的前台功能布局。前台作为与用户直接交互的界面,在考虑功能的同时,也考虑了操作的简洁和方便性,目的是让大多数不在懂电脑操作的客户,也能轻松的享受电子商务给他们带来的便利。 前台主要功能包括:注册/登录、个人中心、商品分类、购物车、最新商品、最热商品等功能。
  4. 简单实用的后台管理。本商城的后台管理在操作上依旧以简单快捷而又不失实用为主。大体上分为用户管理、商品分类管理,商品信息管理、订单管理以及商品的上下架等功能。同时增加了可查看用户的消费情况。

3 系统设计

本系统采用B/S模式,前端和后台均使用框架进行开发,前端使用jsp、js和jq技术,后台使用springmvc、spring、mybatis框架整合开发。实现一个完整的网上商城从用户、商品、订单等的管理与操作。以下为详细的设计介绍:

3.1类结构设计

​ 图1 类图

3.2购物基本流程时序图


图2 购物流程时序图

3.3数据库设计

User表,uid为主键。


图3 买家用户实体E-R图:

Product表,pid为主键,cid为外键。cid属于category表的主键。


图4 商品实体E-R图

Order表,oid为主键,aid为外键,aid是address表的主键。


图5 订单实体E-R图

Orderitem表,itemid为主键,oid、pid为外键,oid是order表主键,pid是product表主键。


图6 order item实体E-R图

Address表,aid为主键,uid为外键,uid为user表的主键。

图7 买家地址实体E-R图

Category表,cid为主键。

图8 商品类别实体E-R图

Power表,powerid为主键。


图9 报表实体E-R图

(1)User表结构设计:

User表主要记录了各个user的个人信息,通过uid主键来作为索引区别。通过state字段判断用户是否注销。Username和password 分别作为用户登录的账号和密码。这里的电话与地址无关。


图10 user表

(2)product表结构设计:

product表主要记录了所有商品的详细信息,通过pid主键作为索引区别。通过cid决定该商品属于哪个分类。

图11 product表

(3)address表结构设计:

address表主要记录了所有用户的地址,通过aid主键作为索引,uid作为外键标识属于哪个用户,每个用户可以用有多个地址,但是只能拥有一个默认地址。

图12 address表

(4)order表结构设计:

Order表主要记录了所有订单的状态、时间以及总花费,通过oid订单编号作为索引区别,以aid为外键索引订单发货地址。State分为四个状态:0为未付款,1为已付款未发货,2为已发货,3为已收货;默认0。Total字段是所有属于同一个oid的orderitem的subtotal的总和。

图13 order表

(5)Orderitem表结构设计:

Orderitem表主要记录了所有订单明细的信息,通过字段itemid订单明细编号作为索引区别。pid作为外键索引所买商品的详细信息。

图14 orderitem表

(6)Category表结构设计:

Category表主要记录了所有分类的信息,通过字段cid类别编号作为索引区别。。

图15 category表

(7)Power表结构设计:

Power主要是记录了后台管理员的信息,通过powerid管理员编号作为索引区别。

图16 power表

四 系统实现

4.1 功能模块实现说明

(1)商品管理:

4.1.1 商品管理

后台可以通过该功能模块实现商品上架、商品下架、修改商品信息、查看商品。通过该模块将指定的商品信息增加到数据库中,实现商品上架功能。通过该模块将商城已有商品的商品数目改为0,实现下架商品功能。通过该模块在数据库内修改指定的商品信息,实现修改商品信息功能。

用户通过该模块实现在前台页面查看和搜索商品,并浏览商品。

图17 商品管理页面

图18 修改商品信息

图18 依据类别、价格及库存筛选

相关代码:

//商品分类@RequestMapping("/admin/orderBy")public String orderBy(String cid,String price,String amount,HttpServletRequest request) {List<Product> productList = null;System.out.println("cid:"+cid+"  price:"+price+ "  amount:"+amount);if(cid != null) {productList = service.getProductByDetails(cid,price,amount);}request.setAttribute("productList", productList);return "admin/newProductManage";}//弹窗展示获得的商品数据@RequestMapping("/admin/showProductInfo")public void showProduct(String pid,HttpServletRequest request,HttpServletResponse response) throws IOException {Product product = productservice.getProductInfo(pid);Gson gson = new Gson();String json = gson.toJson(product);response.getWriter().write(json);}@RequestMapping("/admin/modifyProduct")public void modifyProduct(Product product,HttpServletResponse response) throws IOException {System.out.println(product.getPid());productservice.modifyProduct(product);response.getWriter().write("{\"isSuc\":"+true+"}");

4.1.2 分类管理

后台可以通过该功能模块实现增加商品分类,修改商品分类以及删除商品分类等功能要求。对应在数据库中对分类信息进行增删改。

用户通过该功能模块实现商品的分类浏览。

图19 类别管理页面

图20 根据分类选择商品

相关代码:

AdminController:
@RequestMapping("/admin/orderManage")public String orderManage(HttpServletRequest request) {List<Order> orderList = orderservice.getAllOrder();Gson gson = new Gson();String json = gson.toJson(orderList);request.setAttribute("orderList", orderList);request.setAttribute("json", json);return "admin/orderManage";}
productController:
@RequestMapping("/productByCategory")public String getOrderByUser(String cid, @RequestParam(value = "currentPage", defaultValue = "1") int currentPage,HttpServletRequest request) {PageBean pagebean = service.getProductListByCid(cid, currentPage);request.setAttribute("pageBean", pagebean);request.setAttribute("cid", cid);return "productList";}

4.1.3 订单管理

用户通过该模块查看自己的订单信息、提交订单、删除订单以及更改订单收货状态。

后台通过该模块查看所有用户的订单信息以及更改订单的发货状态。

图21 个人中心订单

图22 订单管理页面

4.1.4 用户权限

用户权限分为一般浏览者和买家。一般浏览者可以查看所有商品信息,但是不能购买商品以及没有个人中心,在选择购买时会跳到用户注册登录界面。买家则是已登录的用户,可以购买商品也拥有自己的个人中心,可查看自己的个人信息。

图23 登录页面

图24 个人中心资料页

相关代码:

UserInterceptor.java 登录拦截器:
public class UserInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {HttpSession session = request.getSession();Object user = session.getAttribute("user");if(user != null) {return true;}else {response.sendRedirect(request.getContextPath()+"/login.html");}return false;}

4.1.5 注册与登录

用户只有在登录后才可以购买商品以及查看个人信息,没有账户的游客则需要进行注册再登录。

图25 注册新账号

相关代码:

UserConroller:
@RequestMapping("/login")public void login(String account, String password, HttpServletRequest request, HttpServletResponse response)throws Exception {String email = "";String username = "";boolean flag = false;try {String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";Pattern regex = Pattern.compile(check);Matcher matcher = regex.matcher(account);flag = matcher.matches();} catch (Exception e) {flag = false;}if (flag) {email = account;} else {username = account;}System.out.println("email:" + email);System.out.println("username:" + username);User user = new User();user.setUsername(username);user.setEmail(email);user.setPassword(password);User logined = service.login(user);boolean isSuccess = true;System.out.println(logined);HttpSession session = request.getSession();if (logined != null) {session.setAttribute("user", logined);response.getWriter().write("{\"isSuccess\":" + isSuccess + "}");}else {isSuccess = false;response.getWriter().write("{\"isSuccess\":" + isSuccess + "}");}}

4.1.6 浏览商品

所有人都可以浏览商品。

图26 浏览商品

图27 详细商品信息

相关代码:

ProductController:
//根据pid展示商品@RequestMapping("/product")public String productInfo(String pid, HttpServletRequest request) {Product product = service.getProductInfo(pid);request.setAttribute("product", product);return "productInfo";}indexController:
//展示最新和热门商品
@RequestMapping(value = {"/","/index"})public String index(Model model) {List<Product> hotProductList = indexservice.getHotProducts();List<Product> newProductList = indexservice.getNewProducts();model.addAttribute("hotProductList", hotProductList);model.addAttribute("newProductList", newProductList);return "index";}

4.1.7 用户信息管理

用户可以在这里查看自己的所有信息,以及地址管理和充值服务。

图28 修改个人资料

图29 余额充值页面-方式一

图30 余额充值页面-方式二

图31 新增地址

图32 修改地址

相关代码:

userController:
@RequestMapping("/user/userInfo")public String toUserInfo() {return "privilege/userInfo";}// 修改用户信息@RequestMapping("/user/modify")public void modifyUserInfo(User user, HttpServletRequest request, HttpServletResponse response) throws Exception {System.out.println(user);service.modifyUserInfo(user);User newUser = service.getUser(user.getUid());HttpSession session = request.getSession();Boolean isSuccess = false;if (newUser != null) {isSuccess = true;session.setAttribute("user", newUser);}response.getWriter().write("{\"isSuccess\":" + isSuccess + "}");}// 前往充值余额页面@RequestMapping("/user/balance")public String toBalancePage() {return "privilege/balance";}// 充值余额@RequestMapping("/user/recharge")public void recharge(Double pay, HttpServletRequest request, HttpServletResponse response) throws Exception {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");Double money = user.getMoney();Double newMonney = 0.0;if (pay != 0.0 && pay != null) {newMonney = money + pay;}System.out.println("money:" + newMonney);user.setMoney(newMonney);service.modifyUserInfo(user);user = service.getUser(user.getUid());System.out.println(user);session.setAttribute("user", user);Boolean isSuccess = false;if (user.getUid() != "") {isSuccess = true;}response.getWriter().write("{\"isSuccess\":" + isSuccess + "}");
}// 跳转到支付成功页面@RequestMapping("/user/paySuccess")public String topaySuccessPage() {return "privilege/recharge";}// getAddsByUser@RequestMapping("/user/address")public String addressManage(HttpServletRequest request) {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");List<Address> addList = service.getAddress(user.getUid());request.setAttribute("addList", addList);return "privilege/addManage";}// 添加或修改用户地址@RequestMapping("/user/addManage")public String addManage(String aid,String tel,String address,String name,HttpServletRequest request) {System.out.println(aid);System.out.println(tel);System.out.println(address);System.out.println(name);Address address1 = new Address();address1.setAid(aid);address1.setTel(tel);address1.setAddress(address);address1.setName(name);System.out.println(address1);HttpSession session = request.getSession();User user = (User)session.getAttribute("user");address1.setUid(user.getUid());System.out.println(address1);if(address1.getAid() != null && address1.getAid() != "") {service.updateAdd(address1);}else {service.addAddress(address1);}return "redirect:/user/address";}//删除地址@RequestMapping("/user/delAdd")public String delAdd(@RequestParam(value = "aid") String aid) {Address address = new Address();address.setAid(aid);service.delAdd(address);return "redirect:/user/address";}//设置默认地址@RequestMapping("/user/setDefaultAdd")public String setDefaultAdd(String aid,HttpServletRequest request) {HttpSession session = request.getSession();User user = (User)session.getAttribute("user");Address address = new Address();address.setAid(aid);address.setUid(user.getUid());service.setDefaultAdd(address);return  "redirect:/user/address";}@RequestMapping("/user/setDefaultAddFromCart")public String setDefaultAddFromCart(String aid,HttpServletRequest request) {HttpSession session = request.getSession();User user = (User) session.getAttribute("user");Address address = new Address();address.setAid(aid);address.setUid(user.getUid());service.setDefaultAdd(address);List<Address> addList = service.getAddress(user.getUid());session.setAttribute("addListCart", addList);return "redirect:/cart.html";}

4.18 购物车模块

用户可以将自己心仪的商品先添加至购物车,然后继续浏览其他商品,最后再进行付款提交订单。

图33 购物车页面

图34 确认订单

图35 购物车为空

相关代码:

Productcontroller:
// 加入购物车@RequestMapping("/addCart")public String addCart(String pid, int buyNum, HttpServletRequest request) {HttpSession session = request.getSession();Cart cart = (Cart) session.getAttribute("cart");if (cart == null) {cart = new Cart();}CartItem cartitem = new CartItem();Product product = service.getProductInfo(pid);cartitem.setProduct(product);cartitem.setBuyNum(buyNum);double subtotal = product.getPrice() * buyNum;cartitem.setSubtotal(subtotal);double total = 0.0d;Map<String, CartItem> cartItems = cart.getCartItems();if(cartItems.containsKey(pid)) {CartItem item = cartItems.get(pid); int oldNum = item.getBuyNum();int newNum = oldNum+buyNum;item.setBuyNum(newNum);item.setSubtotal(product.getPrice()*newNum);cart.setCartItems(cartItems);}else {cartItems.put(pid, cartitem);}total = cart.getTotal()+cartitem.getSubtotal();cart.setTotal(total);User user = (User) session.getAttribute("user");if (user != null) {List<Address> address = userservice.getAddress(user.getUid());System.out.println(address);session.setAttribute("addListCart", address);}session.setAttribute("cart", cart);return "redirect:/cart.html";}@RequestMapping("/delCartItem")public String delCartItem(String pid,HttpServletRequest request) {HttpSession session = request.getSession();Cart cart = (Cart) session.getAttribute("cart");if(cart!=null) {Map<String, CartItem> cartItems = cart.getCartItems();//修改总价double  newTotal = cart.getTotal() - cartItems.get(pid).getSubtotal();cart.setTotal(newTotal);// 删除cartItems.remove(pid);cart.setCartItems(cartItems);}session.setAttribute("cart", cart);return "redirect:/cart.html";}@RequestMapping("/removeCart")public String removeCart(HttpServletRequest request) {HttpSession session = request.getSession();session.removeAttribute("cart");return "redirect:/cart.html";}

4.2 配置文件

ApplicationContext.xml是web应用中spring框架的配置文件,负责对web系统中beanfactory和各个bean的属性注入以及数据库连接池的配置设置。

部分配置代码如下:

<context:property-placeholderlocation="classpath:db.properties" /><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="10" /><property name="maxIdle" value="5" /></bean><!-- sqlSessionFactory --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!-- mybatis核心配置 --><property name="configLocation"value="classpath:SqlMapConfig.xml"></property><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean><!-- mapper扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.fpshop.dao" /></bean>

Springmvc.xml是基于SSM的web系统中SpringMVC的配置文件。负责对springmvc的核心组件前端控制器、处理器等进行配置

♻️ 资源

大小: 47.0MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87274312

基于Java(SSM框架)实现的购物网站系统【100010082】相关推荐

  1. 基于java ssm框架实大学生心理健康系统设计与开发演示【附项目源码+论文说明】

    基于java ssm框架实大学生心理健康系统设计与开发演示 摘要 近些年来,我国高等教育规模不断扩大,在校大学生人数屡创新高,大学生心理健康问题也日益严峻.虽然各高等学校对心理健康教育的重视程度较高, ...

  2. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】分享

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  3. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】

    基于java SSM框架+微信小程序实现电子书城阅读器演示 摘要 而随着互联网技术的不断发展,互联网已经渗入到我们生活中的各个方面.移动设备的普及使我们的生活发生了翻天覆地的变化,这种变化也深刻影响着 ...

  4. 基于java SSM框架的游戏商城系统

    今天给大家介绍一个使用java SSM框架的游戏商城系统,案例比较典型,更换一些内容可以作为其他商品的商城系统使用,话不多说上截图: 技术描述 开发工具: idea 数据库: mysql Jar包仓库 ...

  5. 基于java ssm springboot女士电商平台系统源码+文档设计

    作者主页:Java李杨勇 简介:Java领域优质创作者.[Java李杨勇]公号作者  简历模板.学习资料.面试题库.技术互助[关注我,都给你] 文末获取源码 主要技术:spring, springmv ...

  6. 基于JAVA SSM框架的学校家长互动学习平台

    基于mysql数据库 使用idea开发工具 SSM框架 总后台 登录页面 家长列表 课程管理 教育案例管理 共享资源管理 班级管理 年级管理 系统用户管理 个人信息管理 家长端 课程学习 共享资源管理 ...

  7. 基于java SSM框架的个人网上日记、博客系统

    基于SSM框架的个人网上日记.博客系统. Spring Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.也可以称之为项目中的粘合 ...

  8. 基于ssm框架旅游线路景点网站系统

    本旅游管理系统主要包括系统用户管理模块.景点信息管理模块.变幻图管理.旅游线路管理.登录模块.和退出模块等多个模块.采用目前最流行的ssm框架结构和java中流行的ssm框架和myeclipse编辑器 ...

  9. 基于java+ssm+vue+mysql的网络教学系统

    项目介绍 随着网络技术发展人们对学习的要求也越来越高,尤其是在这一个知识大爆炸的时代,如何能够更快的获取更多的知识,是很多人梦寐以求的事情.尤其是对一些在校的大学生来说他们现在最重要的一个事情就是学习 ...

  10. 基于java SSM框架的旅游网站设计开发(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 效果截图: 数据库表: CREATE TABLE t_admin ( id int(11) NO ...

最新文章

  1. 基于Storyboard创建多分支NavigationController的方法
  2. (纯干货)万字长文,数据分析利器 pandas 全教程
  3. Linux小细节-1
  4. Dynamics CRM 注册插件dll到GAC
  5. lua运行外部程序_一起聊聊redis(5)——c#的lua脚本应用实例之高并发抢口罩
  6. Unity3D 优化相关
  7. Sqlserver常用函数例子说明
  8. switch 语句编译报错Constant expression required
  9. 正则表达式之子表达式 ‘()’ 中表达式 '[]' 大表达式 '{}'
  10. ANDROID_SDK_HOME的设置
  11. 使用CURL抓取https网页报错的一种解决方法
  12. java graphics2d renderinghints_java - Graphics2D错误 - 堆栈内存溢出
  13. nginxconsul
  14. 第14章 Python网络爬虫
  15. 【移动通信】5GC:5G的QoS (Quality of Service) 控制 服务质量管理
  16. 载谭 Binomial Sum:多项式复合、插值与泰勒展开
  17. 利用计算机模拟地理实验,虚拟地理实验在中学地理教学的应用论文
  18. 招商银行西安分行暑期实习生应聘流程
  19. WIN10 装了PP助手运行提示:初始化数据库失败!
  20. JavaScript预习

热门文章

  1. EA 7.5.850 版本key
  2. Origin | origin界面(工具栏)介绍 | origin学习资源汇总(基础)
  3. css实现div水平、垂直都能充满整个屏幕
  4. SCUT - 249 - A piece of Cake - 组合数学
  5. Android平台产品推广渠道及收入模式
  6. Duplicate entry for key 'PRIMARY'
  7. Intellij Idea flutter launch emulator Manager Unable to locate adb
  8. python爬取新浪微博内容_python新浪微博爬虫,爬取微博和用户信息 (含源码及示例)...
  9. Diablo(暗黑破坏神)的特效实现
  10. Invalidate()、InvalidateRect()、InvalidateRgn、UpdateWindow()