個(gè)人介紹
hello hello~ ,這里是 code袁~???? ,歡迎大家點(diǎn)贊????關(guān)注????收藏??????
??作者簡(jiǎn)介:一名喜歡分享和記錄學(xué)習(xí)的在校大學(xué)生
??個(gè)人主頁(yè):code袁
?? 個(gè)人QQ:2647996100
?? 個(gè)人wechat:code8896
專欄導(dǎo)航
code袁系列專欄導(dǎo)航
1.畢業(yè)設(shè)計(jì)與課程設(shè)計(jì):本專欄分享一些畢業(yè)設(shè)計(jì)的源碼以及項(xiàng)目成果。??????
2.微信小程序開發(fā):本專欄從基礎(chǔ)到入門的一系開發(fā)流程,并且分享了自己在開發(fā)中遇到的一系列問(wèn)題。??????
3.vue開發(fā)系列全程線路:本專欄分享自己的vue的學(xué)習(xí)歷程。非常期待和您一起在這個(gè)小小的互聯(lián)網(wǎng)世界里共同探索、學(xué)習(xí)和成長(zhǎng)。?????? ?? 歡迎訂閱本專欄 ???
視頻演示
基于微信小程序的自習(xí)室預(yù)約系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
1、前言介紹
伴隨著信息技術(shù)與互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,校園也進(jìn)到了一個(gè)新的信息化時(shí)代,傳統(tǒng)管理技術(shù)性沒法高效率、容易地管理自習(xí)室預(yù)約信息內(nèi)容。為了實(shí)現(xiàn)時(shí)代的發(fā)展必須,提升自習(xí)室預(yù)約高效率,各種各樣自習(xí)室預(yù)約體系應(yīng)時(shí)而生,自習(xí)室預(yù)約管理系統(tǒng)的實(shí)現(xiàn)是信息內(nèi)容時(shí)代浪潮時(shí)代的產(chǎn)物之一。一切系統(tǒng)都要遵循系統(tǒng)設(shè)計(jì)的基本流程。它還需要通過(guò)市場(chǎng)調(diào)查、需求分析報(bào)告、匯總設(shè)計(jì)、詳盡設(shè)計(jì)以及測(cè)試,根據(jù)node語(yǔ)言表達(dá)設(shè)計(jì),完成實(shí)驗(yàn)室預(yù)約管理系統(tǒng)。該系統(tǒng)根據(jù)B/S,即所謂的電腦瀏覽器/網(wǎng)絡(luò)服務(wù)器方式,運(yùn)用Java技術(shù),前端采用微信小程序等技術(shù)實(shí)現(xiàn),選用MySQL作為后臺(tái)系統(tǒng)。
2、功能設(shè)計(jì)
自習(xí)室預(yù)約管理平臺(tái)選用B/S架構(gòu)模式,即網(wǎng)頁(yè)頁(yè)面和網(wǎng)站架構(gòu)設(shè)計(jì)的開發(fā)方式。這類系統(tǒng)構(gòu)造可以理解為對(duì) C/S 系統(tǒng)構(gòu)造的改變與推廣能夠進(jìn)行信息分布式處理,減少資源成本,提升訂制系統(tǒng)的性能。在這種設(shè)計(jì)下,極少有事務(wù)處理在前進(jìn)行,絕大多數(shù)重要事務(wù)管理的思路需要在服務(wù)端完成。
3、功能實(shí)現(xiàn)
系統(tǒng)登錄功能是程序必不可少的功能,在登錄頁(yè)面必填的數(shù)據(jù)有兩項(xiàng),一項(xiàng)就是賬號(hào),另一項(xiàng)數(shù)據(jù)就是密碼,當(dāng)管理員正確填寫并提交這二者數(shù)據(jù)之后,管理員就可以進(jìn)入系統(tǒng)后臺(tái)功能操作區(qū)。下圖就是管理員登錄頁(yè)面。
目管理頁(yè)面提供的功能操作有:查看自習(xí)室,刪除自習(xí)室操作,新增自習(xí)室操作,修改自習(xí)室操作。下圖就是實(shí)驗(yàn)室管理頁(yè)面
公告信息管理頁(yè)面提供的功能操作有:新增公告,修改公告,刪除公告操作。下圖就是公告信息管理頁(yè)面。
4、開發(fā)技術(shù)簡(jiǎn)介
本節(jié)介紹場(chǎng)館預(yù)約平臺(tái)用到的一些技術(shù)和開發(fā)環(huán)境的簡(jiǎn)介,用到開發(fā)技術(shù)主要包括:
(1)前端用到Element UI組件庫(kù)和Vue框架
(2)后端用到Node
(3)包管理器Npm
(4)中間件Express
(5)數(shù)據(jù)庫(kù)MySQL
系統(tǒng)開發(fā)環(huán)境主要是:前端開發(fā)工具Vscode,Hbuilder、操作系統(tǒng)Win10、CPU i5-9300H、內(nèi)存8G。
5、系統(tǒng)物理架構(gòu)
自習(xí)室系統(tǒng)的物理架構(gòu)主要有:管理端和用戶端,其中管理端主要是基于Vue和Element UI,用戶端主要基于安卓、微信小程序和H5自習(xí)室系統(tǒng)的物理建構(gòu)圖
6、系統(tǒng)流程圖
用戶發(fā)起預(yù)約時(shí)首先會(huì)檢測(cè)用戶是否登錄,若登錄則進(jìn)入到相應(yīng)的預(yù)約界面,此時(shí)用戶可以選擇需要預(yù)約的時(shí)間段以及場(chǎng)地。當(dāng)用戶預(yù)約成功時(shí)用戶會(huì)在我的預(yù)約中找到這次預(yù)約。當(dāng)用戶去場(chǎng)館時(shí)可以通過(guò)預(yù)約生成的二維碼來(lái)驗(yàn)證身份。若用戶的預(yù)約時(shí)間失效也會(huì)有響應(yīng)的提示
7、庫(kù)表設(shè)計(jì)
8、關(guān)鍵代碼
// pages/xgxx/xgxx.js
const db=wx.cloud.database()
const {updateUser} =require('../../api/login')
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
openid:'',
userInfo:'',
xy_index:0,
nj_index:0,
imgUrl:''
},
/**
* 生命周期函數(shù)--監(jiān)聽頁(yè)面加載
*/
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 )
})
},
/**
* 生命周期函數(shù)--監(jiān)聽頁(yè)面顯示
*/
onShow: function () {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁(yè)面隱藏
*/
onHide: function () {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁(yè)面卸載
*/
onUnload: function () {
},
/**
* 頁(yè)面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動(dòng)作
*/
onPullDownRefresh: function () {
},
/**
* 頁(yè)面上拉觸底事件的處理函數(shù)
*/
onReachBottom: function () {
},
/**
* 用戶點(diǎn)擊右上角分享
*/
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:"預(yù)約成功"
})
})
}else{
res.send({
code:200
})
}
})
})
//查詢預(yù)約表
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
}
})
})
})
//取消預(yù)約
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:"取消失敗"
})
}
})
})
//查詢?nèi)∠韱蝹€(gè)人
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
}
})
})
})
//查詢?nèi)∠?/span>
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) {
//查詢數(shù)據(jù)
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:"刪除成功"
}
})
})
});
//查詢預(yù)約表
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
}
})
})
})
//通過(guò)姓名查詢預(yù)約
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
}
})
})
})
//刪除預(yù)約表信息
router.post('/deleteAllReservation', function(req, res, next) {
//查詢數(shù)據(jù)
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:"刪除成功"
}
})
})
});
//修改預(yù)約表
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、源碼獲取
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看????獲取聯(lián)系方式????
10、 ??寫在最后
??伙伴們,如果你已經(jīng)看到了這里,覺得這篇文章有幫助到你的話不妨點(diǎn)贊??或 Star ?支持一下哦!手動(dòng)碼字,如有錯(cuò)誤,歡迎在評(píng)論區(qū)指正??~
你的支持就是我更新的最大動(dòng)力??~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-857439.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-857439.html
到了這里,關(guān)于基于微信小程序的自習(xí)室預(yù)約系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!