🙊作者简介:多年编程开发经验,专注java技术领域和毕业设计项目实战,系统定制、远程部署调试、代码讲解、代码修改
🍅擅长语言:springboot、ssm、vue、html、jsp、php、python、爬虫、小程序、安卓app
⬇️源码获取:文末可以获取源码+数据库+文档
⚡感兴趣的可以先收藏+关注,后续会更新更多项目资料,所有项目均配有开发文档和安装配置教程
系统介绍
随着课程的增多,学生的选择性越来越大。现在大多数学校选课的方式采用学生上报给老师,老师负责整理。这种方式效率低、灵活性低,每门课程的选报人数有限就给老师的统计整理工作造成困难。目前,网络发展成熟,各类管理系统层出不穷,如果可以有专业的管理系统提供网上选课,则可以帮助老师和学生。
本基于SpringBoot+Vue选课系统采用小程序技术进行设计,语言采用JAVA,数据库为MySQL。在技术中加入Vue,使界面更加丰富、友好。本系统针对学生选择课程而开发,使用角色为管理员和学生、老师。学生可以通过登录在界面里浏览课程进行选择和退课、查询教学视频、帖子等。管理员可以管理学生信息、课程信息、教师信息、论坛交流信息、学生选课信息、退课信息等。教师可以管理教学视频、课程信息和管理学生的选课、退课、留言咨询等。在本系统中,学生可以详细了解课程的内容、负责老师,灵活性强,对学生的选课帮助非常大。
系统主要技术
开发语言:Java
使用框架:SpringBoot
系统架构:B/S
前端技术:Vue、JavaScript
数据库 :Mysql 5.7/8.0
编译工具:idea或者eclipse,jdk1.8,maven
系统功能结构设计
本系统的功能界面设计为三个,学生中心界面和管理员中心界面、教师中心界面。根据不同用户的不同需求分开设计功能。本系统的功能结构图如下图4.1所示:
图4.1系统功能结构图
系统功能实现
5.1管理员功能界面的实现
管理员是系统里的最高权限,负责系统里的所有信息的管理、审核。包括学生信息、课程信息、选课信息等。
5.1.1用户登录界面的实现
本功能设计的目的是帮助系统检验身份,保证系统的安全。在用户登录功能界面里的元素包括按钮、列表框、文字、图片等。用户输入框、密码输入框、权限列表框都居左展示。用户登录界面的实现界面如下图5.1所示:
图5.1用户登录界面的实现效果
5.1.2个人中心管理功能的实现界面
在个人中心管理功能里,管理员可以修改个人资料和修改当前登录的登录密码。修改个人信息功能的实现界面如下图5.2所示:
图5.2修改个人信息功能的实现界面
修改密码的实现界面如下图5.3所示:
图5.3修改密码的实现界面
5.1.3课程信息管理功能的实现界面
管理员登录后在课程信息管理功能里可以发布新的课程和删除不使用的课程以及修改错误的课程,管理员添加课程信息的实现界面如下图5.4所示:
图5.4管理员添加课程信息的功能实现界面
5.1.4教师信息管理功能的实现界面
管理员在本功能里可以添加教师资料,可以为教师分配账号和密码,帮助教师使用本系统,当教师辞职后管理员可以及时的删除教师信息防止系统内容的外泄。管理员查询教师信息功能的实现界面如下图5.5所示:
图5.5管理员查询教师信息功能的实现界面
5.1.5科目名称管理功能的实现界面
科目名称管理功能里可以看到科目的编号和标题,点击添加科目名称信息可以进入添加界面里实现科目名称的更新。管理员查询科目名称信息功能的实现界面如下图5.6所示:
图5.6管理员查询科目名称信息功能的实现界面
5.1.6学生信息管理功能的实现界面
管理员可以添加学生信息和查询学生信息,学生信息添加后,学生可以自己修改自己的资料。管理员查询学生信息功能的实现界面如下图5.7所示:
图5.7管理员查询学生信息功能的实现界面
5.1.7论坛交流管理功能的实现界面
管理员也可以对论坛交流进行修改和删除以此来审核学生的帖子。管理员查询论坛交流信息功能的实现界面如下图5.8所示:
图5.8管理员查询论坛交流信息功能的实现界面
5.1.8教学视频管理功能的实现界面
管理员可以查询教师设置的教学视频,并可以进行修改和添加、删除。管理员查询教学视频功能的实现界面如下图5.9所示:
图5.9管理员查询教学视频信息的实现界面
5.1.9学生选课管理功能的实现界面
管理员也可以查询学生的选课详情并进行修改和删除、查询。学生选课功能的实现界面如下图5.10所示:
图5.10管理员查询学生选课信息的实现界面
5.1.10学生退课管理功能的实现界面
本功能属于选课管理的一部分,管理员可以查询学生的退课信息并进行分析。学生退课管理功能的实现界面如下图5.11所示:
图5.11管理员查询退课信息的实现界面
5.1.11留言咨询管理功能的实现界面
本功能实现学生问题的解答。管理员可以审核学生的留言咨询。实现界面如下图5.12所示:
图5.12留言咨询信息的实现界面
5.1.12系统管理功能的实现
系统管理包括设置公告和轮播图。系统管理的实现界面如下图5.13所示:
图5.13系统管理功能的实现
5.2学生功能的界面详细实现
5.2.1个人资料管理功能的实现界面
学生可以修改自己的个人资料使其保证正确性。学生修改个人资料管理功能的实现界面如下图5.14所示:
图5.14学生修改个人资料管理功能的实现界面
5.2.2在线选课功能的实现界面
在本功能里,学生可以查询课程信息,可以看到课程的所负责老师和学分等信息,然后可以进行选择。选课管理功能的实现界面如下图5.15所示:
图5.15选课管理功能的实现界面
5.2.3留言咨询功能的实现界面
学生可以向教师咨询问题。留言咨询功能的实现界面如下图5.16所示:
图5.16留言咨询的功能实现界面
5.2.4论坛交流管理功能的实现界面
学生可以发布帖子和管理自己发布的帖子。实现界面如下图5.17所示:
图5.17发布帖子功能的实现界面
5.2.5教学视频管理功能的实现界面
学生可以查看视频信息并进行收藏、评论、咨询。实现界面如下图5.18所示:
图5.18教学视频浏览功能的实现界面
5.2.6学生退课功能的实现
发现选择的课程不适合时也可以退课。在线退课功能的实现界面如下图5.19所示:
图5.19学生退课功能的实现
5.3教师功能的详细实现界面
教师的主要功能为审核学生的选课、退课以及发布教学视频等。教师功能的实现界面如下图5.20所示:
图5.20教师角色功能的实现界面
论文参考
核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
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 com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.XueshengxuankeEntity;
import com.entity.view.XueshengxuankeView;
import com.service.XueshengxuankeService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 学生选课
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/xueshengxuanke")
public class XueshengxuankeController {
@Autowired
private XueshengxuankeService xueshengxuankeService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,XueshengxuankeEntity xueshengxuanke,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
xueshengxuanke.setJiaoshizhanghao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("xuesheng")) {
xueshengxuanke.setXuehao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<XueshengxuankeEntity> ew = new EntityWrapper<XueshengxuankeEntity>();
PageUtils page = xueshengxuankeService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xueshengxuanke), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,XueshengxuankeEntity xueshengxuanke,
HttpServletRequest request){
EntityWrapper<XueshengxuankeEntity> ew = new EntityWrapper<XueshengxuankeEntity>();
PageUtils page = xueshengxuankeService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xueshengxuanke), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( XueshengxuankeEntity xueshengxuanke){
EntityWrapper<XueshengxuankeEntity> ew = new EntityWrapper<XueshengxuankeEntity>();
ew.allEq(MPUtil.allEQMapPre( xueshengxuanke, "xueshengxuanke"));
return R.ok().put("data", xueshengxuankeService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(XueshengxuankeEntity xueshengxuanke){
EntityWrapper< XueshengxuankeEntity> ew = new EntityWrapper< XueshengxuankeEntity>();
ew.allEq(MPUtil.allEQMapPre( xueshengxuanke, "xueshengxuanke"));
XueshengxuankeView xueshengxuankeView = xueshengxuankeService.selectView(ew);
return R.ok("查询学生选课成功").put("data", xueshengxuankeView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
XueshengxuankeEntity xueshengxuanke = xueshengxuankeService.selectById(id);
return R.ok().put("data", xueshengxuanke);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
XueshengxuankeEntity xueshengxuanke = xueshengxuankeService.selectById(id);
return R.ok().put("data", xueshengxuanke);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody XueshengxuankeEntity xueshengxuanke, HttpServletRequest request){
xueshengxuanke.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(xueshengxuanke);
xueshengxuankeService.insert(xueshengxuanke);
return R.ok();
}
/**
* 前端保存
*/
@IgnoreAuth
@RequestMapping("/add")
public R add(@RequestBody XueshengxuankeEntity xueshengxuanke, HttpServletRequest request){
xueshengxuanke.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(xueshengxuanke);
xueshengxuankeService.insert(xueshengxuanke);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody XueshengxuankeEntity xueshengxuanke, HttpServletRequest request){
//ValidatorUtils.validateEntity(xueshengxuanke);
xueshengxuankeService.updateById(xueshengxuanke);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
xueshengxuankeService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<XueshengxuankeEntity> wrapper = new EntityWrapper<XueshengxuankeEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
wrapper.eq("jiaoshizhanghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("xuesheng")) {
wrapper.eq("xuehao", (String)request.getSession().getAttribute("username"));
}
int count = xueshengxuankeService.selectCount(wrapper);
return R.ok().put("count", count);
}
}