功能说明
使用C#的委托与事件功能,实现银行自动提醒用户信用卡还款与自动从用户的储蓄卡中扣款。
本项目定义一个委托与两个事件(一个为提醒事件、一个为扣款事件)分别被不同函数订阅。通过循环模拟时间,触发事件的发生。
以下为代码实现
一、核心类及功能说明
1.发布器,在其中定义委托与事件,事件与委托绑定,委托的参数为一个用户对象,用于对不同用户触发不同的事件。
class Dele_publisher
{
//定义委托
public delegate void Delegate_fun(User uesr);
public event Delegate_fun Warn; //提醒事件与委托绑定
public event Delegate_fun DeMoney;//扣款事件与委托绑定
//判断事件是否被启用
public void WarnTest(User user)
{
if (Warn!=null)
{
Warn(user);
}
else
{
Console.WriteLine("还款日未到");
}
}
public void DeMoneyTest(User user)
{
if (DeMoney != null)
{
DeMoney(user);
}
else
{
Console.WriteLine("还款日未到");
}
}
}
2.银行类,定义两个函数,一个为提醒函数,一个为扣款函数,形参都为用户类的一个对象。
class Bank
{
public void Woring(User user)
{
Console.WriteLine("{0},还款日即将到来,请你准备还款,本期欠款{1}元!",user.Name,user.Debt);
Console.WriteLine();
}
public void DeMoneying(User user)
{
Console.WriteLine("{0},您的借记卡余额为{1}元,本次还清信用卡{2}元,借记卡目前余额为{3}元!",
user.Name,user.Balance,user.Debt,(user.Balance-user.Debt));
Console.WriteLine();
}
}
3.用户类,其中定义的四个实例变量:
private int balance;(借记余额)
private int debt;(信用卡欠款额)
private string name;(用户名)
private int date;(还款日)
以及他们的get set方法。
class User
{
private int balance;
private int debt;
private string name;
private int date;
public User()
{
}
public User(int balance, int debt, string name,int date)
{
this.balance = balance;
this.debt = debt;
this.name = name;
this.date = date;
}
public int Balance { get => balance; set => balance = value; }
public string Name { get => name; set => name = value; }
public int Debt { get => debt; set => debt = value; }
public int Date { get => date; set => date = value; }
}
4.订阅器,其中包含main函数,在其中不同的函数订阅不同的事件。
class Dele_subscriber
{
static void Main(string[] agrs)
{
Dele_publisher d1 = new Dele_publisher();//发布器类对象
Dele_publisher d2 = new Dele_publisher();
User user = new User(5000, 4999, "涛涛",8000);
User user1 = new User(15213, 5192, "乐乐",6000);
Bank bank = new Bank();
d1.Warn += bank.Woring;//银行提醒函数订阅提醒事件
d2.DeMoney += bank.DeMoneying;//银行扣款函数订阅扣款事件
//模拟时间
for(int i = 0; i <= 10000; i++)
{
if (user1.Date - i == 1000)//快到user1的还款日提醒
d1.WarnTest(user1);
if (user.Date - i == 1000)//快到user的还款日提醒
d1.WarnTest(user);
if(i==user1.Date)
d2.DeMoneyTest(user1);
if(i==user.Date)
d2.DeMoneyTest(user);
}
}
}