当前位置:

首页 > 编程开发 > Java如何实现鲜花商城系统

Java如何实现鲜花商城系统

项目介绍该项目为前后台项目,分为普通用户与管理员两种角色,前台普通用户登录,后台管理员登录;管理员角色包含以下功能:管理员登录,用户管理,鲜花类别管理,鲜花管理,订单管理并发货,留言管理,系统公告管理等功能。用户角色包含以下功能:用户首页,用户注册登录,查看鲜花详情,加入购物车,确认订单,查看我的订单,商城留言板,商城公告等功能。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

本文目录

    项目介绍

    该项目为前后台项目,分为普通用户与管理员两种角色,前台普通用户登录,后台管理员登录;

    管理员角色包含以下功能:

    管理员登录,用户管理,鲜花类别管理,鲜花管理,订单管理并发货,留言管理,系统公告管理等功能。

    用户角色包含以下功能:

    用户首页,用户注册登录,查看鲜花详情,加入购物车,确认订单,查看我的订单,商城留言板,商城公告等功能。

    环境需要

    1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。

    2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

    3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可

    4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 

    5.数据库:MySql 5.7版本;

    6.是否Maven项目:否;

    技术栈

    1. 后端:Spring+SpringMVC+Mybatis

    2. 前端:JSP+jQuery+Ajax

    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;

    2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;

    3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;

    4. 运行项目,输入localhost:8080/ 登录

    用户账号/密码: user/123456

    管理员账号/密码:admin/admin

    效果图展示

    Java如何实现鲜花商城系统

    Java如何实现鲜花商城系统

    Java如何实现鲜花商城系统

    Java如何实现鲜花商城系统

    Java如何实现鲜花商城系统

    Java如何实现鲜花商城系统

    核心代码

    商品管理控制层

    /**
     * 商品
     **/
    @RestController
    @RequestMapping("flower")
    public class FlowerController {
        @Autowired
        FlowersService flowerService;
     
        @Autowired
        FlowersDao flowersDao;
     
        @RequestMapping("/test")
        R test() {
            R r = new R();
            return r;
        }
     
        //find
        @RequestMapping("/find")
        R find(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey, @RequestParam("searchType") String searchType) {
            R r = new R();
            List flowers = flowerService.find(searchKey, searchType);
            if (flowers == null) {
                return r.setCode(2000);
            }
            return getResponse(flowers, page, Constant.SHOW_PAGE_SIZE, r);
        }
     
        // 管理员查询所有
        @RequestMapping("/findAll")
        R findAll(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey) {
            R r = new R();
            List flowers = flowerService.findAll(searchKey);
            if (flowers == null) {
                return r.setCode(2000);
            }
            return getResponse(flowers, page, Constant.PAGE_SIZE, r);
        }
     
        // 返回结果
        private R getResponse(List flowers, int page, int pageSize, R r) {
            Map map = new HashMap<>();
            List items = flowers.size() >= page * pageSize ?
                    flowers.subList((page - 1) * pageSize, page * pageSize)
                    : flowers.subList((page - 1) * pageSize, flowers.size());
            int len = flowers.size() % pageSize == 0 ? flowers.size() / pageSize
                    : (flowers.size() / pageSize + 1);
            for (Flower item : items) {
                if (item.getImg_guid() == null) {
                    item.setImg_guid(Constant.DEFAULT_IMG);
                }
                item.setImg_guid(Constant.IMG_USE_PATH + item.getImg_guid());
            }
            map.put("items", items);
            map.put("len", len);
            return r.setCode(2000).setData(map);
        }
     
        @RequestMapping("/create")
        R create(@RequestBody Flower flower) {
            R r = new R();
            int ans = flowerService.add(flower);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.ADD_FLOWER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.ADD_FLOWER_FAILED);
        }
     
        @RequestMapping("/update")
        R update(@RequestBody Flower flower) {
            R r = new R();
            int ans = flowerService.update(flower);
            if (ans >= 0) {
                return r.setCode(2000).setMsg(HttpMsg.UPDATE_FLOWER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.UPDATE_FLOWER_FAILED);
        }
     
        @RequestMapping("/changeState")
        R changeState(@RequestBody Flower flower) {
            R r = new R();
            flowersDao.changeState(flower);
            String msg = flower.getState() == 1?HttpMsg.GOODS_UP_OK:HttpMsg.GOODS_DOWN_OK;
            return r.setCode(2000).setMsg(msg);
        }
     
        // 保存上传的图片
        @RequestMapping("/updateImg")
        R updateImg(@RequestParam("file") MultipartFile file) {
            R r = new R();
            // 只接收 jpg/png 图片
            String filename = file.getOriginalFilename();
            if (!filename.endsWith(".jpg") && !filename.endsWith(".png")){
                return r.setCode(4000).setMsg(HttpMsg.ERROR_FILE_TYPE);
            }
            String img_guid = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
            try {
                savePic(file.getInputStream(), img_guid);
                return r.setCode(2000).setMsg(HttpMsg.UPDATE_PIC_OK).setData(img_guid);
            } catch (IOException e) {
                return r.setCode(4000).setMsg(HttpMsg.UPDATE_PIC_FAILED);
            }
        }
     
        @PutMapping("/updateImgGuid")
        R updateImgGuid(@RequestParam("guid") String guid, @RequestParam("id") int id) {
            R r = new R();
            int ans = flowerService.updateImg(guid, id);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.UPDATE_PIC_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.UPDATE_PIC_FAILED);
        }
     
        @DeleteMapping("/delete")
        R delete(@RequestParam("id") int id) {
            R r = new R();
            int ans = flowerService.delete(id);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.DELETE_FLOWER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.DELETE_FLOWER_FAILED);
        }
     
        private void savePic(InputStream inputStream, String fileName) {
            OutputStream os = null;
            try {
                String path = Constant.IMG_PATH;
                // 1K的数据缓冲
                byte[] bs = new byte[1024];
                // 读取到的数据长度
                int len;
                // 输出的文件流保存到本地文件
                os = new FileOutputStream(new File(path + fileName));
                // 开始读取
                while ((len = inputStream.read(bs)) != -1) {
                    os.write(bs, 0, len);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 完毕,关闭所有链接
                try {
                    os.close();
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    订单管理控制层

    /**
     * 用户
     **/
    @RestController
    @RequestMapping("order")
    public class OrderController {
        @Autowired
        OrderService orderService;
        @Autowired
        UserDao userDao;
        @Autowired
        OrderDao orderDao;
        @Autowired
        FlowersDao flowersDao;
     
        @RequestMapping("/test")
        R test() {
            R r = new R();
            return r.setCode(4000).setMsg(Constant.IMG_PATH).setData(orderDao.findAll(null));
        }
     
        @RequestMapping("/queryByAccount")
        R queryByAccount(@RequestParam("account") String account) {
            R r = new R();
            if (StringUtil.isEmpty(account)) {
                return r.setCode(4000).setMsg(HttpMsg.INVALID_PARAM);
            }
            List orders = orderService.queryByAccount(account);
            return r.setCode(2000).setData(orders);
        }
     
        @RequestMapping("/find")
        R find(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey, @RequestParam("account") String account) {
            R r = new R();
            Map map = new HashMap<>();
            List orders = orderService.find(searchKey, account);
            if (orders == null) {
                return r.setCode(2000);
            }
            map.put("items", orders);
            map.put("len", orders.size());
            return r.setCode(2000).setData(map);
        }
     
        @RequestMapping("/findAll")
        R findAll(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey) {
            R r = new R();
            Map map = new HashMap<>();
            List orders = orderService.findAll(searchKey);
            if (orders == null) {
                return r.setCode(2000);
            }
            List items = orders.size() >= page * Constant.PAGE_SIZE ?
                    orders.subList((page - 1) * Constant.PAGE_SIZE, page * Constant.PAGE_SIZE)
                    : orders.subList((page - 1) * Constant.PAGE_SIZE, orders.size());
            int len = orders.size() % Constant.PAGE_SIZE == 0 ? orders.size() / Constant.PAGE_SIZE
                    : (orders.size() / Constant.PAGE_SIZE + 1);
            List vos = new ArrayList<>();
            for (Order item : items) {
                User user = userDao.queryById(item.getUid());
                OrderVo vo = new OrderVo();
                vo.setAddress(user.getAddress()).setPhone(user.getPhone()).setUsername(user.getName())
                        .setAmount(item.getAmount()).setFlower(item.getFlower()).setId(item.getId())
                        .setUid(item.getUid()).setOrder_guid(item.getOrder_guid()).setPrice(item.getPrice())
                        .setState(item.getState());
                vos.add(vo);
            }
            map.put("items", vos);
            map.put("len", len);
            return r.setCode(2000).setData(map);
        }
     
        @RequestMapping("/update")
        R update(@RequestBody Order order) {
            R r = new R();
            int ans = orderService.update(order);
            if (ans >= 0) {
                return r.setCode(2000).setMsg(HttpMsg.UPDATE_USER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.UPDATE_USER_FAILED);
        }
     
        @RequestMapping("/changeState")
        R changeState(@RequestBody Order order) {
            orderDao.changeState(order);
            return new R().setCode(2000).setMsg(HttpMsg.UPDATE_ORDER_OK);
        }
     
        @DeleteMapping("/delete")
        R delete(@RequestParam("id") int id) {
            R r = new R();
            int ans = orderService.delete(id);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.DELETE_USER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.DELETE_USER_FAILED);
        }
    }

    用户管理控制层

    /**
     * 用户
     **/
    @RestController
    @RequestMapping("user")
    public class UserController {
        @Autowired
        UserService userService;
        @Autowired
        UserDao dao;
     
        @RequestMapping("/test")
        R test() {
            R r = new R();
            return r.setCode(4000).setMsg(Constant.IMG_PATH).setData(dao.findAll());
        }
     
        @RequestMapping("/queryInfoByAccount")
        R queryInfoByAccount(@RequestParam("account") String account) {
            R r = new R();
            if (StringUtil.isEmpty(account)){
                return r.setCode(4000).setMsg(HttpMsg.INVALID_PARAM);
            }
            User loginUser = userService.queryInfo(account);
            if (loginUser == null){
                return r.setCode(4000).setMsg(HttpMsg.INVALID_USER);
            }
            return r.setCode(2000).setData(loginUser);
        }
     
     
        @RequestMapping("/find")
        R find(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey) {
            R r = new R();
            Map map = new HashMap<>();
            List users = userService.find(searchKey);
            if (users == null) {
                return r.setCode(2000);
            }
            List items = users.size() >= page * Constant.PAGE_SIZE ?
                    users.subList((page - 1) * Constant.PAGE_SIZE, page * Constant.PAGE_SIZE)
                    : users.subList((page - 1) * Constant.PAGE_SIZE, users.size());
            int len = users.size() % Constant.PAGE_SIZE == 0 ? users.size() / Constant.PAGE_SIZE
                    : (users.size() / Constant.PAGE_SIZE + 1);
            map.put("items", items);
            map.put("len", len);
            return r.setCode(2000).setData(map);
        }
     
     
        @RequestMapping("/create")
        R create(@RequestBody User user) {
            R r = new R();
            int ans = userService.add(user);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.ADD_USER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.ADD_USER_FAILED);
        }
     
        @RequestMapping("/update")
        R update(@RequestBody User user) {
            R r = new R();
            int ans = userService.update(user);
            if (ans >= 0) {
                return r.setCode(2000).setMsg(HttpMsg.UPDATE_USER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.UPDATE_USER_FAILED);
        }
     
     
        @DeleteMapping("/delete")
        R delete(@RequestParam("id") int id) {
            R r = new R();
            int ans = userService.delete(id);
            if (ans == 1) {
                return r.setCode(2000).setMsg(HttpMsg.DELETE_USER_OK);
            }
            return r.setCode(4000).setMsg(HttpMsg.DELETE_USER_FAILED);
        }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。