功能说明:
用户有信用卡和储蓄卡,储蓄卡有查询余额和取款功能,信用卡能够查看账单余额、还款日、余额。使用委托与事件,用户自由设置与信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣。
设计流程:
分析题目可知,该程序大致需要包含四个部分:信用卡类,储蓄卡类,委托与事件的类以及主函数。首先设计储蓄卡类,包含了获取储蓄卡的余额,储蓄卡进行还款两个方法;然后设计信用卡类,包含了获取信用卡还款金额、信用卡还款日期两个方法;再然后设计委托与事件的类,主要包含创建委托去调用储蓄卡的还款方法以及当还款日期到是,触发事件,进行还款;最后通过主函数来实现整体功能。
关键代码展示
using static ConsoleApplication3delegate.CreditCardDelegate;
namespace ConsoleApplication3delegate
{
class DepositCard //储蓄卡
{
public int amount;//储蓄卡余额
public void Display() //获取储蓄卡的余额
{
Console.WriteLine("储蓄卡余额为:{0}", amount);
}
public void Account(int balance, int payday) //储蓄卡进行还款
{
amount += balance;
if(amount<0)
Console.WriteLine("储蓄卡余额不足,还款失败");
else
Console.WriteLine("今天是本月的第{0}天,取款{1}元,储蓄卡余额为{2}元。",DateTime.Today.Day, balance, amount);
}
}
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); }
}
class CreditCardDelegate //事件与委托
{
public int billamount; //还款金额
public int repaymentday; //还款日期
public delegate void call(int billamount, int repaymentday);//创建委托去调用储蓄卡的还款方法
public event call Paymoney; //事件
public void Notify()
{
if (DateTime.Today.Day == repaymentday) { Paymoney(billamount, repaymentday); }//到还款日期时,触发事件,调用储蓄卡的还款方法
else { Console.WriteLine("未到还款日"); }
}
}
class Program
{
static void Main(string[] args)
{
DepositCard depositCard = new DepositCard();
depositCard.amount = 10000;
CreditCard creditCard1 = new CreditCard(-2000, 5);
CreditCard creditCard2 = new CreditCard(-3000, 4);
CreditCard creditCard3 = new CreditCard(-6000, 28);
depositCard.Display(); Console.WriteLine("");
List<CreditCard> Cards = new List<CreditCard>();
Cards.Add(creditCard1); Cards.Add(creditCard2); Cards.Add(creditCard3);
int i = 0;
foreach (CreditCard card in Cards)
{
Console.WriteLine("信用卡开始执行委托还款。。。。。。");
Console.Write("信用卡{0}, ",i++);
card.Display();
CreditCardDelegate credelegate ; //创建一个对象并初始化
credelegate = new CreditCardDelegate();
credelegate.billamount = card.getbillamount(); //获取信用卡还款金额和还款日期
credelegate.repaymentday = card.getrepaymentday();
credelegate.Paymoney += new CreditCardDelegate.call(depositCard.Account);//订阅
credelegate.Notify();
Console.WriteLine("\n");
}
Console.ReadLine();
}
}
}
总结
通过这次的作业,我对委托与事件的学习又更近了一步。我认为此次作业的主要思想就是:当还款日到期时,触发事件,然后订阅事件的委托就会通过对象调用储蓄卡的还款方法,实现还款日到期时,储蓄卡自动还款功能。