本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace work_bank
{
//信用卡
class CreditCard
{
public double Availablecredits; //可用额度
public double consumption; //月消费额
public CreditCard() { }
public CreditCard(double A)
{
Availablecredits = A;
}
//信用卡消费
public void consume(double money)
{
if (money > Availablecredits)
{
Console.WriteLine("信用卡的额度不足。");
return;
}
consumption = money;
Availablecredits -= money;
Console.WriteLine("本月的消费为:" + money);
}
}
abstract class DepositCard
{
public double banlance;
public void repay(double money)
{
if (money <= banlance)
{
banlance -= money;
return;
}
Console.WriteLine("余额不足");
}
}
class bank1 : DepositCard
{
public bank1() { }
public bank1(double money)
{ banlance = money; }
}
class bank2 : DepositCard
{
public bank2() { }
public bank2(double money)
{ banlance = money; }
}
class User
{
public CreditCard creditCard;
public DepositCard[] depositCards;
public void userconsume(double money)
{
creditCard.consume(money);
}
public void userrepay(int cid)
{
double money = creditCard.consumption;
depositCards[cid].repay(money);
creditCard.Availablecredits += money;
}
}
class Delegate
{
public delegate void MyDelegate(int cid);
public event MyDelegate Repayment;
public void RepaymentDay(int cid)
{
if (Repayment != null)
{
Console.WriteLine("还款的日子到了");
Repayment(cid);
}
else
{
Console.WriteLine("请选择需要用于还款的储蓄卡");
}
}
}
class Program
{
[STAThread]
static void Main(string[] args)
{
//创建用户以及银行卡
DepositCard[] dcards = new DepositCard[2];
dcards[0] = new bank1(2000);
dcards[1] = new bank2(1000);
Console.WriteLine("card0 初始金额" + dcards[0].banlance);
Console.WriteLine("card1 初始金额" + dcards[1].banlance);
User user = new User();
user.creditCard = new CreditCard(3000);
user.depositCards = dcards;
Console.WriteLine();
//委托还款事件
Delegate ss = new Delegate();
ss.Repayment += new Delegate.MyDelegate(user.userrepay);
user.userconsume(1000);
ss.RepaymentDay(0);
Console.WriteLine("card1剩余金额" + dcards[0].banlance);
Console.WriteLine();
user.userconsume(3000);
ss.RepaymentDay(1);
Console.WriteLine("card2剩余金额" + dcards[1].banlance);
Console.WriteLine();
user.userconsume(9999);
}
}
}
Git地址:https://gitee.com/wang-yisha/windows.git