前后端分离Springboot+Vue实现课程社区管理系统

简介: 前后端分离Springboot+Vue实现课程社区管理系统

项目编号:BS-XX-141

一,项目简介

本项目主要实现一个基于课程选课的社区交流系统,主要的业务背景为每个老师可以自己开设相应的选修课,并指定可以选修的人数,学生登陆系统后可以进行选课,并可以在线针对自己的选课进行在线讨论,点赞等互动行为。管理员则主要是对基本信息的相关管理,比如用户和角色、权限管理等,本系统有着完备的权限管理控制系统,可以根据需要自定角色并分配相应的权限。系统采用前后端分离开发的方式来实现。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

前端技术:jsp+easyui+ajax+jquery

后端技术:spring+springmvc+mybatis+定时任务

三,系统展示

下面展示一下系统的主要功能:

登陆页面:

用户注册

用户管理

菜单管理

角色管理

权限分配

个人信息

学生登陆系统

选课

参与所选课程的社区讨论

老师登陆系统

开设课程

参与社区讨论

四,核心代码展示

package com.course.api.controller;
import com.course.api.config.Result.Result;
import com.course.api.config.Result.Results;
import com.course.api.entity.Comment;
import com.course.api.service.Impl.CommentServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/comment")
public class CommentController {
    @Autowired
    CommentServiceImpl commentService;
    /**
     * 查询当前课程的论坛数据
     * @param courseId
     * @return List
     */
    @GetMapping("getCommentList")
    public Result  getCommentList(@RequestParam Long courseId) {
        return Results.success(commentService.getCommentInfo(courseId));
    }
    /**
     * 添加评论
     * @param comment
     * @return
     */
    @PostMapping("/add")
    public Result add(@RequestBody Comment comment) {
        commentService.addComment(comment);
        return Results.success();
    }
    /**
     * 删除评论
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public Result remove(@PathVariable(value = "id") Long id) {
        commentService.removeById(id);
        return Results.success();
    }
}
package com.course.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.course.api.config.Result.Result;
import com.course.api.config.Result.Results;
import com.course.api.entity.CommentThumbs;
import com.course.api.service.Impl.CommentThumbsImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/commentThumbs")
public class CommentThumbsController {
    @Autowired
    CommentThumbsImpl commentThumbsService;
    /**
     * 获取用户点赞的帖子
     * @param userId
     * @return
     */
    @GetMapping("/getLikeComments")
    public Result getLikeComments(@RequestParam Long userId) {
        return Results.success(commentThumbsService.list(new QueryWrapper<CommentThumbs>().eq("user_id", userId)));
    }
    /**
     * 点赞
     * @param commentThumbs
     * @return
     */
    @PostMapping("/giveThumbs")
    public Result giveThumbs(@RequestBody CommentThumbs commentThumbs) {
        commentThumbsService.addThumbs(commentThumbs);
        return Results.success();
    }
    /**
     * 取消点赞
     * @param id
     * @return
     */
    @DeleteMapping("/cancel/{id}")
    public Result cancel(@PathVariable(value = "id") Long id) {
        commentThumbsService.cancelThumbs(id);
        return Results.success();
    }
}
package com.course.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.course.api.config.Result.Result;
import com.course.api.config.Result.Results;
import com.course.api.entity.Course;
import com.course.api.service.Impl.CourseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/course")
public class CourseController {
    @Autowired
    CourseServiceImpl courseService;
    /**
     * 获取课程分页数据
     * @param page
     * @param pageSize
     * @param teacherId
     * @return
     */
    @GetMapping("/getCourseList")
    public Result getCourseList(@RequestParam int page,
                                @RequestParam int pageSize,
                                @RequestParam(defaultValue = "0") Long teacherId) {
        IPage<Course> courseIPage = new Page<>(page, pageSize);
        QueryWrapper<Course> queryWrapper = new QueryWrapper<>();
        if (teacherId > 0) {
            queryWrapper.eq("teacher_id", teacherId);
        }
        return Results.success(courseService.page(courseIPage, queryWrapper));
    }
    /**
     * 获取全部课程信息
     * @return
     */
    @GetMapping("/getAllCourseList")
    public Result getAllCourseList() {
        return Results.success(courseService.list());
    }
    /**
     * 添加课程
     * @param course
     * @return newCourseId
     */
    @PostMapping("/add")
    public Result add(@RequestBody Course course) {
        courseService.save(course);
        List<Course> courseList = courseService.list();
        System.out.println(courseList.get(courseList.size() - 1).getId());
        return Results.success(courseList.get(courseList.size() - 1).getId());
    }
    /**
     * 修改课程信息
     * @param course
     * @return
     */
    @PutMapping("update")
    public Result update(@RequestBody Course course) {
        if (courseService.updateById(course)) return Results.success();
        else return Results.failure("编辑失败");
    }
    /**
     * 删除课程
     * @param id
     * @return
     */
    @DeleteMapping("delete/{id}")
    public Result remove(@PathVariable(value = "id") Long id) {
        if (courseService.removeById(id)) return Results.success();
        else return Results.failure("删除失败");
    }
    /**
     * 选课
     * @param courseId
     * @param userId
     * @return
     */
    @PutMapping("/selectCourse/{courseId}/{userId}")
    public Result selectCourse(@PathVariable(value = "courseId") Long courseId,
                               @PathVariable(value = "userId") Long userId) {
        courseService.selectCourseById(courseId, userId);
        return Results.success();
    }
    /**
     * 退选
     * @param courseId
     * @param userId
     * @return
     */
    @PutMapping("deselectCourse/{courseId}/{userId}")
    public Result deselectCourse(@PathVariable(value = "courseId") Long courseId,
                                 @PathVariable(value = "userId") Long userId) {
        courseService.deselectCourseById(courseId, userId);
        return Results.success();
    }
}
package com.course.api.controller;
import com.course.api.config.Result.Result;
import com.course.api.config.Result.Results;
import com.course.api.entity.Menu;
import com.course.api.mapper.RoleMenuMapper;
import com.course.api.service.Impl.MenuServiceImpl;
import com.course.api.service.Impl.RoleServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/menu")
public class MenuController {
    @Autowired
    MenuServiceImpl menuService;
    @Autowired
    RoleServiceImpl roleService;
    @Autowired
    RoleMenuMapper roleMenuMapper;
    /**
     * 获取菜单信息
     * @param name
     * @return
     */
    @GetMapping("/getTreeMenu")
    public Result getTreeMenu(@RequestParam(defaultValue = "") String name) {
        return Results.success(menuService.selectTreeMenu(name));
    }
    /**
     * 添加菜单
     * @param menu
     * @return
     */
    @PostMapping("/add")
    public Result add(@RequestBody Menu menu) {
        return Results.success(menuService.save(menu));
    }
    /**
     * 编辑菜单
     * @param menu
     * @return
     */
    @PutMapping("/update")
    public Result update(@RequestBody Menu menu) {
        return Results.success(menuService.updateById(menu));
    }
    /**
     * 删除菜单
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public Result remove(@PathVariable(value = "id") Long id) {
        return Results.success(menuService.removeById(id));
    }
    /**
     * 获取对应角色的路由信息
     * @param userType
     * @return
     */
    @GetMapping("/getRouteList")
    public Result getRouteList(@RequestParam String userType) {
        Long roleId = roleService.selectRoleId(userType);
        List<Long> menuIds = roleMenuMapper.selectByRoleId(roleId);
        List<Menu> menus = menuService.selectTreeMenu("");
        // 对查出的所有菜单针对对应角色进行过滤
        List<Menu> roleMenu = menuService.filterMenu(menus, menuIds);
        return Results.success(roleMenu);
    }
}

五,项目总结

本系统基于前后端分离开发实现,界面设计简洁大方,人机交互方便,适合做课程设计与毕业设计。

相关文章
|
1月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
141 1
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
104 4
|
2月前
|
前端开发 Java Apache
SpringBoot实现电子文件签字+合同系统!
【10月更文挑战第15天】 在现代企业运营中,合同管理和电子文件签字成为了日常活动中不可或缺的一部分。随着技术的发展,电子合同系统因其高效性、安全性和环保性,逐渐取代了传统的纸质合同。本文将详细介绍如何使用SpringBoot框架实现一个电子文件签字和合同管理系统。
95 1
|
2月前
|
文字识别 安全 Java
SpringBoot3.x和OCR构建车牌识别系统
本文介绍了一个基于Java SpringBoot3.x框架的车牌识别系统,详细阐述了系统的设计目标、需求分析及其实现过程。利用Tesseract OCR库和OpenCV库,实现了车牌图片的识别与处理,确保系统的高准确性和稳定性。文中还提供了具体的代码示例,展示了如何构建和优化车牌识别服务,以及如何处理特殊和异常车牌。通过实际应用案例,帮助读者理解和应用这一解决方案。
|
1月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
40 0
|
2月前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。
|
JavaScript Java 关系型数据库
Springboot+vue打包部署到线上服务器
整合springboot+vue的项目,打包成jar包到线上服务器运行
Springboot+vue打包部署到线上服务器
|
22天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
23天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。