项目案例:简易投票系统
设计一个简单的投票系统合约,其中包括以下功能:
- 允许添加候选人。
- 允许投票给候选人。
- 查询候选人的得票数。
以下是一个基本的投票系统合约示例,包括允许添加候选人、允许投票和查询候选人得票数功能:
// 合约定义
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 或其他前端界面与合约进行交互,添加候选人、投票和查询得票数操作。
练习题:
- 解释
onlyOwner
修饰符的作用。 - 列举并说明投票系统合约中的主要函数,包括
addCandidate
、vote
和getVoteCount
。
拓展项目:投票系统 DApp
在上述投票系统合约的基础上,设计一个完整的投票系统 DApp,其中包括以下功能:
- 允许用户添加候选人,显示候选人列表。
- 允许用户进行投票,显示投票结果。
- 显示每位候选人的得票数。
学生可以根据所学知识,实现上述功能。这个项目案例将帮助他们将投票系统合约的设计和实现应用于实际问题中,加深对智能合约编写的理解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 项目案例:简易猜数字游戏
下一篇: 项目案例:日志记录系统
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论