基于SSM的校园二手交易平台

news2024/11/25 2:55:38

一、源码获取:

链接点击直达:下载链接

二、系统架构:

使用技术:

  • Spring
  • SpringMVC
  • Mybatis

三、系统需求分析:

在如今的大学校园中,伴随着学生的购买能力的提高和每年的升学和毕业,存在许多各种类型的二手商品。目前,二手商品交易成为了当代大学生课余生活的一大热门。以我校为例,每年都要举办的“跳蚤”市场,可见大学生对二手商品交易的需求,然而这种方式有很多局限性和偶然性,远远无法满足广大学子交易的需求。-
  建立一个校园二手交易平台可以大大方便在校的学生,方便了同学也营造了节约光荣,浪费可耻的校园文化氛围。最主要的是,它也可以通过网络将自己不用的东西放在网上,也可在网上找到自己需要的东西,物美价廉,达到双赢。-
  这里写图片描述-
               系统用例图


四、功能模块设计:

登录模块

用户点击主页面上的登录按钮,前台js控制会弹出登录悬浮窗口,填写登录的手机号和密码,点击登录,会请求到UserController,调用其中的loginValidate()方法,将密码用MD5加密与数据库中的加密信息匹配,匹配成功后,将用户信息添加到session会话中,并根据请求头部信息中的Referer跳转回点击登录的页面。-
  这里写图片描述-

注册模块

在首页或登录框中点击注册按钮,就可以弹出注册框,注册的登录号为手机号码,系统会对数据进行校验,核对正确后可注册并登录。
  这里写图片描述


个人中心模块

在这里插入图片描述-

个人信息设置模块

用户登录成功后,可以进入到个人中心,刚注册的用户,可以在个人设置页面进行完善自己的信息,也可以在此页面修改信息,但是开通时间与手机号码,不可更改。
  这里写图片描述

我的闲置物品模块

每个用户,都有自己发布过的闲置物品,在个人中心模块,可以查看曾经发布过的闲置物品,并且可以对相应的物品进行删除和修改操作。由于物品与图片是一对多的关系,所以引入了GoodsExtand类。

public class GoodsExtend {
    private Goods goods;
    private List<Image> images = new ArrayList<Image>();
	/**省略getter/setter方法*/
}

该模块是获取出该用户发布的所有商品信息。从session中获取用户信息,并根据用户的id,查询该用户发布的商品,再根据商品id,获取商品对应的图片信息,最后将商品与图片的关联对象,以及相应的商品信息、图片信息返回到前台显示。

@RequestMapping(value = "/allGoods")
public ModelAndView goods(HttpServletRequest request) {
    User cur_user = (User)request.getSession().getAttribute("cur_user");
    Integer userId = cur_user.getId();
    List<Goods> goodsList = goodsService.getGoodsByUserId(userId);
    List<GoodsExtend> goodsAndImage = new ArrayList<GoodsExtend>();
    for (int i = 0; i < goodsList.size() ; i++) {
        //将用户信息和image信息封装到GoodsExtend类中,传给前台
        GoodsExtend goodsExtend = new GoodsExtend();
        Goods goods = goodsList.get(i);
        List<Image> images = imageService.getImagesByGoodsPrimaryKey(goods.getId());
        goodsExtend.setGoods(goods);
        goodsExtend.setImages(images);
        goodsAndImage.add(i, goodsExtend);
    }
    ModelAndView mv = new ModelAndView();
    mv.addObject("goodsAndImage",goodsAndImage);
    mv.setViewName("/user/goods");
    return mv;
}

这里写图片描述

发布闲置物品模块

发布商品信息需要填写相应的商品文字信息,以及上传商品的图片信息。上传图片信息,需要前台传入一个文件类型的对象,根据该对象,取出上传图片的物理路径,将该图片保存到磁盘中,并将新图片的名称返回到前端显示。若图片不合法,将返回不合法信息,提示前台图片不合法。

@ResponseBody
@RequestMapping(value = "/uploadFile")
public  Map<String,Object> uploadFile(HttpSession session,MultipartFile myfile) throws IllegalStateException, IOException{
    String oldFileName = myfile.getOriginalFilename(); //获取上传文件的原名
    //存储图片的物理路径
    String file_path = session.getServletContext().getRealPath("upload");
    if(myfile!=null && oldFileName!=null && oldFileName.length()>0){
        String newFileName = UUID.randomUUID() + oldFileName.substring(oldFileName.lastIndexOf("."));
        File newFile = new File(file_path+"/"+newFileName);
        myfile.transferTo(newFile); //将内存中的数据写入磁盘
        Map<String,Object> map=new HashMap<String,Object>();//将新图片名称返回到前端
        map.put("success", "成功啦");
        map.put("imgUrl",newFileName);
        return  map;
    }else{
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("error","图片不合法");
        return map;
    }
}

将商品信息以及图片信息传到后台,后台获取到session中的用户信息,并对商品设置用户的外键关联,在goods表中,插入商品信息。插入商品信息后,获取物品的id,并对图片设置商品的外键关联,在image表中插入相应的图片信息。之后更改用户的信息,将该用户发布的商品数量加1,并更新分类表中该分类所有商品数量。最后修改session中用户的值。

@RequestMapping(value = "/publishGoodsSubmit")
public String publishGoodsSubmit(HttpServletRequest request,HttpServletResponse response,Image ima,Goods goods,MultipartFile image)
        throws Exception {
    //查询出当前用户cur_user对象,便于使用id
    User cur_user = (User)request.getSession().getAttribute("cur_user");
    goods.setUserId(cur_user.getId());
    int i = goodsService.addGood(goods,10);//在goods表中插入物品
    //返回插入的该物品的id
    int goodsId = goods.getId();
    ima.setGoodsId(goodsId);
    imageService.insert(ima);//在image表中插入商品图片
    //发布商品后,catlog的number+1,user表的goods_num+1,更新session的值
    Integer calelog_id = goods.getCatelogId();
    catelogService.updateCatelogNum(calelog_id);
    userService.updateGoodsNum(cur_user.getId());
    cur_user.setGoodsNum(cur_user.getGoodsNum()+1);
    request.getSession().setAttribute("cur_user",cur_user);//修改session值
    return "redirect:/user/allGoods";
}

这里写图片描述
上传注意事项:像上图一样打开照片后,右下角有3个按钮,分别是上传、删除、放大图片,要点击上传按钮,才能确保照片上传成功,不是打开照片显示了照片就可以了。

商品首页面模块

商品展示页面的首页,即系统的主页面,主页面包括了物品的分类,导航栏,发布商品,登录注册,消息通知,商品搜索栏,以及页面每一分类中显示最新更新的6件商品信息。
  这里写图片描述

查找商品模块(支持分类查找、模糊查找)

系统的主页面,将物品分为了最新发布,闲置数码,校园代步,电器日用,图书教材,美妆衣物,运动棋牌,票券小物等7类。点击分类名,请求后台,后台将数据库中商品为该分类外键的查询出来,将商品信息返回到页面上,页面将跳转显示相应的分类下的商品信息。-
  这里写图片描述
  在首页的顶部,添加了一个搜索框,在搜索框中输入关键字,就会请求后台,后台会根据关键字,查询商品表中的name和description,查询出带有该关键字的商品以及对象的图片信息,返回到前台显示出相应的商品信息,例如查询:书,可以查询到书籍的商品,且避免了商品名称中不带“书”字查询不到的错误。
  这里写图片描述
  点击分类后,可实现在该分类下,查询相应的商品信息,在该分类下,同样可以进行模糊查询,只不过是在分类下进行模糊,匹配的是catelog_id,然后在该分类下匹配商品的name和describle,例如在校园代步分类下输入:爱玛,查询的就是校园代步下关于“爱玛”的商品信息。
  这里写图片描述

@RequestMapping(value = "/catelog/{id}")
public ModelAndView catelogGoods(HttpServletRequest request,@PathVariable("id") Integer id,
                                 @RequestParam(value = "str",required = false) String str) throws Exception {
    List<Goods> goodsList = goodsService.getGoodsByCatelog(id,str,str);
    Catelog catelog = catelogService.selectByPrimaryKey(id);
    List<GoodsExtend> goodsExtendList = new ArrayList<GoodsExtend>();
    for(int i = 0;i<goodsList.size();i++) {
        GoodsExtend goodsExtend = new GoodsExtend();
        Goods goods = goodsList.get(i);
        List<Image> imageList = imageService.getImagesByGoodsPrimaryKey(goods.getId());
        goodsExtend.setGoods(goods);
        goodsExtend.setImages(imageList);
        goodsExtendList.add(i,goodsExtend);
    }
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("goodsExtendList", goodsExtendList);
    modelAndView.addObject("catelog", catelog);
    modelAndView.addObject("search",str);
    modelAndView.setViewName("/goods/catelogGoods");
    return modelAndView;
}
点击查看商品详细信息模块

在商品展示页,点击商品图片,可以查看商品的详细信息。默认在未登陆状态下,是不可查看商家的信息的,只有在登录之后,才可以查看到相应的商家联系方式。在用户点击商品后,首先请求后台,进行是否登录的一个过滤,然后后台查询出该商品的详细信息,商品的多张图片信息,卖家的信息等,返回到前台显示。
  这里写图片描述

系统管理员模块用户管理模块

该后台管理模块实现企业级管理台的解决方案。管理台显示了用户管理、商品管理、订单管理和钱包管理的功能。用户管理页,以表格的形式简洁的展示用户数据,并且支持选择查询、模糊查询、跳转页面等,每个用户信息后面都有两个操作按钮,包括查看和修改功能。-
  在这里插入图片描述-

商品管理模块

商品管理模块同样采用表格的形式,支持多模糊查询、分页等操作,但是商品的信息不允许管理员进行修改,商品可以进行删除操作。管理员点击查看按钮可以进入详细信息页面,展示该商品的详细信息。
在这里插入图片描述

订单管理模块

订单管理模块也是采用表格的形式,支持多条件查询、分页、查看详细信息等操作,订单的信息可以修改和删除。点击查看可以进入详细信息页面,展示该订单的全部数据。点击修改可以修改订单的详细信息。
  在这里插入图片描述
  在这里插入图片描述

钱包管理模块

操作栏显示的是用户充值后,管理员需要进行审核,只有审核通过,用户才算充值成功,钱包里的余额会显示。方便管理员操作,支持多模糊查询、分页、审核等操作。
  在这里插入图片描述
在这里插入图片描述

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

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

相关文章

调用阿里云API实现证件照生成

目录 1. 作者介绍2. 算法介绍2.1 阿里云介绍2.2 证件照生成背景2.3 图像分割算法 3.调用阿里云API进行证件照生成实例3.1 准备工作3.2 实验代码3.3 实验结果与分析 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 王逸腾&#xff0c;男&#xff0c;西安工…

ASEMI代理英飞凌TLD5097EL:理解和使用LED驱动器的综合指南

编辑-Z TLD5097EL是一款创新的LED驱动器&#xff0c;在照明行业掀起了波澜。这项先进的技术提供了广泛的好处&#xff0c;包括提高能源效率、延长使用寿命和增强性能。在本综合指南中&#xff0c;我们将探讨TLD5097EL的功能和优点&#xff0c;并提供如何有效利用该LED驱动器优…

python -- 绘制colorbar时设置标签为居中显示

python – 绘制colorbar时设置标签为居中显示 在海洋气象领域的相关研究中&#xff0c;对于一些异常信号的二维填色图绘制时&#xff0c;通常在设置colorbar都是以0为中心对称分布的。而在绘制colorbar时&#xff0c;由于存在负号会使得默认colorbar标签不太好看&#xff08;强…

window服务器环境将springboot jar包安装成一个window服务自启动

目录 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/releases 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/rele…

图像降噪网络:KBNet 论文笔记

0 前言 Zhang Y, Li D, Shi X, et al. KBNet: Kernel Basis Network for Image Restoration[J]. arXiv preprint arXiv:2303.02881, 2023. https://arxiv.org/abs/2303.02881 论文主要提出了 Kernel Basis Attention Module 注意力模块&#xff0c;称为 KBA 模块。该模块可以轻…

[中阳期货】端午都有哪些习俗,为什么不能说快乐?

端午节&#xff08;屈原故里端午习俗&#xff09;&#xff0c;流行于湖北省宜昌市、秭归县的传统民俗&#xff0c;国家级非物质文化遗产之一。 “五月五&#xff08;农历&#xff09;&#xff0c;过端午。”端午节是中华民族的传统节日。《续齐谐记》、《荆楚岁时记》载&#x…

AI 人工智能介绍(一)

人工智能&#xff08;AI&#xff09;是一种利用计算机程序和算法来模拟人类智能的技术。通俗地说&#xff0c;就是让计算机能够像人一样思考、学习、推理和决策。 人工智能改变了我们的生活&#xff01;它被广泛应用于语音识别、计算机视觉、自然语言处理、智能机器人等多种领…

ubuntu20.04虚拟机安装

下载对应版本镜像文件&#xff08;iso&#xff09; 下载链接&#xff1a;https://releases.ubuntu.com/jammy/ 虚拟机安装工具为VMware 这里我的版本为下图所示 使用vmware创建虚拟机 1&#xff0c;点击 “创建新的虚拟机” 2&#xff0c;进入向导&#xff0c;选择自定义 …

基于docker部署的Selenium Grid分布式自动化测试

01、什么是Selenium Grid Selenium Grid是Selenium套件的一部分&#xff0c;它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。 Selenium Grid有两个版本——老版本Grid 1和新版本Grid 2。我们只对新版本做介绍&#xff0c;因为Selenium团队已经逐渐遗弃老版…

非线性规划求解方法:序列线性规划(Sequential linear programming)

来源&#xff1a;Cornell University Computational Optimization Open Textbook&#xff1a;SLP​​​​​​​ 目录 1.介绍 2.理论和方法 2.1 问题形式 2.1.1 NLP问题形式 2.1.2 SLP问题形式 2.2 步长边界 Step Bounds 2.3 完整的SLP算法 3.案例 3.1 example1 3.2…

数据结构:树状数组详解

一. 背景 那么我们为什么要用树状数组呢? 在解决一些区间求和的问题中 , 简单描述就是&#xff0c;对于一个给定的数组A&#xff0c;希望能够设计一个update函数来修改其中一个数的值&#xff0c;然后再设计一个sum函数来计算数组下标再给定参数l和r之间的值之和。关键点在于…

Docker Swarm 集群搭建和使用 —— 筑梦之路

简单介绍 swarm 集群由管理节点&#xff08;Manager&#xff09;和工作节点&#xff08;Worker&#xff09;构成。 管理节点&#xff1a;主要负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。诸如监控集群状态、分发任务至工作节点等操作。 工作节点&…

【计算机视觉】使用 notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

文章目录 一、CLIP 模型二、准备三、加载模型四、查看图片处理器五、文本分词六、输入图片和文本&#xff0c;并可视化七、将图片和文字 encode 生成特征八、计算 cosine 相似度九、零样本进行图片分类十、编写函数进行图片分类十一、测试自己的函数十二、编写函数对多图片进行…

面对职业发展“迷茫期”除了抱怨焦虑我们还能做什么?

关注“软件测试藏经阁”微信公众号&#xff0c;回复暗号【软件测试】&#xff0c;即可获取氪肝整理的全套测试资源 Java和Python做自动化测试&#xff0c;哪个更有优势&#xff1f;这两个语言都是很流行的语言&#xff0c;所以从技术上很难说谁好谁不好的。因为要说好不好得看…

linux安装homeassistant(智能设备远程控制开源框架)

1、安装docker 先切换到root 用户&#xff0c;先安装一些基本环境&#xff1a; yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后安装 D…

QT+OpenGL高级光照 Blinn-Phong和Gamma校正

QTOpenGL高级光照1 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 Blinn-Phong 冯氏光照&#xff1a;视线与反射方向之间的夹角不小于90度&#xff0c;镜面光分量会变成0.0&#xff08;不是很合理&am…

死信队列小结

死信队列是RabbitMQ中非常重要的一个特性。简单理解&#xff0c;他是RabbitMQ对于未能正常消费的消息进行的 一种补救机制。死信队列也是一个普通的队列&#xff0c;同样可以在队列上声明消费者&#xff0c;继续对消息进行消费处理。 对于死信队列&#xff0c;在RabbitMQ中主要…

Spring 是什么?IoC 和 DI的区别

1. Spring 是什么?2. IoC是什么&#xff1f; 2.DI概念说明 1. Spring 是什么? 我们通常讲的Spring指的是Spring Framework(Spring框架),它是一个开源的框架,有着活跃而庞大的社区,这也是它之所谓经久不衰的原因。官方的解读是:Spring官网 翻译过来就是:Spring使Java编程对每…

学会这5个步骤,就能轻轻松松地获取代码覆盖率报告

目录 前言&#xff1a; 1、创建main函数的test文件 2、插桩方式编译源码 3、运行主服务 4、执行测试用例 5、优雅退出主服务&#xff0c;并生成覆盖率报告 前言&#xff1a; 代码覆盖率报告可以帮助我们了解测试用例的质量和覆盖程度。 小编前期所测项目多为go语言研发&…

《C++高级编程》读书笔记(一:C++和标准库速成)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. C 基础知识 1.1 小程序 “hello world” // helloworld.cpp…