Guest User

tax calc

a guest
Sep 23rd, 2011
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.28 KB | None | 0 0
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. namespace TaxCalc
  7. {
  8.     public class TaxCalculator
  9.     {
  10.         private readonly IList<ITaxComponent> _components;
  11.  
  12.         public TaxCalculator(IList<ITaxComponent> components)
  13.         {
  14.             _components = components;
  15.         }
  16.  
  17.         public decimal Calculate(decimal salary)
  18.         {
  19.             return _components.Sum(x => x.GetTax(salary));
  20.         }
  21.     }
  22.  
  23.     public interface ITaxComponent
  24.     {
  25.         decimal GetTax(decimal salary);
  26.     }
  27.  
  28.     public class TaxRangeComponent : ITaxComponent
  29.     {
  30.         private readonly decimal _fromSalary;
  31.         private readonly decimal _toSalary;
  32.         private readonly decimal _taxRate;
  33.  
  34.         public TaxRangeComponent(decimal fromSalary, decimal toSalary, decimal taxRate)
  35.         {
  36.             _fromSalary = fromSalary;
  37.             _toSalary = toSalary;
  38.             _taxRate = taxRate;
  39.         }
  40.  
  41.         public decimal GetTax(decimal salary)
  42.         {
  43.             var forTax = Math.Max(0, (salary - _fromSalary));
  44.             forTax = Math.Min(forTax, _toSalary - _fromSalary);
  45.             return forTax * (_taxRate / 100);
  46.         }
  47.     }
  48.  
  49.     class Program
  50.     {
  51.         static void Main(string[] args)
  52.         {
  53.             var components = new List<ITaxComponent>
  54.                                  {
  55.                                      new TaxRangeComponent(0, 5070, 10),
  56.                                      new TaxRangeComponent(5070, 8660, 14),
  57.                                      new TaxRangeComponent(8660, 14070, 23),
  58.                                      new TaxRangeComponent(14070, 21240, 30),
  59.                                      new TaxRangeComponent(21240, 40230, 33),
  60.                                      new TaxRangeComponent(40230, decimal.MaxValue, 45),
  61.                                  };
  62.  
  63.             var calculator = new TaxCalculator(components);
  64.             Console.WriteLine(calculator.Calculate(5000));
  65.             Console.WriteLine(calculator.Calculate(5800));
  66.             Console.WriteLine(calculator.Calculate(9000));
  67.             Console.WriteLine(calculator.Calculate(15000));
  68.             Console.WriteLine(calculator.Calculate(50000));
  69.  
  70.             Console.ReadLine();
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment