1.系统开发环境
系统采用的集成开发环境为IDEA,使用JAVA语言及SPRINGBOOT框架进行开发,其中硬件环境和软件环境如下:
2.硬件环境
处理器:Intel(R) Core(TM) i7-9750 GPU @ 3.00GHz
内存:8GB
3.软件环境
操作系统:windows 10 64位操作系统
开发工具:IDEA ---2021.3
数据库:NAVICAT --- MySQL-8.1.13
JDK: JDK ---1.8
Maven:Maven ---3.5.4
图4-9 系统E-R图
模块介绍
- 座位预约模块
首先该模块需要确定属于哪个自习室,然后获取该自习室下座位分布,获取到座位分布后再获取该自习室下的学生占座情况,并且根据选座日期,将以前的数据进行筛选和更新,并且预约后会对学生的预约记录进行查询,以确保一个学生只能预约一个座位。
通过时间和code找到在某个时间段内哪些座位是已预约的
public List<Long> findDisableSeat(Long readingRoomId, Date date, int code) {
List<SeatOrder> disableSeat = seatOrderDao.findByReadingRoomId(readingRoomId);
Date yuYueTime = DateUtil.day(date);
List<Long> unusableSeat = new ArrayList<>();
for (SeatOrder seatOrder : disableSeat) {
long seatOrderTime = DateUtil.day(seatOrder.getSubscribeTime()).getTime();
if (yuYueTime.getTime() != seatOrderTime) {
continue;}
if (code != seatOrder.getTimeCode()) {
continue;}
unusableSeat.add(seatOrder.getSeat().getId());}
return unusableSeat;}
根据时间筛选往期预约记录
public SeatOrder stuIsOrdered(Long stuId, Long currentDay) {//把往期记录过滤掉,选出正在预约中的座位
int pm = DateUtil.isPM(); //判断当前时间是否为下午,0为上午 1为下午
for (SeatOrder seatOrder : seatOrders) { //判断学生是否已预约 若已预约则提示 以当先时间为基准过滤掉以前的预约
long stuTime = DateUtil.day(seatOrder.getSubscribeTime()).getTime();
if (stuTime > currentDay) {// 订单时间大于当前时间 就说明已经有预约了
return seatOrder;}
if (stuTime == currentDay) { //订单时间等于当前时间
if (TimeEnum.AM.getCode() == seatOrder.getTimeCode()) {//订单时间为上午
if (pm == 0) {//当前时间为上午 return seatOrder;}}
if (TimeEnum.PM.getCode() == seatOrder.getTimeCode()) {//订单时间为下午
if (pm == 1) {//当前时间为下午
return seatOrder;}}}} //该判断已经通过之后,就说明订单表里已经都是小于当前时间的预约订单了 就是都是以前预约的记录(一个学生只能预约一次未来的时间座位)
return null;}
根据当前时间和自习室类型获取座位预约情况如图5-1所示:
图 5-1 已预约座位表
选择座位进行预约
判断是否有积分
if (student.getStudentCredits() < readingRoomIntegral) {// 判断学生的积分是否符合
return Result.error(CodeMsg.ADMIN_SEAT_STUDENT_INTEGRAL_ERROR);
}
判断当前座位是否已预约
for (Long disableSeat : disableSeats) { //判断该座位是否被已预约
if (disableSeat == seatId) {
return Result.error(CodeMsg.ADMIN_SEAT_ORDER_ADD_EXIST); }}
判断版本号是否相同
int version = seat.getVersion();//获取座位版本号
int newversion=0;//用户版本号
if(version == newversion){
newversion=version+1;//版本号赋值为1
seatService.update(seatId,newversion);//更新座位版本状态
}
保存座位信息
SeatOrder seatOrder = new SeatOrder();
seatOrderService.add(seatOrder)
预约成功后再次预约其他座位将会提示,如图5-2所示:
图5-2 重复预约提示
在预约记录中查看自己往期预约记录和当前预约记录,如图5-3所示:
图5-3 预约记录
对预约记录进行取消,如图5-4所示:
获取学生预约记录信息
Student student = studentService.findByLoginUser();//获取学生预约记录信息
if (Objects.isNull(stuIsOrdered)) {
图5-4 取消预约
1.信誉积分模块
图书馆管理员根据学号信息获取学生信誉积分数据,如图5-5所示
判断学生积分是否比扣除分数大
if (logIn.getGrade()>stuID.getCredits()){
return Result.error(CodeMsg.COMMONENT.ERROR;
}
保存操作信息
dologtagerService.save(login);//保存操作信息
图5-5 查询学生信誉分
查询学生积分后对学生积分进行操作,如图5-6、5-7所示:
图5-6 选择操作
图5-7 进行操作
图5-9 预约统计
图5-10违规统计