基于solidity的Dapp图书管理系统
前言
这是自己初学区块链的时候模仿着github的链接: link这个项目做的图书管理系统,在原基础上就是做了小的修改,功能分为管理员和学生。个人感觉在目前适合solidity初学者的免费项目很少,通过这个项目能较快上手。本人目前也就是新手,代码尽量做了许多注释方便理解,博客中的介绍难免会有错误的地方,请谅解。
我上传到了gitee,如果觉得有用希望给个star。
https://gitee.com/Ilovesandwich/ethereum_library_dapp.git
环境搭建
整个项目是用的私有链,不用去考虑添加虚拟机搭建多个节点,因此非常容易快速上手。
要做的首先就是安装环境了,安装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钱包获得学生的账户地址,系统审查该地址是否具有借阅权限,学生可以点击借阅按钮选择借阅,在自己的主页面可以选择归还图书,借阅图书如图所示。
归还图书如图所示
(四)图书信息模块
用户可以查询图书信息,管理员可以在图书馆一栏查看图书主页,图书排行和图书借阅情况,其中图书排行可通过借阅数量排名、图书评分排名。在每一个图书的信息界面,用户可以对该书进行评价和打分,如图所示。
基于solidity的Dapp图书管理系统相关推荐
- 【毕业设计】基于spring boot的图书管理系统 -java 计算机 软件工程
文章目录 1 前言 2 系统简介 2.1 领域模型 2.2 技术栈 2.3 表结构设计 2.4 接口设计 2.4.1 接口定义 2.4.2 接口测试 2.5 权限设计 3 运行效果 3.1 系统登录 ...
- 基于顺序表的图书管理系统(C语言)
Visual Studio编译环境 功能: 0.退出. 1.基于顺序存储结构的图书信息表的创建和输出. 2.基于顺序存储结构的图书信息表的新图书的入库. ...
- c语言图书管理系统解析,基于C语言的图书管理系统的设计与实现解析.doc
毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...
- 基于Java+Swing+mysql图书管理系统
基于Java+Swing+mysql图书管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.图书管理 3.图书添加 4.图书类别管理 5.图书类别添加 三.数据库 四.其它 1.其他系统实现 五. ...
- 图书管理开题报告php,基于PHP+SqlServer的图书管理系统,毕业论文设计,答辩ppt,开题报告,外文翻译,苹果,硕士研究生,iphone...
BMS 基于PHP+SqlServer的图书管理系统 这是"数据库实用技术"课程的大作业,设计一个图书管理系统(Book Management System). 其实PHP和Sql ...
- 教材征订管理系统c语言,基于C语言的图书管理系统的设计与实现范文.doc
毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...
- java用spring图书管理系统_基于Java + SpringMVC的图书管理系统
需求分析 基于Java+SpringMVC的图书管理系统, 实现读者和管理员登陆,图书的增删改查,读者的增删改查,借还图书,密码修改,卡号挂失,超期提醒等功能 本站提供了其他类型的 图书管理系统源代码 ...
- 基于python/django的图书管理系统
摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准 ...
- 计算机毕业设计ssm基于用户激励的图书管理系统fx8il系统+程序+源码+lw+远程部署
计算机毕业设计ssm基于用户激励的图书管理系统fx8il系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于用户激励的图书管理系统fx8il系统+程序+源码+lw+远程部署 本源码技术栈: 项目 ...
最新文章
- android AsyncTask 的分析与运用
- 建站初期关键字的定位
- July大神---SVM讲解
- 【知识总结】回文自动机(Palindrome_Automaton)
- Boost:bimap双图修改的测试程序
- Hadoop生态圈-Hbase的rowKey设计原则
- android 摄像头预览左右镜像_OpenJDK镜像的tag说明
- C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理
- linux禁止开机启动服务器,如何关闭SELinux并设置开机不启动
- php 自减函数,Thinkphp中某个字段值从增或自减函数
- matlab lu分解求线性方程组_线性代数10——矩阵的LU分解
- vba移动文件_你想要的爬虫、VBA系列教程这里都有!
- 【Linux】Linux根据文件路径查找索引节点
- hadoop中java部分练习_java私塾Hadoop实战-中高级部分 之 Hadoop RestFul
- eclipse字体大小怎么设置
- 新塘单片机烧写器_ICP Programming Tool
- 新的宽高比(aspect-ratio)CSS属性
- Nginx反向代理实现负载均衡配置图解
- Linux中括号的使用
- keil(MDK)中出现error: #513:
热门文章
- skyline系列10 - Skyline TerraExplorer 加载数据使用方法 (客户版)
- Python爬取 美剧《纸牌屋》字幕(可可英语)---BeautifulSoup版
- 竞品分析和产品分析,你究竟搞清楚了么?
- vb读取mysql多表,vb获取数据库中所有表的名称
- java寻优算法_模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径...
- 环境初始化与数据清除
- 杨强教授:《可信联邦学习与开源生态》主题演讲视频
- vi 命令 用法 (vi 方向鍵及 backspace 的問題 )
- 以太坊区块链也拥堵_后以太坊1.0众生相:DeFi拥堵,突围Layer2
- Vscode上使用opencv(C++接口,Windows篇)