基于SSM的校园二手交易管理系统的设计与实现

末尾获取源码
开发语言:Java
Java开发工具:JDK1.8
后端框架:SSM
前端:Vue
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是


目录

一、项目简介

二、系统功能

三、系统项目截图

管理员功能实现

商家管理

用户管理

公告信息管理

商家功能实现

商品管理

商品评价管理

商品订单管理

用户功能实现

商家信息

商品信息

购物车

确认下单

商品订单

四、核心代码

登录相关

文件上传

封装


一、项目简介

计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话和联系,极大的方便了人们的生活。所以说,校园二手交易管理系统用计算机技术来进行设计,不仅在管理方面更加的系统化,操作性强,最重要的是关于数据的保存和使用都能节约大量的时间,该系统非常的好用。

校园二手交易管理系统管理数据的工具是MySQL,编码的语言是Java,运用的框架是SSM框架。该系统可以实现商品管理,商品评价管理,商品收藏管理,商品订单管理,购物车管理,公告管理,商家管理等功能。

校园二手交易管理系统不仅能让操作人员使用更加地方便,并且设计的也很合理,能有效的避免误操作,让数据在录入的环节就符合设计需要,极大的规避了源头性的输入误差,顺利的让数据变得更加可控并且可靠,让出错的几率降到最低。


二、系统功能

对管理员具体功能的设计结果将以图4.1所示的管理员功能结构图来进行体现。管理员对于校园二手交易管理系统操作的功能包括管理商家,管理基础数据,管理用户,管理商品,其中管理商品模块包括管理商品评价,管理商品收藏,管理商品订单等。

 对商家具体功能的设计结果将以图4.2所示的商家功能结构图来进行体现。商家对于校园二手交易管理系统操作的功能包括管理商品信息,回复商品评价,管理商品的订单,查看公告等。

 对用户具体功能的设计结果将以图4.3所示的用户功能结构图来进行体现。用户对于校园二手交易管理系统操作的功能包括购买商品,查看商家,查看公告,管理购物车。

 



三、系统项目截图

管理员功能实现

商家管理

该功能主要用于实现对商家基本信息的管理,商家管理界面的运行效果见图5.1。在此界面,管理员根据商家名称查询商家,可以修改,删除商家资料。

 

用户管理

该功能主要用于实现对用户基本信息的管理,用户管理界面的运行效果见图5.2。在此界面,管理员更改用户头像,电子邮箱等信息,可以帮助用户重置密码,可以删除需要删除的用户。

 

公告信息管理

该功能主要用于实现对公告基本信息的管理,公告信息管理界面的运行效果见图5.3。在此界面,管理员对公告进行增删改查。

 

商家功能实现

商品管理

该功能主要用于实现对商品基本信息的管理,商品管理界面的运行效果见图5.4。在此界面,商家为商品增加库存,为商品减少库存,修改商品,删除商品等。

 

商品评价管理

该功能主要用于实现对商品评价基本信息的管理,商品评价管理界面的运行效果见图5.5。在此界面,商家回复评价商品的用户,查看用户评价商品的内容。

 

商品订单管理

该功能主要用于实现对商品订单基本信息的管理,商品订单管理界面的运行效果见图5.6。在此界面,商家对订单商品发货,查询订单,查看商品订单的详情。

 

用户功能实现

商家信息

商家信息界面的运行效果见图5.7。在此界面,用户查询商家,需要提供商家的名称才可以查询指定的商家信息,用户点击商家的照片就可以查看商家的介绍。

 

商品信息

商品信息界面的运行效果见图5.8。在此界面,用户可以对商品进行的操作包括收藏,查看商品的评论信息,加入购物车,立即购买等。

 

购物车

购物车界面的运行效果见图5.9。在此界面,用户对购物车里面的商品进行移除或改变购物商品的数量,最后下单支付。

 

确认下单

确认下单界面的运行效果见图5.10。在此界面,用户选择收货地址,如果没有合适的收货地址,可以直接添加收货地址,选择支付方式,有线上支付,线下取货两种方式可供选择,用户根据实际情况选择适合的方式进行支付即可,用户在列表详情核对购买的商品就可以提交订单了。

 

商品订单

商品订单界面的运行效果见图5.11。在此界面,用户可以对订单商品进行退款,收货,评价等操作。

 


四、核心代码

登录相关


package com.controller;import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
@RequestMapping("users")
@RestController
public class UserController{@Autowiredprivate UserService userService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@PostMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null || !user.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null) {return R.error("账号不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密码已重置为:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);userService.updateById(user);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}

文件上传

package com.controller;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;/*** 上传文件映射表*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上传文件*/@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload.getAbsolutePath()+"/"+fileName);file.transferTo(dest);FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下载文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){/*if(!fileService.canRead(file, SessionManager.getSessionUser())){getResponse().sendError(403);}*/HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    headers.setContentDispositionFormData("attachment", fileName);    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}

封装

package com.utils;import java.util.HashMap;
import java.util.Map;/*** 返回数据*/
public class R extends HashMap<String, Object> {private static final long serialVersionUID = 1L;public R() {put("code", 0);}public static R error() {return error(500, "未知异常,请联系管理员");}public static R error(String msg) {return error(500, msg);}public static R error(int code, String msg) {R r = new R();r.put("code", code);r.put("msg", msg);return r;}public static R ok(String msg) {R r = new R();r.put("msg", msg);return r;}public static R ok(Map<String, Object> map) {R r = new R();r.putAll(map);return r;}public static R ok() {return new R();}public R put(String key, Object value) {super.put(key, value);return this;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC无人直播系统技术

随着信息技术的快速发展和互联网的普及&#xff0c;直播行业迎来了蓬勃发展的机遇。然而&#xff0c;传统的直播方式存在一些局限性&#xff0c;如场地限制、设备携带不便等问题。为了解决这些问题&#xff0c;AIGC推出了一项创新性的无人直播系统技术。 AIGC无人直播系统技术…

linux 系统安全及应用

一、账号安全基本措施 1.系统账号清理 1.将用户设置为无法登录 /sbin/nologin shell——/sbin/nologin却比较特殊&#xff0c;所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已&#xff0c;并不是说这个账号就无法使用系统资源。举例来说&#xff0c;…

GIT - 清除历史 Commit 瘦身仓库

目录 一.引言 二.仓库清理 ◆ 创建一个船新分支 ◆ 提交最新代码 ◆ 双指针替换分支 三.总结 一.引言 由于项目运行时间较长&#xff0c;分支较多&#xff0c;且分支内包含很多不同的大文件&#xff0c;随着时间的推移&#xff0c;历史 Git 库的容量日渐增发&#xff0c…

密码学(三)

文章目录 前言一、Software Attestation Overview二、Authenticated Key Agreement三、The Role of Software Measurement 前言 本文来自 Intel SGX Explained 请参考&#xff1a; 密码学&#xff08;一&#xff09; 密码学&#xff08;二&#xff09; 一、Software Attesta…

SG-8018CA 系列 (晶体振荡器 可编程 可用+105°C )

SG-8018系列是可编程晶体振荡器系列与CMOS输出。虽然该系列提供了与早期SG-8002/SG-8003系列相同的易于编程的频率和其他参数的相似性&#xff0c;但它们也有一个更广泛的工作温度范围&#xff0c;最高限制为105C。除了2.52.0 mm封装&#xff0c;将使电子产品制造商节省板空间&…

usb转32串口方案

方案结构图 使用usb hub芯片扩展4路usb然后再一分八路串口 USB hub 选择hub芯片注意事项&#xff1a; 目前市场上多数的USB 2.0 Hub芯片,只有内建一个Transaction Translators(STT)&#xff0c;因此 当Hub接收到如Full Speed的装置进入时&#xff0c;12Mbps的「单一」信道…

Java字符串拼接常用方法总结

使用场景&#xff1a;用某个分隔符拼接字符串 下边是我使用过的几种方式废话不多说&#xff0c;直接上代码初始数据 1.使用流2.StringBuilder3.[StringJoiner](https://blog.csdn.net/qq_43417581/article/details/126076152?ops_request_misc%257B%2522request%255Fid%2522%2…

如何使用TrafficWatch根据PCAP文件监控和分析网络流量

关于TrafficWatch TrafficWatch是一款功能强大的网络数据包嗅探和分析工具&#xff0c;该工具能够帮助我们通过PCAP文件监控和分析目标网络中的网络通信流量。除此之外&#xff0c;该工具还可以为广大研究人员提供针对各种网络协议的内部分析功能&#xff0c;并帮助解决各种网…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

Win提示“d3dx9_27.dll文件缺失,程序无法启动运行”,修复大全

d3dx9_27.dll是一个被多个软件和游戏共享的动态链接库文件&#xff0c;主要用于Microsoft DirectX软件的功能。它是DirectX 9的一部分&#xff0c;DirectX是一种使得Windows成为理想平台进行高性能多媒体和游戏的API。 d3dx9_27.dll主要与计算机图形和视频渲染有关&#xff0c…

物联网协议Coap中Californium CoapClient解析

目录 前言 一、CoapClient对象 1、类定义 2、Client方法调用 二、发送请求 1、构建请求 2、发起请求 3、接收响应 总结 前言 在之前的博客中物联网协议Coap之Californium CoapServer解析&#xff0c;文中简单介绍了CoapServer的实现。在物联网开发环境中&#xff0c;除了…

小红书算法流量机制总结,建议收藏!

新手在运营小红书账号时&#xff0c;总会发现这样的情况。辛辛苦苦写了一篇自以为很优质的笔记&#xff0c;发布后却发现流量寥寥。这就是没弄清小红书算法造成的。今天和大家来分享下小红书算法流量机制总结&#xff0c;建议收藏&#xff01; 一、什么是小红书算法 我们常说的…