基于Java+SpringBoot+Vue+echarts校园资料分享平台设计和实现

2023-07-31 10:06:59

博主介绍全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

 

系统介绍:

随着信息互联网购物的飞速发展,国内放开了自媒体的政策,一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求,创建了一个计算机管理校园资料分享平台的方案。文章介绍了校园资料分享平台的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本校园资料分享平台有管理员和用户两个角色。管理员功能有个人中心,学生管理,资料分享管理,资源分类管理,举报反馈管理,系统管理等。用户功能有注册登录,个人中心,我的收藏,资料评论等。因而具有一定的实用性。

本站是一个B/S模式系统,采用Spring Boot框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得校园资料分享平台管理工作系统化、规范化。

本系统是基于B/S架构的网站系统,设计的管理员功能结构图如下图所示:

 程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。

程序操作流程图

功能截图:

5.1 管理员模块的实现

5.1.1 学生信息管理

校园资料分享平台的系统管理员可以可以对学生信息添加修改删除操作。具体界面的展示如图5.1所示。

 图5.1 学生信息管理界面

5.1.2 学生统计管理

系统管理员可以对学生数据进行统计。具体界面如图5.2所示。

 图5.2 学生统计界面

5.1.3 资料分享管理

系统管理员可以对资料分享信息进行添加,修改,删除操作。界面如下图所示:

 图5.3 资料分享信息管理界面

5.1.4 公告资讯管理

系统管理员可以对公告资讯信息进行添加,修改,删除操作。界面如下图所示:

 图5.4 公告资讯信息管理界

5.2 学生模块的实现

5.2.1 首页资料分享

学生登录后,可以在首页查看资料分享。界面如下图所示:

 图5.5 首页资料分享界面

5.2.2 资料分享评论

学生登录后点击资料分享,点击资料信息后可以进行评论操作。界面如下图所示:

 图5.6 资料分享评论界面

5.2.3 我的收藏

学生登录后可以在个人中心里面的我的收藏查看自己收藏的资料信息。界面如下图所示:

 图5.7 我的收藏界面

代码实现:

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            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);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }
    
    /**
     * 注册
     */
    @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("/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){
        Integer id = (Integer)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 Integer[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

论文参考:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅下方专栏👇🏻

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

更多推荐

怎么实现一个登录时需要输入验证码的功能

今天给项目换了一个登录页面,而这个登录页面设计了验证码,于是想着把这个验证码功能实现一下吧。这篇文章就如何实现登录时的验证码的验证功能结合代码进行详细地介绍,以及介绍功能实现的思路。目录页面效果实现思路生成验证码的控制器类前端页面代码localStorage.jslogin.htmllogin.js后端登录代码User

软件设计师考试学习2

数据结构与算法基础数组稀疏矩阵用代入法计算,A数据结构的定义非线性结构分为树和图,区别在于有没有环路顺序表与链表引入头节点可以使所有的节点处理方式一致如果没有空的头节点,头节点需要单独处理顺序存储与链式存储查找特殊情况:如果有顺序的话顺序存储更优(二分查找)队列与栈在循环队列里,为了使队空和队满条件不同,往往使队尾指针

强化学习从基础到进阶–案例与实践[11]:AlphaStar论文解读、监督学习、强化学习、模仿学习、多智能体学习、消融实验

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

SSRF漏洞(利用file协议读取本地文件)

简介当利用SSRF漏洞时,攻击者可以通过构造恶意请求来读取本地文件。其中一种方法是使用file协议来读取本地文件。例如,file:///etc/passwd是一个常见的示例,它用于读取Linux系统上的passwd文件。passwd文件是Linux系统中用于存储用户账户信息的文件,其中包含了所有用户的用户名、密码和相关

系统架构设计师-数据库系统(3)

目录一、数据控制1、安全性2、完整性3、并发控制4、故障恢复二、数据库设计概述1、数据库设计关注的问题2、数据库性能优化3、规范化与反规范化一、数据控制1、安全性2、完整性(1)实体完整性约束:规定基本关系的主属性不能取空值。(2)参照完整性约束:关系与关系间的引用,其他关系的主键或空值。(3)用户自定义完整性约束:应

知识图谱:知识表示发展史

​数据是众多行业最核心的资产,人工智能技术与数据的深度融合也成为各大行业机构的重点关注内容,在多种人工智能的技术中,知识图谱因其能够更好的表达业务场景的多样全貌,可以更好的服务于人工智能时代的分析与决策场景,成为近年来的技术创新热点之一。知识的概念知识表示就是对知识的一种描述,或者说是对知识的一组约定,一种计算机可以接

论文阅读《ICDE2023:Relational Message Passing for Fully Inductive Knowledge Graph Completion》

论文链接工作简介在知识图谱补全(KGC)中,预测涉及新兴实体和/或关系的三元组,这是在学习KG嵌入时看不到的,已成为一个关键挑战。带有消息传递的子图推理是一个很有前途和流行的解决方案。最近的一些方法已经取得了很好的性能,但它们(1)通常只能预测单独涉及未见过的实体的三元组,无法解决更现实的同时具有未见过的实体和未见过的

【JavaEE】多线程(四)

多线程(四)在开始讲之前,我们先来回顾回顾前三篇所讲过的内容~线程的概念并发编程,多进程,比较重,频繁创建销毁,开销大Thread的使用创建线程继承Thread实现Runnable继承Thread(匿名内部类)实现Runnable(匿名内部类)使用lambda'Thread中的重要性启动线程start终止线程isInt

RocketMQ 核心编程模型以及生产环境最佳实践

文章目录1、RocketMQ的消息模型2、深入理解RocketMQ的消息模型2.1、RocketMQ客户端基本流程2.2、消息确认机制2.2.1、发送消息的方式第一种称为单向发送第二种称为同步发送第三种称为异步发送2.2.2、状态确认机制2.2.3、消费者也可以自行指定起始消费位点2.3、广播消息2.4、顺序消息机制1

GPT会统治人类吗

一前言花了大概两天时间看完《这就是ChatGPT》,触动还是挺大的,让我静下来,认真地想一想,是否真正理解了ChatGPT,又能给我们以什么样的启发。二思考在工作和生活中,使用ChatGPT或文心一言,逐渐形成了习惯,总想听听它们的意见。无论是小学作文还是小的编程测试例子,大部分情况下还是能够给我一个比较靠谱的意见,而

SpringBoot【SpringBoot介绍、SpringBoot入门、SpringBoot原理分析、SpringBoot原理分析】(一)-全面详解(学习总结---从入门到深化)

目录SpringBoot介绍_Spring缺点分析SpringBoot介绍_什么是SpringBootSpringBoot介绍_SpringBoot核心功能SpringBoot入门_通过官网搭建项目SpringBoot入门_通过IDEA脚手架搭建项目SpringBoot入门_SpringBoot项目结构SpringBo

热文推荐