问题分析
使用C#的委托功能 拥有信用卡类、储蓄卡类、还款委托类 信用卡类将绑定储蓄卡类,若信用卡需要还款,则从储蓄卡里取 还款则可以视为事件
代码实现
储蓄卡类
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 r)
{
this . depositMoney = r;
}
}
信用卡类
class creditCard
{
public string name;
public int creditMoney;
public int dueDay;
public depositCard DC;
public creditCard ( string name, int CM, int DD, depositCard DC)
{
this . name = name;
this . creditMoney = CM;
this . dueDay = DD;
this . DC = DC;
}
public void repayM ( )
{
Console. WriteLine ( "用户{0}当前金额{1}" , this . name, this . DC. getDepositMoney ( ) ) ;
DC. setDepositMoney ( this . DC. getDepositMoney ( ) + creditMoney) ;
Console. WriteLine ( "用户已还款" ) ;
Console. WriteLine ( "还款金额:{0}" , Math. Abs ( this . creditMoney) ) ;
Console. WriteLine ( "余下金额为{0}" , DC. getDepositMoney ( ) ) ;
Console. WriteLine ( ) ;
}
public void norepayM ( )
{
Console. WriteLine ( "用户{0}当前金额{1}" , this . name, this . DC. getDepositMoney ( ) ) ;
Console. WriteLine ( "用户未到还款日期,无需还款" , this . name) ;
Console. WriteLine ( ) ;
}
}
扣款委托类
class repayDelegate
{
public delegate void repayMoney ( ) ;
public event repayMoney DoRepay;
public void NotifyRepay ( )
{
if ( DoRepay != null )
{
Console. WriteLine ( "触发事件:" ) ;
DoRepay ( ) ;
}
}
}
主程序入口
class Program
{
static void Main ( string [ ] args)
{
depositCard D1 = new depositCard ( "张三" , 10000 ) ;
depositCard D2 = new depositCard ( "李四" , 10000 ) ;
depositCard D3 = new depositCard ( "王五" , 10000 ) ;
creditCard C1 = new creditCard ( "张三" , - 5000 , 31 , D1) ;
creditCard C2 = new creditCard ( "李四" , - 3000 , 31 , D2) ;
creditCard C3 = new creditCard ( "王五" , - 1000 , 20 , D3) ;
List< creditCard> cCards = new List < creditCard> ( ) ;
cCards. Add ( C1) ;
cCards. Add ( C2) ;
cCards. Add ( C3) ;
repayDelegate rD = new repayDelegate ( ) ;
foreach ( creditCard C in cCards)
{
if ( C. dueDay == int . Parse ( DateTime. Now. ToString ( "yyyy-MM-dd" ) . Split ( '-' ) [ 2 ] ) )
{
rD. DoRepay + = new repayDelegate. repayMoney ( C. repayM) ;
}
else
{
rD. DoRepay + = new repayDelegate. repayMoney ( C. norepayM) ;
}
}
rD. NotifyRepay ( ) ;
}
}
}
结果样例
仓库地址
https://gitee.com/lazy_lazy_tang_lan/my-programming