public void CreatePosition(PositionNode parent, Position positionToCreate, string parentPositionName)
        {
            PositionNode newNode = new PositionNode();

            newNode.Position = positionToCreate;

            if (Root == null)
            {
                Root = newNode;
                return;
            }
            if (parent == null)
            {
                return;
            }
            if (parent.Position.Name == parentPositionName)
            {
                if (parent.Left == null)
                {
                    parent.Left = newNode;
                    return;
                }
                parent.Right = newNode;
                return;
            }
            CreatePosition(parent.Left, positionToCreate, parentPositionName);
            CreatePosition(parent.Right, positionToCreate, parentPositionName);
        }
 //Average Position Salary
 public PositionNode searchNode(PositionNode from, string position)
 {
     if (from != null)
     {
         //Para saber si el nodo es el que busco
         if (from.Position.Name.Equals(position))
         {
             return(from);
         }
         else
         {
             //Guardo nodo temporal la busqueda de izquierda
             temp = searchNode(from.Left, position);
             if (temp == null)
             {
                 temp = searchNode(from.Left, position);
             }
             temp = searchNode(from.Right, position);
             if (temp != null)
             {
                 temp = searchNode(from.Right, position);
             }
         }
     }
     return(temp);
 }
 //Add Taxation
 public float AddTaxation(PositionNode from)
 {
     if (from == null)
     {
         return(0);
     }
     return(from.Position.Tax + AddTaxation(from.Left) + AddTaxation(from.Right));
 }
 //Add Salaries
 public float AddSalaries(PositionNode from)
 {
     if (from == null)
     {
         return(0);
     }
     return(from.Position.Salary + AddSalaries(from.Left) + AddSalaries(from.Right));
 }
 //Money Taxation
 public float TaxationMoney(PositionNode from)
 {
     if (from == null)
     {
         return(0);
     }
     return(from.Position.Salary * from.Position.Tax + TaxationMoney(from.Right) + TaxationMoney(from.Left));
 }
 //Print Tree
 public void PrintTree(PositionNode from)
 {
     if (from == null)
     {
         return;
     }
     Console.WriteLine($"{from.Position.Name}: Salary: {from.Position.Salary}: Impuesto: {from.Position.Tax}");
     PrintTree(from.Left);
     PrintTree(from.Right);
 }
        //Count Nodes
        public float CountNodes(PositionNode from)
        {
            if (from == null)
            {
                return(0);
            }
            float izq = CountNodes(from.Left);
            float der = CountNodes(from.Right);

            return(izq + der + 1);
        }
        //Average Salaries
        public float AverageSalaries(PositionNode from)
        {
            if (from == null)
            {
                return(0);
            }
            float sumSalaries = from.Position.Salary + AddSalaries(from.Left) + AddSalaries(from.Right);
            float count       = CountNodes(Root);

            return(sumSalaries / count);
        }
 //Longest Salary
 public void LongestSalary(PositionNode from)
 {
     if (from == null)
     {
         return;
     }
     if (from.Position.Salary > longSalary && from.Position.Salary != Root.Position.Salary)
     {
         longSalary = from.Position.Salary;
         temp       = from;
     }
     LongestSalary(from.Left);
     LongestSalary(from.Right);
 }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            Position rectorPosition = new Position();

            rectorPosition.Name   = "Rector";
            rectorPosition.Salary = 1000;
            rectorPosition.Tax    = 0.30f;

            Position viceFinPosition = new Position();

            viceFinPosition.Name   = "Vicerrector Financiero";
            viceFinPosition.Salary = 750;
            viceFinPosition.Tax    = 0.28f;

            Position viceAcadPosition = new Position();

            viceAcadPosition.Name   = "Vicerrector Academico";
            viceAcadPosition.Salary = 780;
            viceAcadPosition.Tax    = 0.26f;

            Position contadorPosition = new Position();

            contadorPosition.Name   = "Contador Financiero";
            contadorPosition.Salary = 500;
            contadorPosition.Tax    = 0.24f;

            Position jefeFinPosition = new Position();

            jefeFinPosition.Name   = "Jefe Financiero";
            jefeFinPosition.Salary = 610;
            jefeFinPosition.Tax    = 0.22f;

            Position secFin1Position = new Position();

            secFin1Position.Name   = "Secretaria Financiera 1";
            secFin1Position.Salary = 350;
            secFin1Position.Tax    = 0.20f;

            Position secFin2Position = new Position();

            secFin2Position.Name   = "Secretaria Financiera 2";
            secFin2Position.Salary = 310;
            secFin2Position.Tax    = 0.18f;

            Position jefeRegPosition = new Position();

            jefeRegPosition.Name   = "Jefe de Registro";
            jefeRegPosition.Salary = 640;
            jefeRegPosition.Tax    = 0.16f;

            Position secReg1Position = new Position();

            secReg1Position.Name   = "Secretaria de Registro 1";
            secReg1Position.Salary = 360;
            secReg1Position.Tax    = 0.14f;

            Position secReg2Position = new Position();

            secReg2Position.Name   = "Secretaria de Registro 2";
            secReg2Position.Salary = 400;
            secReg2Position.Tax    = 0.12f;

            Position asisReg1Position = new Position();

            asisReg1Position.Name   = "Asistente de Registro 1";
            asisReg1Position.Salary = 170;
            asisReg1Position.Tax    = 0.10f;

            Position asisReg2Position = new Position();

            asisReg2Position.Name   = "Asistente de Registro 2";
            asisReg2Position.Salary = 250;
            asisReg2Position.Tax    = 0.8f;

            Position mensRegPosition = new Position();

            mensRegPosition.Name   = "Mensajero de Registro";
            mensRegPosition.Salary = 90;
            mensRegPosition.Tax    = 0.6f;


            UniversityTree universityTree = new UniversityTree();

            universityTree.CreatePosition(null, rectorPosition, null);

            universityTree.CreatePosition(universityTree.Root, viceFinPosition, rectorPosition.Name);
            universityTree.CreatePosition(universityTree.Root, contadorPosition, viceFinPosition.Name);
            universityTree.CreatePosition(universityTree.Root, secFin1Position, contadorPosition.Name);
            universityTree.CreatePosition(universityTree.Root, secFin2Position, contadorPosition.Name);
            universityTree.CreatePosition(universityTree.Root, jefeFinPosition, viceFinPosition.Name);
            universityTree.CreatePosition(universityTree.Root, viceAcadPosition, rectorPosition.Name);
            universityTree.CreatePosition(universityTree.Root, jefeRegPosition, viceAcadPosition.Name);
            universityTree.CreatePosition(universityTree.Root, secReg1Position, jefeRegPosition.Name);
            universityTree.CreatePosition(universityTree.Root, secReg2Position, jefeRegPosition.Name);
            universityTree.CreatePosition(universityTree.Root, asisReg1Position, secReg2Position.Name);
            universityTree.CreatePosition(universityTree.Root, mensRegPosition, asisReg1Position.Name);
            universityTree.CreatePosition(universityTree.Root, asisReg2Position, secReg2Position.Name);

            Console.WriteLine($"DATOS ARBOL");
            universityTree.PrintTree(universityTree.Root);
            Console.WriteLine($"-------------------------------------------------------------");

            //Total Salary
            float totalSalary = universityTree.AddSalaries(universityTree.Root);

            Console.WriteLine($"Total Salaries: {totalSalary}");
            //Total Taxation
            float totalTax = universityTree.AddTaxation(universityTree.Root);

            Console.WriteLine($"Total Taxation: {totalTax}");
            //Count Nodes
            float contador = universityTree.CountNodes(universityTree.Root);

            Console.WriteLine($"Contador: {contador}");
            Console.WriteLine($"-------------------------------------------------------------");

            //Longest Salary
            universityTree.LongestSalary(universityTree.Root);
            Console.WriteLine($"The highest salary is: {universityTree.longSalary}" + " and he wins it: " + universityTree.temp.Position.Name);
            Console.WriteLine($"-------------------------------------------------------------");
            //Average Salary
            float averageSalary = universityTree.AverageSalaries(universityTree.Root);

            Console.WriteLine($"Average: {averageSalary}");
            Console.WriteLine($"-------------------------------------------------------------");
            //Average Salary Position
            PositionNode position          = universityTree.searchNode(universityTree.Root, "Contador Financiero");
            float        sumSalaryPosition = universityTree.AddSalaries(position);
            float        countPosition     = universityTree.CountNodes(position);

            Console.WriteLine($"According to the position given the average wages is: {position.Position.Name}" + $" is: {sumSalaryPosition / countPosition} ");
            Console.WriteLine($"-------------------------------------------------------------");
            //Total Salary Taxation
            float taxSalary = universityTree.TaxationMoney(universityTree.Root);

            Console.WriteLine($"Taxation Salaries: {taxSalary}");
            Console.WriteLine($"-------------------------------------------------------------");
            Console.ReadLine();
        }