IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 以太坊智能合约开发(五):Solidity成绩录入智能合约实验 -> 正文阅读

[区块链]以太坊智能合约开发(五):Solidity成绩录入智能合约实验

以太坊智能合约开发(五):Solidity成绩录入智能合约实验


1 编写智能合约

每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。
student.sol合约,用于学生对自己信息进行管理。

  • 学生的基本信息作为状态变量:
	pragma solidity ^0.4.0;
	contract Student{
	    string studentID;
	    string studentName;
	    address owner;
	}
  • 声明构造函数,在构造函数中将owner设置为调用者的address:
	constructor(string _studentID, string _stdentName) public{
		studentID = _studentID;
		studentName = _stdentName;
		owner = msg.sender;
	}
  • 声明函数修饰器,可以将其加在函数中,在函数执行前进行判断,来检查调用者是否为学生本人,只有本人才能调用该函数:
	modifier onlyOwner(){
    	require(msg.sender == owner,"only owner can call this function");
    	_;
	}
  • get和set方法,其中set方法加入了函数修饰器:
    function getStudentIDandName() public constant returns(string,string) {
    	return (studentID,studentName);
    }

    function setStudentIDandName(string _studentID,string _studentName) public onlyOwner {
    	studentID = _studentID;
    	studentName = _studentName;
    }

Teacher.sol合约,用于录入、查询学生成绩

  • 导入Student合约:
	pragma solidity ^0.4.11;
	import "./Student.sol";
  • 学生的相关成绩作为状态变量,totalScore为全班总成绩,studentCount全班学生数量,owner部署合约的账户地址。同时声明映射studentAddrMap,studentScoreMap,将学生ID分别映射为学生地址和学生成绩。事件studentNotExistsEvent用于存储学生ID号
	contract StudentScore{
	    uint totalScore;
	    uint studentCount;
	    address owner;
	    mapping(string => address) studentAddrMap;
	    mapping(string => uint) studentScoreMap;
	    event studentNotExistsEvent(string studentID);
	}
  • 声明自定义修饰符onlyOwner,只有老师地址才能执行这些函数。
	modifier onlyOwner(){
        require(msg.sender == owner,"only owner can call this function");
        _;
    }
  • 函数addStudentScore,modifyScoreByStudentId分别用于老师添加或修改学生成绩:
    function addStudentScore(string studentID, address student, uint score) public onlyOwner {    
        studentAddrMap[studentID] = student;
        studentScoreMap[studentID] = score;
        totalScore += score;
        studentCount ++;
    }
    
    function modifyScoreByStudentId(string studentID, uint score) public onlyOwner{
        if(!studentExists(studentID)) {
            studentNotExistsEvent(studentID);
            return;
        }
        totalScore -= studentScoreMap[studentID];
        studentScoreMap[studentID] = score;
        totalScore += score; 
    }
  • 函数getAvgScore用于查询全班学生平均成绩,函数studentExists用于判断学生ID是否存在,函数getScoreByStudentID用于学生查询自己的成绩。
    function getAvgScore() public view returns(uint){    
        return totalScore / studentCount;
    }
    function studentExists(string studentID) public view returns(bool){
        address student = Student(studentAddrMap[studentID]);
        if(student == 0x00){
            return false;
        }else{
            return true;
        }
    }
    function getScoreByStudentID(string studentID) public constant returns(string, string, uint){
        if(!studentExists(studentID)) {
            studentNotExistsEvent(studentID);
            return;
        }
        Student student = Student(studentAddrMap[studentID]);
        var studentName = student.getStudentName();
        uint score = studentScoreMap[studentID];
        return(studentID, studentName, score);
    }
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:59:20  更:2021-10-22 10:59:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:36:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码