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

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


题目

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


一、解题思路

  • 结合日常生活实际,对于信用卡还款粗略思索有四个类,分别是银行卡类、信用卡类、银行类、以及还款委托类。
  • 银行卡类里面有银行卡的余额以及余额的set和get方法。
  • 信用卡类里面有还款金额和还款日,他们的set和get方法,以及还款日到期还款方法。
  • 银行类有充值余额的方法
  • 委托类定义委托和事件以及自动还款方法

二、图表流程解析

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

三、核心代码及功能说明

信用卡类

//信用卡类
	class CreditCard
    {
		//还款金额
		private int money;
		//还款日
		private string repaymentDate;
		//还款金额的get,set方法
		public void setMoney()
        {
			Console.Write("请输入本月需还款的金额:");
			int money = Convert.ToInt32(Console.ReadLine());
			this.money = money;
        }
		public int getMOney()
        {
			return money;
        }
		//还款日的get,set方法
		public void setRepaymentDate()
		{
			Console.Write("还款日为:");
			string repaymentDate = Console.ReadLine();
			this.repaymentDate = repaymentDate;
		}
		public string getRepayment()
		{
			return repaymentDate;
		}
		//还款日还款方法
		public void repayment(Bank bank,BankCard bankCard)
        {
			Console.WriteLine("今天是{0},还款日已到,此次需还款金额为 :{1}元,请还款。",this.repaymentDate,this.money);
			int balance = bankCard.getBalance();
			balance -= this.money;
			bankCard.setBalance(balance);
			while(balance < 0)
            {
				Console.WriteLine("对不起,当前余额为:{0},余额不足,请充值!!!",balance);
				bankCard.setBalance(bank);
				balance = bankCard.getBalance();
			}
			Console.WriteLine("恭喜您,还款成功,余额还剩:{0}",balance);
        }

	}

银行卡类

//银行卡类
class BankCard
    {
		//银行卡余额
		private int balance;
		//银行卡余额的get,set方法
		public void setBalance(Bank bank)
		{
			int add = bank.add();
			this.balance += add;
		}
		public void setBalance(int banlance)
		{
			this.balance = banlance;

		}
		public int getBalance()
		{
			return balance;
		}
	}

银行类

//银行类
	class Bank
    {
		//充值余额
		public int add()
        {
			Console.Write("请输入充值金额:");
			int addMoney = Convert.ToInt32(Console.ReadLine());
			Console.WriteLine("恭喜您,成功缴纳人民币{0}元,欢迎下次光临!",addMoney);
			return addMoney;
        }
    }

委托类

class AutomaticPayment
	{
		//定义委托
		public delegate void delegateAutomaticPayment(Bank bank,BankCard bancard);
		//定义事件
		public event delegateAutomaticPayment eventAutomaticPayment;
		
		//调用事件委托
		public void auto(Bank bank, BankCard bankCard)
        {
			if(eventAutomaticPayment != null)
            {
				eventAutomaticPayment(bank, bankCard);
			}
			
        }
	}

主程序

static void Main(string[] args)
		{
			//委托对象
			AutomaticPayment objDelegate = new AutomaticPayment();
			//银行实例对象
			Bank bank = new Bank();
			//银行卡实例对象
			BankCard bankCard = new BankCard();
			//信用卡实例对象
			CreditCard creditCard = new CreditCard();
			//设置银行卡本钱
			//bankCard.setBalance(bank);
			//设置还款金额
			creditCard.setMoney();
			//设置还款日期
			creditCard.setRepaymentDate();
            //订阅事件,还款方法
            objDelegate.eventAutomaticPayment += new AutomaticPayment.delegateAutomaticPayment(creditCard.repayment);
			objDelegate.auto(bank, bankCard);
		}

四、整体源码

using System;
//请使用委托实现信用卡用户定时还款功能
namespace LeeCodeText1
{
	//信用卡类
	class CreditCard
    {
		//还款金额
		private int money;
		//还款日
		private string repaymentDate;
		//还款金额的get,set方法
		public void setMoney()
        {
			Console.Write("请输入本月需还款的金额:");
			int money = Convert.ToInt32(Console.ReadLine());
			this.money = money;
        }
		public int getMOney()
        {
			return money;
        }
		//还款日的get,set方法
		public void setRepaymentDate()
		{
			Console.Write("还款日为:");
			string repaymentDate = Console.ReadLine();
			this.repaymentDate = repaymentDate;
		}
		public string getRepayment()
		{
			return repaymentDate;
		}
		//还款日还款方法
		public void repayment(Bank bank,BankCard bankCard)
        {
			Console.WriteLine("今天是{0},还款日已到,此次需还款金额为 :{1}元,请还款。",this.repaymentDate,this.money);
			int balance = bankCard.getBalance();
			balance -= this.money;
			bankCard.setBalance(balance);
			while(balance < 0)
            {
				Console.WriteLine("对不起,当前余额为:{0},余额不足,请充值!!!",balance);
				bankCard.setBalance(bank);
				balance = bankCard.getBalance();
			}
			Console.WriteLine("恭喜您,还款成功,余额还剩:{0}",balance);
        }

	}
	//银行卡类
	class BankCard
    {
		//银行卡余额
		private int balance;
		//银行卡余额的get,set方法
		public void setBalance(Bank bank)
		{
			int add = bank.add();
			this.balance += add;
		}
		public void setBalance(int banlance)
		{
			this.balance = banlance;

		}
		public int getBalance()
		{
			return balance;
		}
	}
	//银行类
	class Bank
    {
		//充值余额
		public int add()
        {
			Console.Write("请输入充值金额:");
			int addMoney = Convert.ToInt32(Console.ReadLine());
			Console.WriteLine("恭喜您,成功缴纳人民币{0}元,欢迎下次光临!",addMoney);
			return addMoney;
        }
    }

	class AutomaticPayment
	{
		//定义委托
		public delegate void delegateAutomaticPayment(Bank bank,BankCard bancard);
		//定义事件
		public event delegateAutomaticPayment eventAutomaticPayment;
		
		//调用事件委托
		public void auto(Bank bank, BankCard bankCard)
        {
			if(eventAutomaticPayment != null)
            {
				eventAutomaticPayment(bank, bankCard);
			}
			
        }
	}


	class Program
	{
		static void Main(string[] args)
		{
			//委托对象
			AutomaticPayment objDelegate = new AutomaticPayment();
			//银行实例对象
			Bank bank = new Bank();
			//银行卡实例对象
			BankCard bankCard = new BankCard();
			//信用卡实例对象
			CreditCard creditCard = new CreditCard();
			//设置银行卡本钱
			//bankCard.setBalance(bank);
			//设置还款金额
			creditCard.setMoney();
			//设置还款日期
			creditCard.setRepaymentDate();
            //订阅事件,还款方法
            objDelegate.eventAutomaticPayment += new AutomaticPayment.delegateAutomaticPayment(creditCard.repayment);
			objDelegate.auto(bank, bankCard);
		}
	}
}

五、结果截图

结果截图

六、心得体会

  1. 本次实验将委托与事件应用到实际的事情中,我更加熟悉了类的调用以及委托事件的用法。
  2. 在实验中,我遇到的困难主要是对委托基础语法结构不够熟悉,基本实现还有些生疏,对于委托方法参数的传递和调用开始还是不够了解,花了大量的时间,因对于委托触发事件再执行操作的机制还不够熟练。

七、Gitee仓库源码

点击前往gitee仓库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值