应用场景:
用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
委托事件介绍
委托:作用类似与c++中的函数指针,作为一种方法的引用,
委托用法:再反编译工具中,可以看到委托是一个类的形式出现,所以再代码中,我们需要去声明一个委托类型的名称,此时 delegate就类似于声明一个class,再vs2019中声明出来的字段颜色和类的颜色相同,但是在声明时,需要注意,返回值与形参必须与将来所关联(建立委托)的函数返回值和形参相同
事件:
相当委托的一种实例,不能再类外去调用
应用场景分析:
在场景中出现了用户,储蓄卡,信用卡这三个对象,所以需要分别为这三个对象创建不同的类.
明确每个对象所需要实现的功能,自己类中的功能必须由自己类实现,不能由其他类来实现;
储蓄卡类:
初始化,存钱,取钱.
public class SavingCard
{
public SavingCard()
{
a++;
cardNumber = a.ToString();
money = 0;
}
//存钱
public bool Save(float m)
{
if (m > 0)
{
money += m;
return true;
}
return false;
}
//取钱
public bool TakeMoney(float num)
{
if (0 < num && num< money)
{
money -= num;
return true;
}
return false;
}
public float Money()
{
return money;
}
public static long a;
public string cardNumber;
protected float money;
}
信用卡类:
初始话设置卡的额度,使用,还款.
public class CreditCard
{
public CreditCard()
{
moneyLimit = 100000000;
money = 0;
}
//使用钱 m是消费
public bool Use(float m)
{
if (m < 0)
{
return false;
}
if (m + money < moneyLimit)
{
money += m;
return true;
}
return false;
}
//由储蓄卡还钱
public bool Repay(SavingCard savingCard)
{
if (savingCard.TakeMoney(money))
{
money = 0;
return true;
}
return false;
}
public float Money()
{
return money;
}
protected float moneyLimit;
protected float money;
}
用户类:
name等基本信息,创建卡,确定那一张储蓄卡还款.以及换款日期需要获取系统的事件.(因为水平不够,不能做到一直判断系统时间,当条件满足时触发事件)只能创建一个方法去判断.
public class Person
{
public Person(string m)
{
name = m;
CardList = new List<SavingCard>(10);
}
public bool CreatSavingCard()
{
SavingCard card = new SavingCard();
CardList.Add(card);
Console.WriteLine(card.cardNumber);
return true;
}
public bool CreatCreditCard()
{
if (CreditCard == null)
{
CreditCard = new CreditCard();
return true;
}
else
{
Console.WriteLine("您已拥有信用卡,不能再创建");
return false;
}
}
public void Selectcard()
{
Console.WriteLine("你的信用卡所消费{0}元", CreditCard.Money());
for(int i = 0; i < CardList.Count; i++)
{
Console.WriteLine("你的{0}储蓄卡金额为{1}", CardList[i].cardNumber, CardList[i].Money());
}
Console.WriteLine("选择还款卡号:");
string j;
j = Console.ReadLine();
for(int n = 0; n < CardList.Count; n++)
{
if (CardList[n].cardNumber.Equals(j))
{
this.n = n;
break;
}
}
}
test:
1
2
3
4
5
你的信用卡所消费99999元
你的1储蓄卡金额为0
你的2储蓄卡金额为10000000
你的3储蓄卡金额为0
你的4储蓄卡金额为0
你的5储蓄卡金额为0
选择还款卡号:
2
时间未到不用还款