C#实现信用卡用户定时还款功能

309 阅读2分钟

程序设计题

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

一.问题分析

  1. 要求使用C#的委托功能
  2. 设计时分车成4个模块来设计,分别是储蓄卡类、信用卡类、还款委托类,以及最后导入、显示结果的主程序类。
  3. 参考日常生活,信用卡类将与储蓄卡类绑定,若还款时直接通过信用卡从储蓄卡里扣除。
  4. 还款委托类当作事件处理。 注意:本题只考虑在不同的日期需不需要还款(如月末为还款日时,则月初不用还款),不考虑信用卡扣款时,储蓄卡出现余额不足的情况。

二.流程图

image.png

三.核心代码及功能说明

主程序

static void Main(string[] args)
        {
            DepositCard D1 = new DepositCard("刘强", 10000);
            DepositCard D2 = new DepositCard("李东", 10000);
            DepositCard D3 = new DepositCard("王铁", 10000);
            Credit_Card C1 = new Credit_Card("刘强", -5000, 5, D1);
            Credit_Card C2 = new Credit_Card("李东", -3000, 31, D2);
            Credit_Card C3 = new Credit_Card("王铁", -1000, 5, D3);
            List<Credit_Card> cCards = new List<Credit_Card>();
            cCards.Add(C1);
            cCards.Add(C2);
            cCards.Add(C3);
            //创建委托对象
            repayDelegate rD = new repayDelegate();

            foreach (Credit_Card C in cCards)
            {
                //判断是否到了该还款的日期
                if (C.PayDay == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
                {
                    //事件添加
                    rD.DoRepay += new repayDelegate.repayMoney(C.repayM);
                }
                else
                {
                    rD.DoRepay += new repayDelegate.repayMoney(C.norepayM);
                }
            }
            //事件执行
            rD.NotifyRepay();
        }

扣款委托类

class repayDelegate
    {
        //扣款委托
        public delegate void repayMoney();
        //扣款事件
        public event repayMoney DoRepay;
        //事件执行
        public void NotifyRepay()
        {
            if (DoRepay != null)
            {
                Console.WriteLine("触发事件:");
                DoRepay();
            }
        }
    }

储蓄卡类

 class DepositCard
    {
        //储蓄名
        private string name;
        //储蓄金额
        private int DepositMoney;
        //基础储蓄金额
        public DepositCard(string name, int money)
        {
            this.name = name;
            this.DepositMoney = money;
        }
        //获取储蓄金额
        public int getDepositMoney()
        {
            return this.DepositMoney;
        }
        public void setDepositMoney(int r)
        {
            this.DepositMoney = r;
        }
    }

信用卡类以及还款判断

class Credit_Card
    {
        //信用卡持有者名称
        public string name;
        //信用卡余额
        public int Credit_Money;
        //扣款日期
        public int PayDay;
        //绑定储蓄卡对象
        public DepositCard DC;
        //初始化
        public Credit_Card(string name, int CM, int DDL, DepositCard DC)
        {
            this.name = name;
            this.Credit_Money = CM;
            this.PayDay = DDL;
            this.DC = DC;
        }
        //还款
        public void repayM()
        {
            Console.WriteLine("用户{0}当前金额{1}", this.name, this.DC.getDepositMoney());
            DC.setDepositMoney(this.DC.getDepositMoney() + Credit_Money);
            Console.WriteLine("用户已还款");
            Console.WriteLine("还款金额:{0}", Math.Abs(this.Credit_Money));
            Console.WriteLine("余下金额为{0}", DC.getDepositMoney());
            Console.WriteLine();
        }
        //无需还款
        public void norepayM()
        {
            Console.WriteLine("用户{0}当前金额{1}", this.name,this.DC.getDepositMoney());
            Console.WriteLine("用户未到还款日期,无需还款", this.name);
            Console.WriteLine();
        }
    }

四.实验结果截图

7ZLVFKFB1S3~)CR0BA_KC2V.png

五.实验小结

这次实验体会了从设计到一个一个类写,先框架后具体。熟悉了调用委托和事件的方法,分步骤,按借鉴来的流程图写内容,效率更高了。