基于微信小程序的自习室预约系统的设计与实现

news2024/12/29 1:50:49

基于微信小程序的自习室预约系统的设计与实现

文章目录

    • 基于微信小程序的自习室预约系统的设计与实现
        • 1、前言介绍
        • 2、功能设计
        • 3、功能实现
        • 4、开发技术简介
        • 5、系统物理架构
        • 6、系统流程图
        • 7、库表设计
        • 8、关键代码
        • 9、源码获取
        • 10、 🎉写在最后

1、前言介绍

伴随着信息技术与互联网技术的不断发展,校园也进到了一个新的信息化时代,传统管理技术性没法高效率、容易地管理自习室预约信息内容。为了实现时代的发展必须,提升自习室预约高效率,各种各样自习室预约体系应时而生,自习室预约管理系统的实现是信息内容时代浪潮时代的产物之一。一切系统都要遵循系统设计的基本流程。它还需要通过市场调查、需求分析报告、汇总设计、详尽设计以及测试,根据node语言表达设计,完成实验室预约管理系统。该系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术,前端采用微信小程序等技术实现,选用MySQL作为后台系统。

2、功能设计

自习室预约管理平台选用B/S架构模式,即网页页面和网站架构设计的开发方式。这类系统构造可以理解为对 C/S 系统构造的改变与推广能够进行信息分布式处理,减少资源成本,提升订制系统的性能。在这种设计下,极少有事务处理在前进行,绝大多数重要事务管理的思路需要在服务端完成。

在这里插入图片描述

3、功能实现

系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。

在这里插入图片描述
目管理页面提供的功能操作有:查看自习室,删除自习室操作,新增自习室操作,修改自习室操作。下图就是实验室管理页面
在这里插入图片描述
公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。下图就是公告信息管理页面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、开发技术简介

本节介绍场馆预约平台用到的一些技术和开发环境的简介,用到开发技术主要包括:
(1)前端用到Element UI组件库和Vue框架
(2)后端用到Node
(3)包管理器Npm
(4)中间件Express
(5)数据库MySQL
系统开发环境主要是:前端开发工具Vscode,Hbuilder、操作系统Win10、CPU i5-9300H、内存8G。

5、系统物理架构

自习室系统的物理架构主要有:管理端和用户端,其中管理端主要是基于Vue和Element UI,用户端主要基于安卓、微信小程序和H5自习室系统的物理建构图

在这里插入图片描述

6、系统流程图

用户发起预约时首先会检测用户是否登录,若登录则进入到相应的预约界面,此时用户可以选择需要预约的时间段以及场地。当用户预约成功时用户会在我的预约中找到这次预约。当用户去场馆时可以通过预约生成的二维码来验证身份。若用户的预约时间失效也会有响应的提示

在这里插入图片描述

7、库表设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、关键代码
// pages/xgxx/xgxx.js
const db=wx.cloud.database()
const {updateUser} =require('../../api/login')
Page({

  /**
   * 页面的初始数据
   */
  data: {
    openid:'',
    userInfo:'',
    xy_index:0,
    nj_index:0,
    imgUrl:''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var userinfo =wx.getStorageSync('userInfo')
    this.setData({
      userInfo:userinfo
    })
  },
  bindchangenj:function(e){
    console.log(e.detail.value)
    this.setData({
      nj_index:e.detail.value
    })
  },
  bindchangexy:function(e){
    console.log(e.detail.value)
    this.setData({
      xy_index:e.detail.value
    })
  },
  changImg(res){
    let that=this
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success (res) {
        var imgsFile = res.tempFilePaths[0];
        wx.uploadFile({
          filePath: imgsFile,
          name: 'file',
          url: 'http://localhost:3000/upload/upload',
          success: res => {
           that.data.imgUrl=JSON.parse(res.data).url
           console.log(JSON.parse(res.data).url)
          }
        })
        console.log(that.data.imgUrl)
      }
      
    })
  },
  //提交修改
  formSubmit(e){
    var userinfo =wx.getStorageSync('userInfo')
     //判断
     let img=""
     if(this.data.imgUrl!=''){
          img=this.data.imgUrl
     }else{
          img=userinfo.imgUrl
     }
      let userInfo={
          id:userinfo.id,
          username:e.detail.value.name,
          phone:e.detail.value.phone,
          imgUrl:img,
          address:e.detail.value.address,
          password:e.detail.value.password
      }
      console.log("1",userInfo)
      updateUser(userInfo).then(res=>{
        wx.showToast({
            icon:'none',
            title: '修改成功',
          })
         wx.setStorageSync('userInfo', userInfo )
      })
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})
var express = require('express');
var router = express.Router();
var connection=require('../db/sql.js')

router.post('/addReservation',(req,res)=>{
    console.log(req.body)
   let username=req.body.username
   let phone=req.body.phone
   let placeName=req.body.placeName
   let address=req.body.address
   let endtime=req.body.endtime
   let price=req.body.price
   let isReservation=req.body.isReservation
   let isCancle=req.body.isCancle
   let id=req.body.status
   let starttime=req.body.starttime
   let placeNumber=req.body.placeNumber
   let reservationId=req.body.reservationId
   let status=1
   let steatId=id
   let data=req.body.data
   let sql='insert into  reservation value(null,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
   connection.query(sql,[username,phone,placeName,address,endtime,price,isReservation,isCancle,starttime,placeNumber,reservationId,'0','0',null,null,steatId,data],(error,result)=>{
    if(error) return console.log(error.message)
    if(result.affectedRows===1){
        let sql1='update steat set status=? where id=?'
        connection.query(sql1,[status,id],(error,result)=>{
            if(error) return console.log(error.message)
            res.send({
                code:200,
                msg:"预约成功"
            })
        })
    }else{
        res.send({
            code:200
        })
    }
   })
})
//查询预约表
router.post('/getReservation',(req,res)=>{
    let phone=req.body.phone
    let sql='select * from reservation where phone=?'
    connection.query(sql,[phone],(error,result)=>{
        if(error) return console.log(error.message)
        res.send({
            code:200,
            data:{
                data:result
            }
        })
    })
})
//取消预约
router.post('/deteleReservation',(req,res)=>{
    let id=req.body.id
    let username=req.body.username
    let phone=req.body.phone
    let reason=req.body.reason
    let placeName=req.body.placeName
    let cancelTime=req.body.cancelTime
    let isCancle=1
    let isReservation=0
    let steatId=req.body.steatId
    let status=0
    console.log(steatId)
    let sql='update reservation set isCancle=?,isReservation=? where id=?'
    connection.query(sql,[isCancle,isReservation,id],(error,result)=>{
        if(error) return console.log(error.message)
        if(result.affectedRows===1){
         let sql='insert into cancel value(null,?,?,?,?,?)'
         connection.query(sql,[reason,phone,username,placeName,cancelTime],(error,result)=>{
            if(error) return console.log(error.message)
            if(result.affectedRows==1){
                let sql='update steat set status=? where id=?'
                connection.query(sql,[status,steatId],(error,result)=>{
                    res.send({
                        code:200,
                        msg:"取消成功"
                    })
                })
            }
         })
        }else{
            res.send({
                code:403,
                msg:"取消失败"
            })
        }
    })
})

//查询取消表单个人
router.post('/getCancel',(req,res)=>{
    let phone=req.body.phone
    let sql='select * from cancel where phone=?'
    connection.query(sql,[phone],(error,result)=>{
        if(error) return console.log(error.message)
        res.send({
            code:200,
            data:{
                data:result
            }
        })
    })
})
//查询取消
router.get('/getCancel',(req,res)=>{
    let sql='select * from cancel '
    connection.query(sql,(error,result)=>{
        if(error) return console.log(error.message)
        res.send({
            code:200,
            data:{
                data:result
            }
        })
    })
})
//删除取消
router.post('/deletecancel', function(req, res, next) {
    //查询数据
    const id=req.query.id
    console.log(id)
  let sql = "delete from cancel where id = ?";
  connection.query(sql,[id],function(err,result,fields){
   if(err) return console.log(err.message)
   res.send({
    code:200,
    data:{
      msg:"删除成功"
    }
    })  
    })
});

//查询预约表
router.get('/getAllReservation',(req,res)=>{
    let sql='select * from reservation'
    connection.query(sql,(error,result)=>{
        if(error) return console.log(error.message)
        res.send({
            code:200,
            data:{
                data:result
            }
        })
    })
})

//通过姓名查询预约
router.post('/searchAllReservation',(req,res)=>{
    let username=req.query.username
    let sql='select * from reservation where username=?'
    connection.query(sql,[username],(error,result)=>{
        if(error) return console.log(error.message)
        res.send({
            code:200,
            data:{
                data:result
            }
        })
    })
})
//删除预约表信息
router.post('/deleteAllReservation', function(req, res, next) {
    //查询数据
    const id=req.query.id
    console.log(id)
  let sql = "delete from reservation where id = ?";
  connection.query(sql,[id],function(err,result,fields){
   if(err) return console.log(err.message)
   res.send({
    code:200,
    data:{
      msg:"删除成功"
    }
    })  
    })
});
//修改预约表
router.post('/updateAllReservation',function(req,res,next){
    let id=req.query.id
   let sql='update reservation set ? where id=?'
   connection.query(sql,[req.query,id],function(error,results){
     if(error) return console.log(error.message)
     res.send({
       code:200,
       data:{
         msg:'修改成功'
       }
     })
   })
  })
module.exports=router
9、源码获取

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
vx:code8896

10、 🎉写在最后

🍻伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞👍或 Star ✨支持一下哦!手动码字,如有错误,欢迎在评论区指正💬~

你的支持就是我更新的最大动力💪~

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

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

相关文章

Oracle 低代码平台 Apex 最新版本 23.2 安装过程

趁春节快结束前,安装了一把APEX ,到目前为此,APEX最新版本为23.2,23.2和21版本有一些变化,只是用于验证,我 是使用的单独模式,没有安装TOMAT,下面列一下安装过程: 1.环境…

Nest安装及使用~

前提条件 请确保您的操作系统上安装了 Node.js(版本 > 16) 📚要查看指南,请访问 https://docs.nestjs.com/ 📚要查看中文 指南, 请访问 https://docs.nestjs.cn/ $ node -v v16.18.1 $ npm -v 7.x.x安…

Beans模块之工厂模块DisposableBean

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio,文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了,这里我整理了遇到的坑和解决问题的最终配置…

ngrok 内网穿透使用

title: ngrok 内网穿透使用 search: 2024-02-29 文章目录 背景Windows安装ngrok指令授权ngrok个人用户Authtoken穿透 http 或 https 服务ngrok的代理http指令ngrok获得静态域名指令ngrok的代理ssh指令 背景 这次寒假回家,很无奈,很多东西放在项目组服务…

vuex插件实现数据共享

vuex插件 vuex是管理多个vue通用的数据的插件.(状态管理工具,状态是数据) 我们对于多个vue文件之间的共同数据,是用props传递,或者对于一个vue实例对象,进行绑定,传参,也是多次传参,多个文件之间,比较麻烦. 但是我们vuex会创建一个公共对象,从这个公共对象上赋值,比较简单易…

HarmonyOS 应用开发之使用隐式Want打开网址

以打开浏览器为例,假设设备上安装了一个或多个浏览器应用。为了使浏览器应用能够正常工作,需要在 module.json5配置文件 进行配置,具体配置如下: {"module": {..."abilities": [{..."skills": [{&…

Spring面试题(二)

一、老杜讲解Spring6整理 1. Spring有哪几大模块? 2. IoC控制反转的实现是依赖注入,set依赖注入的原理是什么? 3. 自动装配有哪几种?它的原理是基于构造注入还是基于set注入? 4. Spring容器中的Bean是单例还是多例…

Mybatis-Plus分页查询时碰到`total`有值但`records`为空

个人原因:Mybatis-Plus分页插件设置了maxLimit单页条数 // 分页插件配置 PaginationInnerInterceptor paginationInnerInterceptor new PaginationInnerInterceptor(DbType.MYSQL); paginationInnerInterceptor.setMaxLimit(200L); // 单页分页条数限制(默认无限…

博客页面---前端

目录 主页 HTML CSS 文章详细页面 HTML CSS 登录页面 HTML CSS 文章编辑页 HTML CSS 这只是前端的页面组成&#xff0c;还没有接入后端&#xff0c;并不是完全体 主页 HTML <!DOCTYPE html> <!-- <html lang"en"> --> <head>&…

【PSINS工具箱】基于工具箱,自己设计的轨迹,并生成IMU数据和三维视图(完整代码)

完整代码 在有工具箱的情况下&#xff0c;直接运行代码&#xff0c;即可 % 基于PSINS工具箱的三维轨迹生成、三维图像绘制与IMU数据生成 % date:2024-2-13 % Evand&#xff08;evandworldqq.com&#xff09; % Ver1 clear;clc;close all; glvs ts 0.1; % sampling int…

Redis(十九)缓存过期淘汰策略

文章目录 面试题内存满怎么办写入的数据如何删除的&#xff08;删除策略&#xff09;立即删除惰性删除上面两种方案都走极端 缓存淘汰策略配置文件LRU和LFU区别有哪些如何配置、修改 redis缓存淘汰策略配置性能建议 面试题 生产上你们的redis内存设置多少?如何配置、修改redi…

动态规划-最长回文子串

动态规划-最长回文子串 原题描述解答中心移动思想代码实现复杂度分析时间复杂度空间复杂度 动态规划思想代码实现复杂度分析时间复杂度空间复杂度 突然觉得很有必要将学过的内容记录下来&#xff0c;这样后续在需要用到的时候就可以避免从头进行学习&#xff0c;而去看自己之前…

【Threejs基础教程-光影篇】5.2 Threejs 阴影系统

5.2 Threejs阴影系统 学习ThreeJS的捷径在用光影系统之前threejs是实时光影web端目前没有优质的实时光影实时光影会大幅增加渲染压力没有独显的电脑不建议添加实时光影 阴影配置什么样的灯光可以产生阴影什么样的物体可以产生阴影和接受阴影注意开启阴影渲染灵活运用阴影 平行光…

【Linux】普通用户提升权限

概述 在Linux环境下&#xff0c;给普通用户提权的方式&#xff0c;su与sudo命令&#xff0c;su是将一个普通用户登录为root&#xff0c;而sudo则是将普通用户短暂提升权限 普通用户使用$ root使用# 使用su提升权限 如果我们使用su将用户提升为root&#xff0c;此时需要输入…

计算机网络:数据链路层 - 封装成帧 透明传输 差错检测

计算机网络&#xff1a;数据链路层 - 封装成帧 & 透明传输 & 差错检测 数据链路层概述封装成帧透明传输差错检测 数据链路层概述 从数据链路层来看&#xff0c;主机 H1 到 H2 的通信可以看成是在四段不同的链路上的通信组成的&#xff0c;所谓链路就是从一个节点到相邻…

回溯算法|39.组合总和

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push_back…

CISP考前笔记

1软件需求分析是保证软件质量的重要步骤&#xff0c;它的实施应该是在 软件定义阶段 1语句覆盖最弱&#xff0c;只需要让程序中的语句都执行一遍即可 。分支覆盖又称判定覆盖&#xff1a;使得程序中每个判断的取真分支和取假分支至少经历一次&#xff0c;即判断的真假均曾被满足…

K8S命令行可视化实验

以下为K8s命令行可视化工具的实验内容&#xff0c;相比于直接使用命令行&#xff0c;可视化工具可能更直观、更易于操作。 Lens Lens是用于监控和调试的K8S IDE。可以在Windows、Linux以及Mac桌面上完美运行。在 Kubernetes 上&#xff1a; 托管地址&#xff1a;github/lensa…

登录者个人信息查询

目录 &#x1f95e;1.vo层描述 &#x1f37f;2..vo层创建 &#x1f32d;3.编写controller层 &#x1f953;4.service层 &#x1f9c2;5.测试 1.vo层描述 Spring Boot项目中的实体类通常用于映射数据库表&#xff0c;包含了业务对象的所有属性。然而&#xff0c;前端或其…