基于springboot的鲜花销售商城网站

news2024/11/18 17:35:32

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于springboot的鲜花销售商城网站。

功能需求

本文设计并实现的商城系统,通过互联网来实现电子商城这一新兴产业,电子商城主要依靠于计算机互联网技术。如果缺少了这个技术,就没有办法实现电子商城,如果要想完美实现,互联网技术就要有重大发展。这样,电子商城就带动了科技的巨大进步。用户就可以随时随地完成搜索商品、挑选商品、购买商品的全部过程。对于商家而言,网上购买商品有如下优点:不受场地限制、购买成本低、降低了风险、有利于更好的刺激用户去消费购买。对于消费者来说,网上购买商品有如下优点:价格便宜方便性、足不出户就能买到满意的商品。对商家而言,网上出售商品有如下优点:可以为商家节省了商店的租金、人力成本减少,最重要的是商品的价格也会大大降低。
本系统不同于传统的购物方式,用户使用起来更加方便,获得一个良好的购物体验。基于人们对美好生活的热爱,本电商系统主要以售卖鲜花为主。希望能通过本次毕业设计给自己四年大学所学的技术有一个很的总结,也希望通过这次毕业设计来检验和提升自己的技术能力。

具备以下功能:

前端模块:用户登录注册、首页、购物车、鲜花分类查询、个人中心、修改密码、下单支付、在线留言、我的订单等。
后端模块:管理员登录、鲜花管理、用户管理、订单管理以及处理、首页轮播图管理、热销商品管理、系统配置、管理员管理、库存统计、新品上线维护、修改密码、退出系统。

部分效果图

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

部分代码
	
    @GetMapping("/goods/edit")
    public String edit(HttpServletRequest request) {
        request.setAttribute("path", "edit");
        //查询所有的一级分类
        List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
        if (!CollectionUtils.isEmpty(firstLevelCategories)) {
            //查询一级分类列表中第一个实体的所有二级分类
            List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
            if (!CollectionUtils.isEmpty(secondLevelCategories)) {
                //查询二级分类列表中第一个实体的所有三级分类
                List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
                request.setAttribute("firstLevelCategories", firstLevelCategories);
                request.setAttribute("secondLevelCategories", secondLevelCategories);
                request.setAttribute("thirdLevelCategories", thirdLevelCategories);
                request.setAttribute("path", "goods-edit");
                return "admin/edit";
            }
        }
        return "error/error_5xx";
    }

    @GetMapping("/goods/edit/{goodsId}")
    public String edit(HttpServletRequest request, @PathVariable("goodsId") Long goodsId) {
        request.setAttribute("path", "edit");
        Goods newBeeMallGoods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);
        if (newBeeMallGoods == null) {
            return "error/error_400";
        }
        if (newBeeMallGoods.getGoodsCategoryId() > 0) {
            if (newBeeMallGoods.getGoodsCategoryId() != null || newBeeMallGoods.getGoodsCategoryId() > 0) {
                //有分类字段则查询相关分类数据返回给前端以供分类的三级联动显示
                GoodsCategory currentGoodsCategory = newBeeMallCategoryService.getGoodsCategoryById(newBeeMallGoods.getGoodsCategoryId());
                //商品表中存储的分类id字段为三级分类的id,不为三级分类则是错误数据
                if (currentGoodsCategory != null && currentGoodsCategory.getCategoryLevel() == CategoryLevelEnum.LEVEL_THREE.getLevel()) {
                    //查询所有的一级分类
                    List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
                    //根据parentId查询当前parentId下所有的三级分类
                    List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(currentGoodsCategory.getParentId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
                    //查询当前三级分类的父级二级分类
                    GoodsCategory secondCategory = newBeeMallCategoryService.getGoodsCategoryById(currentGoodsCategory.getParentId());
                    if (secondCategory != null) {
                        //根据parentId查询当前parentId下所有的二级分类
                        List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondCategory.getParentId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
                        //查询当前二级分类的父级一级分类
                        GoodsCategory firestCategory = newBeeMallCategoryService.getGoodsCategoryById(secondCategory.getParentId());
                        if (firestCategory != null) {
                            //所有分类数据都得到之后放到request对象中供前端读取
                            request.setAttribute("firstLevelCategories", firstLevelCategories);
                            request.setAttribute("secondLevelCategories", secondLevelCategories);
                            request.setAttribute("thirdLevelCategories", thirdLevelCategories);
                            request.setAttribute("firstLevelCategoryId", firestCategory.getCategoryId());
                            request.setAttribute("secondLevelCategoryId", secondCategory.getCategoryId());
                            request.setAttribute("thirdLevelCategoryId", currentGoodsCategory.getCategoryId());
                        }
                    }
                }
            }
        }
        if (newBeeMallGoods.getGoodsCategoryId() == 0) {
            //查询所有的一级分类
            List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
            if (!CollectionUtils.isEmpty(firstLevelCategories)) {
                //查询一级分类列表中第一个实体的所有二级分类
                List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
                if (!CollectionUtils.isEmpty(secondLevelCategories)) {
                    //查询二级分类列表中第一个实体的所有三级分类
                    List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
                    request.setAttribute("firstLevelCategories", firstLevelCategories);
                    request.setAttribute("secondLevelCategories", secondLevelCategories);
                    request.setAttribute("thirdLevelCategories", thirdLevelCategories);
                }
            }
        }
        request.setAttribute("goods", newBeeMallGoods);
        request.setAttribute("path", "goods-edit");
        return "admin/edit";
    }

    /**
     * 列表
     */
    @RequestMapping(value = "/goods/list", method = RequestMethod.GET)
    @ResponseBody
    public Result list(@RequestParam Map<String, Object> params) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        PageQueryUtil pageUtil = new PageQueryUtil(params);
        return ResultGenerator.genSuccessResult(newBeeMallGoodsService.getNewBeeMallGoodsPage(pageUtil));
    }

    /**
     * 添加
     */
    @RequestMapping(value = "/goods/save", method = RequestMethod.POST)
    @ResponseBody
    public Result save(@RequestBody Goods newBeeMallGoods) {
        if (StringUtils.isEmpty(newBeeMallGoods.getGoodsName())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsIntro())
                || StringUtils.isEmpty(newBeeMallGoods.getTag())
                || Objects.isNull(newBeeMallGoods.getOriginalPrice())
                || Objects.isNull(newBeeMallGoods.getGoodsCategoryId())
                || Objects.isNull(newBeeMallGoods.getSellingPrice())
                || Objects.isNull(newBeeMallGoods.getStockNum())
                || Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsCoverImg())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsDetailContent())) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallGoodsService.saveNewBeeMallGoods(newBeeMallGoods);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }


    /**
     * 修改
     */
    @RequestMapping(value = "/goods/update", method = RequestMethod.POST)
    @ResponseBody
    public Result update(@RequestBody Goods newBeeMallGoods) {
        if (Objects.isNull(newBeeMallGoods.getGoodsId())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsName())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsIntro())
                || StringUtils.isEmpty(newBeeMallGoods.getTag())
                || Objects.isNull(newBeeMallGoods.getOriginalPrice())
                || Objects.isNull(newBeeMallGoods.getSellingPrice())
                || Objects.isNull(newBeeMallGoods.getGoodsCategoryId())
                || Objects.isNull(newBeeMallGoods.getStockNum())
                || Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsCoverImg())
                || StringUtils.isEmpty(newBeeMallGoods.getGoodsDetailContent())) {
            return ResultGenerator.genFailResult("参数异常!");
        }
        String result = newBeeMallGoodsService.updateNewBeeMallGoods(newBeeMallGoods);
        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult(result);
        }
    }


安装部署需求

eclipse、idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在eclipse中编辑进行打包;
下载并配置Tomcat8.0服务器,配置系统服务,上传项目打包文件

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL
4.框架:html+Springboot+mybatis

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse/IDEA
语言 JDK1.8 、html、CSS、SSM
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt-FFmpeg开发-打开本地摄像头(6)

Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】 文章目录Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】1、概述2、实现效果3、FFmpeg打开摄像头解码流程4、查询可用摄像头5、设置摄像头打开参数6、主要代码6.1 解码代码5.2 OpenGL显示RGB图像代码7、完整源代码…

SQLDEV平台教学 - 权限配置

前置 - 安装SQLDEV并激活 未安装的可以访问SQLDEV官网下载社区版安装或申请商业版试用。 社区版只支持单个项目&#xff0c;无法新建项目&#xff0c;本篇以商业版为演示基础。 新建项目 超级管理员/应用管理员账号登录系统。点击顶部导航“应用管理”&#xff0c;在下拉菜单…

nginx $uri导致的CRLF注入漏洞

路径&#xff1a;nginx/insecure-configuration 运行成功后&#xff0c;Nginx将会监听8080/8081/8082三个端口&#xff0c;分别对应三种漏洞。 8080&#xff1a;CRLF注入漏洞 8081&#xff1a; 目录穿越漏洞 8082&#xff1a; add_header被覆盖 $uri导致的CRLF注入漏洞 Nginx…

GDP-L-岩藻糖二钠盐,GDP-fucose ,6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate

产品名称&#xff1a;GDP-L-岩藻糖二钠盐&#xff0c;GDP-B-L-岩藻糖(钠盐) 英文名称&#xff1a;GDP-fucose &#xff0c;6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate Chemical Name GDP-L-岩藻糖 GDP-L-fucose disodium salt CAS Number 15839-70-0 Mol. For…

了解低压差稳压IC(LDO)及其在电池驱动设备中的意义

了解低压差稳压IC&#xff08;LDO&#xff09;及其在电池供电设备中的重要性 如今&#xff0c;电子设备的尺寸比以往任何时候都要小。这使我们能够在智能手表&#xff0c;健身追踪器和其他可穿戴设备等紧凑型便携式设备中加入功能&#xff0c;它还帮助我们部署远程物联网设备进…

Batch Normalization——李宏毅机器学习笔记

Batch Normalization 详细可见paper《Batch Normalization: Accelerating Deep Network Training by Reducing Internet Covariate Shift》&#xff0c;2015 Feature Scaling&#xff08;特征缩放&#xff09;/Feature Normalization &#xff08;引言&#xff09; Make dif…

Python入门项目,从不会编程到完成这个小游戏,也就两天时间

前言 还在啃书本学python吗&#xff1f; 为什么不试试用有趣的小游戏来学编程&#xff1f;自己开发的游戏&#xff0c;既能活学活用python&#xff0c;又能找回学习的自信。 &#xff08;文末送读者福利&#xff09; 下面我带大家开发一个Python小游戏&#xff0c;这是我在…

ORACLE连接不上 Linux网络 端口 问题判断

最近遇到一个问题&#xff0c;配置一个oracle数据源怎么都连接不上&#xff0c;ping Ip可以连接通&#xff0c;且毫秒数都很小。telnet 也能连接 但是很快就自动断开。 别人也能连接oracle的数据库&#xff0c;我这边服务器不行&#xff0c;就很奇怪。各种方法都来试试。 SEL…

GD32F30x系列Systick系统滴答定时器 (Qt模拟项目 可套函数模板)

GD32F30x系列Systick系统滴答定时器【0】Qt 项目效果展示【1】SysTick 简介【2】SysTick 寄存器【3】代码配置和初始化说明【3.1】core_cm4.h头文件【3.2】systick.h【3.3】mainwindow.h【3.4】systick.cpp【3.5】mainwindow.cpp [主流程]本次Systick系统滴答定时器&#xff0c…

Ubuntu 18.04安装fast-dds

提纲 1、概述 2、foonathan_memory_vendor 3、fast-cdr 4、fast-dds 5、编译HelloWorldExample 6、安装fast-dds-gen&#xff0c;使用IDL文件构建代码 1、概述 fastdds是干什么&#xff0c;就不重复说了。 操作系统是Ubuntu18.04 本次采用源码编译安装&#xff0c;需要使用到…

用二元泊松模型预测2022世界杯8强

用二元泊松模型预测2022世界杯8强 网上有很多文章用双泊松&#xff08;Double Poisson&#xff09;模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷&#xff0c;那就是它假设比赛中两队的比分是条件独立的。而我们都知道&#xff0c;在对抗性比赛中&#xff0c;两…

(十二)笔记MQ学习之优劣介绍

&#xff08;&#xff08;十二&#xff09;笔记MQ学习之优劣介绍一、MQ的优势1.应用解耦2.异步提速3.削峰填谷二、MQ的劣势1.系统可用性降低2.系统复杂度提高3.一致性问题三、MQ的使用条件四、常见的MQ产品一、MQ的优势 1.应用解耦 使用MQ使得应用解耦&#xff0c;提升容错性…

[附源码]Python计算机毕业设计Django勤工助学管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Linux之基于Centos系统安装Redis、MySQL、Nginx

一. Redis的安装 1. 准备 (1). 宿主机&#xff1a;centos 8.0 (2). Redis源码&#xff1a;【压缩包&#xff1a; redis-5.0.0.tar.gz】 需要自行编译。 (PS&#xff1a;这个压缩包可以直接Centos系统中在线下载 或者去Redis官网先下载&#xff0c;然后copy到Centos系统中) …

Java入门教程(4)——JDK环境变量的配置

1 1.path是一个常见的环境变量&#xff0c;它告诉系统除了在当前目录下寻找此程序外&#xff0c;还可以到path指定的目录下寻找。 2.JAVA_HOME (1) 为以后其他软件寻找JDK做准备 classpath不需配置 3.JDK1.5以上版本&#xff0c;JRE会自动搜索当前路径下的类文件及相关jar…

在浏览器中输入url回车后发生了什么

1.dns进行解析&#xff1a;将url地址&#xff08;www.bilibili.com&#xff09;解析成ip地址&#xff08;110.43.34.184&#xff09;&#xff0c;ip地址就是想要访问的服务器的地址 dns就是数据库&#xff0c;这个数据库中记录着url地址和ip地址的对应关系 2.正式发送数据之前…

react 初体验

react笔记 创建一个项目 npm install -g create-react-app // 全局安装脚手架 create-react-app react-01 // 新建一个项目 npm start快捷定义组件 安装组件后&#xff0c;快捷命令 rcc &#xff1a;类式组件 rfc&#xff1a;函数式组件 axios开启代理 在package.json中新…

为什么我推荐你一定要学Python?

很多初学者都听说python很火&#xff0c;可是为啥要学Python&#xff0c;下面谈谈我的感悟 python语言是我目前为止用的最爽的语言&#xff0c;因为它真的很优美.虽然c,c,java也非常的强大和伟大&#xff0c;但是每一种语言伟大的背后都是有一定的时代背景。 说起Python这门编…

VINS学习02——VINS系列代码所有依赖库安装(保姆级)

0.简介 在学习视觉SLAM过程中&#xff0c;先后用了VINS_mono,VINS_Fusion,Omni_swarm,因为是第一次做视觉相关定位&#xff0c;所以大部分库都是第一次装&#xff0c;中间还从虚拟机换到双系统&#xff0c;意识到记录的重要行性&#xff0c;所以在此记录安装相关依赖库的教程。…

python 练习题

for 循环 和 while 循环 判断101-200之间有多少个素数&#xff0c;并输出所有素数。 &#xff08;什么是素数(质数): 除了1和它本身&#xff0c;不能被其他的数整除&#xff09; 方法1&#xff1a; count 0 # 设定素数的初始个数为0 for num in range…