使用C#委托事件实现信用卡用户定时还款功能
问题
使用C#委托事件实现信用卡用户定时还款功能
问题分析
1.信用卡可以先消费后还款,储蓄卡是先存款后消费
2.使用C#的委托功能
3.分成4个模块来设计,分别是储蓄卡类、信用卡类、还款委托类,以及最后导入、显示结果的主程序类。
4.信用卡类将与储蓄卡类绑定,若还款时直接通过信用卡从储蓄卡里扣除。
5.不考虑信用卡扣款时,储蓄卡出现余额不足的情况。
核心代码及功能说明
还款委托类
class RepayDelegate
{
//扣款委托
public delegate void RepayMoney();
//扣款事件
public event RepayMoney Repay;
//事件执行
public void RequestRepay()
{
if (Repay != null)
{
// 触发事件
Repay();
}
}
}
储蓄卡类
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 NowMoney)
{
this.DepositMoney = NowMoney;
}
}
信用卡类
class CreditCard
{
//信用卡持有者名称
public string Name;
//信用卡余额
public int CreditMoney;
//扣款日期
public int DiedLine;
//绑定储蓄卡对象
public DepositCard DC;
public CreditCard(string Name, int CreditMoney, int DiedLine, DepositCard DC)
{
this.Name = Name;
this.CreditMoney = Math.Abs(CreditMoney);
this.DiedLine = DiedLine;
this.DC = DC;
}
//需要还款
public void RepayMoney()
{
Console.WriteLine("用户{0},还款日即将到来,请注意本次共需还款{1}元!", this.Name, this.CreditMoney);
Console.WriteLine("用户{0}当前金额{1},请注意还款。", this.Name, this.DC.GetDepositMoney());
DC.SetDepositMoney(this.DC.GetDepositMoney() - CreditMoney);
Console.WriteLine("用户已还款{0}元,现在您的储蓄卡余额为{1}", this.CreditMoney, DC.GetDepositMoney());
Console.WriteLine();
}
//无需还款
public void NonRepayMoney()
{
Console.WriteLine("用户{0},未到还款日期,无需还款。", this.Name);
Console.WriteLine("当前余额为{0}。", this.DC.GetDepositMoney());
Console.WriteLine();
}
}
主程序类
class Program
{
static void Main(string[] args)
{
DepositCard D1 = new DepositCard("王小明", 10000);
DepositCard D2 = new DepositCard("张小红", 10000);
DepositCard D3 = new DepositCard("李小梅", 10000);
DepositCard D4 = new DepositCard("赵小壮", 10000);
CreditCard C1 = new CreditCard("王小明", -1000, 7, D1);
CreditCard C2 = new CreditCard("张小红", -3000, 15, D2);
CreditCard C3 = new CreditCard("李小梅", -5000, 5, D3);
CreditCard C4 = new CreditCard("赵小壮", -7000, 5, D4);
CreditCard[] CreditCards = new CreditCard[4];
CreditCards[0] = C1;
CreditCards[1] = C2;
CreditCards[2] = C3;
CreditCards[3] = C4;
//创建委托对象
RepayDelegate RD = new RepayDelegate();
foreach (CreditCard C in CreditCards)
{
//判断是否到了该还款的日期
if (C.DiedLine == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
{
//事件添加
RD.Repay += new RepayDelegate.RepayMoney(C.RepayMoney);
}
else
{
RD.Repay += new RepayDelegate.RepayMoney(C.NonRepayMoney);
}
}
//事件执行
RD.RequestRepay();
}
}
DateTime.Now.ToString(“yyyy-MM-dd”)获取当前的年月日
DateTime.Now.ToString(“yyyy-MM-dd”).Split(’-’)[2]将当前的日期的天数号数通过切割字符串求出
结果截图
学习心得体会
C#引入委托机制后,使得方法声明和方法实现的分离事件是类在发生其关注的事情时用来提供通知的一种方式。
学习重点
创建委托对象
判断是否到了该还款的日期
事件添加 事件执行