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

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

一、问题分析

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

1.标题要求使用C#的委托功能

2.设计时分车成4个模块来设计,分别是储蓄卡类、信用卡类、还款委托类,以及最后导入、显示结果的主程序类。

3.还款委托类当作事件处理,委托类定义委托和事件以及自动还款方法

二、流程图解析

在这里插入图片描述

三、核心代码功能说明

1.储蓄卡类

//储蓄卡类
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 NowMoney)
    {
        this.DepositMoney = NowMoney;
    }
}

2.信用卡类

//信用卡类
class CreditCard
{
    //信用卡持有者名称
    public string Name;
    //信用卡余额
    public int CreditMoney;
    //扣款日期
    public int DiedLine;
    //绑定储蓄卡对象
    public DepositCard DC;
    public CreditCard(string Name, int CreditMoney, int DiedLine, DepositCard DC)
    {
        this.Name = Name;
        this.CreditMoney = Math.Abs(CreditMoney);
        this.DiedLine = DiedLine;
        this.DC = DC;
    }
    //需要还款
    public void RepayMoney()
    {
        Console.WriteLine("用户{0},还款日即将到来,请注意本次共需还款{1}元!", this.Name, this.CreditMoney);
        Console.WriteLine("用户{0}当前金额{1},请注意还款。", this.Name, this.DC.GetDepositMoney());
        DC.SetDepositMoney(this.DC.GetDepositMoney() - CreditMoney);
        Console.WriteLine("用户已还款{0}元,现在您的储蓄卡余额为{1}", this.CreditMoney, DC.GetDepositMoney());
        Console.WriteLine();
    }
    //无需还款
    public void NonRepayMoney()
    {
        Console.WriteLine("用户{0},未到还款日期,无需还款。", this.Name);
        Console.WriteLine("当前余额为{0}。", this.DC.GetDepositMoney());
        Console.WriteLine();
    }
}

3.还款委托类

//扣款委托类
class RepayDelegate
{
    //扣款委托
    public delegate void RepayMoney();
    //扣款事件
    public event RepayMoney Repay;
    //事件执行
    public void RequestRepay()
    {
        if (Repay != null)
        {
            // 触发事件
            Repay();
        }
    }
}

4.程序运行结果截图

在这里插入图片描述

四、源代码

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、通过这次实验我更加了解了C#的索引器的相关应用,更深一步的理解了索引器的使用方法。
2、实验将委托与事件应用到实际的事情中,经过这次实验,我更加熟悉了类的调用以及委托事件的使用方法,理解更深一步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值