一、问题描述
信用卡还款是银行系统的重要业务,业务流程说明如下:
用户有信用卡和储蓄卡,储蓄卡有查询余额和取款功能,信用卡能够查看账单金额、查看还款日和查看余额三个功能;请使用委托与事件实现下列功能:用户可自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣;请注意事件主要是设计什么时候启动委托,委托的主要目的是设置还款的储蓄卡为避免设计出现偏差,给出了部分功能代码,请在此基础上进行开发。
二、代码
1.定义储蓄卡类
储蓄卡类包含两个初始参数,添加构造函数可进行初始赋值
定义方法CheckBalance,以还款日期以及储蓄卡余额与信用卡欠款的大小对比为标准,判断储蓄卡是否能够成功还款
class CashCard
{
int balance;
CreditCard c;
public CashCard() { }
public CashCard(int balance, CreditCard c)
{
this.balance = balance;
this.c = c;
}
public void CheckBalance()
{
if (c.checkDate())
{
int balance0 = balance;
balance = balance - c.getPayBalance();
if (balance >= 0)
{
Console.WriteLine("您的储蓄卡初始余额为{0},支付信用卡欠款{1},现余额为{2},还款成功",balance0,c.getPayBalance(),balance);
}
else
{
Console.WriteLine("您的储蓄卡初始余额为{0},信用卡欠款为{1},余额不足,还款失败",balance0, c.getPayBalance());
}
}
else if (!c.checkDate())
{
Console.WriteLine("未到还款日期,还款日期为{0},不需要还款\n", c.getPayDate());
}
}
}
2.定义信用卡类3.定义事件与委托
信用卡类包含两个初始参数,添加构造函数可进行初始赋值,其中TodayDate通过键盘输入赋值
定义方法getPayDate与getPayBalance,作用是让其返回值能够在储蓄卡类中被调用
定义方法checkDate,用于判断是否到达还款日期,同样是会在储蓄卡类中被调用
class CreditCard
{
int PayDate = 30;
int PayBalance;
int TodayDate;
public CreditCard() { }
string Today = Console.ReadLine();
public CreditCard(int PayBalance, int TodayDate)
{
this.PayBalance = PayBalance;
this.TodayDate = int.Parse(Today);
}
public int getPayDate()
{
return PayDate;
}
public int getPayBalance()
{
return PayBalance;
}
public bool checkDate()
{
if (TodayDate == PayDate)
{
return true;
}
else
{
return false;
}
}
}
3.定义事件与委托
class Delegate
{
public delegate void MeDelegate();
public event MeDelegate NotifyEventOne;
public void Notify()
{
if (NotifyEventOne != null)
{
Console.WriteLine("触发事件:");
NotifyEventOne();
}
}
}
4.主函数执行
创建了cash1,cash2,cash3三张储蓄卡对象,默认还款日期为30号
程序将根据你输入的今日日期来确定是否需要还款
并能自行选择任意一张储蓄卡进行还款操作
class Program
{
static void Main(string[] args)
{
Delegate objDelegate = new Delegate();
Console.WriteLine("请输入今日日期:");
CreditCard p = new CreditCard(6000, 30);
CashCard cash1 = new CashCard(3000, p);
CashCard cash2 = new CashCard(1000, p);
CashCard cash3 = new CashCard(9000, p);
Console.WriteLine("请选择你的储蓄卡:");
string Card = Console.ReadLine();
switch (Card)
{
case "cash1": objDelegate.NotifyEventOne += new Delegate.MeDelegate(cash1.CheckBalance); break;
case "cash2": objDelegate.NotifyEventOne += new Delegate.MeDelegate(cash2.CheckBalance); break;
case "cash3": objDelegate.NotifyEventOne += new Delegate.MeDelegate(cash3.CheckBalance); break;
}
objDelegate.Notify();
}
}
}