如何在接口中实现方法CanToProlongable(存款)



我有一个 C# 任务,您需要在其中创建一个接口 IProlongable(存款的续订)并在其中声明CanToProlong方法,而不返回布尔值 true 或 false 的参数,具体取决于此特定存款是否可以扩展。这是它的完整 条件:

任务:

向任务 7 中创建的项目添加以下新功能:

  1. 创建接口IProlongable(延长存款)并在其中声明方法CanToProlong没有参数,返回逻辑值 true 或 false,具体取决于此特定存款是否可以延长的事实。

  2. 在类SpecialDepositLongDeposit中实现接口IProlongable

  3. 此外,特殊存款(SpecialDeposit)只有在存款超过1000 UAH时才能延长,如果存款期限不超过3年,长期存款(LongDeposit)可以延长。

  4. 要实现标准通用接口 IComparable在抽象类 Deposit。总金额(整个期间的存款金额加利息)应被视为存款实例的比较标准。

  5. 要在类客户端中额外实现:

    • 接口IEnumerable.

    • 方法SortDeposits,在存款到期时按存款总金额的降序在数组存款中执行存款排序。

    • 方法CountPossibleToProlongDeposit,返回整数 – 可以延长的当前客户存款金额。

实现时,我的代码会抛出错误。我在编写代码时寻求帮助。我是 C# 的新手。这是我写的:

using System;
using System.Collections.Generic;
using System.Text;
namespace Interfaces
{
public interface IProlongable
{
bool CanToProlong();
}
public bool CanToProlong()
{
int count = default;
IEnumerable<object> deposits = null;
foreach (var deposit in deposits)
{
object CanToProlong = null;
if (deposit is IProlongable p && !CanToProlong)
{
count++;
}
}
return count;
}
}

你手上有作业。很大程度上取决于您在作业任务 7 中提出的问题。

以下是一些代码,可帮助您立即入门,基于我到目前为止可以理解的内容:

interface IProlongable
{
bool CanToProlong();
}
class Deposit : IProlongable, IComparable<Deposit>
{
protected decimal _Balance;
public decimal Balance
{
get => _Balance;
private set => _Balance = value;
}
protected float _DurationInYears;
public float DurationInYears
{
get => _DurationInYears;
private set => _DurationInYears = value;
}
public virtual bool CanToProlong()
{
return false;
}
public int CompareTo(Deposit other)
{
return this.Balance.CompareTo(other.Balance);
}
public Deposit(decimal openingBalance, float durationYears)
{
_Balance = openingBalance;
_DurationInYears = durationYears;
}
}
class SpecialDeposit : Deposit
{
public SpecialDeposit(): base(0, 0)
{
}
public SpecialDeposit(decimal openingBalance, float durationYears) : base(openingBalance, durationYears)
{
}
public override bool CanToProlong()
{
if (Balance > 1000)
return true;
return false;
}
}
class LongDeposit : Deposit
{
public LongDeposit() : base(0, 0)
{
}
public LongDeposit(decimal openingBalance, float durationYears) : base(openingBalance, durationYears)
{
}
public override bool CanToProlong()
{
if (DurationInYears <= 3)
return true;
return false;
}
}

除此之外,您应该在存款类中有一些额外的东西来帮助您计算利息/到期日等。 并且您应该有一个 Client 类,该类安静地可能具有一组 Deposit 作为数据成员。此 Client 类应显示作业最后一部分中要求的一些其他排序功能。

任务 要创建具有设置功能的类存款(银行账户)、基础存款(定期存款)、特别存款(特别存款)、长期存款(长期存款)、客户(银行客户)。 要创建抽象类 Deposit 并在其中声明: • 公共货币财产仅用于读取 金额(存款金额) • 仅用于读取的公共整数属性 周期(以月为单位的存款时间) • 构造函数(用于调用类继承器)与参数 存款金额 和存款周期,它创建具有指定金额的对象存款 指定期间。 • 抽象方法收入,返回货币价值 – 收入金额 从存款。收入是到期日从存款中提取的金额与存款金额之间的差额。 创建作为类存款继承人的类,这些类确定不同的存款利息添加选项 - 类基础存款、类特殊存款和类长期存款。在每个类中实现一个带有参数金额和周期的构造函数,该构造函数调用父类的构造函数。 对于每个继承人类 – 实施自己的利息增加计划和相应的利润率定义,覆盖每个类别中的抽象方法收入。 基本存款意味着每月从活期存款总额中获得5%的利息。接下来每个月的收入都是从与上个月的当前收入总和相加而收到的总和计算的,并四舍五入到百分之一。 示例:基本金额 – 1000,00 一个月内 – 105,00;收入金额 – 50,00 两个月内 – 1102,50;收入金额 – 102,50 三个月内 – 1157,62;收入金额 – 157,62 特别存款意味着每月增加收入,其中金额(以百分比表示)等于存款到期期。如果在第一个月增加 1%,在第二个月期间 – 第一个月后获得的总和的 2%,依此类推。

示例:基本金额 – 1000,00 一个月内 – 1010,00;收入金额 – 10,00 两个月内 – 1030,20;收入金额 – 30,20 LongDeposit意味着在前6个月内,客户的存款不会增加百分比,但从第7个月开始,每个月增加的百分比是活期存款金额的15%,从而鼓励客户进行长期存款。 要创建类客户端(银行客户端)并在其中声明: • 私人现场存款(客户存款) – 存款类型的对象数组 • 没有参数的构造函数,创建空数组沉积 由 10 个元素组成 • 方法添加带有参数存款的参数存款,用于添加常规、特殊或 长期帐户在第一个空点上进入数组,如果帐户数量限制耗尽(数组中没有空格),则返回 true,或返回 false。 • 方法总收入,根据存款到期时所有客户的存款返回总收入金额。 • 方法最大收入,在存款到期时返回所有客户存款的最高存款收入。 • 方法GetIncomeByNumber与整数参数编号(存款数,等于其在数组中的索引,增加一),返回具有该数字的存款收入。如果不存在具有此数字的存款,则该方法返回 0 值。

add my code for the rest of the files
using System;
using System.Collections;
using System.Collections.Generic;
namespace Interfaces
{
public class Client : IComparable
{
private readonly Deposit[] deposits;
public Client()
{
deposits = new Deposit[10];
}
public int CompareTo(object obj)
{
if (obj == null) return 1;
Client otherClient = obj as Client;
if (otherClient != null)
{
if (TotalIncome() > otherClient.TotalIncome()) return 1;
else
if (TotalIncome() < otherClient.TotalIncome()) return -1;
else
return 0;
}
else
throw new ArgumentException("Object is not a client");
}
public decimal TotalIncome()
{
decimal sum = 0m;
for (int i = 0; i < 10; i++)
{
if (deposits[i] != null)
{
sum += deposits[i].Income();
}
}
return sum;
}
public interface IEnumerable
{
IEnumerator Deposit();
}

public void SortDeposits()
{
Array.Sort(deposits, (x, y) => Comparer<Deposit>.Default.Compare(y, x));
}
public int CountPossibleToProlongDeposit()
{
var count = 0;
foreach (var item in deposits)
{
if (item is IProlongable ip && ip.CanToProlong())
{
count++;
}
}
return count;
}
}
}`enter code here`
using System;
using System.Collections.Generic;
using System.Text;
namespace Interfaces
{
public abstract class Deposit : IComparable<Deposit> 
{
public decimal Amount { get; }
public int Period { get; }
public int CompareTo(Deposit other) 
{
return Amount.CompareTo(other.Amount);
}
public Deposit(decimal depositAmount, int depositPeriod)
{
Amount = depositAmount;
Period = depositPeriod;
}
public abstract decimal Income();
}
}`
`using System;
using System.Collections.Generic;
using System.Text;
namespace Interfaces
{
//TODO: Use class "BaseDeposit" from previous task ("Aggregation").
class BaseDeposit : Deposit
{
public readonly decimal amount;
public readonly int period;
public BaseDeposit(decimal amount, int period) : base(amount, period)
{
this.amount = amount;
this.period = period;
}
public override decimal Income()
{
return Calc(amount, 5m, period);
}
decimal Calc(decimal amount, decimal percent, int period)
{
return amount * Power((1m + percent / 100m), period)
- amount; 
}
decimal Power(decimal x, int pow)
{
var r = 1m;
for (var i = 0; i < pow; i++)
r *= x;
return r;
}
}
}`enter code here`
enter code here

相关内容

  • 没有找到相关文章