问题分析
1.创建银行卡类,并在控制台获取name 和 balance 属性
2.默认欠款 500.
3.委托类的实现
4.控制台获取还款时间与现在时间比较,到达执行成功委托方法,
否则执行无需委托方法
代码实现
using System;
namespace projAboveAvg
{
class BankAccount
{
private string name;
private double balance;
private double arrears;
public int time;
public BankAccount(string name)
{
balance = 0;
arrears = 500;
this.name = name;
}
public void deposit(double amount)
{
balance += amount;
}
public double Balance
{
get { return (double)balance; }
}
public double Arrears
{
get { return (double)arrears; }
}
public void Time(int time)
{
this.time = time;
}
public void RepayMent()
{
balance -= arrears;
arrears = 0;
Console.WriteLine("偿还成功!");
Console.WriteLine("当前余额是{0}元", Balance);
Console.WriteLine("当前欠款是{0}元", Arrears);
}
public void NotRepay()
{
Console.WriteLine("还未到还款日,无需还款!");
}
}
class RepayDelegate
{
public delegate void RepayM();
public event RepayM Repay;
public void RequestRepay()
{
if(Repay != null )
{
Repay();
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你的大名:");
string name = Console.ReadLine();
BankAccount a = new BankAccount(name);
Console.WriteLine("请输入存款金额:");
double amount = double.Parse(Console.ReadLine());
a.deposit(amount);
Console.WriteLine("当前余额是{0}元", a.Balance);
Console.WriteLine("当前欠款是{0}元", a.Arrears);
Console.WriteLine("请输入自动还款日:");
int time = int.Parse(Console.ReadLine());
a.Time(time);
RepayDelegate RD = new RepayDelegate();
if(a.time == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
{
RD.Repay += new RepayDelegate.RepayM(a.RepayMent);
}else
{
RD.Repay += new RepayDelegate.RepayM(a.NotRepay);
}
RD.RequestRepay();
Console.WriteLine("请输入你的大名:");
name = Console.ReadLine();
BankAccount a2 = new BankAccount(name);
Console.WriteLine("请输入存款金额:");
amount = double.Parse(Console.ReadLine());
a2.deposit(amount);
Console.WriteLine("当前余额是{0}元", a2.Balance);
Console.WriteLine("当前欠款是{0}元", a2.Arrears);
Console.WriteLine("请输入自动还款日:");
time = int.Parse(Console.ReadLine());
a2.Time(time);
RepayDelegate RD2 = new RepayDelegate();
if (a2.time == int.Parse(DateTime.Now.ToString("yyyy-MM-dd").Split('-')[2]))
{
RD2.Repay += new RepayDelegate.RepayM(a2.RepayMent);
}
else
{
RD2.Repay += new RepayDelegate.RepayM(a2.NotRepay);
}
RD2.RequestRepay();
}
}
}
代码运行结果截图
遇到的问题和解决
主要是对委托基础语法结构不够熟悉,实现还有些生疏,对于委托方法参数的传递和调用开始还是不够了解,花了大量的时间,因对于委托触发事件再执行操作的机制还不够熟练。