用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日
实现过程:
信用卡类
1.属性:信用额度,还款日,使用额度
2.函数:使用;已使用额度提示
class Credit_Card //信用卡
{
private int Credit_Limit = 10000; //总信用额度
public int Repay_Date = 5; //每月5号为还款日
public int Used_Credit_Limit = 0;//已使用额度
public int Show_Used()
{
Console.WriteLine("待还额度:" + Used_Credit_Limit);
return Used_Credit_Limit;
}
public void Use(int num)
{
if (Used_Credit_Limit + num > Credit_Limit)
{
Console.WriteLine("超出信用额度,支付失败!");
}
else
{
Used_Credit_Limit += num;
Console.WriteLine("信用卡花费:"+num);
}
}
}
储蓄卡类
1.属性:余额
2.函数:使用;用于还款提示(委托的注册方法)
class Cash_Card //储蓄卡
{
public int Card_balance;//余额
public Cash_Card(int Card_balance)
{
this.Card_balance = Card_balance;
}
public void Use(int num)
{
if (num <= Card_balance)
{
Card_balance -= num;
Console.WriteLine("本卡已消费:" + num + "余额:" + Card_balance);
}
else
Console.WriteLine("余额不足!");
}
public void used_to_repay()
{
Console.WriteLine("本次消费用于信用卡还款");
}
}
还款类
1.还款账单发送函数
2.定义委托与事件
3.定义了触发条件以及事件行为
class payment
{
public void send_message(Credit_Card credit_Card)
{
Console.WriteLine("已到还款日,请进行还款:");
credit_Card.Show_Used();
}
public delegate void pay(); //委托
public event pay pay_all;//事件
public void payed(int data, Credit_Card credit_Card,Cash_Card cash_Card)
{
/*触发条件:
* 1.进行了正确储蓄卡选择
* 2.到达了还款日期
* 3.储蓄卡余额大于需要偿还的额度*/
if (pay_all != null && data== credit_Card.Repay_Date &&cash_Card.Card_balance>= credit_Card.Used_Credit_Limit)
{
cash_Card.Use(credit_Card.Used_Credit_Limit);
pay_all();
}
else
{
Console.WriteLine("未满足还款条件");
}
}
}
主类
创建了1个信用卡类对象Credit_Card1
创建了2个储蓄卡类对象Cash_Card1和Cash_Card2
模拟了消费以及到达还款日后选择储蓄卡进行还款的行为
class Program
{
static void Main(string[] args)
{
Credit_Card Credit_Card1=new Credit_Card();
Cash_Card Cash_Card1 = new Cash_Card(50000);//卡1余额50000
Cash_Card Cash_Card2 = new Cash_Card(4000);//卡2余额200
payment pay_test=new payment();
for (int i = 1; i <= Credit_Card1.Repay_Date; i++)
{
Console.WriteLine("当前日期: "+i+" 日"); //模拟信用卡使用
Thread.Sleep(500);
Credit_Card1.Use(1000);
if (i==Credit_Card1.Repay_Date)
{
pay_test.send_message(Credit_Card1); //账单发送
Console.WriteLine("储蓄卡1余额:" + Cash_Card1.Card_balance);
Console.WriteLine("储蓄卡2余额:" + Cash_Card2.Card_balance);
int Cash_Card_Num = Console.Read() - 48;
if (Cash_Card_Num == 1)
{
pay_test.pay_all += new payment.pay(Cash_Card1.used_to_repay);
pay_test.payed(i, Credit_Card1, Cash_Card1);
}
else if (Cash_Card_Num == 2)
{
pay_test.pay_all += new payment.pay(Cash_Card2.used_to_repay);
pay_test.payed(i, Credit_Card1, Cash_Card2);
}
else
{
Console.WriteLine("该卡不存在,还款失败");
}
}
}
}
}
结果展示
源码: