项目案例:简易投票系统

发布于 2024-12-17 18:41:47 字数 2219 浏览 1 评论 0

设计一个简单的投票系统合约,其中包括以下功能:

  • 允许添加候选人。
  • 允许投票给候选人。
  • 查询候选人的得票数。

以下是一个基本的投票系统合约示例,包括允许添加候选人、允许投票和查询候选人得票数功能:

// 合约定义
pragma solidity ^0.8.0;

contract VotingSystem {
    address public owner;
    mapping(uint256 => Candidate) public candidates;
    uint256 public totalCandidates;

    struct Candidate {
        string name;
        uint256 voteCount;
    }

    event CandidateAdded(uint256 indexed candidateId, string name);
    event VoteCast(address indexed voter, uint256 indexed candidateId);

    constructor() {
        owner = msg.sender;
        totalCandidates = 0;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Only the owner can call this function");
        _;
    }

    function addCandidate(string memory _name) public onlyOwner {
        totalCandidates++;
        candidates[totalCandidates] = Candidate(_name, 0);
        emit CandidateAdded(totalCandidates, _name);
    }

    function vote(uint256 _candidateId) public {
        require(_candidateId > 0 && _candidateId <= totalCandidates, "Invalid candidate ID");
        candidates[_candidateId].voteCount++;
        emit VoteCast(msg.sender, _candidateId);
    }

    function getVoteCount(uint256 _candidateId) public view returns (uint256) {
        require(_candidateId > 0 && _candidateId <= totalCandidates, "Invalid candidate ID");
        return candidates[_candidateId].voteCount;
    }
}

在这个合约中,我们通过 addCandidate 函数允许合约拥有者添加候选人。候选人将被存储在 candidates 映射中,每个候选人包括名称和初始得票数。通过 vote 函数,用户可以投票给指定的候选人,投票结果将更新候选人的得票数。 getVoteCount 函数用于查询候选人的得票数。

你可以使用 Remix 等工具部署并测试这个合约,然后使用 Web3.js 或其他前端界面与合约进行交互,添加候选人、投票和查询得票数操作。

练习题:

  1. 解释 onlyOwner 修饰符的作用。
  2. 列举并说明投票系统合约中的主要函数,包括 addCandidatevotegetVoteCount

拓展项目:投票系统 DApp

在上述投票系统合约的基础上,设计一个完整的投票系统 DApp,其中包括以下功能:

  • 允许用户添加候选人,显示候选人列表。
  • 允许用户进行投票,显示投票结果。
  • 显示每位候选人的得票数。

学生可以根据所学知识,实现上述功能。这个项目案例将帮助他们将投票系统合约的设计和实现应用于实际问题中,加深对智能合约编写的理解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

悲凉≈

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文