水果商城,可运行
文章目录
- 项目介绍
- 一、技术栈
- 二、本项目分为前后台,有管理员与用户两种角色;
- 1、管理员角色包含以下功能:
- 2、用户角色包含以下功能:
- 三、用户功能页面展示
- 四、管理员功能页面展示
- 五、部分代码展示
- 六、获取整套项目源码
项目介绍
一、技术栈
java+jsp
技术栈:Spring+SpringMVC+Mybatis

二、本项目分为前后台,有管理员与用户两种角色;
1、管理员角色包含以下功能:
六大功能模块:类目管理、用户管理、商品管理、订单管理、公告管理、评论管理

2、用户角色包含以下功能:
1、用户登录/注册 2、查看首页 3、查看商品详情 4、查看购物车 5、提交订单 6、修改个人信息 7、修改密码 8、查看我的订单 9、添加配送地址 10、查看收藏夹等功能 11、搜索商品 12、查看公告 13、评论留言 14、商品收藏
三、用户功能页面展示




四、管理员功能页面展示



五、部分代码展示
package com.javapandeng.controller;import com.alibaba.fastjson.JSONObject;
import com.javapandeng.po.Item;
import com.javapandeng.po.Car;
import com.javapandeng.service.ItemService;
import com.javapandeng.service.CarService;
import com.javapandeng.utils.Consts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;/*** 购物车*/
@Controller
@RequestMapping("/car")
public class CarController {@Autowiredprivate CarService carService;@Autowiredprivate ItemService itemService;@RequestMapping("/exAdd")@ResponseBodypublic String exAdd(Car car, HttpServletRequest request){JSONObject js = new JSONObject();Object attribute = request.getSession().getAttribute(Consts.USERID);if(attribute==null){js.put(Consts.RES,0);return js.toJSONString();}//保存到购物车Integer userId = Integer.valueOf(attribute.toString());car.setUserId(userId);Item item = itemService.load(car.getItemId());String price = item.getPrice();Double valueOf = Double.valueOf(price);car.setPrice(valueOf);if(item.getZk()!=null){valueOf = valueOf*item.getZk()/10;BigDecimal bg = new BigDecimal(valueOf).setScale(2, RoundingMode.UP);car.setPrice(bg.doubleValue());valueOf = bg.doubleValue();}Integer num = car.getNum();Double t = valueOf*num;BigDecimal bg = new BigDecimal(t).setScale(2, RoundingMode.UP);double doubleValue = bg.doubleValue();car.setTotal(doubleValue+"");carService.insert(car);js.put(Consts.RES,1);return js.toJSONString();}/*** 转向我的购物车页面*/@RequestMapping("/findBySql")public String findBySql(Model model,HttpServletRequest request){Object attribute = request.getSession().getAttribute(Consts.USERID);if(attribute==null){return "redirect:/login/toLogin";}Integer userId = Integer.valueOf(attribute.toString());String sql = "select * from car where user_id="+userId+" order by id desc";List<Car> list = carService.listBySqlReturnEntity(sql);model.addAttribute("list",list);return "car/car";}/*** 删除购物车*/@RequestMapping("/delete")@ResponseBodypublic String delete(Integer id){carService.deleteById(id);return "success";}
}
package com.javapandeng.controller;import com.javapandeng.base.BaseController;
import com.javapandeng.po.Comment;
import com.javapandeng.service.CommentService;
import com.javapandeng.utils.Consts;
import com.javapandeng.utils.Pager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import java.util.Date;/*** 评论*/
@Controller
@RequestMapping("/comment")
public class CommentController extends BaseController {@Autowiredprivate CommentService commentService;/*** 添加执行*/@RequestMapping("/exAdd")public String exAdd(Comment comment, HttpServletRequest request){Object attribute = request.getSession().getAttribute(Consts.USERID);if(attribute==null){return "redirect:/login/toLogin";}Integer userId = Integer.valueOf(attribute.toString());comment.setAddTime(new Date());comment.setUserId(userId);commentService.insert(comment);return "redirect:/itemOrder/my.action";}}
package com.javapandeng.controller;import com.alibaba.fastjson.JSONObject;
import com.javapandeng.base.BaseController;
import com.javapandeng.po.*;
import com.javapandeng.service.*;
import com.javapandeng.utils.Consts;
import com.javapandeng.utils.Pager;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** 订单管理*/
@Controller
@RequestMapping("/itemOrder")
public class ItemOrderController extends BaseController {@Autowiredprivate ItemOrderService itemOrderService;@Autowiredprivate UserService userService;@Autowiredprivate CarService carService;@Autowiredprivate OrderDetailService orderDetailService;@Autowiredprivate ItemService itemService;/*** 订单管理列表*/@RequestMapping("/findBySql")public String findBySql(ItemOrder itemOrder, Model model){//分页查询String sql = "select * from item_order where 1=1 ";if(!(isEmpty(itemOrder.getCode()))){sql +=" and code like '%"+itemOrder.getCode()+"%' ";}sql += " order by id desc";Pager<ItemOrder> pagers = itemOrderService.findBySqlRerturnEntity(sql);model.addAttribute("pagers",pagers);//存储查询条件model.addAttribute("obj",itemOrder);return "itemOrder/itemOrder";}/*** 我的订单*/@RequestMapping("/my")public String my(Model model, HttpServletRequest request){Object attribute = request.getSession().getAttribute(Consts.USERID);if(attribute==null){return "redirect:/login/uLogin";}Integer userId = Integer.valueOf(attribute.toString());//全部订单String sql = "select * from item_order where user_id="+userId+" order by id desc";List<ItemOrder> all = itemOrderService.listBySqlReturnEntity(sql);//待发货String sql2 = "select * from item_order where user_id="+userId+" and status=0 order by id desc";List<ItemOrder> dfh = itemOrderService.listBySqlReturnEntity(sql2);//已取消String sql3 = "select * from item_order where user_id="+userId+" and status=1 order by id desc";List<ItemOrder> yqx = itemOrderService.listBySqlReturnEntity(sql3);//已发货String sql4 = "select * from item_order where user_id="+userId+" and status=2 order by id desc";List<ItemOrder> dsh = itemOrderService.listBySqlReturnEntity(sql4);//已收货String sql5 = "select * from item_order where user_id="+userId+" and status=3 order by id desc";List<ItemOrder> ysh = itemOrderService.listBySqlReturnEntity(sql5);model.addAttribute("all",all);model.addAttribute("dfh",dfh);model.addAttribute("yqx",yqx);model.addAttribute("dsh",dsh);model.addAttribute("ysh",ysh);return "itemOrder/my";}/*** 购物车结算提交*/@RequestMapping("/exAdd")@ResponseBodypublic String exAdd(@RequestBody List<CarDto> list,HttpServletRequest request){Object attribute = request.getSession().getAttribute(Consts.USERID);JSONObject js = new JSONObject();if(attribute==null){js.put(Consts.RES,0);return js.toJSONString();}Integer userId = Integer.valueOf(attribute.toString());User byId = userService.getById(userId);if(StringUtils.isEmpty(byId.getAddress())){js.put(Consts.RES,2);return js.toJSONString();}List<Integer> ids = new ArrayList<>();BigDecimal to = new BigDecimal(0);for(CarDto c:list){ids.add(c.getId());Car load = carService.load(c.getId());to = to.add(new BigDecimal(load.getPrice()).multiply(new BigDecimal(c.getNum())));}ItemOrder order = new ItemOrder();order.setStatus(0);order.setCode(getOrderNo());order.setIsDelete(0);order.setTotal(to.setScale(2,BigDecimal.ROUND_HALF_UP).toString());order.setUserId(userId);order.setAddTime(new Date());itemOrderService.insert(order);//订单详情放入orderDetail,删除购物车if(!CollectionUtils.isEmpty(ids)){for(CarDto c:list){Car load = carService.load(c.getId());OrderDetail de = new OrderDetail();de.setItemId(load.getItemId());de.setOrderId(order.getId());de.setStatus(0);de.setNum(c.getNum());de.setTotal(String.valueOf(c.getNum()*load.getPrice()));orderDetailService.insert(de);//修改成交数Item load2 = itemService.load(load.getItemId());load2.setGmNum(load2.getGmNum()+c.getNum());itemService.updateById(load2);//删除购物车carService.deleteById(c.getId());}}js.put(Consts.RES,1);return js.toJSONString();}private static String date;private static long orderNum = 0L;public static synchronized String getOrderNo(){String str = new SimpleDateFormat("yyyyMMddHHmm").format(new Date());if(date==null||!date.equals(str)){date = str;orderNum = 0L;}orderNum++;long orderNO = Long.parseLong(date)*10000;orderNO += orderNum;return orderNO+"";}/*** 取消订单*/@RequestMapping("/qx")public String qx(Integer id,Model model){ItemOrder obj =itemOrderService.load(id);obj.setStatus(1);itemOrderService.updateById(obj);model.addAttribute("obj",obj);return "redirect:/itemOrder/my";}/*** 后台发货*/@RequestMapping("/fh")public String fh(Integer id,Model model){ItemOrder obj =itemOrderService.load(id);obj.setStatus(2);itemOrderService.updateById(obj);model.addAttribute("obj",obj);return "redirect:/itemOrder/findBySql";}/*** 用户收货*/@RequestMapping("/sh")public String sh(Integer id,Model model){ItemOrder obj =itemOrderService.load(id);obj.setStatus(3);itemOrderService.updateById(obj);model.addAttribute("obj",obj);return "redirect:/itemOrder/my";}/*** 用户评价入口*/@RequestMapping("/pj")public String pj(Integer id,Model model){model.addAttribute("id",id);return "itemOrder/pj";}
}
六、获取整套项目源码
相关文章:
水果商城,可运行
文章目录项目介绍一、技术栈二、本项目分为前后台,有管理员与用户两种角色;1、管理员角色包含以下功能:2、用户角色包含以下功能:三、用户功能页面展示四、管理员功能页面展示五、部分代码展示六、获取整套项目源码项目介绍 一、…...
LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像
LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头…...
软件测试---测试分类
一 : 按测试对象划分 1.1 可靠性测试 可靠性(Availability)即可用性,是指系统正常运行的能力或者程度,一般用正常向用户提供软件服务的时间占总时间的百分比表示。 1.2 容错性测试 行李箱 , 四个轮子 , 坏了一个 , 说明这个容错…...
剑指 Offer II 015. 字符串中的所有变位词
题目链接 剑指 Offer II 015. 字符串中的所有变位词 mid 题目描述 给定两个字符串 s和 p,找到 s中所有 p的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 变位词 指字母相同,但排列不同的字符串。 示例 1: 输…...
【SpringCloud】SpringCloud详细教程之微服务比较
目录前言一.什么是微服务?为什么要使用微服务二.微服务对比三.企业开发场景前言 我会通过实际代码来给展示每个组件的用法 一.什么是微服务?为什么要使用微服务 分布式,把一个项目拆分成多个模块,每一个模块相当于一个服务。 微…...
二.项目使用vue-router,引入ant-design-vue的UI框架,引入less
根据前文《使用Vue脚手架工具搭建vue项目》搭建好脚手架后使用 1.vue-router 2.引入UI框架ant design vue 3.引入less 1.vue-router vue-router分为两种模式(默认为hash模式): hash history hash: 特征: 1.hash会在浏览器路径里带#号&#…...
网络安全怎么学?20年白帽子老江湖告诉你
很多人都知道龙叔是个老程序员,但却不知道其实我也是个H客,20年前我就开始痴迷于H客技术,可以说是网络安全方面的老江湖了。 到现在,我还依然会去研究这一块,偶尔会和一些网安的朋友交流技术,比如说红盟的…...
药房管理系统;药库管理系统
第一,主要功能: 本系统集日常销售、药品进销存、会员积分、GSP管理等药店所需的所有功能于一体,实现店铺管理的全部自动化。第二、新功能: 增加了“按功能查询药品”的功能,使软件用户可以根据客户的症状推荐合适…...
深眸科技|机器视觉提升制造性能,焕发传统企业智造新活力!
随着机器视觉技术的成熟与发展,其在工业制造中得到越来越广泛的应用。机器视觉在工业制造领域的应用朝着智能识别、智能检测、智能测量以及智能互联的完整智能体系方向发展。此外,快速变化的市场需求,不断涌入行业的竞争对手,让传…...
ubuntu安装SSH的方法
Ubuntu安装SSH的方法。14版的ubuntu经过测试,默认没有开启SSH,所以需要安装。 1、虚拟机设置网卡为桥接模式,即NAT。12版虚拟机默认的。 2、查看ubuntu使用的ip。 ifconfig即可查看,14版的ubuntu自带这个命令。 3、查看是否pi…...
哪种蓝牙耳机通话效果好?通话清晰的蓝牙耳机推荐
出门的时候,如果戴耳机和别人通话,就不必把耳机摘下来,接电话变得前所未有的简单。现在的蓝牙耳机,已经不是单纯的用来听音乐了,而是一种更好的功能。下面这四款蓝牙耳机不仅适合听歌,通话还清晰࿰…...
IT运维如何完成一场高质量复盘
复盘的终极目标是:还原事实,找到薄弱点加以改进。 提到复盘,很多人的第一反应是线上故障,有人要背锅了。 复盘真正的价值是还原事实,在薄弱处加以改进。如何做一次高质量的复盘,我们给出3点建议。 1、坦…...
JVM调优面试题——基础知识
文章目录1、JDK,JRE以及JVM的关系2、编译器到底干了什么事?3、类加载机制是什么?3.1、装载(Load)3.2、链接(Link)3.3、初始化(Initialize)4、类加载器有哪些?5、什么是双亲委派机制?6、介绍一下JVM内存划分(…...
三、mongdb 查询
一、 MongoDB文档检索 MongoDB中有多种方式可以检索文档: 1.1 查询过滤器 使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。 例如: db.col.find({"status":"A"})这个示例查询status等于“A”的文档。 1.2 范围查询操作符…...
python的 ping 网络状态监测方法(含多IP)
ping 基本概念 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Messag…...
【独家】华为OD机试提供C语言题解 - 单词反转
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明单词…...
Linux docker环境安装,docker-compose安装,jdk17安装
安装docker 删除之前安装的docker yum remove docker \docker-client \docker-client-latest \docker- common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-sqlinux \docker-engine-selinux \docker-engine \docker-ce安装yum工具 yum install -y y…...
界面开发(3)--- PyQt5用户登录界面连接数据库
文章目录数据库账户注册账号登录找回密码为了实现用户登录界面的登录功能,我们必须建立一个数据库,并把账号和对应的密码,存储到数据库中。如果输入的账号和密码与数据库中的一致,那我们就允许用户登录,进入新的界面。…...
以下真的没有任何要写的了,我需要凑字数,请大家原谅
以下真的没有任何要写的了,我需要凑字数,请大家原谅!!!!!!!!!!!!!!!&#…...
2023年 Java 发展趋势
GitHub 语言统计表明,Java在编程语言中排名第二,而在2022年的TIOBE指数中,Java排在第四。 抛开排名,Java是自诞生以来企业使用率最高的编程语言,作为一种编程语言,它比许多竞争对手都有更多的优点…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
