作者主页:源码空间站2022
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
本项目是少年儿童活动中心的选课系统,本选课系统是基于SpringBoot2.0 + Mybatis + Thymeleaf + Shiro 开发的后台管理系统,建立以Browser/Server 为结构模式、以数据库为后台核心应用、以服务为目的信息化办公平台。实现对课程安排、报名缴费、数据记录和处理、工作流程的信息化,提高工作效率和数据管理效率,并具备安全性、可升级、可扩展性
面向对象
* 少年儿童活动中心学生家长:通过微信公众号进入系统,进行课程查询、选课支付等操作。具备基本手机使用水平。
* 少年儿童活动中心老师:通过web管理平台进行课程安排、调课退课、选课数据整理及历史数据维护等工作。具备基本计算机使用水平。
* 少年儿童活动中心制定的其他用户:活动中心根据自身的业务需要,指定的其他用户。具备基本计算机使用水平。
技术选型
SpringBoot + Mybatis + Thymeleaf + Shiro + Easyexcel + EhCache
功能列表
- 课程管理 管理活动中心的课程分类以及课程信息
- 教师管理 管理活动中心的授课教师信息
- 学员管理 和管理活动中心的学员信息
- 收费管理 查询学员课程的收费信息以及课程的收费报表
- 用户管理 管理后台系统用户,管理员身份可以进行修改、删除
- 角色管理 分配权限的最小单元,通过角色对用户分配权限
- 菜单管理 管理系统菜单,同时作为权限资源
- 日志管理 记录登录用户的地址和时间,以及未授权越界操作的记录
快速部署
- 环境与插件要求
- Jdk8+
- Mysql5.5+
- Maven
- Redis 3.2+
- Lombok 重要
- 导入项目
- IntelliJ IDEA:Import Project -> Import Project from external model -> Maven
- Eclipse:Import -> Exising Mavne Project
- 准备数据
- 创建数据库,将项目sng.sql文件导入到mysql数据库中
- 修改配置
- 修改项目资源目录,application-dev.yml文件的datasource配置和redis配置
- 运行项目
- 运行项目SngApplication.java
- 访问地址:http://localhost:8090/
- 默认帐号密码:admin/admin(其他账号密码在realpwd表中)
运行截图
代码相关
学生管理控制器
@Controller
@RequestMapping("/stu")
public class StuController {
@Autowired
private StuService stuService;
@Autowired
private CourseService courseService;
/**
* 学生信息页面跳转
* @param pageNum
* @param pageSize
* @param model
* @return
*/
@RequiresPermissions("stu:list")
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(@Valid StuSearchParam stu, @RequestParam(name = "pn", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pSize", defaultValue = "5") Integer pageSize, Model model) {
model.addAttribute("page", PageHelper.startPage(pageNum, pageSize));
List<StuInfo> list = this.stuService.findStus(stu);
//给学生监护人手机号码加密
list.forEach((item)-> {
String encryptPhone = EncryptDataUtil.encryptPhone(item.getStuParentPhone());
item.setStuParentPhone(encryptPhone);
});
model.addAttribute("stus", list);
model.addAttribute("courses", this.courseService.findCourseColumns());
return "stu/list";
}
/**
* 学生添加页面跳转
* @param model
* @return
*/
@RequiresPermissions("stu:add")
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String toAddStu(Model model) {
model.addAttribute("courses", this.courseService.findCourseColumns());
return "stu/add";
}
/**
* 学生信息添加
* @param stu
* @param br
* @return
*/
@RequiresPermissions("stu:add")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addStu(@Valid StuParam stu, BindingResult br) {
ValidationUtil.validateData(br);
if (stu.parseStuParentRelation()){
this.stuService.addStu(stu);
}
return "success";
}
/**
* 学生修改页面跳转
* @param stuId
* @param model
* @return
*/
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public String toEditStu(Integer stuId, Model model) {
StuFind stu = this.stuService.findStu(stuId);
model.addAttribute("courses", this.courseService.findCourseColumns());
model.addAttribute("stu", stu);
return "stu/edit";
}
/**
* 学生信息修改
* @param stu
* @param br
* @return
*/
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String editStu(@Valid StuParam stu, BindingResult br) {
ValidationUtil.validateData(br);
if (stu.parseStuParentRelation()){
this.stuService.editStu(stu);
}
return "success";
}
/**
* 学生信息删除
* @param id
* @return
*/
@RequiresRoles(value = {"0","1"},logical = Logical.OR)
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/remove", method = RequestMethod.POST)
@ResponseBody
public String removeStu(Integer id) {
return this.stuService.removeStu(id) ? "success" : "fail";
}
/**
* 学生信息恢复
* @param id
* @return
*/
@RequiresRoles("0")
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/recover", method = RequestMethod.POST)
@ResponseBody
public String recoverStu(Integer id) {
return this.stuService.recoverStu(id) ? "success" : "fail";
}
/**
* 学生信息批量删除
* @param ids
* @return
*/
@RequiresRoles(value = {"0","1"},logical = Logical.OR)
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/removes", method = RequestMethod.POST)
@ResponseBody
public String removeStus(Integer[] ids) {
return this.stuService.batchRemoveStus(Arrays.asList(ids)) ? "success" : "fail";
}
/**
* 学生信息批量恢复
* @param ids
* @return
*/
@RequiresRoles("0")
@RequiresPermissions(value = {"stu:list","stu:add"},logical = Logical.AND)
@RequestMapping(value = "/recovers", method = RequestMethod.POST)
@ResponseBody
public String recoverStus(Integer[] ids) {
return this.stuService.batchRecoverStus(Arrays.asList(ids)) ? "success" : "fail";
}
/**
* 根据学生姓名查询学生信息
* @return
*/
@RequestMapping(value = "/findStuInfo", method = RequestMethod.POST)
@ResponseBody
public List<StuSearchFind> findStuInfo(String stuName) {
return this.stuService.findStuColumns(stuName);
}
/**
* 查询学生课程信息
* @return
*/
@RequestMapping(value = "/findStuCourse", method = RequestMethod.POST)
@ResponseBody
public StuCourseFind findStuCourseInfo(Integer stuId) {
return this.stuService.findStuCourseInfo(stuId);
}
/**
* 导出学生信息
* @param stuIds
* @param response
* @throws Exception
*/
@RequiresPermissions("stu:list")
@RequestMapping(value = "/exportStuInfo", method = RequestMethod.POST)
public void exportStuInfo(Integer[] stuIds, HttpServletResponse response) throws Exception {
ServletOutputStream outputStream = null;
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 使用URLEncoder的encode来防止中文乱码
String fileName = URLEncoder.encode("学生信息表", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
outputStream = response.getOutputStream();
EasyExcel.write(outputStream, StuInfo.class).sheet("学生信息表").doWrite(this.stuService.findStuInfo(Arrays.asList(stuIds)));
} finally {
try {
//关闭流
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
教师管理控制器
@Controller
@RequestMapping("/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
@Autowired
private CourseService courseService;
@Autowired
private CourseTypeService courseTypeService;
/**
* 教师信息页面跳转
* @param teacherName
* @param teacherType
* @param pageNum
* @param model
* @return
*/
@RequiresPermissions("teacher:list")
@RequestMapping(value = "/list",method = RequestMethod.GET)
public String list(Integer teacherType, String teacherName, @RequestParam(name="flag",defaultValue="0")Integer flag,
@RequestParam(name="pn",defaultValue="1")Integer pageNum,
@RequestParam(name = "pSize", defaultValue = "5") Integer pageSize, Model model){
Map<String, Object> params = new HashMap<>();
params.put("teacherName",teacherName);
params.put("teacherType",teacherType);
params.put("flag",flag);
model.addAttribute("page", PageHelper.startPage(pageNum, pageSize));
List<TeacherInfo> list = this.teacherService.findTeachers(params);
//给教师手机号加密
list.forEach((item)-> {
String encryptPhone = EncryptDataUtil.encryptPhone(item.getTeacherPhone());
item.setTeacherPhone(encryptPhone);
});
model.addAttribute("teachers",list);
model.addAttribute("courseTypes",this.courseTypeService.findCourseTypeColumns());
return "teacher/list";
}
/**
* 教师信息录入页面跳转
* @param model
* @return
*/
@RequiresPermissions("teacher:add")
@RequestMapping(value = "/add",method = RequestMethod.GET)
public String toAddTeacher(Model model){
model.addAttribute("courseTypes",this.courseTypeService.findCourseTypeColumns());
return "teacher/add";
}
/**
* 教师信息录入
* @param teacher
* @param br
* @return
*/
@RequiresPermissions("teacher:add")
@RequestMapping(value = "/add",method = RequestMethod.POST)
public String addTeacher(@Valid TeacherParam teacher, BindingResult br){
ValidationUtil.validateData(br);
this.teacherService.addTeacher(teacher);
return "success";
}
/**
* 教师信息修改页面跳转
* @param teacherId
* @param model
* @return
*/
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/edit",method = RequestMethod.GET)
public String toEditTeacher(Integer teacherId,Model model){
TeacherFind teacher = this.teacherService.findTeacher(teacherId);
model.addAttribute("teacher",teacher);
model.addAttribute("courseTypes",this.courseTypeService.findCourseTypeColumns());
return "teacher/edit";
}
/**
* 教师信息修改
* @param teacher
* @param br
* @return
*/
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/edit",method = RequestMethod.POST)
public String editTeacher(@Valid TeacherParam teacher, BindingResult br){
ValidationUtil.validateData(br);
this.teacherService.editTeacher(teacher);
return "success";
}
/**
* 教师信息删除
* @param id
* @return
*/
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/remove",method = RequestMethod.POST)
@ResponseBody
public String removeTeacher(Integer id){
return this.teacherService.removeTeacher(id)?"success":"fail";
}
/**
* 教师信息恢复
* @param id
* @return
*/
@RequiresRoles("0")
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/recover",method = RequestMethod.POST)
@ResponseBody
public String recoverTeacher(Integer id){
return this.teacherService.recoverTeacher(id)?"success":"fail";
}
/**
* 教师信息批量删除
* @param ids
* @return
*/
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/removes",method = RequestMethod.POST)
@ResponseBody
public String removeTeachers(Integer[] ids){
return this.teacherService.batchRemoveTeachers(Arrays.asList(ids))?"success":"fail";
}
/**
* 教师信息批量恢复
* @param ids
* @return
*/
@RequiresRoles("0")
@RequiresPermissions(value = {"teacher:list","teacher:add"},logical = Logical.AND)
@RequestMapping(value = "/recovers",method = RequestMethod.POST)
@ResponseBody
public String recoverTeachers(Integer[] ids){
return this.teacherService.batchRecoverTeachers(Arrays.asList(ids))?"success":"fail";
}
/**
* 根据专业查询价格、授课教室和教师
* @param teacherType
* @return
*/
@RequiresPermissions("teacher:add")
@RequestMapping(value = "/findClassroom",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> findClassroom(Integer teacherType){
List<Map<String, Object>> crs = courseService.findClassrooms(teacherType);
HashMap<String, Object> classrooms = new HashMap<>();
classrooms.put("classrooms",crs);
return classrooms;
}
}
如果也想学习本系统,下面领取。回复:039springboot