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

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

收藏点赞不迷路  关注作者有好处

文末获得源码

 

项目编号: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);

    }


}

五,项目总结

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程千纸鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值