当前位置: 首页 > news >正文

基于Vue+node的图书馆座位预约选座管理系统

全套资料下载地址:https://download.csdn.net/download/sheziqiong/86791332
全套资料下载地址:https://download.csdn.net/download/sheziqiong/86791332
目 录
一、绪论 1
(一)选题背景简介 1
(二)目的和意义 2
(三)基本内容及目标 2
二 技术简介 4
(一) React 4
(二)Vue 4
(三)Egg.js 5
(四)Yarn 6
(六)iView 6
(七)Ant Design Mobile 6
(九)JSON Web Token 6
(十)Knex 7
三、系统概要设计 8
(一) 系统需求分析 8

  1. 管理端 8
    (二)可行性分析 8
    1.技术可行性 8
    2.经济可行性 9
    3.操作可行性 9
    (三)Server端模型 9
    四、数据库设计 10
    (一)数据概念结构设计 10
    (二)数据库关系设计 10
    五、后台设计 11
    (一) Egg 11
    (二) 权限校验 11
    (三)连接数据库 12
    (四)JavaScript异步并发问题 13
    六、管理端设计 15
    (一) 登录页面 15
    (二)主页 16
    (三)座位管理 19
  2. 座位情况 19
  3. 编辑座位 23
  4. 创建自习室 25
    (四)学校管理 26
    (五)管理员管理 28
    (六)个人信息 29
    七、手机端设计 31
    (一)用户登录 31
    (二)首页 33
    (三)预约列表 38
    (二)个人信息 39
    结论 40
    参 考 文 献 41
    致 谢 42
    该系统的用户群体主要是学生和图书馆管理员,该系统开发的目的是让学生占座更加方便,并且最大限度杜绝不文明占座行为的发生,方便图书馆管理员的管理。对于学生来说,他们不用早起占座,只需要登陆系统去预约,而且系统规定一人只能占一座,他们也不用担心会有人占多个座位。系统会采取定期除名,例如这个座位的使用者超过规定时间没有去,座位将会被管理员清空(包括系统和实际座位)。对于图书馆管理者来说,这会让他们的管理更方便更有效。
    学生可以实时看到座位的空缺情况,并且进行选择。每个座位都有可选、已选、和暂离三种状态。
    该系统的应用可以为图书馆和学生双方都带来极大的便利
    研究的重点
    用户的登陆
    座位的预约和不再使用
    查看座位信息
    管理员的清空功能
    研究的难点
    后台数据的管理:数据的增删改查,包括对用户座位信息的清空
    用户查看座位信息的准确性和实时性,例如刷新后座位信息的变化情况
    三、系统概要设计
    系统的设计主要前台和后台两个部分
    (一)系统需求分析
    1.管理端
    1.登入/登出
    2.座位管理
    1)实时座位占用清空查询
    2)编辑自习室/图书馆座位
    3)创建自习室
    3.学校管理(增删改查,分页)
    4.管理员管理(增删)
    5.个人信息(密码验证,修改密码)
    (二)可行性分析
    这里讲的可行性分析的任务是从技术上、经济上分析需解决的问题是否存在可行性。其目的是在尽可能短的时间内用尽可能小的代价确定问题是否有解。
    1.技术可行性
    技术上的可行性分析主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。本文转载自http://www.biyezuopin.vip/onews.asp?id=13362
    本套系统采用vue、react与egg实现,代码完全开源,文档完善,便于二次开发与维护,简单培训即可使用与维护。
import React, { useState, useEffect } from 'react';
import { Route, withRouter } from 'react-router-dom';
import { TabBar, Toast } from 'antd-mobile';
import store from '@/store'
import { initStudent } from '@/reducer/student';
import Page from './pages'
import '@s/main.scss'
import { getToken } from '@u/cookie';
import { stuInfo } from '@h/student'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faHome, faUserAlt, faCalendar, faCalendarAlt } from '@fortawesome/free-solid-svg-icons'

library.add(faHome, faUserAlt, faCalendar, faCalendarAlt)


const Main = (props) => {
    useEffect(() => {
        if (!getToken() || getToken() === 'undefined') {
            Toast.offline('登录信息失效,请重新登录!', 1, () => {
                props.history.replace('/login')
            });
        }
    }, [props.history.location.pathname])

    useEffect(() => {
        stuInfo().then(res => {
            store.dispatch(initStudent(res.data.res[0]))
        })
    }, [])

    const [route, setRoute] = useState(props.history.location.pathname)

    return (
        <>
            <TabBar
                barTintColor="white"
                tintColor="#33A3F4"
                unselectedTintColor="#949494"
            >
                <TabBar.Item
                    data-seed="logId"
                    icon={<FontAwesomeIcon icon="home" />}
                    key="home"
                    onPress={() => {
                        setRoute('/main/home')
                        props.history.replace('/main/home')
                    }}
                    // selected={route === '/main/home'}
                    selected={/^\/main\/home/.test(route)}
                    selectedIcon={<FontAwesomeIcon icon="home" />}
                    title="主页"
                >
                    {
                        <Route
                            component={Page.Home}
                            path="/main/home"
                        />
                    }
                </TabBar.Item>
                <TabBar.Item
                    data-seed="logId"
                    icon={<FontAwesomeIcon icon="calendar" />}
                    key="order"
                    onPress={() => {
                        setRoute('/main/order')
                        props.history.replace('/main/order')
                    }}
                    selected={route === '/main/order'}
                    selectedIcon={<FontAwesomeIcon icon="calendar-alt" />}
                    title="我的预约"
                >
                    {
                        <Route
                            component={Page.Order}
                            path="/main/order"
                        />
                    }
                </TabBar.Item>
                <TabBar.Item
                    data-seed="logId"
                    icon={<FontAwesomeIcon icon="user-alt" />}
                    key="user"
                    onPress={() => {
                        setRoute('/main/user')
                        props.history.replace('/main/user')
                    }}
                    selected={route === '/main/user'}
                    selectedIcon={<FontAwesomeIcon icon="user-alt" />}
                    title="个人信息"
                >
                    {
                        <Route
                            component={Page.User}
                            path="/main/user"
                        />
                    }
                </TabBar.Item>
            </TabBar>
        </>

    )
}

export default withRouter(Main)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全套资料下载地址:https://download.csdn.net/download/sheziqiong/86791332
全套资料下载地址:https://download.csdn.net/download/sheziqiong/86791332

相关文章:

  • 用DIV+CSS技术设计的凤阳旅游网站(web前端网页制作课作业)HTML+CSS+JavaScript
  • 【redis】从高并发场景下超卖问题到redis分布式锁
  • vscode安装及c++配置
  • 【Java Web项目】基于WebSocket的Web聊天室
  • Ansible自动化运维
  • 多线程【锁策略与CAS的ABA问题】
  • 清华系激光雷达公司,成了量产元年最大的黑马
  • 基于springboot的球员转会管理系统的设计与实现-计算机毕业设计源码+LW文档
  • 【Arduino与MFRC522握手】
  • 生成式对抗网络(GAN)【第六章】
  • 了解 Flutter 开发者们的 IDE 使用情况
  • linux下的权限
  • AI 杀疯了,NovelAI开源教程
  • 【深度学习】卷积神经网络之图像分类|CNN、AlexNet、VGG、GoogLeNet、ResNet
  • 手把手完成智慧路灯的开发,完成设备上云【华为云IoT】
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • golang 发送GET和POST示例
  • iOS 颜色设置看我就够了
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript 一些 DOM 的知识点
  • JavaWeb(学习笔记二)
  • js学习笔记
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Web设计流程优化:网页效果图设计新思路
  • Xmanager 远程桌面 CentOS 7
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何在 Tornado 中实现 Middleware
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 学习笔记TF060:图像语音结合,看图说话
  • 优化 Vue 项目编译文件大小
  • 自动记录MySQL慢查询快照脚本
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ‌内网穿透技术‌总结
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (4) PIVOT 和 UPIVOT 的使用
  • (ibm)Java 语言的 XPath API
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (七)Knockout 创建自定义绑定
  • (七)理解angular中的module和injector,即依赖注入
  • (十六)视图变换 正交投影 透视投影
  • (四)opengl函数加载和错误处理
  • (四)图像的%2线性拉伸
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net 6.0 处理跨域的方式
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net MVC中使用angularJs刷新页面数据列表