嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

作者:王宇斌、贾帅杰、王文政

指导老师:杨佳庆

项目难度: 较难

项目介绍:

读者在图书馆借书时,我们对发现书籍状态为在馆却没有在书架上找到对应的书这种情况进行了处理,这是本项目与常规图书馆项目的不同之处。本项目以数据库和tkinter为基础,使用python开发了一套智能图书馆管理系统。

原理框图:

191_7776f9f52013aa3a95e003731469f6d32903e85e.png

具体步骤:

 

一、界面设计:

Tkinter 作为 Python的标准GUI库,便于初学者使用。我们在此项目中使用tkinter进行界面设计。

此项目中,我们用到的组件主要为Button(按钮)和Label(标签)。前者用于调用功能,后者用于显示文字和图片。

20_eb248eb2bd54c600bf34253a0e6c4cd7905759ee.png

图2 Label的使用

125_ca639eea8347a5b84b48242f90a055119b30892d.png

图3 智能图书馆首页

二、数据库设计

本项目中,我们使用的是WampServer数据库,如下图。

210_1597d191192b76199d32d48bb1b9b9110a60c15f.png

 

图4 数据库部分截图

左边的books、borrowed_books等图标分别代表不同的表,具体功能详见下文。其中,books用于存储图书馆的图书信息,依次为书名、位置、用于显示外借状态的状态值和用于显示丢失状态的状态值。

其中,两个状态值的处理详见下文。

三、借书还书功能

图书馆最为核心的就是借书还书,首先我们介绍这一部分。

3.1 借书

311_5e9e42edac18588d13294de501ebd9e23b943568.png

图5 借书界面

在用户的借书流程中,我们使用了语音识别和二维码识别两项技术。

首先用户借书时通过语音读取书名。获取正确书名后会在数据库内的books表中进行查询,依次判断是否收录,外借,丢失。

判断是否收录直接在books表中查询书名即可。

判断是否外借则是查询state1的值。若为1(1为默认值),则代表在馆。

判断是否丢失则是通过调用“摄像头”扫描“书架”上的二维码,识别目标书籍是否存在。

由于没有实物,我们采用虚拟的方式。实时查询数据库的查询state2的值(同样默认为1),生成state2为1的二维码,并根据书的位置存到对应的文件夹内,将其整合成一张图片,模拟书架上的一排书的二维码,并调用程序去识别生成的二维码判断书是否丢失。若存在则书未丢失,可以借给用户。

411_7d5a8b47121c315927e280638f78650e15cae19e.png

 

图6 存放二维码的文件夹及二维码

若未扫描到不存在则丢失,书会加入lost_books表,这个表只存储书名。

58_3f35002b10bae70639188cf718569df2e56b1477.png

图7 lost_books表

 

如果三次判断均顺利通过,书就会被借出,state1变为0,同时书的信息会添加进borrowed_books表中。这个表存储了书名,借书人和两个状态值。(借书人详见下文)

66_948545060c80734be54bd7b6703a900c0ffdd93d.png

图8 borrowed_books表

借书的流程图如下所示。77_55ff929d7aeb8d5c793c960eb7c704700cc87fdd.png

 

图9 借书流程图

 

3.2 还书

还书时,我们可以一键还书。点击还书后,通过操作数据库,同时辅以语音提示,实现还书效果。具体操作和借书时类似,此处略去。

 

83_cc1b90f920e1066906df10e80c522d557bf1b759.png

图10 还书界面

基础功能完善之后,我们加入了用户注册,登录系统以及管理员系统。完善这个项目的的功能,使之更具实践意义。

四、用户系统

用户界面,我们加入了之前做好的借书,还书功能。其他功能还未加入。

在用户系统中,我们通过tk实现界面操作,加入了注册与登录功能。此系统也是和数据库紧密联系在一起。

注册时,我们将用户信息存入数据库。在登录时与数据库的信息进行比对。从而实现真正的用户系统。

登录时,会比对用户输入的信息和数据库内存储的信息,判断是否可以登录。

93_b1fd65c9d162551c3555833dd7da59032b35ed92.png

图11 数据库中的用户信息存储数据表

104_0e8f8d7f81a72a45cd1f78eb2da1abdce49fd1e1.png

图12 用户界面

1110_bfb36bb4c8a8578071fe3634cc27e79ff5f99270.png

图13 注册界面

 

四、管理员系统

管理员是整个图书馆的管理人员,所以,他的权限应该很大。所以,我们暂定了管理员的功能:查询现有用户信息、查询图书外借情况、查询图书丢失情况和添加新书功能。

这些功能是要和我们的数据库连通的,要实现对数据库的读写操作。另外,还要加入管理员的密码登录。确保他人不能随便的查询到这些信息。132_605c3f107100c3ca3d25b7dfdae0df7c58db8d1b.png

图14 管理员界面

 

 

4.1 现有用户查询

此功能是基于对数据库内USER数据表的读操作,然后在GUI界面输出显示。

141_a065118000ec322241033ad82ff5678619e373a6.png

图15 查询现有用户

4.2 借书、丢失书情况和现有图书情况查询

此功能的实现和查询用户的操作原理相同,此处略去。

151_f3e0bc5106ca056d918789165bf64efed20e8cd3.png

图16 查询借书信息

161_72adb55c67647782098ca61d39352cedd8084d27.png

图17 查询丢失图书

 

171_2fd37beaedd83f56df7faf9da5efd6e185c15489.png

图18 查询现有图书

4.3 添加新书

此功能是通过对books数据表进行写入操作,另外还添加了语音提示功能。

181_bf0bf7d715c7337483716382b17f0a9cbfbe08e3.png

图19 添加新书

五、总流程图

191_7776f9f52013aa3a95e003731469f6d32903e85e.png

功能演示

 

总结

本次通过使用Python设计了一个简单的智能语音图书管理系统,特别解决了图书库存显示和实际不符的痛点。当然对于界面的处理还比较粗糙,期望后续再改进。

相关的源代码在GitHub,供大家下载研究,并期待您的宝贵意见。

代码使用提示:

此系统基于mysql数据库,运行前需安装WampServer
library.sql
需在phpadmin内导入
解压Library.rar后运行lib2.py即可
运行时提示缺少模块自行pip install即可
语音识别调用百度api,如需较多次调用,请自己注册应用修改ID,KEY,SCRECTKEY 其中,baidusound内的playsound.py需要修改。在41行后。添加winCommand('close', alias)
即:
if block:
sleep(float(durationInMS) / 1000.0)
winCommand('close', alias)