用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
①使用委托②事件的触发方式是每个月的到期还款日;
class Depositcard
{
private string name;//储蓄用户名
private int depositmoney;//储蓄金额
public Depositcard(string name, int money)
{
this.name = name;
this.depositmoney = money;
}
//获取储蓄金额
public int getDepositMoney()
{
return this.depositmoney;
}
public void setDepositMoney(int h)
{
this.depositmoney = h;
}
}
class Creditcard
{
public string name; //信用卡持有者名称
public int creditmoney; //信用卡余额
public int dueday;//扣款日期
public Depositcard obj;//绑定储蓄卡对象
//初始化
public Creditcard(string name, int cm, int dd, Depositcard obj)
{
this.name = name;
this.creditmoney = cm;
this.dueday = dd;
this.obj = obj;
}
//还款
public void repaymoeny()
{
Console.WriteLine("{0}先生(女士),您好!您的银行卡当前金额{1}", this.name, this.obj.getDepositMoney());
obj.setDepositMoney(this.obj.getDepositMoney() + creditmoney);
Console.WriteLine("您已还款");
Console.WriteLine("还款金额:{0}", Math.Abs(this.creditmoney));
Console.WriteLine("账户余额{0}", obj.getDepositMoney());
Console.WriteLine();
}
//无需还款
public void norepaymoeny()
{
Console.WriteLine("{0}先生(女士),您好!您的银行卡当前金额{1}", this.name,this.obj.getDepositMoney());
Console.WriteLine("未到还款日期,您无需还款", this.name);
Console.WriteLine();
}
}
class repayDelegate
{
public delegate void repayMoney();//扣款委托
public event repayMoney Repay;//扣款事件
public void NotifyRepay()//事件执行
{
if (Repay != null)
{
Console.WriteLine("触发事件!");
Repay();
}
}
}
测试类:
Creditcard C1 = new Creditcard("A", -2000, 1, D1);
Creditcard C2 = new Creditcard("B", -300, 15, D2);
Creditcard C3 = new Creditcard("C", -4000, 1, D3);
Creditcard[] CreditCards = new Creditcard[3];
CreditCards[0] = C1;
CreditCards[1] = C2;
CreditCards[2] = C3;
repayDelegate rD = new repayDelegate();
foreach (Creditcard C in CreditCards)
{
//判断是否到了该还款的日期(假定还款日期为每月的1号)
if (C.dueday == 1)
{
//事件添加
rD.Repay += new repayDelegate.repayMoney(C.repaymoeny);
}
else
{
rD.Repay += new repayDelegate.repayMoney(C.norepaymoeny);
}
}
//事件执行
rD.NotifyRepay();
Console.ReadKey();
}
}