1、程序设计题:请使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace cshiyaner_3_
{
internal class Class1
{
}
class ClassA
{
public int money1;
public ClassA(int money)
{
this.money1 = money;
}
public void DispMethod()
{
Console.WriteLine("信用卡A 已接到 还款期限临近 事件的通知!本月需还金额:" + money1);
}
}
// 第二个类
class ClassB
{
public int money2;
public ClassB(int money)
{
this.money2 = money;
}
public void DispMethod()//int moneya)
{
//money2 += moneya;
Console.WriteLine("储蓄卡B 已接到 还款期限临近 事件的通知! 还款后余额为:");
}
}
class ClassC
{
public int money3;
public ClassC(int money)
{
this.money3 = money;
}
public void DispMethod()//int moneyb)
{
//money3 += moneyb;
Console.WriteLine("储蓄卡C 已接到 还款期限临近 事件的通知! 还款后余额为:");
}
}
class Delegate
{
// 定义委托
public delegate void MeDelegate();
// 定义事件
public event MeDelegate NotifyEveryOne;
public void Notify()
{
// 如果事件不为 null
if (NotifyEveryOne != null)
{
Console.WriteLine("触发事件:还款日");
// 触发事件
NotifyEveryOne();
}
}
}
class TestEvents
{
[STAThread]
static void Main(string[] args)
{
// 委托的对象
Delegate objDelegate = new Delegate();
// ClassA 的对象
ClassA objClassA = new ClassA(1000);
// ClassB 的对象
ClassB objClassB = new ClassB(500);
// ClassC 的对象
ClassC objClassC = new ClassC(1500);
// 订阅该事件
objDelegate.NotifyEveryOne +=
new Delegate.MeDelegate(objClassA.DispMethod);
if (objClassB.money2 >= objClassA.money1)
{
objDelegate.NotifyEveryOne +=
new Delegate.MeDelegate(objClassB.DispMethod);
objClassB.money2 -= objClassA.money1;
Console.WriteLine(objClassB.money2);
}
else if (objClassC.money3 >= objClassA.money1)
{
objDelegate.NotifyEveryOne += new Delegate.MeDelegate(objClassC.DispMethod);
objClassC.money3 -= objClassA.money1;
Console.WriteLine("还款后余额为:" + objClassC.money3);
}
else
{
Console.WriteLine("每张卡余额均不足,还款失败。");
}
objDelegate.Notify();
}
}
}