[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版),分享下哈。

项目视频演示

【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版) Java毕业设计_哔哩哔哩_bilibili

项目介绍

本文介绍了一种基于Java语言开发的座位预约管理系统。该系统通过借助互联网和物联网技术,实现了座位预定、空间管理、数据分析等多种功能,为学生提供了便捷、高效、智能的学习环境。

系统使用前后端分离技术进行开发,服务器端接口使用SpringBoot开发框架实现,Vue前端框架,整合了Mybatis-plus持久层框架进行数据持久化,使用MySQL数据库存储数据。系统分为学生和管理员两个角色。学生可以进行登录注册、管理个人信息、浏览座位信息、预约选座、管理预约信息等功能。管理员可以管理所有用户信息、座位信息、时刻信息、预约选座等功能。

经过测试,该系统能够满足需求并稳定运行。测试验证表明,该系统具有操作简单、功能齐全、性能稳定等特点,可以有效提高学生的学习效率和教学质量。

未来,该系统可以进一步优化和拓展,例如加强数据可视化和智能推荐功能,以满足不同学科、不同层次的学生学习需求,为学校的数字化校园建设和现代化教育改革提供更优质、智能、便捷的支持和服务。

系统展示

部分代码

java 复制代码
package com.selfstudy.modules.bas.controller;

import cn.hutool.core.bean.BeanUtil;
import com.selfstudy.common.utils.PageUtils;
import com.selfstudy.common.utils.R;
import com.selfstudy.config.MessageProperties;
import com.selfstudy.modules.bas.dto.save.BasNoticeSaveDTO;
import com.selfstudy.modules.bas.dto.update.BasNoticeUpdateDTO;
import com.selfstudy.modules.bas.entity.BasNoticeEntity;
import com.selfstudy.modules.bas.service.BasNoticeService;
import com.selfstudy.modules.sys.controller.AbstractController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.Map;



/**
 * 公告表
 */
@RestController
@RequestMapping("/notice")
@Api(tags = "后台公告")
public class BasNoticeController extends AbstractController {
    @Autowired
    private BasNoticeService basNoticeService;
    @Autowired
    private MessageProperties messageProperties;

    /**
     * 列表
     */
    @GetMapping("/list")
    @ApiOperation("列表(noticeState,noticeTitle)")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = basNoticeService.queryPage(params);

        return R.ok().put("data", page);
    }


    /**
     * 详情
     */
    @GetMapping("/info/{noticeId}")
    @ApiOperation("详情")
    public R info(@ApiParam(value = "noticeId") @PathVariable("noticeId") Long noticeId){
		BasNoticeEntity basNotice = basNoticeService.getById(noticeId);

        return R.ok().put("data", basNotice);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    @ApiOperation("保存")
    public R save(@RequestBody BasNoticeSaveDTO basNotice){
        BasNoticeEntity basNoticeEntity = BeanUtil.copyProperties(basNotice, BasNoticeEntity.class);
        basNoticeEntity.setCreateUserId(getUserId());
        boolean save = basNoticeService.save(basNoticeEntity);
        if(save){
            return R.ok();
        }
        return R.error(messageProperties.getFormSaveError());
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    @ApiOperation("修改")
    public R update(@RequestBody BasNoticeUpdateDTO basNotice){
        BasNoticeEntity basNoticeEntity = BeanUtil.copyProperties(basNotice, BasNoticeEntity.class);
        boolean update = basNoticeService.updateById(basNoticeEntity);
        if (update){
            return R.ok();
        }
        return R.error(messageProperties.getFormUpdateError());
    }

    /**
     * 发布状态
     * @param id
     * @return
     */
    @PostMapping("/updateStateOn")
    @ApiOperation("发布状态")
    public R updateStateOn(@ApiParam(value = "id") Long id){
        boolean update = basNoticeService.lambdaUpdate().eq(BasNoticeEntity::getNoticeId, id).set(BasNoticeEntity::getNoticeState, 0).update();
        if (update){
            return R.ok();
        }
        return R.error(messageProperties.getFormUpdateError());
    }

    /**
     * 取消发布状态
     * @param id
     * @return
     */
    @PostMapping("/updateStateOff")
    @ApiOperation("取消发布状态")
    public R updateStateOff(@ApiParam(value = "id") Long id){
        boolean update = basNoticeService.lambdaUpdate().eq(BasNoticeEntity::getNoticeId, id).set(BasNoticeEntity::getNoticeState, 1).update();
        if (update){
            return R.ok();
        }
        return R.error(messageProperties.getFormUpdateError());
    }


    /**
     * 删除
     */
    @DeleteMapping("/delete")
    @ApiOperation("删除")
    public R delete(@RequestBody Long[] noticeIds){
        boolean b = basNoticeService.removeByIds(Arrays.asList(noticeIds));
        if (b){
            return R.ok();
        }
        return R.error(messageProperties.getFormDeleteError());
    }

}
html 复制代码
<template>
  <div class="site-wrapper site-page--login">
    <div class="site-content__wrapper">
      <div class="site-content">
        <div class="brand-info">
          <h2 class="brand-info__text">自习室座位管理系统</h2>
        </div>
        <div class="login-main">
          <h3 class="login-title">管理员登录</h3>
          <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon>
            <el-form-item prop="userName">
              <el-input v-model="dataForm.userName" placeholder="帐号"></el-input>
            </el-form-item>
            <el-form-item prop="password">
              <el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
            </el-form-item>
            <el-form-item prop="captcha">
              <el-row :gutter="20">
                <el-col :span="14">
                  <el-input v-model="dataForm.captcha" placeholder="验证码">
                  </el-input>
                </el-col>
                <el-col :span="10" class="login-captcha">
                  <img :src="captchaPath" @click="getCaptcha()" alt="">
                </el-col>
              </el-row>
            </el-form-item>
            <el-form-item>
              <el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button>
            </el-form-item>
            
          </el-form>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  import { getUUID } from '@/utils'
  export default {
    data () {
      return {
        dataForm: {
          userName: '',
          password: '',
          uuid: '',
          captcha: ''
        },
        dataRule: {
          userName: [
            { required: true, message: '帐号不能为空', trigger: 'blur' }
          ],
          password: [
            { required: true, message: '密码不能为空', trigger: 'blur' }
          ],
          captcha: [
            { required: true, message: '验证码不能为空', trigger: 'blur' }
          ]
        },
        captchaPath: ''
      }
    },
    created () {
      this.getCaptcha()
    },
    methods: {
      // 提交表单
      dataFormSubmit () {
        this.$refs['dataForm'].validate((valid) => {
          if (valid) {
            this.$http({
              url: this.$http.adornUrl('/sys/login'),
              method: 'post',
              data: this.$http.adornData({
                'username': this.dataForm.userName,
                'password': this.dataForm.password,
                'uuid': this.dataForm.uuid,
                'captcha': this.dataForm.captcha
              })
            }).then(({data}) => {
              if (data && data.code === 0) {
                console.log(data)
                this.$cookie.set('token', data.token)
                this.$router.replace({ name: 'home' })
              } else {
                this.getCaptcha()
                this.$message.error(data.msg)
              }
            })
          }
        })
      },
      // 获取验证码
      getCaptcha () {
        this.dataForm.uuid = getUUID()
        this.captchaPath = this.$http.adornUrl(`/captcha.jpg?uuid=${this.dataForm.uuid}`)
      }
    }
  }
</script>

<style lang="scss">
  .site-wrapper.site-page--login {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: rgba(38, 50, 56, .6);
    overflow: hidden;
    &:before {
      position: fixed;
      top: 0;
      left: 0;
      z-index: -1;
      width: 100%;
      height: 100%;
      content: "";
      background-image: url(~@/assets/img/login_bg.jpg);
      background-size: cover;
    }
    .site-content__wrapper {
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      padding: 0;
      margin: 0;
      overflow-x: hidden;
      overflow-y: auto;
      background-color: transparent;
    }
    .site-content {
      min-height: 100%;
      padding: 30px 500px 30px 30px;
    }
    .brand-info {
      margin: 220px 100px 0 90px;
      color: #fff;
    }
    .brand-info__text {
      margin:  0 0 22px 0;
      font-size: 48px;
      font-weight: 400;
      text-transform : uppercase;
    }
    .brand-info__intro {
      margin: 10px 0;
      font-size: 16px;
      line-height: 1.58;
      opacity: .6;
    }
    .login-main {
      position: absolute;
      top: 0;
      right: 0;
      padding: 150px 60px 180px;
      width: 470px;
      min-height: 100%;
      background-color: #fff;
    }
    .login-title {
      font-size: 16px;
    }
    .login-captcha {
      overflow: hidden;
      > img {
        width: 100%;
        cursor: pointer;
      }
    }
    .login-btn-submit {
      width: 100%;
      margin-top: 38px;
    }
  }
</style>

源码下载

链接:https://pan.baidu.com/s/1cfJC2_8jAT2MkSnuXnbOGQ

提取码:1234

相关推荐
窝窝和牛牛12 小时前
记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)
微信小程序·小程序
内向的小农16 小时前
【微信小程序 onTabItemTap:精准监听 TabBar 点击事件】
微信小程序·小程序
小胖墩有点瘦19 小时前
基于RNN+微信小程序+Flask的古诗词生成应用
微信小程序·小程序·flask
郑州拽牛科技1 天前
开发社交陪玩app小程序
大数据·微信小程序·小程序·系统架构·开源软件
HerayChen2 天前
uniapp vue3 微信小程序 uni.chooseLocation使用
微信小程序·小程序·uni-app·微信小程序地理位置
东月之神2 天前
【0基础跟AI学软考高项】进度管理
职场和发展·微信小程序
—Qeyser2 天前
用Deepseek写一个五子棋微信小程序
微信小程序·小程序
oil欧哟2 天前
🥳 做了三个月的学习卡盒小程序,开源了!
前端·vue.js·微信小程序