c#委托与事件实例操作
程序设计题:请使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
1.定义委托与事件
class Delegate { public delegate void Cash(int id);//int id为用户的id,后面用1,2,3来代替 public event Cash User; public void notice() { string a = DateTime.Now.ToString("yyyy-MM-dd");//获取当天的日期 string b = a.Substring(8);//获取第几日 if (b == "30" && User != null)//将每个月的30日设定为还款日,即事件触发的条件 { User(1); } } }
2.换款类和显示消费额类
public class ID //ID类,显示用户的消费总额度,以及消费的金额 { private double quota=0; private double spend=0; public void Id(int id) { if (id == 1) //设置了三个id,对应三个不同的用户 { quota = 3000.00; spend = 2990.00; } else if (id == 2) { quota = 5000.00; spend = 3990.00; } else if (id == 3) { quota = 4000.00; spend = 2990.00; } Console.WriteLine("您的信用卡总额度为:{0}", quota); Console.WriteLine("您本月消费总额:{0}", spend); } }
public class Repay //repay扣款类,自动扣款,默认卡1,余额不足则发出提醒
{
private double quota = 0;
private double card1 = 0;
private double card2 = 0;
private double card3 = 0;
public void Pay(int id)
{
if (id == 1)
{
quota = 3000.00;
card1 = 3000;
card2 = 4000;
card3 = 5000;
}
else if (id == 2)
{
quota = 5000.00;
card1 = 2000;
card2 = 6000;
card3 = 10000;
}
else if (id == 3)
{
quota = 4000.00;
card1 = 3000;
card2 = 2000;
}
if (car1 >= quota || car2 >= quota || car3 >= quota)//默认card1为优先还款卡
{
if (card1 >= quota) car1 -= quota;
else if (card1 < quota && card2 >= quota) card2 -= quota;
else if (card1 < quota && card2 < quota) card3 -= quota;
Console.WriteLine("成功自动为您扣款");
}
else
{
Console.WriteLine("您的余额不足,请尽快还款");
}
}
}`
3.主函数
`class program
{
static void Main(string[] args)
{
Delegate obj = new Delegate();//创建对象
ID id1 = new ID();
Repay pay1 = new Repay();
obj.User += new Delegate.Cash(id1.Id);//订阅事件
obj.User += new Delegate.Cash(pay1.Pay);//订阅事件
obj.notice();
Console.ReadLine();
}
}`
点击查看代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
class Delegate
{
public delegate void Cash(int id);
public event Cash User;
public void notice()
{
string a = DateTime.Now.ToString("yyyy-MM-dd");
string b = a.Substring(8);
if (b == "30" && User != null)
{
User(1);
}
}
}
public class ID
{
private double quota=0;
private double spend=0;
public void Id(int id)
{
if (id == 1)
{
quota = 3000.00;
spend = 2990.00;
}
else if (id == 2)
{
quota = 5000.00;
spend = 3990.00;
}
else if (id == 3)
{
quota = 4000.00;
spend = 2990.00;
}
Console.WriteLine("您的信用卡总额度为:{0}", quota);
Console.WriteLine("您本月消费总额:{0}", spend);
}
}
public class Repay
{
private double quota = 0;
private double car1 = 0;
private double car2 = 0;
private double car3 = 0;
public void Pay(int id)
{
if (id == 1)
{
quota = 3000.00;
car1 = 3000;
car2 = 4000;
car3 = 5000;
}
else if (id == 2)
{
quota = 5000.00;
car1 = 2000;
car2 = 6000;
car3 = 10000;
}
else if (id == 3)
{
quota = 4000.00;
car1 = 3000;
car2 = 2000;
}
if (car1 >= quota || car2 >= quota || car3 >= quota)
{
if (car1 >= quota) car1 -= quota;
else if (car1 < quota && car2 >= quota) car2 -= quota;
else if (car1 < quota && car2 < quota) car3 -= quota;
Console.WriteLine("成功自动为您扣款");
}
else
{
Console.WriteLine("您的余额不足,请尽快还款");
}
}
}
class program
{
static void Main(string[] args)
{
Delegate obj = new Delegate();
ID id1 = new ID();
Repay pay1 = new Repay();
obj.User += new Delegate.Cash(id1.Id);
obj.User += new Delegate.Cash(pay1.Pay);
obj.notice();
Console.ReadLine();
}
}
}
仓库地址 https://gitee.com/zhang-wei-sen/mytest/blob/master/shiyancangku/shiyancangku/Program.cs

浙公网安备 33010602011771号