基于javaweb的SpringBoot+JPA图书馆座位占座预约管理系统(管理员、老师、学生)(java+springboot+jpa+freemarker+mysql+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

管理员:学生管理、教师管理、阅览室类型管理、阅览室管理(座位生成等)、学生信用积分管理、座位预约统计管理等。

学生:登录、修改个人信息、阅览室查看、选座信息查看、选座、取消选座等。

教师:登录、阅览室管理、学生信用管理:可根据学生表现进行扣分、奖励等,扣分达到设定的值则无法进行选座。

090123202502

100123202502

110123202502

120123202502

130123202502

510123192502

520123192502

530123192502

540123192502

560123192502

570123192502

580123192502

590123192502

000123202502

010123202502

020123202502

030123202502

040123202502

050123202502

070123202502

080123202502

技术框架

JSP JavaScript SpringBoot SpringDataJPA FreeMarker MySQL

基于javaweb的SpringBoot+JPA图书馆座位占座预约管理系统(管理员、老师、学生)(java+springboot+jpa+freemarker+mysql+maven)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
		}
//表示验证都通过,开始添加数据库
existMenu.setIcon(menu.getIcon());
existMenu.setName(menu.getName());
existMenu.setParent(menu.getParent());
existMenu.setSort(menu.getSort());
existMenu.setUrl(menu.getUrl());
existMenu.setButton(menu.isButton());
existMenu.setShow(menu.isShow());
if(menuService.save(existMenu) == null){
Result.error(CodeMsg.ADMIN_MENU_ADD_ERROR);
}
//数据库添加操作成功,记录日志
operaterLogService.add("编辑菜单信息【" + existMenu + "】");
return Result.success(true);
}

/**
* 删除菜单信息
* @param request
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try {
menuService.delete(id);
} catch (Exception e) {
return Result.error(CodeMsg.ADMIN_MENU_DELETE_ERROR);
}
//数据库添加操作成功,记录日志
operaterLogService.add("删除菜单信息,菜单ID【" + id + "】");
return Result.success(true);
}
}
package com.demo.controller.admin;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36


/**
* 登录拦截器
*
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {

private Logger log = LoggerFactory.getLogger(LoginInterceptor.class);

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String requestURI = request.getRequestURI();
HttpSession session = request.getSession();
Object attribute = session.getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
if (attribute == null) {
log.info("用户还未登录或者session失效,重定向到登录页面,当前URL=" + requestURI);
//首先判断是否是ajax请求
if (StringUtil.isAjax(request)) {
//表示是ajax请求
try {
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSON.toJSONString(CodeMsg.USER_SESSION_EXPIRED));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
//说明是普通的请求,可直接重定向到登录页面
//用户还未登录或者session失效,重定向到登录页面
try {
response.sendRedirect("/system/login");
} catch (IOException e) {
// TODO Auto-generated catch block
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

@RequestMapping("/clbum")
@Controller
public class ClazzController {

@Autowired
private ClazzDao clazzDao;
@Autowired
private ClazzService clazzService;
@Autowired
private TeacherService teacherService;

@Autowired
private OperaterLogService operaterLogService;

/**
* 班级列表页面
* @param model
* @param clazz
* @param pageBean
* @return
*/
@RequestMapping(value="/list")
public String list(Model model, Clazz clazz, PageBean<Clazz> pageBean){
model.addAttribute("title", "班级列表");
model.addAttribute("teacher" , teacherService.findAll());
model.addAttribute("claname", clazz.getClaname());
model.addAttribute("pageBean",clazzService.findList(clazz,pageBean));
return "admin/clbum/list";
}

/**
* 添加班级页面
* @param model
* @return
*/
@RequestMapping(value="/add",method= RequestMethod.GET)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
		operaterLogService.add("添加用户,用户ID:" + id);
return Result.success(true);
}
}
package com.demo.controller.admin;



/***
* 阅读室管理操作控制层
*/
@Controller
@RequestMapping(value = "/readRoom")
public class ReadRoomController {

@Autowired
private ReadRoomService readRoomService;

@Autowired
private ReadRoomTypeService readRoomTypeService;
@RequestMapping(value="/list")
public String list(Model model, ReadingRoom readingRoom, PageBean<ReadingRoom> pageBean){
model.addAttribute("title", "阅览室列表");
model.addAttribute("name",readingRoom.getName());
model.addAttribute("pageBean", readRoomService.findAll(readingRoom, pageBean));
return "admin/readroom/list";
}

/***
* 根据ID删除
* @param id
* @return
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 */
@RequestMapping(value = "/update_userinfo", method = RequestMethod.POST)
@ResponseBody
public Result updateUserInfo(User user, Model model) {

User loginedUser = SessionUtil.getLoginedUser();
loginedUser.setEmail(user.getEmail());
loginedUser.setNickName(user.getNickName());
loginedUser.setMobile(user.getMobile());
loginedUser.setHeadPic(user.getHeadPic());
//首先保存到数据库
User save = userService.save(loginedUser);
//更新session里的值
SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);
return Result.success(save);
}

/**
* 修改密码页面
*
* @return
*/
@RequestMapping(value = "/update_pwd", method = RequestMethod.GET)
public String updatePwd() {
return "admin/system/update_pwd";
}

/**
* 修改密码表单提交
*
* @param oldPwd
* @param newPwd
* @return
*/
@RequestMapping(value = "/update_pwd", method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> updatePwd(@RequestParam(name = "oldPwd", required = true) String oldPwd,
@RequestParam(name = "newPwd", required = true) String newPwd
) {
User loginedUser = SessionUtil.getLoginedUser();
if (!loginedUser.getPassword().equals(oldPwd)) {
return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_ERROR);
}
if (StringUtils.isEmpty(newPwd)) {
return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_EMPTY);
}
loginedUser.setPassword(newPwd);
//保存数据库
userService.save(loginedUser);
//更新session
SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);
return Result.success(true);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
model.addAttribute("roles", roleService.findAll());
model.addAttribute("user", userService.find(id));
return "admin/user/edit";
}

/**
* 编辑用户信息表单提交处理
* @param user
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(User user){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(user);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(user.getRole() == null || user.getRole().getId() == null){
return Result.error(CodeMsg.ADMIN_USER_ROLE_EMPTY);
}
if(user.getId() == null || user.getId().longValue() <= 0){
return Result.error(CodeMsg.ADMIN_USE_NO_EXIST);
}
if(userService.isExistUsername(user.getUsername(), user.getId())){
return Result.error(CodeMsg.ADMIN_USERNAME_EXIST);
}
//到这说明一切符合条件,进行数据库保存
User findById = userService.find(user.getId());
//讲提交的用户信息指定字段复制到已存在的user对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(user, findById, "id","createTime","updateTime");
if(userService.save(findById) == null){
return Result.error(CodeMsg.ADMIN_USE_EDIT_ERROR);
}
operaterLogService.add("编辑用户,用户名:" + user.getUsername());
return Result.success(true);
}

/**
* 删除用户
* @param id


项目链接:
https://javayms.github.io?id=071522512602105aa
https://javayms.pages.dev?id=071522512602105aa