C#使用委托实现信用卡用户定时还款功能

题目:

用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。

要求:

①必须使用委托  ②事件的触发方式是每个月的到期还款日。

代码实现:

信用卡类

class CreditCard
        {
            private int money = 0, creditlimit, deadline = 7;
            //构造函数,设置信用卡的信用额度
            public CreditCard(int creditlimit) => this.creditlimit = creditlimit;
            public int Money { get { return money; } }
            public int Deadline { get { return deadline; } }
            //使用信用额度
            public void spendmoney(int money)
            {
                if (this.money + money > creditlimit)
                    Console.WriteLine("超出信用额度");
                else
                    this.money += money;
            }
            //委托和事件
            public delegate void PayBack(int data);
            public event PayBack DueData;
            //推送
            public void Event(int data)
            {
                //deadline是还款日期
                if (data == deadline)
                {
                    Console.WriteLine("还款金额为:{0},已到还款日期",money);
                    DueData(money);
                }
                else
                    Console.WriteLine("还款金额为:{0},未到还款日期", money);
            }
        }

储蓄卡类

class DebitCard
        {
            private int money;
            private string name;
            public static bool flag;
            public DebitCard(int money, string name)
            {
                this.money = money;
                this.name = name;
                flag = false;
            }
            public string Name { get { return name; } }
            public int Money { get { return money; } }
            //扣款
            public void drawmoney(int money)
            {
                this.money -= money;
            }
            //还款的方法
            public void Repay(int money)
            {
                if (!flag)
                {
                    if (money <= this.money)
                    {
                        drawmoney(this.money - money);
                        flag = true;
                        Console.WriteLine("已用{0}储蓄卡还款{1}元", name, money);
                    }
                }
            }
        }

Main()函数

public static void Main(string[] args)
        {
            CreditCard card = new CreditCard(2000);
            DebitCard card1 = new DebitCard(300, "card1");
            DebitCard card2 = new DebitCard(3000, "card2");
            DebitCard card3 = new DebitCard(200, "card3");
            //订阅
            card.DueData += card1.Repay;
            card.DueData += card2.Repay;
            card.DueData += card3.Repay;

            card.spendmoney(2000);
            card.Event(7);
        }

运行截图

总结 

在开始解题之后,发现对委托和事件还是没掌握好,许多地方都一知半解。在查阅了许多资料依然有地方存在疑惑,最后是在室友的讲解下豁然开朗。在理解加深后再次实现的过程中还是遇到了许多问题的,比如代码中的一个bool标志,一开始没用static,导致最后输出会每个卡都扣款,检查后发现应该使用static修饰。

仓库

我的gitee仓库地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值