基于java SpringBoot和HTML实验室预约管理系统设计

news2024/11/23 15:09:49

摘要

        实验室信息管理系统是利用计算机网络技术、数据存储技术、快速数据处理技术对实验室进行全方位管理的计算机软件系统。实验室信息管理系统从最初仅完成数据存储和有限的网络功能,发展到现在可以处理海量数据,具备完善的管理职能,并且能够运行于Internet之上,极大地提高了实验室的运行效率,节约了实验室的运营成本。针对教学型实验室以设备管理和实验教学为主要需求的特点,设计了融入预警机制的实验室信息管理系统,使实验室管理人员和实验室的主管部门更方便了解实验室的运行状况,提高管理水平。

实现的功能

管理员、教师、学生三种角色;

管理员:用户管理(学生管理、教师管理)、实验室管理、教务管理(班级管理、课程管理)、预约(个人预约、教师预约、预约列表、审核列表);

学生:实验室列表、预约(我的预约、个人预约);

教师:班级管理、实验室列表、预约(教师预约、我的预约)。

使用的技术

后端:JAVA开发语言,SpringBoot框架,MySql数据库,Maven;

前端:layUI框架、HTML页面。

部分后端代码展示

public class SubjectController {

    @Autowired
    SubjectService subjectService;

    @Autowired
    GradeService gradeService;

    @Autowired
    TeacherService teacherService;

    @GetMapping("/index.html")
    public String toSubjectPage() {
        return "/education/subject/index.html";
    }

    /**
     * 添加课程页面
     * */
    @GetMapping("/add.html")
    public String toSubjectAddPage(Model model, @RequestParam(value = "subjectId", defaultValue = "0") Integer subjectId) {

        Subject subject = new Subject();
        if (subjectId != 0) {
            subject = subjectService.getSubjectById(subjectId);
        }
        List<Grade> gradeList = getGradeList();
        List<Teacher> teacherList = getTeacherList();

        Map weeks = ConstantUtils.initWeeks();
        Map days = ConstantUtils.initDays();
        Map parts = ConstantUtils.initParts();

        model.addAttribute("gradeList",gradeList);
        model.addAttribute("teacherList",teacherList);

        model.addAttribute("subject",subject);
        model.addAttribute("weeks",weeks);
        model.addAttribute("days",days);
        model.addAttribute("parts",parts);

        return "/education/subject/add.html";
    }



    private List<Grade> getGradeList() {
        return gradeService.getGradeList();
    }

    private List<Teacher> getTeacherList() {
        return teacherService.getTeacherList();
    }
    /**
     * 添加课程
     * */
    @PostMapping
    @ResponseBody
    public ResultVO addSubject(Subject subject) {

        subjectService.save(subject);
        return ResultVO.SUCCESS();
    }

    /**
     * 获取所有班级
     * */
    @GetMapping
    @ResponseBody
    public ResultVO getSubjectList(@RequestParam(value = "page", defaultValue = "1") Integer page,
                                 @RequestParam(value = "limit", defaultValue = "10") Integer limit) {
        page -= 1;
        long total = subjectService.count();
        List<Subject> subjectList = subjectService.getGradeList(page,limit);
        log.info("total {},page {},limit {}",total,page,limit);
        HashMap<String,Object> data = new HashMap<>();
        data.put("total",total);
        data.put("subjectList",subjectList);

        return ResultVO.SUCCESS(0,data);
    }

    @PostMapping("/delete")
    @ResponseBody
    public ResultVO deleteSubject(Subject subject) {
        subjectService.delete(subject);
        return ResultVO.SUCCESS(200);
    }
}

部分前端代码展示

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>添加课程</title>
    <link rel="stylesheet" href="/layui/css/layui.css" media="all">
</head>
<body>
<div style="margin: 50px 50px 50px 50px;">

    <form class="layui-form" action="">
        <div class="layui-form-item" th:if="${subject.getId() == 0}">
            <label class="layui-form-label">
                <a href="http://localhost:8080/education/subject/index.html" class="layui-btn layui-btn-normal">返回</a>
            </label>
        </div>
        <div class="layui-form-item" th:if="${subject.getId() != 0}">
            <input type="hidden" name="id" th:value="${subject.getId()}">
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">课程名</label>
            <div class="layui-input-block">
                <input type="text" name="name" th:value="${subject.getName()}" required  lay-verify="required" placeholder="请输入课程名称" autocomplete="off" class="layui-input">
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">班级</label>
            <div class="layui-input-block">
                <select name="gradeId" lay-verify="required">
                    <option value=""></option>
                    <option th:each="grade:${gradeList}" th:value="${grade.getId()}" th:text="${grade.getName()}" th:selected="${grade.getId() == subject.getGradeId()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">老师</label>
            <div class="layui-input-block">
                <select name="teacherId" lay-verify="required">
                    <option value=""></option>
                    <option th:each="teacher:${teacherList}" th:value="${teacher.getId()}" th:text="${teacher.getUsername()}" th:selected="${teacher.getId() == subject.getTeacherId()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">起始周</label>
            <div class="layui-input-block">
                <select name="startWeek" lay-verify="required">
                    <option value=""></option>
                    <option th:each="start:${weeks}" th:value="${start.key}" th:text="${start.value}" th:selected="${start.key == subject.getStartWeek()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">结束周</label>
            <div class="layui-input-block">
                <select name="endWeek" lay-verify="required">
                    <option value=""></option>
                    <option th:each="end:${weeks}" th:value="${end.key}" th:text="${end.value}" th:selected="${end.key == subject.getEndWeek()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">周几</label>
            <div class="layui-input-block">
                <select name="day" lay-verify="required">
                    <option value=""></option>
                    <option th:each="day:${days}" th:value="${day.key}" th:text="${day.value}" th:selected="${day.key == subject.getDay()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">节次</label>
            <div class="layui-input-block">
                <select name="part" lay-verify="required">
                    <option value=""></option>
                    <option th:each="part:${parts}" th:value="${part.key}" th:text="${part.value}" th:selected="${part.key == subject.getPart()}"></option>
                </select>
            </div>
        </div>

        <div class="layui-form-item">
            <div class="layui-input-block">
                <button class="layui-btn" type="button" lay-submit lay-filter="formSubmit">立即提交</button>
                <button type="reset" class="layui-btn layui-btn-primary" th:if="${subject.getId() == 0}">重置</button>
            </div>
        </div>
    </form>
</div>

</body>
<script src="/layui/layui.js"></script>
<script src="/js/jquery.min.js"></script>
<script src="/js/education/subject/add.js"></script>
</html>

演示视频

基于JAVA SpringBoot实验室预约管理系统设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript中的浅拷贝与深拷贝

前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念&#xff0c;它们在处理对象和数组时具有不同的作用。在编程中&#xff0c;经常需要复制数据以便进行各种操作&#xff0c;但必须注意拷贝的方式&#xff0c;以确保得到预期的结果。 浅拷贝是创建一个新对象或数组&#xf…

D*算法图文详解

前面学习了Dijkstra以及A* 算法的基本原理&#xff0c;对于这两种算法而言&#xff0c;我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而&#xff0c;这两个算法本身都是基于静态地图的&#xff0c;也就是说&#xff1a;当机器人找到路径后开始沿着起点向终点运动的…

不断探索创新 促进中国信息技术发展——南京宏控科技有限公司董事长应富忠

应富忠&#xff0c;男&#xff0c;现任南京宏控科技有限公司董事长、电子系统工程高级工程师&#xff08;技术五级&#xff09;、自动化系统注册工程师&#xff0c;先后被评为“研究所级青年突击手”、“研究所级先进工作者”、“研究所级优秀共产党员”、“南京市级考级优秀”…

微服务保护-授权规则/规则持久化

授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用者允许访问 黑名单&#xff1a;来源&#xff08;origin&#xff09;在黑名单内的调用者不允许访问 点…

未解之迷——晶振问题导致SWD烧录时芯片no target connected,切换内部晶振后解决了

我所讲的情况是网上总结之外的另一种情况。不是Reset 后卡时间烧录&#xff0c;也不是烧录器问题&#xff0c;引脚问题等。而是STM32CubeMX软件生成问题。 芯片&#xff1a;STM32F103C8T6 某天我做了一块板子&#xff0c;按正常流程烧录&#xff0c;第一次可以烧录&#xff0c…

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例&#xff0c;将STM8S标准库移植到工程中。 先上图&#xff0c;看运行结果: main.c文件 #include "config.h" #include "delay.h"#de…

灯具欧盟CE认证,EMC/LVD/MD等欧盟指令介绍

CE认证产品范围 ​1.灯具类产品; ​2.家用电器设备、电动工具; ​3.个人电脑及其周边设备; ​4.音视频产品; ​5.无线产品; ​6.通讯类类产品; ​7.玩具类产品; ​8.安防产品; ​9.工业机械。 CE认证所需资料 ​1.一般2-3个测试样品; ​2.电路原理图; ​3.产品说明…

基于哈希表对unordered_map和unordered_set的封装

本章完整代码gitee仓库&#xff1a;对unordered_map和unordered_set的封装、unordered_map和unordered_set源码 文章目录 &#x1f36d;1. 哈希表的改造&#x1f36c;1.1 模板参数的改造&#x1f36c;1.2 增加迭代器&#x1f36c;1.3 返回值的修改 &#x1f37c;2. 对unordered…

[计算机入门] 电源选项设置

3.10 电源选项设置 有时候我们的电脑一段时间没有用&#xff0c;会自己关掉屏幕或者直接睡眠&#xff0c;这是电源选项没有设置好导致的。 1、打开控制面板&#xff0c;打开其中的电源选项 2、点击左侧上方的选择关闭显示器的时间 3、进入到编辑计划设置界面&#xff0c;在…

听GPT 讲Istio源代码--pilot(6)

在 Istio 中&#xff0c;Pilot 是 Istio 控制平面的一个重要组件&#xff0c;它具有以下作用&#xff1a; 流量管理: Pilot 负责管理和配置服务之间的网络流量。它通过与底层的服务发现机制&#xff08;如 Kubernetes 或 Consul&#xff09;集成&#xff0c;监测服务注册和注销…

C数据结构二.练习题

一.求级数和 2.求最大子序列问题:设给定一个整数序列 ai.az..,a,(可能有负数).设计一个穷举算法,求a 的最大值。例如,对于序列 A {1,-1,1,-1,-1,1,1,1,1.1,-1,-1.1,-1,1,-1},子序列 A[5..9](1,1,1,1,1)具有最大值5 3.设有两个正整数 m 和n,编写一个算法 gcd(m,n),求它们的最大公…

WhatsApp无法收到验证码怎么办?别急,我来教你

最近收到好多小伙伴的问题咨询&#xff0c;而且大多是同一个问题&#xff1a;“WhatsApp无法验证手机号&#xff0c;也就是手机接收不到6位数字的短信验证码&#xff0c;这可如何是好&#xff1f;” 短信验证码收不到&#xff0c;连点几次重复短信后等待时间越来越久点击致电给…

B-小美的子序列(贪心)-- 牛客周赛 Round 12

示例1 输入 3 3 abc def ghi 输出 NO 示例2 输入 8 2 nm ex it td ul qu ac nt 输出 YES 说明 第1行选择第2个字母。 第2行选择第1个字母。 第3行选择第1个字母。 第4行选择第1个字母。 第5行选择第2个字母。 第6行选择第2个字母。 第7行选择第1个字母。 第8行选择第…

Idea创建springboot项目

1、选择file—>new –->project 2、选择“Spring Initializr”&#xff0c;点击“next”&#xff0c;进入工程信息配置界面修改配置信息. 备注&#xff1a;type类型选择“Maven(Generate a Maven based project achieve)”&#xff0c;生成工程路径。 3、点击next按钮&a…

【uniapp+vue3+u-picker】获取中国省市区数据结构,省市区数据三级联动json文件完整版,已实现三级联动效果

前言: 这个功能的实现,中间耽误了几天,在大佬的帮助下终于实现效果,匿名感谢xx大佬 要实现的效果如下: 1、首先需要获取省市区的数据,不考虑后端返数据,自己使用json文件的话,需要获取到完整的中国省市区数据 有个很不错的github源码可供参考,Administrative-divisio…

RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/133021990 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

few shot目标检测survey paper笔记(迁移学习)

paper: Few-Shot Object Detection: A Comprehensive Survey (CVPR2021) meta learning需要复杂的情景训练&#xff0c;而迁移学习仅需在一个single-branch结构上做两步训练。 常用的结构是Faster R-CNN&#xff0c;下面是Faster R-CNN的结构图。 RPN的修改 当样本数量很少时…

Vue的进阶使用--模板语法应用

目录 前言 一. Vue的基础语法 1.插值 1.1文本插值 1.2HTML插值 1.3属性插值 1.4Vue演示三元条件运算 2 指令 2.1if&&else指令&#xff08;v-if/v-else-if/v-else&#xff09; 2.2 v-for 指令 2.3 v-on指令(动态参数) 2.4知识点补充之v-if与v-show的区别 3.过…

著名书法家傅成洪在香港第八届“一带一路”高峰论坛上展示艺术与合作的融合

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行&#xff0c;吸引了来自海内外的6000多名嘉宾&#xff0c;共同回顾“一带一路”倡议的历程&#xff0c;并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年&#xff0c;主题定为“携手十载 共…

[Python进阶] Pyinstaller打包模式

5.3 Pyinstaller打包模式 Pyinstaller将Python源码打包成程序有2种打包的方式&#xff1a; 单文件夹模式&#xff1a;指打包后将所有的程序文件放在一个文件夹内。 单文件模式&#xff1a;打包后只有一个可执行文件&#xff0c;全部的依赖文件都已经被打包进去了。 5.3.1 单文…