请使用委托实现信用卡用户定时还款功能
一、问题分析
委托实现信用卡用户定时还款功能
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、实验将委托与事件应用到实际的事情中,经过这次实验,我更加熟悉了类的调用以及委托事件的使用方法,理解更深一步。