Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace TaxCalc
- {
- public class TaxCalculator
- {
- private readonly IList<ITaxComponent> _components;
- public TaxCalculator(IList<ITaxComponent> components)
- {
- _components = components;
- }
- public decimal Calculate(decimal salary)
- {
- return _components.Sum(x => x.GetTax(salary));
- }
- }
- public interface ITaxComponent
- {
- decimal GetTax(decimal salary);
- }
- public class TaxRangeComponent : ITaxComponent
- {
- private readonly decimal _fromSalary;
- private readonly decimal _toSalary;
- private readonly decimal _taxRate;
- public TaxRangeComponent(decimal fromSalary, decimal toSalary, decimal taxRate)
- {
- _fromSalary = fromSalary;
- _toSalary = toSalary;
- _taxRate = taxRate;
- }
- public decimal GetTax(decimal salary)
- {
- var forTax = Math.Max(0, (salary - _fromSalary));
- forTax = Math.Min(forTax, _toSalary - _fromSalary);
- return forTax * (_taxRate / 100);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var components = new List<ITaxComponent>
- {
- new TaxRangeComponent(0, 5070, 10),
- new TaxRangeComponent(5070, 8660, 14),
- new TaxRangeComponent(8660, 14070, 23),
- new TaxRangeComponent(14070, 21240, 30),
- new TaxRangeComponent(21240, 40230, 33),
- new TaxRangeComponent(40230, decimal.MaxValue, 45),
- };
- var calculator = new TaxCalculator(components);
- Console.WriteLine(calculator.Calculate(5000));
- Console.WriteLine(calculator.Calculate(5800));
- Console.WriteLine(calculator.Calculate(9000));
- Console.WriteLine(calculator.Calculate(15000));
- Console.WriteLine(calculator.Calculate(50000));
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment