功能说明:用委托与事件实现用户自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣。
设计流程:通过定义各类,并使用c#委托与事件实现定时自动从用户的信用卡中扣款还款的功能。
关键源码展示:
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();
}
}
}
运行结果:
总结:
委托像是赋予对象调用方法的时间,不改动方法。对于委托,程序此时调 A 就只能调 A,彼时调 B 只能调 B,不像接口内函数,随时调用,委托保护了一些安全性要求高的方法。事件常与委托搭配使用,完成对不同对象进行信息传递。上述银行主动划款程序仍然存在不足,信用卡类开放的某些函数,存在不安全性。通过本次作业,对事件与委托有了一定了解,由于对事件委托不熟悉,导致花费了大量的时间。
gitee源码: