委托实现信用卡用户定时还款功能


功能说明

使用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);
            }
        }
    }

二、结果展示

在这里插入图片描述

三、gitee仓库

点击查看gitee仓库源代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值