C#事件与委托--信用卡还款

该程序展示了如何使用C#的委托和事件来实现代理信用卡还款功能。当还款日到来时,系统会自动从关联的储蓄卡中扣除账单金额。通过定义DepositCard和CreditCard类,以及CreditCardDelegate类来处理委托和事件,实现了在特定日期触发还款的过程。然而,文中提到代码可能存在的安全性问题,如信用卡类的一些函数对外开放。
摘要由CSDN通过智能技术生成
  1. 功能说明:用委托与事件实现用户自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣。

  1. 设计流程:通过定义各类,并使用c#委托与事件实现定时自动从用户的信用卡中扣款还款的功能。

  1. 关键源码展示:

using System.Text;

namespace ConsoleApplication3delegate
{
    class DepositCard
    {
        publicint amount;

        publicvoid Display()
        {
            Console.WriteLine("储蓄卡余额为:{0}", amount);
        }
        publicvoid Account(int balance, int payday)
        {
            amount += balance;
            Console.WriteLine("今天是本月的{0},取款{1},储蓄卡余额为{2}", DateTime.Today.Day + 8, balance, amount);
        }
    }

    class CreditCard
    {
        privateint billamount;
        privateint repaymentday;

        publicCreditCard(int billamount, int repaymentday)
        {
            this.billamount = billamount;
            this.repaymentday = repaymentday;
        }

        publicint getbillamount() { return billamount; }

        publicint getrepaymentday() { return repaymentday; }

        publicvoid Display() { Console.WriteLine("信用卡余额为:{0}", billamount); }


    }

    class CreditCardDelegate
    {
        publicint billamount;
        publicint repaymentday;
        publicdelegatevoidMydelegate(int billamount, int repaymentday);//委托
        publicevent Mydelegate My_event;//定义事件
        publicvoid Notify()//判断是否需要还款
        {
            if (DateTime.Today.Day + 8 == repaymentday)
            {

                My_event(billamount, repaymentday);
            }
            else
            {
                Console.WriteLine("未到还款日期");
            }
        }


    }
    class Program
    {
        staticvoid Main(string[] args)
        {
            Console.OutputEncoding = Encoding.GetEncoding("utf-8");
            DepositCard depositCard = new DepositCard();
            depositCard.amount = 10000;
            CreditCard creditCard1 = new CreditCard(-2000, 9);
            CreditCard creditCard2 = new CreditCard(-3000, 13);
            CreditCard creditCard3 = new CreditCard(-5000, 29);//3张信用卡
            depositCard.Display(); Console.WriteLine("");
            List<CreditCard> Cards = new List<CreditCard>();
            Cards.Add(creditCard1); Cards.Add(creditCard2); Cards.Add(creditCard3);

            foreach (CreditCard card in Cards)
            {
                Console.WriteLine("信用卡开始执行委托还款。。。。。。");
                CreditCardDelegate delegate1 = new CreditCardDelegate();//定义对象
                delegate1.billamount = card.getbillamount();
                delegate1.repaymentday = card.getrepaymentday();//传值
                delegate1.My_event += new CreditCardDelegate.Mydelegate(depositCard.Account);
                delegate1.Notify();
                Console.WriteLine("");
            }
            Console.ReadLine();
        }
    }
}
  1. 运行结果:

  1. 总结:

委托像是赋予对象调用方法的时间,不改动方法。对于委托,程序此时调 A 就只能调 A,彼时调 B 只能调 B,不像接口内函数,随时调用,委托保护了一些安全性要求高的方法。事件常与委托搭配使用,完成对不同对象进行信息传递。上述银行主动划款程序仍然存在不足,信用卡类开放的某些函数,存在不安全性。通过本次作业,对事件与委托有了一定了解,由于对事件委托不熟悉,导致花费了大量的时间。

  1. gitee源码:

https://gitee.com/hubei-university_6_0/credit-card-payment-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值