程序功能:
使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
①使用委托②事件的触发方式是每个月的到期还款日
学习内容:
C#中委托与事件活学活用
源码:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class User//用户默认有3张储蓄卡
{
private int limit = 20000;//信用卡总额度为20K
private int month = 0;//还款期限时期
private string value;//消费一笔
private int sum = 0;//月消费总额
private string salary;//工资
private int DepositCard1 = 0;//储蓄卡1
private int DepositCard2 = 20000;//储蓄卡2
private int DepositCard3 = 10000;//储蓄卡3
public void monthlyConsume()//月消费总额显示
{
Console.WriteLine(sum);
}
public void SaveMoney()//存款
{
string number;
int signal = 1;
while(signal != 0)
{
Console.Write("请选择储蓄卡:1 or 2or 3:");
number = Console.ReadLine();
Console.Write("存入金额为:");
salary = Console.ReadLine();
switch (number)
{
case "1":
DepositCard1 = DepositCard1 + int.Parse(salary);
signal = 0;
break;
case "2":
DepositCard2 = DepositCard2 + int.Parse(salary);
signal = 0;
break;
case "3":
DepositCard3 = DepositCard3 + int.Parse(salary);
signal = 0;
break;
default:
Console.WriteLine("请重新选择");
signal = 1;
break;
}
}
}
public void Repayment()//定期还款还款
{
month = 1;
string number;
int signal = 1,signal1 = 1;
while(signal != 0)
{
Console.WriteLine("请用户选择储蓄卡:1 or 2 or 3 or 取消:");
number = Console.ReadLine();
Console.WriteLine("时期已到,将自动还款");
switch (number)
{
case "1":
if(DepositCard1 >= sum)
{
DepositCard1 = DepositCard1 - sum;
Console.WriteLine("成功还款!");
signal = 0;
signal1 = 1;
}
else
{
Console.WriteLine("还款失败,储蓄卡余额不足!");
signal1 = 0;
}
break;
case "2":
if (DepositCard2 >= sum)
{
DepositCard1 = DepositCard1 - sum;
Console.WriteLine("成功还款!");
signal = 0;
signal1 = 1;
}
else
{
Console.WriteLine("还款失败,储蓄卡余额不足!");
signal1 = 0;
}
break;
case "3":
if (DepositCard3 >= sum)
{
DepositCard1 = DepositCard1 - sum;
Console.WriteLine("成功还款!");
signal = 0;
signal1 = 1;
}
else
{
Console.WriteLine("还款失败,储蓄卡余额不足!");
signal1 = 0;
}
break;
case "取消":
signal = 0;
break;
default:
Console.WriteLine("请重新选择储蓄卡");
signal = 1;
break;
if( signal1 == 0 )
{
Console.WriteLine("请重新选择储蓄卡");
}
}
}
}
public void consume()//消费
{
Console.Write("消费金额为:");
value = Console.ReadLine();
Console.Write("同意or取消:");
string str = Console.ReadLine();
if(limit <= 0)
{
Console.WriteLine("信用卡透支!及时还款");
}
else
{
if(str == "同意")
{
limit = limit - int.Parse(value);
sum = sum + int.Parse(value);
limit = limit - int.Parse(value);
}
else if (str == "取消")
{
Console.WriteLine("用户取消支付!");
}
}
}
}
class Delegate
{
//定义委托
public delegate void CreditCard();
//定义事件
public event CreditCard StorageCard;
public void process1()
{
if(StorageCard != null)
{
StorageCard();
}
}
public void process2()
{
if (StorageCard != null)
{
StorageCard();
}
}
public void process3()
{
if (StorageCard != null)
{
StorageCard();
}
}
public void process4()
{
if (StorageCard != null)
{
Console.WriteLine("当月消费总额:");
StorageCard();
}
}
}
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Delegate objdelegate = new Delegate();
User user1 = new User();
int signal = 1,signal1=0;
string function;
while (signal != 0)
{
Console.Write("功能展示:1/存款 or 2/消费 or 3/定期还款 or 4/显示月消费总额 or 5/取消 or 6/重新选择: ");
function = Console.ReadLine();
switch (function)
{
case "1":
switch(signal1)
{
case 2:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.consume);
break;
case 3:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.Repayment);
break;
case 4:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.monthlyConsume);
break;
default:
break;
}
signal1 = 1;
objdelegate.StorageCard += new Delegate.CreditCard(user1.SaveMoney);
objdelegate.process1();
break;
case "2":
switch (signal1)
{
case 1:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.SaveMoney);
break;
case 3:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.Repayment);
break;
case 4:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.monthlyConsume);
break;
}
signal1 = 2;
objdelegate.StorageCard += new Delegate.CreditCard(user1.consume);
objdelegate.process2();
break;
case "3":
switch (signal1)
{
case 1:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.SaveMoney);
break;
case 2:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.consume);
break;
case 4:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.monthlyConsume);
break;
}
signal1 = 3;
objdelegate.StorageCard += new Delegate.CreditCard(user1.Repayment);
objdelegate.process3();
break;
case "4":
switch (signal1)
{
case 1:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.SaveMoney);
break;
case 2:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.consume);
break;
case 3:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.Repayment);
break;
}
signal1 = 4;
objdelegate.StorageCard += new Delegate.CreditCard(user1.monthlyConsume);
objdelegate.process4();
break;
case "5":
signal = 0;
break;
case "6":
switch (signal1)
{
case 1:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.SaveMoney);
break;
case 2:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.consume);
break;
case 3:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.Repayment);
break;
case 4:
objdelegate.StorageCard -= new Delegate.CreditCard(user1.monthlyConsume);
break;
}
break;
default:
Console.WriteLine("请重新选择");
signal = 1;
break;
}
}
}
}
}
仓库地址
https://gitee.com/liupeng321/gitee-liupeng
总结:
通过本次实验,实现了银行还款功能,此外还增加了一些其他的功能。需要注意的是委托以及事件触发,以前c++类中学过类似委托这种类型的,但是第一次接触c#的委托以及事件触发方式还需多加练习