ssm+jsp653基于Javaweb的网上花店系统的设计与实现

news2024/11/6 16:13:10


博主介绍:专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍  翰文编程CSDN博客 翰文编程-CSDN博客
文末下方有源码获取地址

4.2系统功能结构

系统的功能结构是系统实现的框架,本系统的主要结构为管理员和用户。管理员的功能为个人中心管理、公告信息管理、分类管理、鲜花管理、注册用户管理、订单管理、评价管理等。用户的功能为在线注册与登录、公告信息浏览、鲜花信息浏览、个人资料信息管理、我的购物车管理、我的订单管理、在线交流和鲜花评价。本基于Javaweb的网上花店系统用户功能结构图如下图4-1所示:

图4-1基于Javaweb的网上花店系统用户功能结构图

基于Javaweb的网上花店系统的用户功能结构图如下图4-2所示:

图4-2基于Javaweb的网上花店系统管理员功能结构图

4.2.1 数据处理与安全设计

数据的安全设计主要考虑的系统的程序和数据库的处理和安全性,数据处理的时候都设置了相应的限制,必须输入合法的数据才能进行正常操作,否则系统会有相应的提示。根据不同的安全指标采用的是不同的安全方法,系统需要有明确的权限划分,有用户权限和管理员权限,用户只能操作用户的部分,不能登录管理员权限,其次是用户之间不能相互冲突,用户名不能有重复的,其次用户登录账号密码的时候,密码需要加密不可见,必须通过正规的登录途径才能登录系统,而且用户退出系统要删除相关的标记。

4.2.2特色功能设计

本系统的特色功能是在管理员操作界面加入了可视化统计,在鲜花管理功能和销售界面都加入图形统计,方便管理员更直观的了解和分析商品信息和销售信息。

4.3数据库设计

数据库设计在系统设计中占有重大比例,数据库的设计包括ER图设计和数据库表设计。

4.3.1ER图设计

根据本系统的特点,本系统设计的主要实体包括管理员信息、用户信息、鲜花信息、订单信息、公告信息信息和评价信息。

  1. 管理员ER图包括的属性有管理员的编号、用户名和密码。管理员ER图如下图4-2所示:

图4-2管理员实体的ER图

  1. 鲜花信息包含的属性为鲜花的详细描述,有鲜花编号、鲜花名称等。鲜花信息ER图如下图4-3所示:

图4-3鲜花信息实体ER图

(3)注册用户信息的属性包括用户的个人资料,有姓名、性别、电话等。注册用户信息实体ER图如下图4-4所示:

图4-4注册用户实体ER图

(4)订单实体的属性有订单时间、订单编号、订单人等。订单实体ER图如下图4-5所示:

图4-5订单信息实体ER图

(5)评价信息实体的属性有评价人、评价内容、评价时间等。评价信息实体的ER图如下图4-6所示:

图4-6评价信息实体ER图

(6)公告信息信息实体的属性有标题、内容、发布时间。公告信息实体ER图如下图4-7所示:

图4-7公告信息实体ER图

(7)本基于Javaweb的网上花店系统的整体实体关系图如下图4-8所示:

图4-8系统关系ER图

4.3.2数据库表设计

根据数据ER图的设计,本系统的数据库表有管理员信息表、用户信息表、鲜花信息表、评价信息表等。本系统的数据库表如下图4-1至4-15所示:

表4.1:address

表4.2:cart

表4.3:config

表4.4:dictionary

表4.5:forum

表4.6:gonggao

表4.7:token

表4.8:users

表4.9:xianhua

表4.10:xianhua_collection

表4.11:xianhua_commentback

表4.12:xianhua_liuyan

表4.13:xianhua_order

表4.14:yonghu

第5章 系统实现

5.1用户注册功能的界面实现

   用户注册功能设计的目的是实现用户的操作。系统中想要进行操作就需要先成为注册用户,游客只能浏览信息。用户注册功能界面中设置了用户的资料字段,本界面的数据和用户信息表相连,当游客在本界面里注册成功,所填写的资料会保存到用户信息表中。用户注册功能的运行界面如下图5-1所示:

图5-1用户注册功能的运行界面

5.2登录功能的界面实现

用户注册成功后,需要登录。登录界面设计的目的是保证当前的使用角色等级。管理员同样需要登录后才可以进行操作。用户登录和管理员登录的界面分为两个,在登录时只需要填写用户账号和密码就可以实现。用户登录的时候需要输入注册时候的账号密码,然后系统会自动的跟数据库存储好的数据进行信息比对,如果比对成功就可以成功登录,如果比对错误,那么会跳出来相应的错误提示,用户登录的运行界面如下图5-2所示:

图5-2用户登录的运行界面

管理员登录的界面中包含的元素有系统题目、输入框、登录按钮。管理员登录的条件是需要账号、密码、身份。管理员登录的运行界面如下图5-3所示:  

图5-3管理员登录运行界面

5.3管理员功能的设计实现

5.3.1注册用户管理功能的实现界面

用户注册后的资料管理员可以在注册用户管理功能里看到,本功能设计的目的是审核注册用户的资料,当发现不当的使用用户可以删除其账号。当删除注册用户信息后相对应的用户信息表里的信息也会随着删除掉。注册用户管理功能的运行界面如下图5-4所示:

图5-4注册用户管理功能的运行界面

5.3.2 会员等级管理功能的实现界面

   本功能可以实现对会员的等级进行管理,不同的会员等级可以享受不同的优惠折扣。会员等级管理功能的运行界面如下图5-5所示:

图5-5会员等级管理功能的运行界面

5.3.3公告信息管理功能的实现界面

   当管理员添加、编辑公告信息后,数据库表中的供应商信息表也会发生改变。供公告信息管理功能的运行界面如下图5-6所示:

图5-6公告信息管理功能的运行界面

5.3.4 鲜花分类管理功能的实现界面

本功能可以管理鲜花的分类,实现鲜花的条理管理。分类管理功能的运行界面如下图5-7所示:

图5-7分类管理运行界面

5.3.5 订单管理功能的实现界面

用户下订单后,管理员都可以在本功能里收到。当审核订单无误后可以进行下一步操作。然后可以安排发货,输入订单号。订单管理功能的运行界面如下图5-8所示:

图5-8订单管理功能的运行界面

5.3.6 鲜花信息管理功能的界面实现

   鲜花信息由管理员进行更新,在发布鲜花信息时可以显示发布时间。鲜花信息管理的运行界面如下图5-9所示:

图5-19鲜花信息管理功能的运行界面

5.3.7论坛管理功能的界面实现

管理员可以查看论坛信息,然后可以进行回复。实现界面如下图5-10所示:

图5-10论坛管理功能的实现界面

5.4用户角色功能的界面实现

5.4.1鲜花浏览功能的界面实现

   用户的功能主要展示在前台,在前台可以浏览所有分类的鲜花。鲜花详情中主要展示鲜花的图片、价格、标题。鲜花信息浏览功能的运行界面如下图5-11所示:

图5-11浏览鲜花运行界面

主要代码

  /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody XianhuaEntity xianhua, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,xianhua:{}",this.getClass().getName(),xianhua.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<XianhuaEntity> queryWrapper = new EntityWrapper<XianhuaEntity>()
            .eq("xianhua_name", xianhua.getXianhuaName())
            .eq("xianhua_types", xianhua.getXianhuaTypes())
            .eq("xianhua_kucun_number", xianhua.getXianhuaKucunNumber())
            .eq("xianhua_price", xianhua.getXianhuaPrice())
            .eq("xianhua_clicknum", xianhua.getXianhuaClicknum())
            .eq("shangxia_types", xianhua.getShangxiaTypes())
            .eq("xianhua_delete", xianhua.getXianhuaDelete())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        XianhuaEntity xianhuaEntity = xianhuaService.selectOne(queryWrapper);
        if(xianhuaEntity==null){
            xianhua.setXianhuaClicknum(1);
            xianhua.setShangxiaTypes(1);
            xianhua.setXianhuaDelete(1);
            xianhua.setCreateTime(new Date());
            xianhuaService.insert(xianhua);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody XianhuaEntity xianhua, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,xianhua:{}",this.getClass().getName(),xianhua.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<XianhuaEntity> queryWrapper = new EntityWrapper<XianhuaEntity>()
            .notIn("id",xianhua.getId())
            .andNew()
            .eq("xianhua_name", xianhua.getXianhuaName())
            .eq("xianhua_types", xianhua.getXianhuaTypes())
            .eq("xianhua_kucun_number", xianhua.getXianhuaKucunNumber())
            .eq("xianhua_price", xianhua.getXianhuaPrice())
            .eq("xianhua_clicknum", xianhua.getXianhuaClicknum())
            .eq("shangxia_types", xianhua.getShangxiaTypes())
            .eq("xianhua_delete", xianhua.getXianhuaDelete())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        XianhuaEntity xianhuaEntity = xianhuaService.selectOne(queryWrapper);
        if("".equals(xianhua.getXianhuaPhoto()) || "null".equals(xianhua.getXianhuaPhoto())){
                xianhua.setXianhuaPhoto(null);
        }
        if(xianhuaEntity==null){
            xianhuaService.updateById(xianhua);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        ArrayList<XianhuaEntity> list = new ArrayList<>();
        for(Integer id:ids){
            XianhuaEntity xianhuaEntity = new XianhuaEntity();
            xianhuaEntity.setId(id);
            xianhuaEntity.setXianhuaDelete(2);
            list.add(xianhuaEntity);
        }
        if(list != null && list.size() >0){
            xianhuaService.updateBatchById(list);
        }
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<XianhuaEntity> xianhuaList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            XianhuaEntity xianhuaEntity = new XianhuaEntity();
//                            xianhuaEntity.setXianhuaName(data.get(0));                    //鲜花名称 要改的
//                            xianhuaEntity.setXianhuaPhoto("");//照片
//                            xianhuaEntity.setXianhuaTypes(Integer.valueOf(data.get(0)));   //鲜花类型 要改的
//                            xianhuaEntity.setXianhuaKucunNumber(Integer.valueOf(data.get(0)));   //鲜花库存 要改的
//                            xianhuaEntity.setXianhuaPrice(Integer.valueOf(data.get(0)));   //购买获得积分 要改的
//                            xianhuaEntity.setXianhuaOldMoney(data.get(0));                    //鲜花原价 要改的
//                            xianhuaEntity.setXianhuaNewMoney(data.get(0));                    //现价 要改的
//                            xianhuaEntity.setXianhuaClicknum(Integer.valueOf(data.get(0)));   //点击次数 要改的
//                            xianhuaEntity.setShangxiaTypes(Integer.valueOf(data.get(0)));   //是否上架 要改的
//                            xianhuaEntity.setXianhuaDelete(1);//逻辑删除字段
//                            xianhuaEntity.setXianhuaContent("");//照片
//                            xianhuaEntity.setCreateTime(date);//时间
                            xianhuaList.add(xianhuaEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        xianhuaService.insertBatch(xianhuaList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = xianhuaService.queryPage(params);

        //字典表数据转换
        List<XianhuaView> list =(List<XianhuaView>)page.getList();
        for(XianhuaView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        XianhuaEntity xianhua = xianhuaService.selectById(id);
            if(xianhua !=null){

                //点击数量加1
                xianhua.setXianhuaClicknum(xianhua.getXianhuaClicknum()+1);
                xianhuaService.updateById(xianhua);

                //entity转view
                XianhuaView view = new XianhuaView();
                BeanUtils.copyProperties( xianhua , view );//把实体数据重构到view中

                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


5.4.2提交订单功能的实现界面

    选择鲜花点击购买可以跳转到提交订单界面,在本界面里需要填写收货地址。提交订单功能的运行界面如下图5-12所示:

图5-12用户提交订单的运行界面

5.4.3订单管理功能的实现界面

用户在提交订单后可以在个人后台里看到订单后的订单信息,可以进行一定的修改。订单管理功能的运行界面如下图5-13所示:

图5-13订单管理功能的运行界面

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

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

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

相关文章

操作系统如何执行,他究竟是个什么

硬件中断 所谓硬件中断&#xff0c;其实也是一个执行信号的过程&#xff0c;具体流程如下。 具体要执行什么方法&#xff0c;只需要拿着对应的信号访问中断向量表就就行比如 N就是像cpu发的中断信号。 时钟中断 但是这里面有一个叫做时钟源的东西&#xff0c;其实也是一个外…

音视频入门基础:FLV专题(24)——FFmpeg源码中,获取FLV文件视频信息的实现

一、引言 通过FFmpeg命令可以获取到FLV文件的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、码率、帧率信息&#xff1a; 而由《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》和《音视频入门基础&#xff1a;FLV专…

JMM内存模型(面试回答)

1.什么是JMM JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下&#xff0c;内存的访问有一定的差异&#xff0c;所以会造成相同的代码运行在不同的系统上会出现各种问题。所以Java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异&…

【stablediffusion又出王炸】IC-Light,可以操控图像生成时的光照,光照难题终于被解决了!

IC-Light代表Impose Constant Light,是一个控制图像照明的项目。可以操控图像生成时的光照&#xff0c;对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体 ID 需求的最大的问题解决了。 Controlnet, Layerdiffusion, IC-light… …

创建线程时传递参数给线程

在C中&#xff0c;可以使用 std::thread 来创建和管理线程&#xff0c;同时可以通过几种方式将参数传递给线程函数。这些方法包括使用值传递、引用传递和指针传递。下面将对这些方法进行详细讲解并给出相应的代码示例。 1. 值传递参数 当你创建线程并希望传递参数时&#xff…

react使用Fullcalendar 实战用法

使用步骤请参考&#xff1a;react使用Fullcalendar 卡片式的日历&#xff1a; 需求图&#xff1a; 卡片式的日历&#xff0c;其实我是推荐 antd的&#xff0c;我两个都写了一下都能实现。 antd 的代码&#xff1a; antd的我直接用的官网示例&#xff1a;antd 日历示例 i…

使用 RabbitMQ 有什么好处?

大家好&#xff0c;我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处&#xff1f;】面试题。希望对大家有帮助&#xff1b; 使用 RabbitMQ 有什么好处&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理&#xff0c;广…

基于MATLAB的农业病虫害识别研究

matlab有处理语音信号的函数wavread&#xff0c;不过已经过时了&#xff0c;现在处理语音信号的函数名称是audioread选取4.wav进行处理&#xff08;只有4的通道数为1&#xff09; 利用hamming窗设计滤波器 Ham.m function [N,h,H,w] Ham(fp,fs,fc)wp 2*pi*fp/fc;ws 2*pi*…

极简实现酷炫动效:Flutter隐式动画指南第三篇自定义Flutter隐式动画

目录 前言 一、TweenAnimationBuilder 二、使用TweenAnimationBuilder实现的一些动画效果 1.调整透明度的动画 2.稍微复杂点的组合动画 3.数字跳动的动画效果 前言 上两节博客分别介绍了Flutter中的隐式动画的基础知识以及使用隐式动画实现的一些动画效果。当系统提供的隐…

怎么能监控电脑屏幕?四个真心好用的电脑屏幕监控小妙招,一分钟看完!

怎么能监控电脑屏幕&#xff1f;这或许是许多家长、企业管理者和IT安全人员心中的疑问。 有人说&#xff1a;用魔法水晶球&#xff01; 当然&#xff0c;这个方法些许梦幻&#xff0c;现实中我们还是要依靠科技手段来实现电脑屏幕的监控。 接下来&#xff0c;我将为大家介绍四…

中仕公考:25年浙江省公务员考试今日开始报名

2025年浙江省公务员考试于今日开始报名&#xff0c;准备参加考试的各位考生不要错过报名时间! 报名时间&#xff1a;2024年11月6日9时—11月11日17时。 资格初审时间&#xff1a;2024年11月6日9时—11月13日17时。 准考证下载时间&#xff1a;2024年12月3日9时—12月8日17时…

【IEEE出版】第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024,12月06-08)

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议&#xff08;ITCA 2024) 2024 6th International Conference on Information Technology and Computer Application 会议官网&#xff1a;itca2024.iaecst.org 会议时间&#xff1a;2024年12月06-08日 截稿时…

SpringMVC总结 我的学习笔记

SpringMVC总结 我的学习笔记 一、SpringMVC简介1.MVC2.SpringMVC概述3. SpringMVC中的核心组件4.SpringMVC核心架构流程 二、SpringMVC框架实例具体实现使用注解实现 四、数据处理及跳转1.结果跳转方式2.处理器方法的参数与返回值处理提交数据数据显示到前端 五、RestFul风格1.…

基于SpringBoot的免税商品优选购物商城的设计与实现

一、项目背景 从古至今&#xff0c;通过书本获取知识信息的方式完全被互联网络信息化&#xff0c;但是免税商品优选购物商城&#xff0c;对于购物商城工作来说&#xff0c;仍然是一项非常重要的工作。尤其是免税商品优选购物商城&#xff0c;传统人工记录模式已不符合当前社会…

【Python】计算机视觉应用:OpenCV库图像处理入门

计算机视觉应用&#xff1a;OpenCV库图像处理入门 在当今的数字化时代&#xff0c;计算机视觉&#xff08;Computer Vision&#xff09;已经渗透到各行各业&#xff0c;比如自动驾驶、智能监控、医疗影像分析等。而 Python 的 OpenCV 库&#xff08;Open Source Computer Visi…

Spring Boot开发入门教程

简介 Spring Boot是一个开源的Java基础框架&#xff0c;用于创建独立、生产级的基于Spring框架的应用程序。通过Spring Boot&#xff0c;你可以轻松地创建独立的、生产级的Spring应用程序。 环境准备 Java开发环境&#xff1a;确保你的机器上安装了Java 8或更高版本。Maven…

vue3入门知识(一)

vue3简介 性能的提升 打包大小减少41%初次渲染快55%&#xff0c;更新渲染快133%内存减少54% 源码的升级 使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking 新的特性 1. Composition API&#xff08;组合API&#xff09; setupref与reactivecomput…

【产品经理】工业互联网企业上市之路

树根互联2022年6月2日提交招股书之后&#xff0c;因财务资料超过六个月有效期加三个月延长期&#xff0c;2022年9月30日上市审核中止&#xff1b;2022年12月26日树根互联更新了2022年半年度财务资料&#xff0c;又九个月过去了&#xff0c;其上市进程将面临再一次中止。 处于上…

Centos 7系统一键安装宝塔教程

服务器推荐青鸟云服务器&#xff0c;2H2G低至16元/月 官网地址&#xff1a; 所有产品_香港轻量云 2核 2G-A型_青鸟云 推荐Finalshell软件连接至服务器&#xff0c;下载地址&#xff1a; https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe 下载完成后连接服务…

Vue3-实现父子组件通信

Vue3-实现父子组件通信 父组件向子组件传值defineProps()代码示例 子组件给父组件传值defineEmits()示例代码 结语 &#x1f600;大家好&#xff01;我是向阳&#x1f31e;&#xff0c;一个想成为优秀全栈开发工程师的有志青年&#xff01; &#x1f4d4;今天来讨论前端中Vue3父…