程序设计题:请使用委托实现信用卡用户定时还款功能
 本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
 要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
源代码:
using System;
 namespace WindowsFormsApplication2
 {
     class Depositcard   //储蓄卡
     {
         public string name;
         public int number;      //账户
         public int debt;        //还款
         public int balance;    //余额
         public int date;
         public Depositcard(string name, int number, int balance, int debt, int date)
         {
             this.name = name;
             this.number = number;
             this.debt = debt;
             this.balance = balance;
             this.date = date;
         }
     }
     class Delegate     //委托
     {
         public delegate void MeDelegate(Depositcard c2);
         public event MeDelegate Remind;
         public event MeDelegate Pay;
         public void remind(Depositcard c2)
         {
             if (Remind != null)
                 Remind(c2);
         }
         public void pay(Depositcard c2)
         {
             if (Pay != null)
                 Pay(c2);
         }
     }
     class Credit    //信用卡
     {
         static public void remind(Depositcard c2)
         {
             Console.WriteLine("用户{0}:未到还款日期,无需还款。\n", c2.name);
         }
         static public void payfor(Depositcard c2)
         {
             if (c2.debt > c2.balance)
                 Console.WriteLine("用户{0}:账户为{1},需还款{2},余额不足,余额为{3}", c2.name, c2.number, c2.debt, c2.balance);
             else
                 Console.WriteLine("用户{0}:账户为{1},需还款{2},余额为{3},还款后余{4}\n", c2.name, c2.number, c2.debt, c2.balance, c2.balance - c2.debt);
         }
     }
     class program
     {
         static void Main(string[] args)
         {
             Delegate d1 = new Delegate();
             Delegate d2 = new Delegate();
             Credit c1 = new Credit();
             Depositcard c2 = new Depositcard("a", 55555, 5000, 100, 2);
             Depositcard c3 = new Depositcard("b", 77777, 20000, 4000, 10);
             d1.Remind += new Delegate.MeDelegate(Credit.remind);
             d2.Pay += new Delegate.MeDelegate(Credit.payfor);
             for (int i = 1; i <= 30; i++)
             {
                 if (c2.date - i == 1)
                     d1.remind(c2);
                 if (c3.date - i == 1)
                     d2.remind(c3);
                if (i == c2.date)
                     d1.pay(c2);
                 if (i == c3.date)
                     d2.pay(c3);
             }
         }
    }
 }
结果:











