项目编号: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);
}
}
五,项目总结
本系统基于前后端分离开发实现,界面设计简洁大方,人机交互方便,适合做课程设计与毕业设计。