solidity 小案例 收费站

solidity IDE下载地址 https://pan.baidu.com/s/1cY8VgDqB9Wt9VzK-Nocbyw

代码案例:

pragma solidity ^0.4.0;
 //创建合约的时候,点的那个地址就是合约本身的地址
contract TollStation{
   
    //构造器 存储车库车辆信息
    struct CarInfo{
        address  _carAddr;//车主账户地址
        string  _lisencePlateNumber;//车牌号
        uint  _intime;//车辆进入时间
    }
    
    //定义数组
    CarInfo[] public car;
    address addre;//合约地址
    
     //合约的创建(构造器): payable(收钱)
    function TollStation() public {
        addre = msg.sender;
    }
    

    //添加数据
    function addData() payable{
        car.push(CarInfo(msg.sender,"云A1123", now));
    }
 
    //判断用户是否存在
    modifier carExist{
        
        bool contain;
        for(uint i = 0;i<=car.length-1;i++)
        {
            if(msg.sender == car[i]._carAddr){
                contain = true ;
            }
           
        } 
        require(contain);//判断contain的值,如果不存在,则不继续执行
        _;
    }


    function account() public payable carExist  returns (uint adr) {
       
        uint  beforeTime;

       //取出当前账户的时间,然后用系统当前时间减去原来的时间 就可以计算需要扣除的金额
       for(uint i = 0;i<=car.length-1;i++)
         {
            if(msg.sender == car[i]._carAddr){
                beforeTime = car[i]._intime;
            }
         } 
       uint nowTime = now;
       uint bal = nowTime - beforeTime;
       if(bal<100000000){//小于1小时 扣除6wei
           require(msg.value>0);
           addre.transfer(6 ether);   
           emit Sent(msg.sender,"转账成功",msg.value);
       }
       else{ 
           require(msg.value>0);
           addre.transfer(10 ether);   
           emit Sent(msg.sender,"转账成功",msg.value);
       }
        return addre.balance;
    }
 
    //事件 定义事件的作用就是可以在控制台输出和发送消息给客户端
    event Sent(address addr,string msg,uint count);
 
    //查询数组  
    function queryCarData()  returns(address addr,string  str,uint  time,uint size){
         if(car.length<1){
             return(0x323,"s",0,0);
         }
         else{
             addr =car[car.length-1]._carAddr;
             str = car[car.length-1]._lisencePlateNumber;
             time = car[car.length-1]._intime;
             size = car.length;
         }
    }
    
    function getLocalAddress() returns (address addr){
        return this;
    }

    function getTime() returns (uint now11){
        now11 = now;
        
       return now11;//h获取系统时间  时间格式为12524208878   1524295087
    }
}
View Code

 (注意:require代码需要注释掉才可以)

下载了IDE后操作步骤如下:

1、解压后打开index.html,进入页面,复制代码,点击右侧的create,账户选择第一个。

2、切换账户,value值必须写,它主要是用于后面操作,就是车主进入车库多长时间,然后需要扣费多少,就是从value里面扣得,如果钱不够,交易失败。单位选择ether。

3、转账成功:

原文地址:https://www.cnblogs.com/luo1240465012/p/8917120.html