一、问题的分析
首先分析问题,使用委托实现信用卡用户定时还款功能。
对于信用卡还款,是用储蓄卡的钱还信用卡,所以可以定义两个类信用卡(Credit_Card)和储蓄卡(Deposit_card)类。依据现实情况,这两种类都有用户名(user)和存/欠款(money),则可以定义一个父类卡片类(Card)。
其次,定时还款,定时二字是针对于信用卡的计时或是核对时间的功能(这里实现的是核对时间是否到还款日期)。这样Deposit_card类中就需要一个time和核对时间的函数。之前说过如何还钱,而两个款项在两个类中,所以需要将两个卡匹配,这要才可以调用对应卡里面的数据。
二、代码的实现
1.类的定义
代码如下(示例):
class Card {
public string user;
private int money;
public int Money
{
get { return money; }
set { money = value; }
}
}
class Credit_Card:Card {
private int time;
Deposit_card card1;
public Credit_Card(string u,int t, int m, Deposit_card c) {
user = u; time = t;Money = m;card1 = c;
}
public int Time {
get {return time; }
set { time = value; }
}
public void paymoney() {
Console.WriteLine("用户{0}:信用卡待还:{1},储蓄卡余额:{2}", user, Money, card1.Money);
if (card1.Money < Money)
{
Money -= card1.Money;
card1.Money = 0;
Console.WriteLine("已到还款日期,您的储蓄卡余额不足,还完部分欠款后,信用卡待还:{0},储蓄卡余额:{1}", Money, card1.Money);
}
else
{
card1.Money -= Money;
Money = 0;
Console.WriteLine("已到还款日期,还完欠款后,信用卡待还:{0},储蓄卡余额:{1}", Money, card1.Money);
}
}
public void notime() {
Console.WriteLine("未到还款日期,储蓄卡余额:{0},信用卡待还:{1}", Money, card1.Money);
}
}
class Deposit_card : Card { }
2.委托类
代码如下(示例):
class Paydelegate {
public delegate void paydelegate();
public event paydelegate payevent;
public void Notify()
{
if (payevent != null)
{
payevent();
}
}
3.主程序的调用测试
static void Main(string[] args)
{
int paytime = 8;//这里将还款日期定为每月8号
Deposit_card D1 = new Deposit_card();
D1.Money = 1000;
Credit_Card C1 = new Credit_Card("张三",8,3000,D1);
Paydelegate pay = new Paydelegate();
if (paytime == C1.Time) {
pay.payevent += new Paydelegate.paydelegate(C1.paymoney);
}
else
pay.payevent += new Paydelegate.paydelegate(C1.notime);
pay.Notify();
}
这里可以简单的修改一些主程序中的值来观察不同情况的输出
到还款日期但储蓄卡的钱不够
到还款日期
未还款日期
总结
在解决这一次问题的过程中,对于问题方方面面的把控能力,比如对于类的创建,各种方法的选择等都得到了锻炼。尤其是对于事件和委托的运用,每一个事件可以注册多个方法,执行的时候会按照注册时的顺序执行。我这里还有需要改进的地方,比如说可以写一个计时的函数来同时处理一组用户,模拟一段时间内大家还信用卡的情形。
下附上代码仓库地址:
https://gitee.com/zhuizhuihome/windows-code/blob/master/Program.cs