Windows程序设计作业一


一、作业题目

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

二、功能描述

1)定义储蓄卡类,类中有用户名、卡号、余额三个成员,以及相应的get()、set()方法。
2)定义信用卡类,类中有用户名、还款日期、还款金额、绑定储蓄卡对象四个成员。以及需要还款和无需还款的方法。
3)定义扣款委托类。
4) 主函数中定义储蓄卡对象数组,表示某用户拥有的所有储蓄卡。
5) 用户输入想要还款的储蓄卡编号,则信用卡和该张储蓄卡绑定。
6) 用System.DateTime获取当前日期。
7) 判断当前日期是否为还款日期,若是还款日期,使用委托为信用卡订阅需要还款事件;反之使用委托为信用卡订阅无需还款事件。
8)若到还款日期,用户选择的储蓄卡余额不足,提示更换储蓄卡;反之还款成功。

三、核心代码

using System;
namespace ConsoleApp4
{
    class Program
    {
        //储蓄卡类
        class depositCard
        {
            //储蓄卡号
            private long id;
            //储蓄名
            private string name;
            //储蓄金额
            private int depositMoney;
            //初始化
            public depositCard(string name, int money,long id)
            {
                this.name = name;
                this.depositMoney = money;
                this.id = id;
            }
            //获取储蓄卡id
            public long getId()
            {
                return this.id;
            }
            //获取储蓄金额
            public int getDepositMoney()
            {
                return this.depositMoney;
            }
            //修改储蓄金额
            public void setDepositMoney(int r)
            {
                this.depositMoney = r;
            }
        }
        //信用卡类
        class creditCard
        {
            //信用卡还款日期(因还款日期固定,设置为静态)
            static public int dueDay=2;
            //信用卡用户名
            public string name;
            //信用卡消费金额
            public int consumeMoney;
            //绑定的储蓄卡对象
            public depositCard dCard;
            //初始化
            public creditCard(string name, int consumeMoney,  depositCard dCard)
            {
                this.name = name;
                this.consumeMoney = consumeMoney;
                this.dCard = dCard;
            }       
            //需要还款
            public void repayM()
            {
                System.DateTime currentTime = new System.DateTime();
                currentTime = System.DateTime.Now;
                Console.WriteLine("当前日期:{0}月{1}日", currentTime.Month, currentTime.Day);
                Console.WriteLine("用户名:{0} 卡号:{1} 卡内余额:{2}", this.name, this.dCard.getId(), this.dCard.getDepositMoney()) ;
                Console.WriteLine("**********************************************************");
                if (this.dCard.getDepositMoney() - consumeMoney >= 0)
                {
                    dCard.setDepositMoney(this.dCard.getDepositMoney() - consumeMoney);
                    Console.WriteLine("用户已还款");
                    Console.WriteLine("还款金额:{0}", this.consumeMoney);
                    Console.WriteLine("卡内余额:{0}", dCard.getDepositMoney());
                    Console.WriteLine();
                }
                else 
                {
                    Console.WriteLine("提示:您的余额不足!请更换储蓄卡!");
                }
            }
            //无需还款
            public void norepayM()
            {
                System.DateTime currentTime = new System.DateTime();
                currentTime = System.DateTime.Now;
                Console.WriteLine("当前日期:{0}月{1}日", currentTime.Month, currentTime.Day);
                Console.WriteLine("用户名:{0} 卡内余额:{1}", this.name, this.dCard.getDepositMoney());
                Console.WriteLine("**********************************************************");
                Console.WriteLine("下次还款日期为{0}月{1}号,未到还款日期,无需还款", (creditCard.dueDay> currentTime.Day? currentTime.Month: currentTime.Month+1), creditCard.dueDay);
                Console.WriteLine();
            }
        }
        //扣款委托类
        class repayDelegate
        {
            //扣款委托
            public delegate void repayMoney();
            //扣款事件
            public event repayMoney DoRepay;
            //事件执行
            public void NotifyRepay()
            {
                if (DoRepay != null)
                {
                    Console.WriteLine("触发事件:");
                    // 触发事件
                    DoRepay();
                }
            }
        }
        static void Main(string[] args)
        {
            //创建储蓄卡对象数组
            depositCard[] D = new depositCard[3];
            D[0] = new depositCard("Jenny", 2000, 6217213407601880725);
            D[1] = new depositCard("Jenny", 5000, 6217211107051540774);
            D[2] = new depositCard("Jenny", 10000, 6717314207071809721);
            //创建委托对象
            repayDelegate rD = new repayDelegate();
            //判断是否为还款日期
            System.DateTime currentTime = new System.DateTime();
            currentTime = System.DateTime.Now;
            //用户选择还款储蓄卡
            Console.WriteLine("请选择还款的储蓄卡:");
            Console.WriteLine("1(卡1) 2(卡2) 3(卡3)");
            int i = int.Parse(Console.ReadLine());
            creditCard C = new creditCard("Jenny", 8000, D[i - 1]);
            //判断当前日期是否为还款日期
            if (creditCard.dueDay == currentTime.Day)
            {
                //事件订阅
                rD.DoRepay += new repayDelegate.repayMoney(C.repayM);
            }
            else
            {
                //事件订阅
                rD.DoRepay += new repayDelegate.repayMoney(C.norepayM);
            }
             //事件委托
             rD.NotifyRepay();
        }
    }
}

四、结果截图

本次实验设置储蓄卡数量为3,卡一余额为2000,卡二余额为5000,卡三余额为10000,信用卡需还款金额为8000,不同情况运行结果如下。

1)设置还款日期(静态)为当前日期
选择卡一为还款储蓄卡:在这里插入图片描述
选择卡二为还款储蓄卡:
在这里插入图片描述
设置卡三为还款储蓄卡:
在这里插入图片描述
(2)当前日期不是还款日期
设置每月2号为还款日期:
在这里插入图片描述
设置每月1号为还款日期:
在这里插入图片描述

五、仓库链接

Gitee仓库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值