题目:
信用卡还款是银行系统的重要业务,业务流程说明如下:
- 用户有信用卡和储蓄卡,储蓄卡有查询余额和取款功能,信用卡能够查看账单金额、查看还款日和查看余额三个功能;
- 请使用委托与事件实现下列功能:用户可自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣;
- 请注意事件主要是设计什么时候启动委托,委托的主要目的是设置还款的储蓄卡
- 为避免设计出现偏差,给出了部分功能代码,请在此基础上进行开发。
一、设计流程
第一步,先创建一个储蓄卡类,信用卡类;
第二步,设定还款事件,即银行每天查询今天是否是还款日,方便后续还款操作的正确进行;
第三步,当今天是还款日时,所有委托了该事件的用户,会向银行进行还款操作,即用户会从他的银行卡划款至信用卡进行还款。
二、核心代码和功能说明
1.储蓄卡类
class DepositCard
{
private string name; //储蓄名
public int amount; //储蓄余额
public DepositCard(string name, int amount)
{
this.name = name;
this.amount = amount;
}
public void setmoney(int m)
{
this.amount = m;
Console.WriteLine("储蓄卡余额为:{0}", m);
}
public int getdespositcardmoney()
{
return this.amount;
}
public void Account(int balance, int payday)
{
amount += balance;
Console.WriteLine("今天是本月的{0},取款{1},储蓄卡余额为:{2}。", DateTime.Today.Day, balance, amount);
}
}
2.信用卡类
class CreditCard
{
private string name; //信用卡拥有者名字
private int billamount; //余额
private int repaymentday; //还款日
private DepositCard DC; //绑定储蓄卡对象
public CreditCard(string name,int billamount, int repaymentday,DepositCard DC)
{
this.name = name;
this.billamount = billamount;
this.repaymentday = repaymentday;
this.DC = DC;
}
public int getbillamount() { return billamount; }
public int getrepaymentday() { return repaymentday; }
//还款
public void repay()
{
Console.WriteLine("用户:{0},当前余额为:{1}", name,DC.getdespositcardmoney());
DC.setmoney(this.DC.getdespositcardmoney()+billamount);
Console.WriteLine("用户已还款");
Console.WriteLine("还款金额:{0}", Math.Abs(billamount));
Console.WriteLine("余下金额:{0}",DC.getdespositcardmoney());
Console.WriteLine();
}
//无需还款
public void norepay()
{
Console.WriteLine("用户:{0},当前金额:{1}",name,DC.getdespositcardmoney());
Console.WriteLine("未到还款日期,无需还款",name);
Console.WriteLine();
}
}
3.委托类
//信用卡扣款委托类
class CreditCardDelegate
{
//扣款委托
public delegate void repay();
//扣款事件
public event repay dorepay;
//事件执行
public void notify()
{
if(dorepay!= null)
{
Console.WriteLine("触发事件!");
Console.WriteLine("信用卡开始执行委托还款。。。。。。");
dorepay();
}
}
}
4.主程序
class Program
{
static void Main(string[] args)
{
DepositCard d1 = new DepositCard("七彩猫",10000);
DepositCard d2 = new DepositCard("露露", 10000);
DepositCard d3 = new DepositCard("撸sir", 10000);
CreditCard c1 = new CreditCard("七彩猫",-2000, 4,d1);
CreditCard c2 = new CreditCard("露露",-3000, 13,d2);
CreditCard c3 = new CreditCard("撸sir",-5000, 29,d3);
List<CreditCard> Cards = new List<CreditCard>();
Cards.Add(c1);
Cards.Add(c2);
Cards.Add(c3);
//创建委托对象
CreditCardDelegate CD = new CreditCardDelegate();
foreach (CreditCard card in Cards)
{
//判断是否到达还款日期
if (card.getrepaymentday() == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split("-")[2]))
{
//事件添加
CD.dorepay += new CreditCardDelegate.repay(card.repay);
}
else
{
CD.dorepay += new CreditCardDelegate.repay(card.norepay);
}
}
//事件执行
CD.notify();
Console.WriteLine("");
}
}
}
三、结果截图
四、总结
本次实验是需要用委托和事件实现银行信用卡还款功能,委托和事件是本次课程新学习到的知识点,我掌握的不是很熟练,比较生疏。这次作业通过PPT、老师的讲解、同学的帮助,并在我参考一些资料后成功完成了,通过这次作业我也对委托和事件的含义及其在现实生活中的应用理解的更透彻了。委托和事件的应用非常灵活,我还需要多练习一些题目,真正熟练的掌握它们。
五、源码地址
https://gitee.com/spicy-glutinous-roll-cat/windows-job-w.git