作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作
主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等
业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。
收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:BS-XX-224
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
二,项目简介
随着社会经济的持续发展以及互联网的快速发展,各种各样的软件普及了各个生活领域以及各种设备上,现在生活中一些常用设备也越来越智能化人性化。同样互联网的发展在学校中应用也比较广泛。本论文以图书馆自习室座位预约来进行分析。高校的图书馆的建设现在也越来越信息化,智能化来,所以高校也慢慢引入了座位预约系统。传统的自习室预约方式经常会出现信息不对称,管理比较混乱,学生去自习室找不到位置等。为了解决图书馆座位预约问题,缓解校园矛盾。在这种情况下基于SpringBoot的图书馆座位预约系统就应运而生了。
该图书馆座位预约系统的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,方便用户使用该系统,还有系统的后期的可操作性,通过对座位信息和预约信息内容的详细了解和处理进行功能开发。
本图书馆座位预约系统采用Java语言的SpringBoot框架和Vue框架而设计,整个系统采用当前流行的前后端分离进行开发,系统共设置三个角色技术部人员(超级管理员),流通部人员(自习室管理员),学生。其中技术部和流通部的系统界面是同一个,区别在于技术部有该系统的全部权限(相当于管理员),流通部只有部分权限。流通部人员在登录时可以使用人脸识别进行登录。功能主要有登录与注册、自习室管理、规则设置、学生和流通部信息管理、黑名单管理、数据统计功能等。
近年来,网络技术的迅猛发展使得我们的生活愈发便捷。图书馆座位预约系统便是一个颇具代表性的实例。越来越多的人选择通过专用平台预约图书馆座位,查询图书馆及自习室的相关信息。这一系统的出现,既便利了学生,同时也极大地减轻了管理员的工作负担。图书馆座位预约系统作为一个优秀的操作平台,通过与数据库管理软件的协同,实现了学生与管理员之间的顺畅沟通。基于此需求,我们设计了一套图书馆座位预约系统,以满足现代图书馆管理的需求。
在深入分析现有状况的基础上,我们详细探讨了用户的实际需求,并据此制定了相应的开发计划。该系统的目标是便利学生预约图书馆座位,协助管理员节省管理时间,降低工作强度,从而提高管理工作效率。
随着计算机技术的持续进步,它已广泛渗透至我们生活的各个领域,带来诸多便利。我们期望通过开发图书馆座位预约系统,实现图书馆管理的信息化,减轻人们负担,提升工作效率。
在这个信息化时代,图书馆座位预约系统应运而生,它不仅满足了学生和管理员的需求,也彰显了科技进步对我们生活的改善。让我们共同期待这个系统在未来的日子里,为图书馆管理带来更多的便利和高效。
图书馆座位预约系统作为一款创新性的管理工具,将在很大程度上提升图书馆的运行效率,同时为学生和管理员提供更舒适的学习和工作环境。让我们携手共进,共同迎接信息化管理时代的到来。
三,系统展示
四,核心代码展示
package cn.zwz.book.controller;
import cn.zwz.basics.utils.PageUtil;
import cn.zwz.basics.utils.ResultUtil;
import cn.zwz.basics.baseVo.PageVo;
import cn.zwz.basics.baseVo.Result;
import cn.zwz.basics.utils.SecurityUtil;
import cn.zwz.book.entity.Order;
import cn.zwz.book.entity.StudyRoom;
import cn.zwz.book.service.IOrderService;
import cn.zwz.book.service.IStudyRoomService;
import cn.zwz.book.vo.MyPair;
import cn.zwz.book.vo.SeatVo;
import cn.zwz.data.entity.User;
import cn.zwz.data.utils.ZwzNullUtils;
import cn.zwz.book.entity.Seat;
import cn.zwz.book.service.ISeatService;
import cn.zwz.data.vo.AntvVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
/**
* @author 郑为中
* CSDN: Designer 小郑
*/
@Slf4j
@RestController
@Api(tags = "座位管理接口")
@RequestMapping("/zwz/seat")
@Transactional
public class SeatController {
@Autowired
private ISeatService iSeatService;
@Autowired
private IStudyRoomService iStudyRoomService;
@Autowired
private IOrderService iOrderService;
@Autowired
private SecurityUtil securityUtil;
@RequestMapping(value = "/init", method = RequestMethod.GET)
@ApiOperation(value = "初始化")
public Result<Object> init(){
List<StudyRoom> srList = iStudyRoomService.list();
QueryWrapper<Order> rQw2 = new QueryWrapper<>();
iOrderService.remove(rQw2);
QueryWrapper<Seat> reQw = new QueryWrapper<>();
iSeatService.remove(reQw);
for (StudyRoom sr : srList) {
for(int i = 0; i < 4; i ++) {
for(int j = 0; j < 5; j ++) {
Seat s = new Seat();
s.setTitle("座位" + (i + 1) + "-" + (j + 1));
s.setRoomId(sr.getId());
s.setRoomName(sr.getTitle());
s.setX(BigDecimal.valueOf(i + 1));
s.setY(BigDecimal.valueOf(j + 1));
s.setStatus("未预约");
s.setOrderId("");
s.setOrderName("");
iSeatService.saveOrUpdate(s);
}
}
}
return ResultUtil.success();
}
@RequestMapping(value = "/getOne", method = RequestMethod.GET)
@ApiOperation(value = "查询单条座位")
public Result<Seat> get(@RequestParam String id){
return new ResultUtil<Seat>().setData(iSeatService.getById(id));
}
@RequestMapping(value = "/count", method = RequestMethod.GET)
@ApiOperation(value = "查询全部座位个数")
public Result<Long> getCount(){
return new ResultUtil<Long>().setData(iSeatService.count());
}
@RequestMapping(value = "/getAll", method = RequestMethod.GET)
@ApiOperation(value = "查询全部座位")
public Result<List<Seat>> getAll(){
return new ResultUtil<List<Seat>>().setData(iSeatService.list());
}
@RequestMapping(value = "/order", method = RequestMethod.GET)
@ApiOperation(value = "预约座位")
public Result<List<Seat>> order(@RequestParam String id){
Seat s = iSeatService.getById(id);
if(s == null) {
return ResultUtil.error("座位不存在");
}
if(!Objects.equals("未预约",s.getStatus())) {
return ResultUtil.error("座位已被预约");
}
User currUser = securityUtil.getCurrUser();
Order o = new Order();
o.setUserId(currUser.getId());
o.setUserName(currUser.getNickname());
o.setSeatId(s.getId());
o.setSeatName(s.getTitle());
o.setStatus1("已预约");
o.setStatus2("未签到");
iOrderService.saveOrUpdate(o);
s.setStatus("已预约");
s.setOrderId(currUser.getId());
s.setOrderName(currUser.getNickname());
iSeatService.saveOrUpdate(s);
return ResultUtil.success();
}
@RequestMapping(value = "/ra", method = RequestMethod.GET)
@ApiOperation(value = "随机选座")
public Result<List<Seat>> ra(){
QueryWrapper<Seat> qw = new QueryWrapper<>();
qw.eq("status","未预约");
List<Seat> seatList = iSeatService.list(qw);
Random ra = new Random();
int suiJiNumber = ra.nextInt(seatList.size());
Seat s = seatList.get(suiJiNumber);
User currUser = securityUtil.getCurrUser();
Order o = new Order();
o.setUserId(currUser.getId());
o.setUserName(currUser.getNickname());
o.setSeatId(s.getId());
o.setSeatName(s.getTitle());
o.setStatus1("已预约");
o.setStatus2("未签到");
iOrderService.saveOrUpdate(o);
s.setStatus("已预约");
s.setOrderId(currUser.getId());
s.setOrderName(currUser.getNickname());
iSeatService.saveOrUpdate(s);
return ResultUtil.success(s.getTitle());
}
@RequestMapping(value = "/hi", method = RequestMethod.GET)
@ApiOperation(value = "智能选座")
public Result<Seat> hi(){
User currUser = securityUtil.getCurrUser();
/**
* 首先根据预约历史进行推荐
*/
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.eq("user_id",currUser.getId());
orderQw.orderByDesc("create_time");
orderQw.last("limit 1");
Order o = iOrderService.getOne(orderQw);
if(o != null) {
Seat s = iSeatService.getById(o.getSeatId());
if(s != null && Objects.equals("未预约",s.getStatus())) {
return new ResultUtil<Seat>().setData(s);
}
}
/**
* 根据座位使用率
*/
QueryWrapper<Order> orderQw2 = new QueryWrapper<>();
orderQw2.eq("status2","已签到");
List<Order> orderList = iOrderService.list(orderQw2);
List<MyPair> pairList = new ArrayList<>();
for (Order order : orderList) {
boolean flag = true;
for (MyPair myPair : pairList) {
if(Objects.equals(order.getSeatId(),myPair.getId())) {
myPair.setValue(myPair.getValue().add(BigDecimal.ONE));
flag = false;
break;
}
}
if(flag) {
pairList.add(new MyPair(order.getSeatId(),order.getSeatName(),BigDecimal.ONE));
}
}
Collections.sort(pairList, new Comparator<MyPair>() {
@Override
public int compare(MyPair o1, MyPair o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(int i = 0; i < pairList.size(); i ++) {
Seat s = iSeatService.getById(pairList.get(i).getId());
if(s != null && Objects.equals("未预约",s.getStatus())) {
return new ResultUtil<Seat>().setData(s);
}
}
/**
* 最后根据座位位置,选最前面的
*/
QueryWrapper<Seat> seatQw = new QueryWrapper<>();
seatQw.orderByAsc("x");
seatQw.last("limit 1");
seatQw.eq("status","未预约");
Seat s = iSeatService.getOne(seatQw);
if(s == null) {
return ResultUtil.error("没有合适的座位");
}
return new ResultUtil<Seat>().setData(s);
}
@RequestMapping(value = "/getCard", method = RequestMethod.GET)
@ApiOperation(value = "查询全部座位")
public Result<List<SeatVo>> getCard(@RequestParam String id){
QueryWrapper<Seat> qw = new QueryWrapper<>();
qw.eq("room_id",id);
qw.orderByAsc("x");
List<Seat> seatList = iSeatService.list(qw);
List<SeatVo> ans = new ArrayList<>();
for (Seat s : seatList) {
boolean flag = true;
for (SeatVo vo : ans) {
if(Objects.equals(0,s.getX().compareTo(vo.getX()))) {
List<Seat> a = vo.getSeatList();
a.add(s);
vo.setSeatList(a);
flag = false;
break;
}
}
if(flag) {
SeatVo vo = new SeatVo();
vo.setX(s.getX());
List<Seat> a = new ArrayList<>();
a.add(s);
vo.setSeatList(a);
ans.add(vo);
}
}
return new ResultUtil<List<SeatVo>>().setData(ans);
}
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询座位")
public Result<IPage<Seat>> getByPage(@ModelAttribute Seat seat ,@ModelAttribute PageVo page){
QueryWrapper<Seat> qw = new QueryWrapper<>();
if(!ZwzNullUtils.isNull(seat.getCreateBy())) {
}
IPage<Seat> data = iSeatService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<Seat>>().setData(data);
}
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
@ApiOperation(value = "增改座位")
public Result<Seat> saveOrUpdate(Seat seat){
if(iSeatService.saveOrUpdate(seat)){
return new ResultUtil<Seat>().setData(seat);
}
return ResultUtil.error();
}
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增座位")
public Result<Seat> insert(Seat seat){
iSeatService.saveOrUpdate(seat);
return new ResultUtil<Seat>().setData(seat);
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
@ApiOperation(value = "编辑座位")
public Result<Seat> update(Seat seat){
iSeatService.saveOrUpdate(seat);
return new ResultUtil<Seat>().setData(seat);
}
@RequestMapping(value = "/delByIds", method = RequestMethod.POST)
@ApiOperation(value = "删除座位")
public Result<Object> delByIds(@RequestParam String[] ids){
for(String id : ids){
iSeatService.removeById(id);
}
return ResultUtil.success();
}
@RequestMapping(value = "/getAntvVoList", method = RequestMethod.GET)
@ApiOperation(value = "查询图表数据")
public Result<List<AntvVo>> getAntvVoList(@RequestParam String id){
List<AntvVo> ansList = new ArrayList<>();
QueryWrapper<Seat> qw = new QueryWrapper<>();
qw.eq("room_id",id);
List<Seat> teacherList = iSeatService.list(qw);
for (Seat o : teacherList) {
boolean flag = false;
for (AntvVo vo : ansList) {
if(Objects.equals(vo.getTitle(),o.getStatus())) {
flag = true;
vo.setValue(vo.getValue().add(BigDecimal.ONE));
break;
}
}
if(!flag) {
AntvVo vo = new AntvVo();
vo.setTitle(o.getStatus());
vo.setType("位置梳理");
vo.setValue(BigDecimal.ONE);
ansList.add(vo);
}
}
return new ResultUtil<List<AntvVo>>().setData(ansList);
}
}
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统