c#委托事件银行卡按时还款

题目

程序设计题:请使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。

程序设计

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rKJ6buY5piv6YeR5a2m5peg,size_11,color_FFFFFF,t_70,g_se,x_16

1.储蓄类设计

 /// <summary>
    /// 储蓄卡类
    /// </summary>
    public class DepositCard
    {
        public string name;
        private double money;
            public DepositCard(string name, double money)
        {
            this.name = name;
            this.money = money;
        }
        public DepositCard(string name) : this(name, 0)
        {
        }
        /// <summary>
        /// 获取余额
        /// </summary>
        /// <returns>余额</returns>
        public double getDepositMoney()
        {
            return this.money;
        }
        /// <summary>
        /// 设置余额
        /// </summary>
        /// <param name="r">余额</param>
        public void setDepositMoney(double r)
        {
            this.money = r;
        }
    }

    /// <summary>
    /// 储蓄卡集合类
    /// </summary>
    public class DepositCards
    {
        public DepositCard[] Dc;
        public int n;
        public DepositCards(DepositCard[] Dc, int n)
        {
            this.n = n;
            this.Dc = Dc;
        }
    }

2.银行卡类

   /// <summary>
    /// 信用卡类
    /// </summary>
    class CreditCard
    {
        //持有人名
        public string name;
        //信用卡额度
        public const double CreditCardmax = 3000;
        //信用卡欠款
        public double _CredMoney;
        //还款日期
        public int DueDay;
        //绑定储蓄卡集合
        public DepositCards Dc;
        public CreditCard(string name, double Credmoney, int DueDay, DepositCards Dc)
        {
            this.name = name;
            this.CredMoney = Credmoney;
            this.DueDay = DueDay;
            this.Dc = Dc;
        }
        public double CredMoney
        {
            get { return _CredMoney; }
            //还款金额限制
            set {
                if (value < 0 || value > CreditCardmax)
                {
                    Console.WriteLine("=========================");
                    Console.WriteLine("{0}的还款金额错误最大为{1}请重新输入:", this.name,CreditCardmax);
                   while( !double.TryParse(Console.ReadLine(),out value))
                    {
                      Console.WriteLine("{0}的还款金额错误最大为{1}请重新输入:", this.name, CreditCardmax);
                    }
                }
                
                _CredMoney = value; }
        }
        /// <summary>
        /// 还款函数
        /// </summary>
        public void   Repaym()
        {
            int a = Dc.n;
            for(int i = 0; i < a; i++)
            {
                if (this.Dc.Dc[i].getDepositMoney() > this.CredMoney)
                {
                Console.WriteLine("今天是{0}", DateTime.Now);
                Console.WriteLine("用户{0}已还款。",this.name);
                Console.WriteLine("还款账户{0}账户余额{1}。",this.Dc.Dc[i].name,this.Dc.Dc[i].getDepositMoney());
                this.Dc.Dc[i].setDepositMoney(this.Dc.Dc[i].getDepositMoney() - this.CredMoney);
                Console.WriteLine("信用额度为{0} ", CreditCardmax);
                Console.WriteLine("还款金额{0}。", this.CredMoney);
                Console.WriteLine("还款后余额{0}。", this.Dc.Dc[i].getDepositMoney());
                Console.WriteLine();
                    return;
                }
            }
            Console.WriteLine("今天是{0}", DateTime.Now);
            Console.WriteLine("还款人{0}", this.name);
            Console.WriteLine("还款金额{0}。", this.CredMoney);
            Console.WriteLine("账户余额不足, 请即时充值。");
                     return;
        }
        /// <summary>
        /// 无需还款函数
        /// </summary>
        public void Norepaym()
        {
            Console.WriteLine("今天是{0}。", DateTime.Now);
            Console.WriteLine("用户{0}未到还款日期,无需还款", this.name);
            Console.WriteLine();
        }
    }

3.扣款委托类

 /// <summary>
    /// 扣款委托类
    /// </summary>
    public class RepayDelegate
    {
        /// <summary>
        /// 扣款委托
        /// </summary>
        public delegate void RepayMoney();
        public event RepayMoney Dorepay;
        /// <summary>
        /// 执行事件
        /// </summary>
        public void NotifyRepay()
        {
            if (Dorepay != null)
            {
                Console.WriteLine("=========================");
                Dorepay();
            }
        }
    }

4.主函数实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace cprojeket
{
    class main
    {
          static void Main(string[] args)
        {
 //银行还款
            //1.创建储蓄卡集合
            DepositCard D1 = new DepositCard("工商银行", 1000);
            DepositCard D2 = new DepositCard("农业银行", 2000);
            DepositCard[] Dc = { D1, D2};
            DepositCards cards = new DepositCards(Dc,2);


            //2.创建信用卡对象
            CreditCard C1 = new CreditCard("小明", 1010, 1, cards);
            CreditCard C2 = new CreditCard("小红", 2000, 22, cards);
            List<CreditCard> creditCards = new List<CreditCard>();
            creditCards.Add(C1);
            creditCards.Add(C2);
            //创建委托
            RepayDelegate RD = new RepayDelegate();
            //判断时间
            foreach (CreditCard creditCard in creditCards)
            {
                if (creditCard.DueDay == int.Parse(DateTime.Now.ToString("yyyy-mm-dd").Split('-')[2]))
                {
                    //事件添加
                    RD.Dorepay += new RepayDelegate.RepayMoney(creditCard.Repaym);
                }
                else
                {
                    RD.Dorepay += new RepayDelegate.RepayMoney(creditCard.Norepaym);
                }
            }
            //事件执行
            RD.NotifyRepay();
            Console.ReadKey();
        }
    }
}

输出结果

 

代码地址

https://gitee.com/chhenming/cvsproject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值