一、功能说明
信用卡还款是银行系统的重要业务,业务流程说明如下:
用户有信用卡和储蓄卡,储蓄卡有查询余额和取款功能,信用卡能够查看账单金额、查看还款日和查看余额三个功能;
请使用委托与事件实现下列功能:用户可自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣;
请注意事件主要是设计什么时候启动委托,委托的主要目的是设置还款的储蓄卡
二、设计流程
首先,创建一个储蓄卡类和信用卡类;
其次,设定还款的委托,检测是否到达还款日,以便进行还款;
最后,当到达还款日时,用户设置关联的储蓄卡进行还款,还款后显示余额。
三、关键源码展示
定义储蓄卡类
建立一个DepositCard类(储蓄卡),存放用户卡中的金额。若储蓄卡余额不足以还款信用卡,则显示还款失败,否则显示还款成功并输出还款金额及储蓄卡余额。
class DepositCard
{
public int amount;
public void Display()
{
Console.WriteLine("储蓄卡余额:{0}", amount);
}
public void Account(int balance, int payday, CreditCard a)
{
if (amount < Math.Abs(a.getbillamount()))
{
Console.WriteLine("余额不足,还款失败!");
return;
}
amount += balance;
Console.WriteLine("还款成功!");
Console.WriteLine("今天是本月{0}日,取款{1},储蓄卡余额为:{2}", DateTime.Today.Day, balance, amount);
}
}
定义信用卡类
建立一个CreditCard类(信用卡),显示账单金额,还款日期以及卡内余额。
class CreditCard
{
private int billamount;
private int repaymentday;
public CreditCard(int billamount,int repaymentday)
{
this.billamount = billamount;
this.repaymentday = repaymentday;
}
public int getbillamount() { return billamount; }
public int getrepaymentday() { return repaymentday; }
public void Display() {
Console.WriteLine("信用卡余额为:{0}", billamount); }
}
定义信用卡委托与事件
定义一个CreditCardDelegate委托类,在里面定义一个委托并提醒还款事件,同时定义一个函数Notify触发事件。
class CreditCardDelegate
{
public int billamount;
public int repaymentday;
public CreditCard a;
public delegate void call(int balance, int payday, CreditCard a);
public event call Myevent;
public void notify()
{
if (DateTime.Today.Day == repaymentday) { Myevent(billamount, repaymentday, a); }
else
Console.WriteLine("未到还款日!");
}
}
主函数
通过委托订阅需要传参数的事件,将对应信用卡的金额和日期赋值给委托的储蓄卡以达到传参的目的。
class Program
{
static void Main(string[] args)
{
DepositCard depositCard1 = new DepositCard();
depositCard1.amount = 10000;
DepositCard depositCard2 = new DepositCard ();
depositCard2.amount = 1000;
DepositCard[] depositCards = new DepositCard[2];
depositCards[0] = depositCard1;
depositCards[1] = depositCard2;
depositCards[0].Display();
depositCards[1].Display();
Console.WriteLine(" ");
CreditCard creditCard1 = new CreditCard(-2000,13);
CreditCard creditCard2 = new CreditCard(-3000, 9);
CreditCard creditCard3 = new CreditCard(-5000, 29);
List<CreditCard>Cards = new List<CreditCard>();
Cards.Add(creditCard1);
Cards.Add(creditCard2);
Cards.Add(creditCard3);
int num = 0;
foreach(CreditCard card in Cards)
{
Console.WriteLine("信用卡开始执行委托还款。。。。。。");
CreditCardDelegate mydelegate= new CreditCardDelegate();
mydelegate.billamount=card.getbillamount();
mydelegate.repaymentday=card.getrepaymentday();
mydelegate.a = card;
do
{
Console.WriteLine("请输入储蓄卡序号:");
String cardnum = Console.ReadLine();
num = Convert.ToInt32(cardnum);
}while(num < 0 || num >2);
mydelegate.Myevent += new CreditCardDelegate.call(depositCards[num - 1].Account);
mydelegate.notify();
depositCards[num - 1].Display();
Console.WriteLine(" ");
}
}
}
结果截图
![](https://i-blog.csdnimg.cn/blog_migrate/39a0f423bc581cc56946136671f5bd64.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4505576b17e1db7d4c45365a241bcd67.png)
四、总结
关联其他银行卡还款:是指为信用卡绑定同行的借记卡进行还款。绑定成功后,银行在每月的还款日自动从绑定的借记卡中扣钱进行还款,只要保证每月借记卡中的钱有足够的余额能还清上个账单期中的借款,就可以了,这种方式方便、高效,而且不用自己操心逾期的事,是当下很多信用卡用户的选择。
本次作业名义上是委托与事件,实际上是一个传值问题。由用户选择哪一张储蓄卡与信用卡绑定,而后信用卡将账单金额传值给储蓄卡,储蓄卡自动扣钱还款。