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

  • 1 编写智能合约

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);}

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

  1. 基于以太坊的智能合约开发教程Solidity modifier

    基于以太坊的智能合约开发教程Solidity modifier pragma solidity ^0.4.0;contract modifierTest{address owner;uint publ ...

  2. 以太坊智能合约开发第七篇:智能合约与网页交互

    原文发表于:以太坊智能合约开发第七篇:智能合约与网页交互 上一篇中,我们通过truffle开发框架快速编译部署了合约.本篇,我们将来介绍网页如何与智能合约进行交互. 编写网页 首先我们需要编写一个网页 ...

  3. 基于以太坊的次高价盲拍solidity智能合约(二)

    基于以太坊的次高价盲拍solidity智能合约(二) 4.揭标 5.第三方仲裁人终结拍卖 4.揭标 揭标的过程应该是本智能合约中最复杂且具有灵魂的关键步骤. 当每个发起过竞标的用户,利用该标的隐式价格 ...

  4. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

  5. 以太坊和Metamask开发web应用时不再需要密码

    我在ConsenSys为各种客户构建了大量的概念证明,通常他们想要利用以太坊区块链来解决某些业务用例.奇怪的是,这些系统通常设计有标准的网络登录(即用户名和密码).我总是问自己为什么我还在这样做设计, ...

  6. 智能合约开发环境搭建及 Hello World 合约

    智能合约开发环境搭建及 Hello World 合约 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是 Hel ...

  7. 以太坊代码标准是什么_以太坊的包容性开发语言里到底藏着什么秘密?

    Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行. Sol ...

  8. 为什么选择Java进行以太坊区块链开发

    当有人说Java时,你会想到什么?如果没有,你可以试试old.虽然,其他人可能会说它坚固,可靠和安全.而对于Oodles Blockchain来说,Java意味着"企业级". 毫无 ...

  9. 以太坊智能合约开发:Solidity 语言快速入门

    在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识.最后,我们将该智能合约样例在 Remix 合约编译器中编译.部署,观察其 ...

最新文章

  1. Datawhale组队学习周报(第002周)
  2. 一个接口查3张表数据_“离婚冷静期”倒计时,天眼查专业版数据显示我国目前有3万余家婚姻咨询相关企业 北京市最多...
  3. Windows bat with adb
  4. malloc,realloc,calloc的使用场合及特点,以及malloc的实现原理
  5. VTK:图像高斯平滑用法实战
  6. X509Certificate2 本地正常,放到线上内部错误
  7. CSDN博文编辑技巧-如何去除上传的图片水印
  8. 一些SAP Partners能够通过二次开发实现打通 SAP C/4HANA和S/4HANA 的场景分享
  9. 导入导出oracle数据库表的dmp文件
  10. 干货时间:聊聊DevOps下的技术系列之契约测试
  11. linux 杀掉僵尸进程 (zombie process, defunct)
  12. paip.java-asp-php-.net互相调用方法大总结
  13. 中科大开源数据集CCPD 2019详细介绍
  14. RapidMiner是什么,主要的功能和特点是什么?
  15. steam搬砖项目,运用汇率差赚钱,利润可达30%
  16. tsm ANS0326E问题处理
  17. 文件十六进制编辑软件HxD Hex Editor的使用
  18. 3.识别AP版本与胖转瘦
  19. win7怎么装python_如何在win7上面安装python的包
  20. c语言常数-ox6a是什么意思,那年声明理解不了定义与初始化(三)

热门文章

  1. 用C#语言编写记事本
  2. 图像检索2:KSH(Supervised Hashing with Kernels)
  3. SQL server 2008R2安装错误:试图执行未经授权的操作
  4. LeetCode224 基本计算器
  5. 谷歌地球无法访问后如何获取谷歌历史影像
  6. linux单个IP地址绑定多个域名详解
  7. 树莓派4B评测 值不值得买
  8. 【python爬虫专项(24)】协调Selenium与requests+bs的方法
  9. gitblit操作笔记
  10. MatchVs与CocosCreater