基于springboot的校园二手网站

news2024/11/19 8:53:04

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

该系统基于springboot技术,数据层为MyBatis,mysql数据库,页面采用html,具有完整的业务逻辑,适合选题:springboot、校园、二手、校园二手、二手网站等。

项目功能:

系统功能分为用户使用功能和系统管理功能,用户的使用功能包含用户浏览物品、登录、注册、搜索物品、查看个人发布物品、加入购物车、联系卖家、评论商品等;系统管理包括系统设置、商品设置、学生管理、评价管理等。

搜索物品:用户可以根据自己的需求通过关键字进行模糊查询,系统会根据用户的搜索将商品信息展示出来。

查看发布信息:用户登录系统后,可以查看自己已经发布的所有物品的详细信息。

加入购物车:用户登陆系统后,可以将自己感兴趣的物品加入到购物车中。

联系卖家:用户登录系统后,可以与商品的卖家取得联系,点击“联系卖家”系统会将卖家的联系方式展示给用户。

评论商品:用户登录系统后,可以对商品进行个人的评论。

系统设置:管理员进入到后台管理系统后可以对菜单、角色、用户、日志等系统信息进行管理。

商品设置:管理员进入后台管理系统后,可以对商品分类、商品信息等进行相应的管理操作。

学生管理:管理员进入后台管理系统后,可以查看系统中所有学生的基本信息,并且可以做出相应的管理。

评论管理:管理员进入后台管理系统后,可以查看系统所有物品的评论信息,并且可以对评论做出相关的操作。

用户拥有浏览、登录、注册、搜索物品、发布物品、查看个人发布物品、加入购物车、购买商品、联系卖家、评论商品、查看个人资料等功能;系统管理包括系统设置、商品设置、学生管理、评论管理等。

系统包含技术:

后端:springBoot、mybatis
前端:bootstrap、js、css等,html页面
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是登录页面

首页

分类查看商品详情

商品详情

个人中心查看

购物车查看

后台首页

 后台对用户进行维护

 后台对商品进行维护

 后台对菜单进行管理

 后台可以查看评论列表

部分代码:

拦截器

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();
        User user  =(User)request.getSession().getAttribute(SessionConstant.USER_SESSION);
        if(StringUtils.isEmpty(user)){
            logger.info("用户还未登录或者session失效,重定向到登录页面,拦截当前的URL=" + requestURI);
            if(StringUtil.isAjax(request)){
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(JSON.toJSONString(CodeMsg.USER_SESSION_EXPIRED));
            }
            response.sendRedirect("/system/login");
            return false;
        }


        logger.info("当前URL["+requestURI+"]没有被拦截");
        if(!StringUtil.isAjax(request)){
            List<Menu> menus = roleService.selectMenuByRole(user.getRole());
            request.setAttribute("siteName", titleConfig.getSysName());
            request.setAttribute("userTopMenus", MenuUtil.getTopMenus(menus));
            List<Menu> secondMenus = MenuUtil.getSecondMenus(menus);
            request.setAttribute("userSecondMenus", secondMenus);
            request.setAttribute("userThirdMenus", MenuUtil.getChildren(MenuUtil.getMenuIdByUrl(requestURI, secondMenus), MenuUtil.getThirdMenus(menus)));
        }
        return true;
    }

首页操作代码

 @RequestMapping("index")
    public String index(Model model, PageResult pageResult, @RequestParam(value = "name",required = false,defaultValue = "") String name){
        pageResult.setPageSize(12);
        PageResult<GoodResult> goodList = goodService.selectPage(pageResult, name);
        model.addAttribute("pageResult",goodList );
        model.addAttribute("name",name );
        model.addAttribute("newsList", newsService.selectPage(pageResult, null).getContent());
        return "/home/index/index";
    }

    @GetMapping("news_detail")
    public String newDetail(Model model,@RequestParam("id")Integer id){
        News news = newsService.selectNewsById(id);
        model.addAttribute("news",news );
        return "home/index/news_detail";
    }

    @RequestMapping("login")
    public String login(){
        return "/home/index/login";
    }

    @PostMapping("check_sno")
    @ResponseBody
    public Result<Boolean> check_sno(Student student){
        return Result.success(StringUtils.isEmpty(studentService.selectStudent(student)));
    }

    @PostMapping("register")
    @ResponseBody
    public Result<Boolean> register(Student student, HttpSession session){
        CodeMsg validata = ValidataUtil.validata(student);
        if(validata.getCode()!= CodeMsg.SUCCESS.getCode()){
            return Result.exception(validata);
        }

        if(!StringUtils.isEmpty(studentService.selectStudent(student))){
            return Result.exception(CodeMsg.HOME_STUDENT_SN_NO_EXIST);
        }
        studentService.saveStuent(student);
        if(StringUtils.isEmpty(student)){
           return Result.exception(CodeMsg.HOME_STUDENT_REGISTER_ERROR);
        }
        session.setAttribute(SessionConstant.STUDENT_SESSION, student);
        return Result.success(true);
    }

    @PostMapping("login")
    @ResponseBody
    public Result<Boolean> login(Student student,HttpSession session){
        Student student1 = studentService.selectStudent(student);
        if(StringUtils.isEmpty(student1)){
            return Result.exception(CodeMsg.HOME_STUDENT_SN_NO_EXIST);
        }

        if(!student1.getPassword().equals(student.getPassword())){
            return Result.exception(CodeMsg.HOME_STUDENT_PASSWORD_ERROR);
        }
        if(student1.getStatus() !=Student.STUDENT_STATUS_ENABLE ){
            return Result.exception(CodeMsg.HOME_STUDENT_UNABLE);
        }
        session.setAttribute(SessionConstant.STUDENT_SESSION,student1 );
        return Result.success(true);
    }

    @GetMapping("logout")
    public String logout(HttpSession  session){
        session.removeAttribute(SessionConstant.STUDENT_SESSION);
        return "redirect:index";
    }

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

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

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

相关文章

过滤器和拦截器的区别

目录 1 前言 2 区别 2.1 实现原理不同 2.2 使用范围不同 2.3 执行顺序不同 4 注入Bean的情况不同 1 前言 可能有些小伙伴们在接手公司的项目时&#xff0c;经常看到公司的项目中既有过滤器又有拦截器&#xff0c;那么它们既然都拦截的作用&#xff0c;那么各自扮演着什么…

pyinstaller打包出错记录

稍微记录一下最近在liunx上pyinstaller打包出错 目录稍微记录一下最近在liunx上pyinstaller打包出错1 号坑 Python3.7.0安装2号坑 成功打包但是执行失败小结后面代码的环境是在Windows子系统下的Ubuntu 20.04下进行的。vscode可以通过&#xff0c;配置WSL来进入环境&#xff08…

Pytorch+Python实现人体关键点检测

用PythonPytorch工程代码对人体进行关键点检测和骨架提取&#xff0c;并实现可视化。 使用背景&#xff1a; 物体检测为许多视觉任务提供动力&#xff0c;如实例分割、姿态估计、跟踪和动作识别。它在监控、自动驾驶和视觉答疑中有下游应用。当前的对象检测器通过紧密包围对象…

深度学习提高模型准确率方法

这里写目录标题深度学习数据使用更多数据更改图像大小减少颜色通道算法模型改进增加训练轮次迁移学习添加更多层调整超参数总结深度学习 我们已经收集好了一个数据集&#xff0c;建立了一个神经网络&#xff0c;并训练了模型&#xff0c;在测试和验证阶段最后得到的准确率不高…

8086通用寄存器

目录 概述 EU&#xff1a;负责执行指令完成两种操作&#xff1a;算数逻辑运算&#xff0c;计算存储器操作数的偏移地址 BIU&#xff1a;完成所有的总线操作 寄存器 AX BX CX DX SP,BP,SI,DI IP CS&#xff0c;DS&#xff0c;SS&#xff0c;ES 概述 8086和8088C…

神经网络每次结果不一样,神经网络预测问题

1、求助&#xff1a;神经网络两次训练的结果不一样 神经网络两次训练的结果不一样&#xff0c;这是因为每次训练的迭代初值不相同&#xff08;是随机的&#xff09;&#xff0c;所以得到的结果是有差异的。一般的话&#xff0c;软件开启第一次时&#xff0c;运行得到结果是比较…

Java | 学习笔记02 快速之旅

运行已经开发好的Java程序&#xff0c;只需要JRE&#xff08;Java运行时环境&#xff09;就可以。但事实上&#xff0c;要想完成一个Java程序的开发&#xff0c;我们至少需要安装好JDK 目录 一、Java环境配置 1.下载JDK 2.配置环境变量 二、Hello World&#xff01; 三、I…

关于C++、C++ CLI, Java、C# 的自定义类实现列表初始化。

1、C DList_类构造函数 /// <summary> /// 表表初始化 dList<int> idl {1,2,3,4}; /// </summary> /// <typeparam name"T"></typeparam> /// <param name"tList"></param> template<class T> inline …

一只脚踏进Java的大门

一杯热气腾腾的咖啡&#xff0c;没错&#xff0c;这就是Java的标志。学习Java&#xff0c;我们就从这杯咖啡开始。2022年10月24日&#x1f6a9; Hello Java!一、认识Java从Hello world开始二、运行Java程序1、编译运行原理2、JDK、JRE、JVM以及它们之间的关系3、运行步骤展示三…

C语言-简单的程序设计

&#x1f31e;欢迎来到C语言的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利完成…

docker 网络

前言 随着容器的普及&#xff0c;经常使用docker创建容器来跑应用&#xff0c;结合开源的kubernetes和istio等&#xff0c;对于无状态的服务有极好的支持能力&#xff0c;秒级调度&#xff0c;弹性伸缩等优势。实际上kube的容器仅仅是接口&#xff0c;实际的容器可以是docker&…

布隆过滤器

文章目录前导布隆过滤器特点映射方式hash 函数BloomFiltersettestreset相关问题应用示例哈希切分例子今天是1024程序员节,祝各位节日快乐啦!!!前导 我们之前使用位图bitset,只能将一个整数映射到比特位上&#xff0c;来判断某个数是否存在 但是假如我们也想把判断一个字符串是…

【Linux】yum 与 vim 的基本使用

文章目录一、yum 背景知识1、商业生态2、开源生态3、软件生态本土化二、yum 的基本使用1、查看软件包2、安装软件3、卸载软件三、vim 的基本使用1、vim 的基本概念2、vim 的基本操作2.1 模式间切换2.2 光标定位2.3 文本复制2.4 文本编辑2.5 底行模式的操作四、简单 vim 配置2、…

前端工程化<npm、cnpm、yarn、npx、pnpm等包管理工具>

平时工作中&#xff0c;像npm、cnpm、yarn等一些工具都是经常经常用的&#xff0c;但可能对里面的一些细节都没太在意&#xff0c;所以这篇就来总结一下加深印象和理解。另外还有pnpm的使用&#xff0c;以及它的优势 1. npm包管理工具 包管理工具npm Node Package Manager&a…

『Halcon与C#混合编程』011_工业相机的SDK介绍

这里以淘宝上的显微精工店铺的相机为例(支持SDK) 一、相机的SDK简单介绍 第一步:安装好驱动,并能正常打开相机 第二部:找到相机的安装目录,查看厂家提供的Demo和开发手册 在Demo中找到C#的Demo,运行Demo.sln 第三步

基于Matlab使用粒子滤波器和高斯滤波器跟踪单个对象(附源码)

此示例说明了如何使用粒子滤波器和高斯和滤波器来跟踪使用仅范围测量的单个对象。 一、介绍 只能观察范围信息的传感器无法通过单次检测提供对物体状态的完整了解。此外&#xff0c;当以笛卡尔坐标系表示时&#xff0c;仅范围测量的不确定性是非高斯的&#xff0c;并产生凹形…

python作业8

目录 1.输入一个整数判断奇数偶数 2.判断一个数是否能被7或11整除但不能同时整除 3.判断某一年是否为闰年&#xff1a;能被4整除但不能被100整除&#xff0c;或者能被400整除 4.《车辆驾驶人员血液、呼气酒精含量阈值与检验》标准中规定&#xff1a;驾驶员血液酒精小于20mg/…

基于Hi3861的听话的狗子

听话的狗子一、项目介绍二、硬件介绍&#xff08;1&#xff09;Hi3861最小系统电路&#xff08;2&#xff09;电源管理电路&#xff08;3&#xff09;USB转串口电路烧录电路&#xff08;4&#xff09;外设接口电路三、PCB设计四、软件部分简介&#xff08;1&#xff09;代码整体…

在 ESP 开发板上开发 UI 不再复杂

如果您尝试过在没有图形库的情况下开发 UI&#xff0c;那么您一定知道这有多困难。幸运的是&#xff0c;由乐鑫芯片驱动的屏幕&#xff0c;可支持用户使用多种图形库来开发 UI&#xff0c; LVGL 就是其中之一。通常情况下&#xff0c;在使用 LVGL 或类似的图形库前&#xff0c;…

SPI、RS232、485、IIC通信协议详细总结

通信协议大全 文章目录通信协议大全前言一、异步通信和同步通信二、RS232和RS4851.RS2322.RS4853.RS232和RS485的区别4.RS232、485与普通串口的区别&#xff1f;三、SPI协议四、IIC协议1.IIC的时序介绍2.IIC传输数据的格式总结前言 通信协议是每一个嵌入式工程师必备的技能。下…