详细问题
用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款;还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
一、代码内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Bank
{
private string name; //定义名字
private double balance; //定义储蓄卡定义余额
private double arrears;//定义欠款金额
public string time; //定义还款时间
public Bank(string name)
{
balance = 0;
arrears = 5000;
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(string 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();
Bank a = new Bank(name);
Console.WriteLine("请输入储蓄卡剩余金额:");
double amount = double.Parse(Console.ReadLine());
a.deposit(amount);
Console.WriteLine("当前余额是{0}元", a.Balance);
Console.WriteLine("当前欠款是{0}元", a.Arrears);
Console.WriteLine("请输入自动还款日:");
string time = Console.ReadLine();
a.Time(time);
RepayDelegate RD = new RepayDelegate();
if (a.time == ("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();
Bank a2 = new Bank(name);
Console.WriteLine("请输入储蓄卡剩余金额:");
amount = double.Parse(Console.ReadLine());
a2.deposit(amount);
Console.WriteLine("当前余额是{0}元", a2.Balance);
Console.WriteLine("当前欠款是{0}元", a2.Arrears);
Console.WriteLine("请输入自动还款日:");
time = Console.ReadLine();
a2.Time(time);
RepayDelegate RD2 = new RepayDelegate();
if (a2.time == ("yyyy-MM-dd").Split('-')[2])
{
RD2.Repay += new RepayDelegate.RepayM(a2.RepayMent);
}
else
{
RD2.Repay += new RepayDelegate.RepayM(a2.NotRepay);
}
RD2.RequestRepay();
}
}
}
总结
本问题,由于个人的技术原因,我解决的不是十分完善。若有大佬,请多指教。
gitee仓库地址:梓安 (zpccaq) - Gitee.com