class DepositCard
{
public int amount;
public void Display()
{
Console.WriteLine("储蓄卡余额为:{0}", amount);
}
public void Account(int balance, int payday)
{
amount += balance;
Console.WriteLine("今天是本月的{0},取款{1},储蓄卡余额为:{2}。", DateTime.Today.Day, balance, amount);
}
}
储蓄卡类
display功能展示储蓄卡剩余的钱
这个原始设置的Account砍起来是存钱的意思? 但为什么和代码输出不相符 与作业无关未做修改
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 repayment(DepositCard card)
{
card.amount += this.billamount;
}
public void Display() { Console.WriteLine("信用卡余额为:{0}", billamount); }
}
信用卡类
在类里添加了一个repayment方法,用于委托
方法用于直接减少传入对象剩余额
class CreditCardDelegate
{
public int billamount;
public int repaymentday;
public delegate void MeDelegate(DepositCard n);
public event MeDelegate NotifyEvent;
public void Notify(DepositCard n)
{
if (NotifyEvent != null)
{
Console.WriteLine("信用卡还款成功");
NotifyEvent(n);
Console.WriteLine("还款后储蓄卡剩余" + n.amount+"元");
}
}
建立委托类
创建委托方法Notify 对事件进行检查 如果委托事件已经添加 那么将执行委托事件
class Program
{
static void Main(string[] args)
{
CreditCardDelegate objDelegate = new CreditCardDelegate();
DepositCard depositCard = new DepositCard();
depositCard.amount = 10000;
CreditCard creditCard1 = new CreditCard(-2000, 9);
CreditCard creditCard2 = new CreditCard(-3000, 13);
CreditCard creditCard3 = new CreditCard(-5000, 29);
depositCard.Display();
Console.WriteLine("今天是" + DateTime.Today.Day);
List<CreditCard> Cards = new List<CreditCard>();
Cards.Add(creditCard1);
Cards.Add(creditCard2);
Cards.Add(creditCard3);
Console.WriteLine();
foreach (CreditCard c in Cards)
{
Console.WriteLine("信用卡开始执行委托还款,请选择要绑定的储蓄卡");
string carChoose = Console.ReadLine();
Console.WriteLine("绑定卡"+ carChoose + "成功");
int repayday = c.getrepaymentday();
if(repayday == DateTime.Today.Day)
{
objDelegate.NotifyEvent += new CreditCardDelegate.MeDelegate(c.repayment);
}
else
{
Console.WriteLine("您信用卡的还款日为" + repayday + "未到还款日,无需还款");
depositCard.Display();
}
}
objDelegate.Notify(depositCard);
Console.ReadLine();
}
主函数体
通过循环的方式把每张卡挂靠上选择的储蓄卡
最后通过添加调用Notify方法启动扣钱
实验心得:通过本次实验写代码的过程中,能够理解了委托与事件的定义与使用方法,但通过代码和流程描述可以看出整个代码的业务逻辑还存在很大的问题... 比如说并没有解决自动扣款问题,如何解决日期问题?仅仅是将事件和方法进行了委托并进行了调用,具体的问题没有想到好的解决方法...
希望在听完老师的讲解后能有所优化。
总代码如下
namespace ConsoleApplication3delegate
{
class DepositCard
{
public int amount;
public void Display()
{
Console.WriteLine("储蓄卡余额为:{0}", amount);
}
public void Account(int balance, int payday)
{
amount += balance;
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 repayment(DepositCard card)
{
card.amount += this.billamount;
}
public void Display() { Console.WriteLine("信用卡余额为:{0}", billamount); }
}
class CreditCardDelegate
{
public int billamount;
public int repaymentday;
public delegate void MeDelegate(DepositCard n);
public event MeDelegate NotifyEvent;
public void Notify(DepositCard n)
{
if (NotifyEvent != null)
{
Console.WriteLine("信用卡还款成功");
NotifyEvent(n);
Console.WriteLine("还款后储蓄卡剩余" + n.amount+"元");
}
}
}
class Program
{
static void Main(string[] args)
{
CreditCardDelegate objDelegate = new CreditCardDelegate();
DepositCard depositCard = new DepositCard();
depositCard.amount = 10000;
CreditCard creditCard1 = new CreditCard(-2000, 9);
CreditCard creditCard2 = new CreditCard(-3000, 13);
CreditCard creditCard3 = new CreditCard(-5000, 29);
depositCard.Display();
Console.WriteLine("今天是" + DateTime.Today.Day);
List<CreditCard> Cards = new List<CreditCard>();
Cards.Add(creditCard1);
Cards.Add(creditCard2);
Cards.Add(creditCard3);
Console.WriteLine();
foreach (CreditCard c in Cards)
{
Console.WriteLine("信用卡开始执行委托还款,请选择要绑定的储蓄卡");
string carChoose = Console.ReadLine();
Console.WriteLine("绑定卡"+ carChoose + "成功");
int repayday = c.getrepaymentday();
if(repayday == DateTime.Today.Day)
{
objDelegate.NotifyEvent += new CreditCardDelegate.MeDelegate(c.repayment);
}
else
{
Console.WriteLine("您信用卡的还款日为" + repayday + "未到还款日,无需还款");
depositCard.Display();
}
objDelegate.Notify(depositCard);
}
Console.ReadLine();
}
private static void ObjDelegate_NotifyEvent()
{
throw new NotImplementedException();
}
}
}
将今天的日期该为13号后 执行结果如下