实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统

简介: 实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统

项目编号:BS-XX-167

一,项目简介

学校中的实验设备是属于全校师生共用的教学资源。由于学校实验室个数及每门课程相关实验室课时数的有限性,使得实验室不可能像普通教室那样按周次进行固定排课。当前实验教室的排课普遍采用人工预约的方法,这种方式无论在人员联系上还是实验室安排上都很不方便。预约一个教室的周期往往在两周以上,极大地影响了教学进度的安排,并且由于实验室教室的分散性,往往会出现一个教室爆满而另一个闲置的不对称使用情况,在这种情况下,开发一种全校实验室资源共享、合理分配教室资源、远距离操作实验室预约系统就显得尤为必要。

在国外,预约系统早就起源并且早已经扩展开来。基于ASP的高校实验网络管理系统,也可为学生提供一种选修自己喜欢实验的途径。有些系统允许学生通过校园网选修实验,它具有实验预约、查询等功能。

在国内,现在一般是用ASP做实验预约系统。预先查看几个比较典型的实验预约系统:长江大学电子信息学院开发的长江大学电工电子实验预约系统,它是一个实验预约管理系统,提供学生和教师登录预约,教师和学生登录后的功能不一样,教师登录后还可以对学生进行实验管理:学生可以进行实验预约,只是该系统有时候学生预约并不开放,以教师预约为主。这是国内目前功能比较完善的实验预约系统。绍兴文理学院的开放实验网上预约系统预约实现了可选择的实验进行预约和取消预约,可以轻松查看实验室状况,不过此系统封闭性不强,任何注册人员都可以进行预约,这给系统管理带来了负面影响。另外,最近在网上还出现了一个简单的网上实验预约系统,简单实现了预约功能,也是一个纯粹的实验预约系统,用户可以随时进行注册并预约实验,又没有取消预约的功能,而且此系统维护不够,预约得不到管理员的批准与调配。但这也说明预约系统现在在国内比较盛行,大家在勇于攀登,在不断完善实验预约系统的功能。

本系统实现实验室预约。系统共设有用户登录、实验室预约、预约情况查询、管理员管理等四个主要的功能模块,满足了教师/学生进行实验室预约/查询、管理员进行管理等各个方面的需求。它具有网络化、智能化、高性能、低维护、界面友好、操作简单、功能强大、管理方便、平台优秀等一系列的优点,能够完全按照用户的需求,稳定、安全、快速地运行,实现了任意计算机都能进行实验室预约信息的查询,进行实验室预约操作,访问相关信息。从而充分利用了学校现有的资源,促进了教学管理系统的网络化,智能化,顺应了教学管理的发展趋势。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台技术:Springboot+Mybatis-plus

前端技术:Node+Vue+ElementUI

三,系统展示

用户登陆

公告栏

公告管理

设备管理

实验室管理

实验结果管理

教师管理

学生管理

预约信息管理

四,核心代码展示

package com.project.labsystem.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.labsystem.entity.AnnouncementTable;
import com.project.labsystem.entity.LabTable;
import com.project.labsystem.entity.VO.announcementVo;
import com.project.labsystem.entity.VO.labVo;
import com.project.labsystem.service.LabTableService;
import com.project.labsystem.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author byAuto
 * @since 2022-10-24
 */
@Api(description = "实验室管理")
@RestController
@RequestMapping("/labsystem/lab-table")
public class LabTableController {
    @Autowired
    LabTableService service;
    @ApiOperation(value = "查询所有实验室")
    @GetMapping("findAll")
    public R findAll() {
        List<LabTable> list = new ArrayList<>();
        list = service.list(null);
        return R.ok().data("data", list);
    }
    @ApiOperation(value = "查询个实验室")
    @GetMapping("findOne/{id}")
    public R findOne(@PathVariable String id) {
        LabTable labTable = service.getById(id);
        if (labTable != null) {
            return R.ok().data("data", labTable);
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "实验室添加")
    @PostMapping("add")
    public R add(@RequestBody LabTable labTable) {
        boolean flag = service.save(labTable);
        if (flag) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "实验室更新")
    @PostMapping("update/id")
    public R update(@RequestBody LabTable labTable) {
        boolean flag = service.updateById(labTable);
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "实验室删除")
    @GetMapping("del/{id}")
    public R del(@PathVariable String id) {
        Boolean flag = service.removeById(id);
        if (flag) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
    //获取所有的实验室编号
    @ApiOperation(value = "实验室Allid")
    @GetMapping("getAllId")
    public R getAllId() {
        List list = new ArrayList<>();
        QueryWrapper<LabTable> wrapper=new QueryWrapper<>();
        wrapper.select("lab_room_id");
        wrapper.orderByDesc("create_time");
        list=service.list(wrapper);
        System.out.println(list);
        return R.ok().data("rows", list);
    }
    // 条件查询带分页的方法
    @ApiOperation(value = "多条件查询")
    @PostMapping("pageCondition/{current}/{limit}")
    public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,
                                  @RequestBody(required = false) labVo Query) {
        //创建page对象
        Page<LabTable> pageAn = new Page<>(current, limit);
        //构建条件
        QueryWrapper<LabTable> wrapper = new QueryWrapper<>();
        // 多条件组合查询
        // mybatis学过 动态sql
        String name = Query.getLabName();
        String roomId = Query.getLabRoomId();
        String labLocation  =Query.getLabLocation();
        String labManager = Query.getLabManager();
        String begin = Query.getBegin();
        String end = Query.getEnd();
        //判断条件值是否为空,如果不为空拼接条件
        if (!StringUtils.isEmpty(name)) {
            //构建条件
            wrapper.like("lab_name", name);
        }
        if (!StringUtils.isEmpty(roomId)) {
            //构建条件
            wrapper.eq("lab_room_id", roomId);
        }
        if (!StringUtils.isEmpty(labLocation)) {
            //构建条件
            wrapper.like("lab_location", labLocation);
        }
        if (!StringUtils.isEmpty(labManager)) {
            //构建条件
            wrapper.like("lab_manager", labManager);
        }
        if (!StringUtils.isEmpty(begin)) {
            wrapper.ge("create_time", begin);
        }
        if (!StringUtils.isEmpty(end)) {
            wrapper.le("create_time", end);
        }
        //排序
        wrapper.orderByDesc("create_time");
        //调用方法实现条件查询分页
       service.page(pageAn, wrapper);
        //总记录数
        long total = pageAn.getTotal();
        //数据list集合
        List<LabTable> records = pageAn.getRecords();
        System.out.println(records);
        return R.ok().data("total", total).data("rows", records);
    }
    /**
     * 导入房间信息
     */
    @ApiOperation("批量导入")
    @PostMapping("/importData")
    @ResponseBody
    public R importData(@RequestBody MultipartFile file) {
        service.importExcel(file,service);
        System.out.println(file);
        return R.ok();
    }
}
package com.project.labsystem.controller;
import com.project.labsystem.entity.VO.loginVo;
import com.project.labsystem.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@Api(description = "登录")
@RestController
@RequestMapping("login")
public class LoginController {
    //login
    @PostMapping("login")
    public R login() {
        return R.ok().data("token","admin");
    }
    //info
    @GetMapping("info")
    public R info() {
        return R.ok().data("roles","[admin]").data("name","admin").data("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
    }
    @PostMapping("logout")
    public R logout() {
        return R.ok();
    }
    @ApiOperation(value = "登录测试")
    @GetMapping("loginTest")
    public String loginTest() {
       loginVo loginer=new loginVo();
       return null;
    }
    @ApiOperation(value = "根据token获取用户信息")
    @GetMapping("getInfo")
    public R getinfo(HttpServletRequest request){
        return null;
    }
    @ApiOperation(value = "管理员登录")
    @GetMapping("loginAdmin")
    public R loginAdmin() {
        if (false) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "学生登录")
    @GetMapping("loginStudent")
    public R loginStudent() {
        if (false) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "教师登录")
    @GetMapping(" loginTeacher")
    public R loginTeacher() {
        if (false) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
}
package com.project.labsystem.controller;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.labsystem.entity.LabTable;
import com.project.labsystem.entity.OrderTable;
import com.project.labsystem.entity.VO.assetVo;
import com.project.labsystem.entity.VO.orderVo;
import com.project.labsystem.service.LabTableService;
import com.project.labsystem.service.OrderTableService;
import com.project.labsystem.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author byAuto
 * @since 2022-10-28
 */
@Api(description = "预约单管理")
@RestController
@RequestMapping("/labsystem/order-table")
public class OrderTableController {
    @Autowired
    OrderTableService service;
    @Autowired
    LabTableService labTableService;
    @ApiOperation(value = "查询所有预约")
    @GetMapping("findAll")
    public R findAll() {
        List<OrderTable> list = new ArrayList<>();
        list = service.list(null);
        return R.ok().data("data", list);
    }
    @ApiOperation(value = "查询一个预约")
    @GetMapping("findOne/{id}")
    public R findOne(@PathVariable String id) {
        OrderTable assetTable = service.getById(id);
        if (assetTable != null) {
            return R.ok().data("data", assetTable);
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "预约添加")
    @PostMapping("add")
    public R add(@RequestBody OrderTable orderTable) {
        String labId = orderTable.getLabId();
        QueryWrapper<LabTable> wrapper = new QueryWrapper<>();
        wrapper.eq("lab_room_id", labId);
        // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL");
        QueryWrapper<OrderTable> wrapper2 = new QueryWrapper<>();
        wrapper2.eq("lab_id", orderTable.getLabId());
        wrapper2.eq("order_time", orderTable.getOrderTime());
        // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL");
        boolean flag2 = (service.getOne(wrapper2) == null);
        boolean flag = false;
        if (flag2) {
            orderTable.setLabName(labTableService.getOne(wrapper).getLabName());
            flag = service.save(orderTable);
        }
        if (flag) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error().message("实验室被占用");
        }
    }
    @ApiOperation(value = "Post 查询预约可用")
    @PostMapping("query")
    public R query(@RequestBody OrderTable assetTable) {
        QueryWrapper<OrderTable> wrapper = new QueryWrapper<>();
        wrapper.eq("lab_room_id", assetTable.getLabId());
        wrapper.eq("order_time", assetTable.getOrderTime());
        // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL");
        boolean flag = (service.getOne(wrapper) != null);
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "预约更新")
    @PostMapping("update")
    public R update(@RequestBody OrderTable assetTable) {
        boolean flag = service.updateById(assetTable);
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }
    @ApiOperation(value = "预约删除")
    @GetMapping("del/{id}")
    public R del(@PathVariable String id) {
        Boolean flag = service.removeById(id);
        if (flag) {
            return R.ok().data("data", "Fuck");
        } else {
            return R.error();
        }
    }
    // 条件查询带分页的方法
    @ApiOperation(value = "多条件查询")
    @PostMapping("pageCondition/{current}/{limit}")
    public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,
                                  @RequestBody(required = false) orderVo Query) {
        //创建page对象
        Page<OrderTable> pageAn = new Page<>(current, limit);
        //构建条件
        QueryWrapper<OrderTable> wrapper = new QueryWrapper<>();
        // 多条件组合查询
        // mybatis学过 动态sql
        //申请人
        String orderApplicant = Query.getOrderApplicant();
        //status
        String status = Query.getOrderStatus();
        //实验室名字
        String labName = Query.getLabName();
        String begin = Query.getBegin();
        String end = Query.getEnd();
        //判断条件值是否为空,如果不为空拼接条件
        if (!StringUtils.isEmpty(orderApplicant)) {
            //构建条件
            wrapper.like("order_applicant", orderApplicant);
        }
        if (!StringUtils.isEmpty(labName)) {
            //构建条件
            //System.out.println(labName+"LLLL名字");
            wrapper.like("lab_name", labName);
        }
        if (!StringUtils.isEmpty(status)) {
            //构建条件
            wrapper.eq("order_status", status);
        }
        if (!StringUtils.isEmpty(begin)) {
            wrapper.ge("create_time", begin);
        }
        if (!StringUtils.isEmpty(end)) {
            wrapper.le("create_time", end);
        }
        //排序
        wrapper.orderByDesc("create_time");
        //调用方法实现条件查询分页
        service.page(pageAn, wrapper);
        //总记录数
        long total = pageAn.getTotal();
        System.out.println(total + "total");
        //数据list集合
        List<OrderTable> records = pageAn.getRecords();
        System.out.println(records);
        return R.ok().data("total", total).data("rows", records);
    }
}

五,项目总结

相关文章
|
1月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的高校运动会系统
本系统基于Spring Boot、Vue与MySQL,实现高校运动会报名、赛程安排及成绩管理的全流程信息化,提升组织效率,杜绝信息错漏与冒名顶替,推动体育赛事智能化发展。
|
1月前
|
JavaScript 安全 Java
基于springboot的大学生兼职系统
本课题针对大学生兼职信息不对称、权益难保障等问题,研究基于Spring Boot、Vue、MySQL等技术的兼职系统,旨在构建安全、高效、功能完善的平台,提升大学生就业竞争力与兼职质量。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
1月前
|
Java 关系型数据库 MySQL
基于springboot的网咖网吧管理系统
本文探讨了基于Java、MySQL和SpringBoot的网吧管理系统的设计与实现。随着信息化发展,传统管理方式难以满足需求,而该系统通过先进技术提升管理效率、保障数据安全、降低运营成本,具有重要意义。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的摄影师分享交流社区系统
本系统基于Spring Boot与Vue构建摄影师分享交流平台,旨在打造专业社区,支持作品展示、技术交流与合作互动。采用Java、MySQL等成熟技术,提升摄影爱好者创作水平,推动行业发展。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
1月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。