前言
这是自己初学区块链的时候模仿着github的链接: link这个项目做的图书管理系统,在原基础上就是做了小的修改,功能分为管理员和学生。个人感觉在目前适合solidity初学者的免费项目很少,通过这个项目能较快上手。本人目前也就是新手,代码尽量做了许多注释方便理解,博客中的介绍难免会有错误的地方,请谅解。
我上传到了gitee,如果觉得有用希望给个star。
环境搭建
整个项目是用的私有链,不用去考虑添加虚拟机搭建多个节点,因此非常容易快速上手。
要做的首先就是安装环境了,安装node.js和truffle.js,安装ganache客户端(这里默认大家早已安装好只是想看看项目实现,所以安装教程不赘述了)。
使用ganache客户端的好处是不同于一般使用 Geth 客户端在初始化创世区块后,必须手动启动节点。ganache客户端具有可视化和便捷性的特点,启动节点只需要启动ganache客户端,选择相应的网络监听端口即可。
其次,这个原项目还使用到了IPFS。在电脑本机中下载安装go-ipfs终端,安装命令行如图所示。
初始化成功后会得到图所示的结果,说明IPFS已经安装成功。
系统运行时,需要接入IPFS节点,这样才能实现文件的上传和下载,通过命令‘ipfs daemon’,可在cmd或者PS中完成,运行成功后在浏览器中输入‘http://localhost:5001/webui’,即进入IPFS的可视化界面,如图所示。
总体设计
系统业务模块设计
(一)图书发步模块
(二) 图书借阅归还模块
(三)图书信息模块
功能函数
在Migrations.sol文件的构造函数中使用
modifier admin(){require(owner == msg.sender); _;}
限度合约的发布者地址,从而保证只有合约的发布者才可以行使系统的某些管理员权限功能,防止被恶意篡改,其中owner为合约发布者地址,msg.sender可通过MetaMask钱包获取,代表了当前地址用户。当触发函数调用时,利用event事件将所有参数信息都存储在交易的日志记录,设计的接口如表所示。
结构体设计
(不能插入表格的吗?)
(一)书籍信息结构体
(二)书籍评论结构体
(三)已进行操作的书籍结构体
(四)学生信息结构体
功能实现
(一)注册与登录的实现
在智能合约文件User.sol编写的的用户注册与登录功能流程图在第四章的4.3节业务逻辑设计中已有介绍。注册与登录功能是图书发布模块的重要功能,通过用户登录的地址ID,判断角色权限是管理员还是普通学生用户,从而赋予他们不同的权限,管理员可以拥有该模块的发布图书权限。接下来本小节将详细介绍具体的注册与登录功能的开发思路与代码逻辑。
(1)注册功能
只有通过注册,学生才能有资格访问图书管理系统进行借阅图书操作。首先点击浏览器上安装的MetaMask插件,选择对应的网络“127.0.0.1:7545”,与节点进行通信,同时利用ganache客户端得到的账号地址导入到MetaMask中,注册功能会根据该账户的地址进行判断,确保一个地址只能注册一次。用户输入学号和密码进行注册。
用户输入用户名和密码后点击注册按钮就会产生一笔交易,如果智能合约中判定该交易用户所注册的信息为新用户,则同意这笔交易,注册信息成功上链。如图所示。在MetaMask弹出的交易界面用户可以点击SUBMIT按钮确认这笔交易,注册的信息就会存储在区块链中。
ganache客户端会有操作显示
(2)登录功能
注册后的用户能够通过学生学号和密码完成登录操作。login.js文件中系统会调用智能合约的findUser()方法获得当前地址下的用户信息,获取登录的信息进行匹配,当匹配成功后则显示为登录成功,跳转到图书馆界面,反之提示登录失败。
登录界面如图所示,用户在输入自己的学号与密码后,智能合约也会与区块链中已经记录的地址信息作,判断目前登录的用户账户地址是否已注册、是否具有管理员权限,用户输入信息后点击登录按钮,智能合约会进行一系列的判断,首先是用户名是否存在,如果存在接着判断用户的地址是否属于管理员地址,如果是,跳转到管理员界面,否则判定为学生,跳转到学生界面。
(二) 图书发布模块
用户在登录系统后,如果角色为管理员,可以拥有发布图书权限,管理员可以在发布图书界面选择发布图书。发布图书的页面如图所示。
(三)图书借阅归还模块
图书查询功能是为了提供给用户方便查询自己所需要的图书。在搜索栏中输入你所要查找的书,然后通过关键词进行模糊查询,keyWordSearch获得关键词keyword后,通过getBookByKeyword获得不同status下的图书:已发布的图书、已评论的图书、已借阅的图书、已归还的图书。结果如图所示。如果不存在,则提示用户输入错误。
图书借阅和归还模块是本系统的主要功能,当学生入馆借书时,通过MetaMask钱包获得学生的账户地址,系统审查该地址是否具有借阅权限,学生可以点击借阅按钮选择借阅,在自己的主页面可以选择归还图书,借阅图书如图所示。
归还图书如图所示
(四)图书信息模块
用户可以查询图书信息,管理员可以在图书馆一栏查看图书主页,图书排行和图书借阅情况,其中图书排行可通过借阅数量排名、图书评分排名。在每一个图书的信息界面,用户可以对该书进行评价和打分,如图所示。