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

个人介绍

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
在这里插入图片描述
🦁作者简介:一名喜欢分享和记录学习的在校大学生
💥个人主页:code袁
💥 个人QQ:2647996100
🐯 个人wechat:code8896

专栏导航

code袁系列专栏导航
1.毕业设计与课程设计:本专栏分享一些毕业设计的源码以及项目成果。🥰🥰🥰
2.微信小程序开发:本专栏从基础到入门的一系开发流程,并且分享了自己在开发中遇到的一系列问题。🤹🤹🤹
3.vue开发系列全程线路:本专栏分享自己的vue的学习历程。

非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨ 

在这里插入图片描述

文章目录

        • 个人介绍
        • 专栏导航
        • 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=thiswx.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).urlconsole.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.usernamelet phone=req.body.phonelet placeName=req.body.placeNamelet address=req.body.addresslet endtime=req.body.endtimelet price=req.body.pricelet isReservation=req.body.isReservationlet isCancle=req.body.isCanclelet id=req.body.statuslet starttime=req.body.starttimelet placeNumber=req.body.placeNumberlet reservationId=req.body.reservationIdlet status=1let steatId=idlet data=req.body.datalet 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.phonelet 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.idlet username=req.body.usernamelet phone=req.body.phonelet reason=req.body.reasonlet placeName=req.body.placeNamelet cancelTime=req.body.cancelTimelet isCancle=1let isReservation=0let steatId=req.body.steatIdlet status=0console.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.phonelet 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.idconsole.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.usernamelet 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.idconsole.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.idlet 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、源码获取

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

10、 🎉写在最后

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文: "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母!因此这句话广泛地用于字体效果的展示。更短的还有: "The five boxing wizards…

【学习】软件测试中,我们为什么要进行系统测试

软件测试中的系统测试是一个关键环节,它主要是通过测试整个系统来验证软件是否满足需求规格说明书中的要求。在软件开发周期的后期,系统测试扮演着非常重要的角色,因为它可以发现并纠正软件中存在的错误和缺陷,确保软件的质量和稳…

【数据结构】双向链表 C++

一、什么是双向链表 1、定义 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 双…

虹科Pico汽车示波器 | 免拆诊断案例 | 2011款东风悦达起亚K5车发动机偶尔起动困难

一、故障现象 一辆2011款东风悦达起亚K5车,搭载G4KD发动机,累计行驶里程约为24.5万km。车主反映,第1次起动发动机时偶尔无法起动着机,第2次能够正常起动着机,但发动机故障灯异常点亮。为此在其他维修厂维修过&#xf…

GDAL源码剖析(九)之GDAL体系架构

GDAL源码剖析(九)之GDAL体系架构_gdal 源码-CSDN博客 在GDAL库中包含栅格数据的读写,矢量数据的读写,以及栅格和矢量数据的相关算法。下面主要对GDAL中栅格数据和矢量数据的体系架构做一个简单的说明。本人英文很烂,有…

vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户

1.后端返回的json数据结构为: {"message":"下载失败,下载文件不存在,请联系管理员处理!","code":500} 2.vue 请求后台接口返回的 Blob数据 3.问题出现的原因是,正常其他数据列表接口&…

统一处理异常和记录日志

统一处理异常 SpringBoot设计,如果出现错误404或500,自动调用特定路径下的html页面(路径和名字都特定)。/templates/error/404.html、/templates/error/500.html。程序中有错误自动就调用该页面。 但是错误有异步请求错误,也想同时记录日志。…

Windows系统安装WinSCP结合内网穿透实现公网远程SSH本地服务器

List item 文章目录 1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件,它的主要功能是在本…

公司电脑如何对文件进行加密?

在现代企业中,文件加密是确保敏感数据安全的关键。使用华企盾DSC数据安全防泄密系统,公司电脑可以轻松地对文件进行加密,以防止未授权的访问和数据泄露。以下是对文件进行加密的步骤和方法: 智能半透明加密:这种模式允…

IntelliJ IDEA(WebStorm、PyCharm、DataGrip等)设置中英文等宽字体,英文为中文的一半(包括标点符号)

1.设置前(idea默认字体为 JetBrains Mono) 2.设置后(楷体)

Vue3 使用ElementUI 显示异常

element提供的样例不能正常显示,需要进行配置 1.npm install element-plus --save 2.main.js // main.ts import { createApp } from vue import ElementPlus from element-plus //全局引入 import element-plus/dist/index.css import App from ./App.vue const …

list的常用接口底层实现与介绍

目录 概念: list的基本结构: list的迭代器⭐❤: 自定义类型的完善: const的迭代器: insert erase: size empty push_back 、push_front 、pop_back、pop_front swap 、operator 析构函数…

【CSS】CSS三大特性、盒子模型

目录 CSS三大特性 1、层叠性 2、继承性 3、优先级 盒子模型 1、网页布局的本质 2、盒子模型(Box Model)组成 3、边框(border) 3.1、边框的使用 3.2、表格的细线边框 3.3、边框会影响盒子实际大小 4、内边距&#xff0…

Unity 九宫格

1. 把图片拖拽进资源文件夹 2.选中图片,然后设置图片 3.设置九宫格 4.使用图片,在界面上创建2个相同的Image,然后使用图片,修改Image Type 为Sliced

前端开发基础(HTML5 + CSS3)【第一篇】:HTML标签之文字排版、图片、链接、音频、视频 涵盖了两个综合案例 做到了基础学得会,实战写的出

点击前往前端开发基础专栏: 文章目录 HTML5 CSS3 开发一、开发环境搭建下载 VS Code1. 2 插件的下载1.3 项目和文件的下载 二、 什么是 HTML2.1 标签的语法2.2 代码演示:2.3 小结 三 、HTML基本骨架3.1 快捷键生成HTML骨架3.2 代码展示3.3 小结 四、标…

第十四讲:C语言字符函数和字符串函数

目录 1. 字符分类函数 2、字符转换函数 3. strlen的使⽤和模拟实现 4. strcpy 的使⽤和模拟实现 5. strcat 的使⽤和模拟实现 6. strcmp 的使⽤和模拟实现 7. strncpy 函数的使⽤ 8. strncat 函数的使⽤ 9. strncmp函数的使⽤ 10. strstr 的使⽤和模拟实现 11. strt…

Redis的持久化

目录 一、RDB(Redis DataBase) 二、AOF(Append Only File) Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中 的数据库状态也会消失。所以 Redis 提供…

从文字到思维:呆马GPT在人工智能领域的创新之旅

引言 生成式预训练变换器(Generative Pre-trained Transformer,简称GPT)领域是人工智能技术中的一大革新。自OpenAI推出第一代GPT以来,该技术经历了多代发展,不断提升模型的规模、复杂度和智能化程度。GPT模型通过在大…

【Linux】vim 编辑器

Linux 系统自带了 gedit 和 vi 编辑器,gedit 是图形化界面的操作,而 vi 由比较难用,所以建议安装 vim 编辑器,vim 是从 vi 发展出来的一个文本编辑器,相当于增强版的 vi ,其代码补完、编译及错误跳转等功能…

从路由器syslog日志监控路由器流量

路由器是关键的网络基础设施组件,需要随时监控,定期监控路由器可以帮助管理员确保路由器通信正常。日常监控还可以清楚地显出通过网络的流量,通过分析路由器流量,安全管理员可及早识别可能发生的网络事件,从而避免停机…