一、题目描述
用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日
二、代码
1.定义一个信用卡类
初始化还款人的基本信息:姓名、还款金额、还款时间
class CREposit
{
//定义还款人信息
private string name;private double debet;private string paytime;
public CREposit(string nam, double d, string p)
{
name = nam;debet = d;paytime = p;
}
public string get_name()
{ return name; }
public double get_debet()
{ return debet; }
public string get_paytime()
{ return paytime; }
}
2.定义多个储蓄卡类(这里以三张储蓄卡为例)
卡类都存有一定的金额,若金额足够可以显示扣款后的余额、还款金额、还款时间;若金额不够,则扣款失败
class DEposit1
{
private double account;//设置储蓄卡余额
public void paydebet(CREposit d)
{
account = 5000;
double de = d.get_debet();//获取信用卡还款数
double re = account - de;//设置与还款数
if (re>= 0)
Console.WriteLine("{0},储蓄卡1余额{1}元,本次还款{2}元,现余额{3}元,还款时间{4}", d.get_name(), account, de, re, d.get_paytime());
else
Console.WriteLine("储蓄卡1余额不足,请更换储蓄卡!");
}
}
//以下两类同上
class DEposit2
{
private double account;
public void paydebet(CREposit d)
{
account = 10000;
double de = d.get_debet();
double re = account - de;
if ( re>= 0)
Console.WriteLine("{0},储蓄卡2余额{1}元,本次还款{2}元,现余额{3}元,还款时间{4}", d.get_name(), account, de,re, d.get_paytime());
else
Console.WriteLine("储蓄卡2余额不足,请更换储蓄卡!");
}
}
class DEposit3
{
private double account;
public void paydebet(CREposit d)
{
account = 1000;
double de = d.get_debet();
double re = account - de;
if (re >= 0)
Console.WriteLine("{0},储蓄卡3余额{1}元,本次还款{3}元,现余额{4}元,还款时间{5}", d.get_name(), account, de,re, d.get_paytime());
else
Console.WriteLine("储蓄卡3余额不足,请更换储蓄卡!");
}
}
3.定义一个委托
只有当到达还款日期当天才能执行扣款功能,否则无法触发扣款事件。
class Delegate
{
//定义委托
public delegate void MeDelegate(CREposit d);
//定义事件
public event MeDelegate SubMoney;
public void Sub(CREposit d)
{
//如果事件不为空
if (SubMoney != null)
{
Console.WriteLine("进入还款流程");
SubMoney(d);
}
else
{
Console.WriteLine("还款日期为{0}", d.get_paytime());
Console.WriteLine("今天是{0},未到还款时间", DateTime.Now.ToString("yyyy/MM/dd"));
}
}
}
4.主函数执行
可以在主函数中更改还款人、还款金额、还款日期以及选择那一张储蓄卡来还款。
static void Main(string[] args)
{
Delegate m1 = new Delegate();
CREposit d1 = new CREposit("lisa", 6000, "2022/04/01");
DEposit1 c1 = new DEposit1();
DEposit2 c2 = new DEposit2();
DEposit3 c3 = new DEposit3();
//string Nowday = Console.ReadLine();
if (d1.get_paytime() == DateTime.Now.ToString("yyyy/MM/dd"))
{
Console.WriteLine("请输入你选择的储蓄卡:");
string Card = Console.ReadLine();
switch (Card)
{
case "DEposit1": m1.SubMoney += c1.paydebet; break;
case "DEposit2": m1.SubMoney += c2.paydebet; break;
case "DEposit3": m1.SubMoney += c3.paydebet; break;
}
}
m1.Sub(d1);
}