用委托实现信用卡还款
前言
委托是一种可以指向方法的引用,可以理解为一种函数指针,使用委托需要三个步骤:声明委托类型、创建委托实例、向委托实例注册方法。
信用卡还款
1.功能说明
用委托、事件等特性实现信用卡还款功能,由银行根据账户设定的还款日期主动扣款,输出信息显示账户原额、负债钱数、扣款后账户余额及还款日期。2.设计思想
信用卡账户作为委托对象,账户订阅定期还款事件。到还款日期,则触发事件,否则提示未到还款日期。下列程序,主要判断发起还款动作时,是否满足还款条件,所以导入系统时间。3.核心代码
定义一个信用卡类,包括姓名、账户余额、债务钱数、还款日期,并改写构造函数。
class Deposit
{
//定义还款人信息
private string name;
private double account;
private double debet;
private string paytime;
public Deposit(string nam,double a,double d,string p)
{
name = nam;
account = a;
debet = d;
paytime= p;
}
public double Subm()
{
account = account - debet;
return account;
}
public string get_name()
{ return name; }
public double get_account()
{ return account; }
public double get_debet()
{ return debet; }
public string get_paytime()
{ return paytime; }
}
定义一个银行类,包含一系列扣款动作及提示信息
class Bank
{
public void paydebet(Deposit d)
{
double a = d.get_account();
double de = d.get_debet();
if(a-de>=0)
Console.WriteLine("{0},原卡余额{1}元,负债{2}元,本次还款{3}元,现余额{4}元,还款时间{5}",d.get_name(),a,de,de,d.Subm(),d.get_paytime());
else
Console.WriteLine("{0},原卡余额{1}元,负债{2}元,本次还款{3}元,仍负债,还款时间{4}", d.get_name(), a,de,a,d.get_paytime());
}
}
定义一个委托类,包含委托、事件及事件触发条件
class Delegate
{
//定义委托
public delegate void MeDelegate(Deposit d);
//定义事件
public event MeDelegate SubMoney;
public void Sub(Deposit d)
{
//如果事件不为空
if (SubMoney != null)
{
Console.WriteLine("进入还款流程");
SubMoney(d);
}
else
{
Console.WriteLine("还款日期为{0}", d.get_paytime());
Console.WriteLine("今天是{0},未到还款时间", DateTime.Now.ToString("yyyy/MM/dd"));
}
}
}
主函数中实现委托的实例化,并赋予事件
static void Main(string[] args)
{
Delegate m1 = new Delegate();
Deposit d1 = new Deposit("lisa",5000,6000,"2021/04/07");
Bank c1 = new Bank();
if (d1.get_paytime() == DateTime.Now.ToString("yyyy/MM/dd"))
m1.SubMoney += c1.paydebet;
m1.Sub(d1);
}
4.结果截图
测试用例:
姓名 账户余额 负债 还款日期
1.“lisa”,5000, 6000,“2021/04/07”
2.“lisa”,5000,6000,“2021/04/08”
3.“lisa”,5000,4000,“2021/04/07”
第一种情况
第二种情况
第三种情况