用委托实现信用卡还款

用委托实现信用卡还款


前言

委托是一种可以指向方法的引用,可以理解为一种函数指针,使用委托需要三个步骤:声明委托类型、创建委托实例、向委托实例注册方法。

信用卡还款

1.功能说明

用委托、事件等特性实现信用卡还款功能,由银行根据账户设定的还款日期主动扣款,输出信息显示账户原额、负债钱数、扣款后账户余额及还款日期。

2.设计思想

信用卡账户作为委托对象,账户订阅定期还款事件。到还款日期,则触发事件,否则提示未到还款日期。下列程序,主要判断发起还款动作时,是否满足还款条件,所以导入系统时间。

3.核心代码

定义一个信用卡类,包括姓名、账户余额、债务钱数、还款日期,并改写构造函数。

class Deposit
    {
        //定义还款人信息
        private string name;
        private double account;
        private double debet;
        private string paytime;
        public Deposit(string nam,double a,double d,string p)
        {
            name = nam;
            account = a;
            debet = d;
            paytime= p;
        }
        public double Subm()
        {
            account = account - debet;
            return account;
        }
        public string get_name()
        { return name; }
        public double get_account()
        { return account; }
        public double get_debet()
        { return debet; }
        public string get_paytime()
        { return paytime; }
    }

定义一个银行类,包含一系列扣款动作及提示信息

class Bank
    {
        public void paydebet(Deposit d)
        {
            double a = d.get_account();
            double de = d.get_debet();
            if(a-de>=0)
            Console.WriteLine("{0},原卡余额{1}元,负债{2}元,本次还款{3}元,现余额{4}元,还款时间{5}",d.get_name(),a,de,de,d.Subm(),d.get_paytime());
            else
            Console.WriteLine("{0},原卡余额{1}元,负债{2}元,本次还款{3}元,仍负债,还款时间{4}", d.get_name(), a,de,a,d.get_paytime());
        }
    }

定义一个委托类,包含委托、事件及事件触发条件

class Delegate
    {
        //定义委托
        public delegate void MeDelegate(Deposit d);
        //定义事件
        public event MeDelegate SubMoney;

        public void Sub(Deposit d)
        {
            //如果事件不为空
            if (SubMoney != null)
            {
                Console.WriteLine("进入还款流程");
                SubMoney(d);
            }
            else
            {
                Console.WriteLine("还款日期为{0}", d.get_paytime());
                Console.WriteLine("今天是{0},未到还款时间", DateTime.Now.ToString("yyyy/MM/dd"));
            }
        }
    }

主函数中实现委托的实例化,并赋予事件

static void Main(string[] args)
        {
            Delegate m1 = new Delegate();
            Deposit d1 = new Deposit("lisa",5000,6000,"2021/04/07");
            Bank c1 = new Bank();
            if (d1.get_paytime() == DateTime.Now.ToString("yyyy/MM/dd"))
                m1.SubMoney += c1.paydebet;
            m1.Sub(d1);
        }

4.结果截图

测试用例:
姓名 账户余额 负债 还款日期
1.“lisa”,5000, 6000,“2021/04/07”
2.“lisa”,5000,6000,“2021/04/08”
3.“lisa”,5000,4000,“2021/04/07”
第一种情况
在这里插入图片描述
第二种情况
在这里插入图片描述
第三种情况
在这里插入图片描述

心得体会

1.委托像是赋予对象调用方法的时间,不改动方法。对于委托,程序此时调 A 就只能调 A,彼时调 B 只能调 B,不像接口内函数,随时调用,委托保护了一些安全性要求高的方法。 2.事件常与委托搭配使用,完成对不同对象进行信息传递。 3.上述银行主动划款程序仍然存在不足,信用卡类开放的某些函数,存在不安全性。

gitee链接

代码链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值