草庐IT

基于微信小程序的图书馆座位预约系统的设计与实现

babyai997 2023-04-18 原文

1. 系统开发背景

图书馆因有良好的学习氛围、大量的学习资源吸引大家前来学习,图书馆还未开馆就有大量的同学在门口排队等待,有限的座位与日益增加的自主学习者之间形成了供不应求的现象,再加上不了解图书馆的座位使用情况和恶意占座等现象,使得有限的学习座位越发紧张 [1] 。伴随着越来越多的同学去图书馆,人一多座位少就难免会发生一系列问题:座位占着不用,座位使用率降低,更有甚者用大量的书占座据为己有,同时也引发了同学之间的矛盾,为此发生口舌,甚至与图书馆人员争论不休。针对一系列事情,发现了学生占座的诸多原因,如学生的道德素质有待提高、图书馆有待规范、基础设施有待进一步提升等,针对解决图书馆座位资源的管理和利用率的问题,图书馆一直在着手努力解决。

随着科技的大力发展,如今越来越多的问题可以使用微信小程序等一系列工具解决,例如使用微信小程序进行点餐。所以我们想到可以使用微信小程序来开发一款高性能的图书馆座位预约系统。

2. 开发技术

2.1. 概述开发平台

微信小程序是继原生APP、Web APP之后出现的一种新的APP形态。原生APP随着Android和iOS两大平台的迅速发展而逐渐变得强大起来,但由于两个平台的互不兼容,就需要开发两个版本,开发成本比较高。使用HTML5开发的Web APP很好地解决了跨平台的问题,但是性能和同学体验不佳。为此,微信小程序借鉴了现有的Web技术,通过独立的运行环境实现了跨平台,并提供了接近原生APP的使用体验,具有明显的优势。 [2]

2.2. 设计技术

1) 微信小程序开发语言

小程序的编写主要在微信开发者工具上进行,它可以实时预览界面,便于迅速调试、修改,还可以通过手机查看预览效果。小程序的前端界面主要是运用WXML、WXSS和JS等语言编写的。WXML是框架设计的一套标签语言,用来构建页面结构;WXSS是样式语言,决定页面中组件的展示样式,它具有CSS大部分特性,为了适应开发小程序,对CSS进行扩充及修改;JS用来处理与同学交互的逻辑事件 [3] 。小程序利用云开发功能,可提供完整的云端支持,不需要搭建、配置或管理服务器,代码运行所需要的服务器服务皆由云端平台来提供,只需要考虑复杂的业务逻辑问题即可。系统使用的数据库是MySQL数据库,后台则是使用基于云开发搭建的可视化的内容管理服务,开通简单,无须编写代码即可使用丰富的管理功能 [4] 。

2) 座位图的设计

导入记录有座位分布的二维平面图,通过技术手段,将已预约的座位的小正方形显示为红色,意为已经有人预约此座位,未预约的座位的小正方形显示为绿色,意为可以预约此座位。

3) 与门禁系统关联

通过网络与图书馆门禁相连接,并设置定时,在预约座位之后,二十分钟之内需要通过门禁进入到图书馆,否则视为取消预约。

4) 架构

为了让系统具有良好的灵活性和伸缩性,选用了面向服务的架构(SOA)。面向服务的架构是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。

5) MySql数据库

在系统开发中会产生很多的数据,那么数据库的作用就显得尤为重要。目前主流的数据库有MySQL数据库,SQL server数据库和Oracle Database数据库。在此我们选择MySQL数据库作为我们系统开发的数据库。MySQL可以将数据存储在不同的表中,非常灵活,而且还可以提高系统在实际应用中的速度。同时拥有较高的兼容性。对数据库的操作包括增加、删除、修改、查找等功能。MySQL具有体积小、速度快、成本低等优点,是目前最受欢迎的开源数据库。使用流程如下:

a) 创建小程序并引入云开发。

b) 创建云函数,取名为mysql。

c) 安装MySQL2模块依赖。

d) 编写MySQL云函数链接MySQL数据库。代码如下:

const cloud = require('wx-server-sdk')

const mysql = require('mysql2/promise')

exports.main = async(event, context) => {

try {

const connection = await mysql.createConnection({

host: 服务器ip,

database: 数据库名,

user: mysql使用后名,

password: mysql密码

})

const [rows, fields] = await connection.execute('SELECT version();')

return rows;

} catch (err) {

console.log(链接错误, err)

return err

}

}

6) 上传并部署云函数。

部署完成后即可通过小程序链接MySQL数据库来进行相关的增删改查操作。

3. 模块设计

3.1. 系统架构

本系统分为五个模块,如图1所示,分别为学生注册/登录系统模块、签到/销到模块、数据管理模块、数据利用模块和座位管理模块,如图2所示为系统架构数据模型ER图。接下来,我们对每一个模块进行详细的说明。

3.1.1. 学生注册/登录模块

在使用本系统前,学生需要在系统的登录界面选择注册一个账号,输入自己的学号、专业、班级以及对应的学院信息,完成账号的注册,同时,系统完成对注册学生的信息的收集(学号、专业、班级、学院、以及感兴趣的领域),供接下来的数据管理模块和数据利用模块使用。然后完成账号注册,登录时通过自己的学号和设置的密码进行登录预约系统,进行座位预约。登录界面如图3和注册界面如图4所示。

预约系统内部展示座位信息,如图5所示,在图中展示座位信息,其中有三种颜色:红色表示已经在使用,蓝色表示已经有人预约但还没有签到使用,绿色表示没有人预约也没有人在使用,可以进行预约并使用该座位。在系统内部可选择自习楼层,系统会根据学生所选择的楼层进行不同楼层间座位图的展示。更直观的让学生了解到座位使用情况。

 

Figure 1. System architecture diagram

图1. 系统架构图

 

Figure 2. System architecture ER diagram

图2. 系统架构ER图

Figure 3. System login screen

图3. 系统登录界面

Figure 4. System registration interface

图4. 系统注册界面

Figure 5. Schematic diagram of the seat reservation interface

图5. 预约座位界面示意图

3.1.2. 签到/销到模块

签到销到模块为我们系统设计的一大亮点,其中签到模块摒弃了传统的图书馆机器签到,我们采用墨水屏显示二维码来让预约座位的同学扫描二维码进行签到。电子墨水在通电时可以改变颜色,可以像传统屏幕那样显示变化的图像,并且它的功耗低、辐射小,能够作为签到所需的二维码屏幕。由此,我们设计了动态刷新的二维码,可在一定程度上防止拍照签到等签到作弊现象,同时,签到时系统会通过GPS根据用户所在位置信息,来判断是否满足签到条件(范围需定位在图书馆范围内方可签到)。签到界面如图6所示。同时,在座位使用完毕,即将离开图书馆之际,需要在小程序上释放该座位。签到与销到皆与门禁系统相关联。在小程序上预约座位后,门禁会开启20分钟倒计时(图6中以一小时为例),在20分钟内,学生需要到达图书馆刷卡进馆签到确认预约,否则视为取消预约,系统自动释放位置信息。

Figure 6. Booking system check-in diagram

图6. 预约系统签到示意图

3.1.3. 数据管理模块

在学生注册账号的同时,会收集学生信息,包括姓名,性别、专业、班级、学院等并保存在系统中。同时,数据库还会记录和保存每一位学生来图书馆预约座位的次数以及是否按规定流程进行销到。数据由表单的方式呈现,存储在MySQL数据库中供系统使用。具体学生信息表如表1所示。

表名

字段

数据类型

描述

学生信息表

STU_ID

BIGINT

学生账号

PWD

VARCHAR

登录密码

NAM

VARCHAR

学生姓名

AGE

BIGINT

年龄

MAJOR

ENUM

专业

CLASS

ENUM

班级

STATUS

ENUM

预约状态

Table 1. Student information sheet

表1. 学生信息表

3.1.4. 数据利用模块

数据在系统中占着非常重要的地位和作用,单单实现其功能是不够的,如若对系统使用过程中的数据加以利用,则更能体现系统的价值。因此系统在对学生信息以及预约信息的收集和利用方面下了不少功夫,同时对数据的利用方式也是我们系统的一个亮点所在。由于在注册账号时收集到了学生的信息,因此我们通过大数据接口进行数据分析,在预约座位的同时,为学生推荐相关专业性的书籍,在预约座位的同时能够简单快速的大致了解一本书。如果学生对这本书感兴趣,系统会调用图书馆图书借阅系统查阅此书的位置,方便学生进行借阅。

根据学生预约图书馆座位的次数(非恶意刷次数的预约)推出学习之星,“榜样”的力量是无穷的,以此来激发同学们去图书馆自习的意愿。在3.1.2签到销到模块中提到的销到模块,此处系统会统计是否正常销到,未按规定销到的次数达到四次,则暂停此学生图书馆座位预约一周。以此督促大家养成良好的使用习惯。在被暂停预约功能之后,可联系图书馆管理员,由管理员视其情况决定是否予以开启。

3.1.5. 系统座位管理模块

系统具有座位自动管理和图书馆管理员管理两种形式。其会对图书馆每层自习室中的座位数量进行收集,并在系统中展示相关座位信息(通过红、蓝、绿三种颜色)。座位释放时,系统收到释放指令,则立即更新释放座位为绿色(可预约座位)。同时,系统每天在图书馆闭馆后,自动释放所有座位,全部标为绿色可预约状态,在第二天早晨开启预约功能。

3.1.6. 系统管理员模块

系统管理员模块分为登录、座位管理、用户管理和公告管理四个部分,关系如图7所示。其中登录部分为管理员专用账号和密码,登录即是管理员界面,如图8所示为图书馆管理界面,包括用户界面、座位管理、公告管理。

1) 座位管理模块

管理员可以查找调用MySQL数据库的表进行数据交互,使得管理员可以对系统的座位进行管理(如释放座位信息等)。

2) 用户管理模块

当有的学生信息发生改变后(如毕业、离校、转院等),可联系图书馆管理员进行信息的修改。

3) 公告管理模块

该模块包括查询栏和公告通知,公告类型主要分为违规通告和闭馆通知等,由系统管理员进行发布与管理。在该页面,用户可以清晰查看公告发出的时间以及标题内容。同时当公告过多时,可以透过上方的搜索框进行关键字的搜索,方便查找。

Figure 7. System administrator module

图7. 系统管理员模块

Figure 8. System administrator interface

图8. 系统管理员界面

4. 性能分析

1) 与传统的管理方式相比,传统的管理方式是使用人工通过用纸和笔进行数据信息的统计和管理,并且这种方式对于存储和查找某一数据信息都比较麻烦,随着计算机网络的到来,这种传统的方法很难适应当下社会的发展,不仅降低人们的办事效率,而且还需要很多的人力和物力,对于使用的时间和所要花费的费用都是比较高的,为了降低成本费用,提高学生的工作效率,进行开发一套基于计算机和网络技术的图书馆座位预约系统。

2) 图书馆座位预约系统的开发设计时一个独立的系统,以流行数据库进行数据的存储开发,主要是为了实现图书馆座位预约系统的学生角色及相对应的功能模块,让图书馆座位预约系统的管理不会存在管理差异、低效率,而是跟传统的管理信息恰好相反,图书馆座位预约系统的实现可以节约资源,并且对于业务的处理速度也提高,速度快、效率高,功能性强大。

3) 预约系统以微信小程序的方式,结合数据库,互联网,达到方便、快捷的使用方式,相较于APP,微信小程序面向的用户更广,不占用手机内存空间,轻量化,不会导致手机卡顿。其次,小程序开发门槛和成本更低,研发时间更短,并且维护成本相较于APP也更低。更重要的是,微信小程序不受限于平台,安卓和苹果系统都可以使用,兼容性更高。

5. 总结

在图书馆占座现象普遍大量存在的现在,一个好的、实用的座位预约系统显得尤为重要,本系统不仅具有座位预约功能,其利用同学个人数据进行个性化推荐和统计其自习次数以及时长来对系统产生的数据进行充分利用。其次,本系统的签到模块是一大亮点,通过GPS定位在图书馆范围内签到在一定程度上防止了签到作弊的现象。本系统以微信小程序的方式呈现,体积更小,内存更小,使用更方便,开发更快捷,实用性更高。本系统旨在减少占座的现象,促使大家养成一个好的座位预约使用的习惯,提高座位利用率,营造一个较公平的座位使用环境,拒绝长时间占座。

参考文献

[1]付伟, 吴珊珊, 钱少博. 高校人力资源管理工作的优化路径探析[J]. 现代营销(信息版), 2020(2): 206.
[2]黑马程序员. 微信小程序开发实战[M]. 北京: 人民邮电出版社, 2019: 22-23.
[3]李昊楠, 刘雅莉. 基于微信小程序的图书馆座位预约系统设计[J]. 现代信息科技, 2020, 4(6): 4-6.
[4]潘俊芳, 侯振兴. 基于微信小程序的图书馆座位预约系统的设计[J]. 黑龙江工业学院学报(综合版), 2022, 22(5): 66-71.

有关基于微信小程序的图书馆座位预约系统的设计与实现的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  3. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  4. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  5. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  6. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  7. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

随机推荐