Java项目:springboot+vue教室图书馆预约管理系统

作者主页:源码空间站2022

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

智慧物联网教室预约系统-后台系统

项目简介:

这是一个前后端分离的教室预约和查看系统项目,能够实现以教室为单位活动的预约和取消,能够以视图形式显示,附带图书馆和公告管理器功能。

主要采用`Vue.js`+`SpringBoot` 技术栈开发

使用技术点

* 前端:`Vue`、`ElementUI`、`axios`、`Echart`、`jQurey`
* 后端:`SpringBoot`、`Spring Data + JPA`、`hibernate`、`MySQL`、`Shiro`、`Redis`

使用说明:

1. 在mysql数据库中创建数据库`testmeeting`行项目,将自动注入数据。如需关闭此功能,请将 `application.properties `中的 
`spring.datasource.initialization-mode=always` 代码注释。同样,可以通过使用项目`sql`目录下`testmeeting`直接导入数
据库数据结构与内容,可根据需要自行使用。`Redis 端口为 6379(默认端口),密码为空。`

2. 数据库配置在后端项目的 src\main\resources 目录下的application.properties 文件中,mysql 版本为 8.0以上版本 。

3. 在IntelliJ IDEA中运行后端项目,为了保证项目成功运行,可以右键点击 pom.xml 选择 maven -> reimport ,并重启项目。
至此,服务端就启动成功了,同时,运行前端项目,访问 http://localhost:8080 ,即可进入登录页面,默认账号是 admin,密码是 123

4. 项目使用了虹软公司的人脸识别SDK与百度的人体分析SDk:
* 虹软的SDK请自行前往官网获取,获取后建议将SDK导入到``src/main/resources/lib-sdk``目录下,然后在``src/main/java/utils``目录下新建``SdkParameter.java``文件,填入appId和key以及引擎和算法等文件位置。

* 百度人体分析SDk已在``maven``中引用,但是``app_id``等请前往百度云AI开发者平台自行获取,该项目中表示位置为``SdkParameter.java``文件。

* 以上内容不必要,可以删除并注释对应接口与服务即可。
----

二次开发请注意:

* 进入前端项目根目录中,在命令行依次输入如下命令:

```text
# 安装依赖
npm install

# 在 localhost:8080 启动项目
npm run dev
```
* 由于在前端项目中已经配置了端口转发,将数据转发到SpringBoot上,因此项目启动之后,在浏览器中输入 `http://localhost:8080` 
就可以访问我们的前端项目了,所有的请求通过端口转发将数据传到 SpringBoot 中(注意此时不要关闭 SpringBoot 项目)。

* 最后可以用 IDEA / WebStorm 等工具打开前端项目,继续开发,开发完成后,当项目要上线时,依然进入到 wj-vue 目录,然后执行如下命令:
```text
npm run build
```

* 该命令执行成功之后,前端项目目录下生成一个 `dist` 文件夹,可以将该文件夹中的两个文件` static `和 `index.html` 
拷贝到前端项目中 `resources/static/ `目录下,然后直接运行前端项目,访问 `http://localhost:8443` ,

实际上是把前端打包后作为静态文件,但不推荐使用这种方式。

运行截图

相关代码

教室控制器

package com.shencangblue.design.icrs.controller;

import com.baidu.aip.bodyanalysis.AipBodyAnalysis;
import com.shencangblue.design.icrs.dao.ClassRoomDao;
import com.shencangblue.design.icrs.model.ClassRoom;
import com.shencangblue.design.icrs.result.Result;
import com.shencangblue.design.icrs.result.ResultFactory;
import com.shencangblue.design.icrs.service.ClassRoomService;
import com.shencangblue.design.icrs.utils.BDAipBodyAnalysis;
import com.shencangblue.design.icrs.utils.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/api")
public class ClassRoomController {
    @Resource
    private ClassRoomService classRoomService;

    /**
     * 保存新的或者修改教室
     * @param classRoom 教室
     * @return 保存的新房间
     */
    @CrossOrigin
    @RequestMapping("/rooms/save")
    public ClassRoom save(@RequestBody ClassRoom classRoom){
        classRoomService.save(classRoom);
        return classRoom;
    }

    /**
     * 删除教室
     * @param classRoom 教室
     * @return 删除的教室
     */
    @CrossOrigin
    @RequestMapping("/rooms/delete")
    public ClassRoom delete(@RequestBody ClassRoom classRoom){
        System.out.println(classRoom.getRoomId());
        classRoomService.delete(classRoom.getRoomId());
        return classRoom;
    }

    /**
     * 获得所有的房间列表
     * @return 封装获得所有房间
     */
    @CrossOrigin
    @RequestMapping("/rooms")
    public Result getAll(){
        return ResultFactory.buildSuccessResult(classRoomService.getAll());
    }

    /**
     * 获取所有的房间数量
     * @return 封装的房间数
     */
    @CrossOrigin
    @RequestMapping("/rooms/count")
    public Result getAllCount(){
            return ResultFactory.buildSuccessResult(classRoomService.CountByAllClassRoom());
    }

    /**
     * 获取正在使用的房间数
     * @return 封装的房间数
     */
    @CrossOrigin
    @RequestMapping("/rooms/used-count")
    public Result getUsedCount(){
        return ResultFactory.buildSuccessResult(classRoomService.CountByUsedClassRoom(1));
    }

    /**
     * 不可用的房间数量
     * @return 封装的房间数目
     */
    @CrossOrigin
    @RequestMapping("/rooms/unused-count")
    public Result getUnusedCount(){
        return ResultFactory.buildSuccessResult(classRoomService.CountByUsedClassRoom(-1));
    }

    /**
     * 获取没有预约的房间
     * @return 封装的房间
     */
    @CrossOrigin
    @RequestMapping("/rooms/usable-rooms")
    public Result getUsableRooms(){
        return ResultFactory.buildSuccessResult(classRoomService.findAllUsableRooms(0));
    }


    /**
     * 修改指定的房间数据
     * @return 修改结果
     */
    @CrossOrigin
    @RequestMapping("/rooms/update")
    public String update(){
        return classRoomService.update(3L,classRoomService.getById(3L))!=null?"sec":"fal";
    }


    /**
     * 获取不同的分类的房间
     * @param capacity 分类的依据:房间容纳人数
     * @return 教室列表
     */
    @CrossOrigin
    @RequestMapping("/rooms/capacity/{capacity}/rooms")
    public Iterable<ClassRoom> findAllByCapacity(@PathVariable("capacity") int capacity){
        System.out.println(capacity);
        if (0==capacity){
            return classRoomService.getAll();
        }else {
            return classRoomService.findAllByCapacity(capacity);
        }
    }

    /**
     * 查询功能
     * @param keywords 要查询的关键字
     * @return 查询到的教室
     */
    @CrossOrigin
    @RequestMapping("/search")
    public Iterable<ClassRoom> searchResult(@RequestParam("keywords") String keywords){
        if ("".equals(keywords)){
            return classRoomService.getAll();
        }
        else {
            return classRoomService.search(keywords);
        }
    }

    /**
     * 通过教室名字获取教室Id
     * @param roomName  教室名字
     * @return 教室的Id
     */
    @RequestMapping("/room/idName")
    public Long getRoomIdByName(@RequestParam("roomName") String roomName){
        System.out.println(classRoomService.getRoomByName(roomName).getRoomId());
        return classRoomService.getRoomByName(roomName).getRoomId();
    }

    /**
     * 检查教室是否用占用,进行状态检查并修改-重新封装模式
     * @return 预约情况
     */
    @RequestMapping("/checkRoomIsWillUse")
    public Result checkRoomIsWillUse(){
        return ResultFactory.buildSuccessResult(classRoomService.checkRoomIsWillUse());
    }

    /**
     * 用于统计房间人数的方法-活体检测-非前端返回类型
     * @param classRoom 房间Id
     * @return 封装的人数
     */

    @RequestMapping("/checkRoomNumber")
    public Result checkRoomNumberOfParticipants(ClassRoom classRoom){
        return null;
        //return ResultFactory.buildSuccessResult(classRoomService.checkRoomNumberOfParticipants(classRoom.getRoomId()));
    }

    /**
     * 用于统计房间人数的方法-活体检测-前端返回类型
     * @param file 教室的图像
     * @return 封装的人数
     */
    @PostMapping("/classroomInfo/info")
    public String coversUpload(MultipartFile file) {
        AipBodyAnalysis client =BDAipBodyAnalysis.getClient();
        String folder = "D:/workspace/img";
        File imageFolder = new File(folder);
        File f = new File(imageFolder, StringUtils.getRandomString(6) + file.getOriginalFilename()
                .substring(file.getOriginalFilename().length() - 4));
        if (!f.getParentFile().exists())
            f.getParentFile().mkdirs();
        try {
            file.transferTo(f);
//            String imgURL = "http://localhost:8443/api/file/" + f.getName();
//            return imgURL;
            return classRoomService.analysisPeople(client ,f);
        } catch (IOException e) {
            e.printStackTrace();
            return "-1";
        }
    }


}

 如果也想学习本系统,下面领取。回复:011springboot

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
高校图书馆管理系统是针对高校图书馆的借阅、归还、查询以及管理等功能需求而开发的一套系统。其中,Spring Boot用于后端的开发Vue用于前端的开发Spring Boot是一个快速开发框架,基于Java语言,通过简化配置和自动化部署,提供了一种快速构建独立、可执行的、生产级的Spring应用程序的方法。在高校图书馆管理系统中,利用Spring Boot可以轻松搭建后端的服务端,包括设计API接口、处理业务逻辑、数据持久化等功能。 Vue是一个通过建立虚拟DOM来跟踪数据变化,并在需要时以最小的代价重新渲染整个组件树的前端渐进式框架。在高校图书馆管理系统中,借助Vue可以实现用户友好的界面设计,提供包括图书查询、借阅归还、预约等功能和操作界面,同时可与后端通过API接口进行数据交互。 高校图书馆管理系统基于前后端分离的架构模式,前端和后端通过API接口进行数据交互,实现了系统的松耦合和易扩展性。用户通过Vue提供的界面可以方便地进行图书的查询、借阅、归还等操作,同时系统后端通过Spring Boot提供数据的处理和存储。系统采用了自动化部署和配置的方式,可以快速部署和更新系统。 总之,使用Spring BootVue开发高校图书馆管理系统可以充分发挥它们的优势,提供稳定、高效、用户友好的图书管理服务,方便学生和教职工进行图书的查询和借阅。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值