C#委托实现银行自动还款

本文通过C#实现银行自动还款功能,涉及委托的使用。首先分析问题,创建银行卡类并设置初始欠款,然后定义委托并在还款时间到达时执行相应方法。在实现过程中遇到了委托语法理解及参数传递的问题,最终在gitee上分享了源码仓库。
摘要由CSDN通过智能技术生成

问题分析

1.创建银行卡类,并在控制台获取name 和 balance 属性
2.默认欠款 500.
3.委托类的实现
4.控制台获取还款时间与现在时间比较,到达执行成功委托方法,
否则执行无需委托方法

代码实现

using System;

namespace projAboveAvg
{

class BankAccount
{
    private string name;
    private double balance;
    private double arrears;
    public int time;
    
    public BankAccount(string name)
    {
        balance = 0;
        arrears = 500;
        this.name = name;
    }
    
    public void deposit(double amount)
    {
        balance += amount;
    }
    public double Balance 
    {
        get { return (double)balance; }
    }
    public double Arrears
    {
        get { return (double)arrears; }
    }
    
    public void Time(int time)
    {
        this.time = time;
    }
    public void RepayMent()
    {
        balance -= arrears;
        arrears = 0;
        Console.WriteLine("偿还成功!");
        Console.WriteLine("当前余额是{0}元", Balance);
        Console.WriteLine("当前欠款是{0}元", Arrears);
    }
    
    public void NotRepay()
    {
        Console.WriteLine("还未到还款日,无需还款!");
    }
}
class RepayDelegate
{
    public delegate void RepayM();
    public event RepayM Repay;
    public void RequestRepay()
    {
        if(Repay != null )
        {
            Repay();
        }
    }
    
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请输入你的大名:");
        string name = Console.ReadLine();
        BankAccount a = new BankAccount(name); 
        Console.WriteLine("请输入存款金额:");
        double amount = double.Parse(Console.ReadLine());
        a.deposit(amount);
        
        Console.WriteLine("当前余额是{0}元", a.Balance);
        Console.WriteLine("当前欠款是{0}元", a.Arrears);
        Console.WriteLine("请输入自动还款日:");
        int time = int.Parse(Console.ReadLine());
        a.Time(time);
        RepayDelegate RD = new RepayDelegate();
        if(a.time == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
        { 
        
            RD.Repay += new RepayDelegate.RepayM(a.RepayMent);
        }else
        {
            RD.Repay += new RepayDelegate.RepayM(a.NotRepay);
        }
        RD.RequestRepay();
        Console.WriteLine("请输入你的大名:");
        name = Console.ReadLine();
        BankAccount a2 = new BankAccount(name); 
        Console.WriteLine("请输入存款金额:");
        amount = double.Parse(Console.ReadLine());
        a2.deposit(amount);
        Console.WriteLine("当前余额是{0}元", a2.Balance); 
        Console.WriteLine("当前欠款是{0}元", a2.Arrears);
        Console.WriteLine("请输入自动还款日:");
        time = int.Parse(Console.ReadLine());
        a2.Time(time);
        RepayDelegate RD2 = new RepayDelegate();
        if (a2.time == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
        {
            RD2.Repay += new RepayDelegate.RepayM(a2.RepayMent);
        }
        else
        {
            RD2.Repay += new RepayDelegate.RepayM(a2.NotRepay);
        }
        RD2.RequestRepay();
    }
}

}

代码运行结果截图

在这里插入图片描述

遇到的问题和解决

主要是对委托基础语法结构不够熟悉,实现还有些生疏,对于委托方法参数的传递和调用开始还是不够了解,花了大量的时间,因对于委托触发事件再执行操作的机制还不够熟练。

gitee代码仓库

gitee源码仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值