程序设计题:请使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
源代码:
using System;
namespace WindowsFormsApplication2
{
class Depositcard //储蓄卡
{
public string name;
public int number; //账户
public int debt; //还款
public int balance; //余额
public int date;
public Depositcard(string name, int number, int balance, int debt, int date)
{
this.name = name;
this.number = number;
this.debt = debt;
this.balance = balance;
this.date = date;
}
}
class Delegate //委托
{
public delegate void MeDelegate(Depositcard c2);
public event MeDelegate Remind;
public event MeDelegate Pay;
public void remind(Depositcard c2)
{
if (Remind != null)
Remind(c2);
}
public void pay(Depositcard c2)
{
if (Pay != null)
Pay(c2);
}
}
class Credit //信用卡
{
static public void remind(Depositcard c2)
{
Console.WriteLine("用户{0}:未到还款日期,无需还款。\n", c2.name);
}
static public void payfor(Depositcard c2)
{
if (c2.debt > c2.balance)
Console.WriteLine("用户{0}:账户为{1},需还款{2},余额不足,余额为{3}", c2.name, c2.number, c2.debt, c2.balance);
else
Console.WriteLine("用户{0}:账户为{1},需还款{2},余额为{3},还款后余{4}\n", c2.name, c2.number, c2.debt, c2.balance, c2.balance - c2.debt);
}
}
class program
{
static void Main(string[] args)
{
Delegate d1 = new Delegate();
Delegate d2 = new Delegate();
Credit c1 = new Credit();
Depositcard c2 = new Depositcard("a", 55555, 5000, 100, 2);
Depositcard c3 = new Depositcard("b", 77777, 20000, 4000, 10);
d1.Remind += new Delegate.MeDelegate(Credit.remind);
d2.Pay += new Delegate.MeDelegate(Credit.payfor);
for (int i = 1; i <= 30; i++)
{
if (c2.date - i == 1)
d1.remind(c2);
if (c3.date - i == 1)
d2.remind(c3);
if (i == c2.date)
d1.pay(c2);
if (i == c3.date)
d2.pay(c3);
}
}
}
}
结果: