public void Previous(ICalculatorComponent calculator)
        {
            Index += PreviousI;
            bool end  = EndOfCollection();
            int  temp = Index;

            while (temp >= 0)
            {
                while (!end)
                {
                    ShowSingle(Index, calculator);
                    end = true;
                }

                temp = -1;
            }

            temp = Index;
            while (temp < 0)
            {
                Index = 0;
                temp  = Index;
                WriteToConsole.Write("\nYou are at the beginning of the calculation history.");
                First(calculator);
            }
        }
        public override void ExecuteConsole(Invoker command, ICalculatorComponent calculator, ILogger <CalculatorManager> logger)
        {
            bool check = UserChoiceCheck(command);

            while (check)
            {
                Prompts.Addition();

                double a, b;
                double result;

                Prompts.FirstNumber();
                a = Convert.ToDouble(Console.ReadLine());
                Prompts.SecondNumber();
                b = Convert.ToDouble(Console.ReadLine());

                calculator.Operations["addition"].CreateCalculation(calculator, a, b);
                result = calculator.Operations["addition"].GetResult(calculator);

                Prompts.Result(result);

                calculator.UserOperations.Add("+");
                calculator.CalculatorState.Add(new Context(new Unmodified()));
                check = false;
            }
        }
Beispiel #3
0
        // Event Handler
        public static ICalculatorComponent Handler(ICalculatorComponent calculator)
        {
            ICalculatorComponent squareroot = new SquareRootDecorator(calculator);

            calculator.Operations["square root"] = squareroot;

            return(calculator);
        }
        // Event Handler
        public static ICalculatorComponent Handler(ICalculatorComponent calculator)
        {
            ICalculatorComponent multiplication = new MultiplicationDecorator(calculator);

            calculator.Operations["multiplication"] = multiplication;

            return(calculator);
        }
Beispiel #5
0
 public KKMDecorator(ICalculatorComponent component, int kkmCount, int baseKkmCount, decimal price) : base(component)
 {
     mPrice = price;
     if (kkmCount > baseKkmCount)
     {
         mExtraKKMCount = kkmCount - baseKkmCount;
     }
 }
        // Event Handler
        public static ICalculatorComponent Handler(ICalculatorComponent calculator)
        {
            ICalculatorComponent subtraction = new SubtractionDecorator(calculator);

            calculator.Operations["subtraction"] = subtraction;

            return(calculator);
        }
Beispiel #7
0
        // Event Handler
        public static ICalculatorComponent Handler(ICalculatorComponent calculator)
        {
            ICalculatorComponent addition = new AdditionDecorator(calculator);

            calculator.Operations["addition"] = addition;

            return(calculator);
        }
Beispiel #8
0
        // Event Handler
        public static ICalculatorComponent Handler(ICalculatorComponent calculator)
        {
            ICalculatorComponent division = new DivisionDecorator(calculator);

            calculator.Operations["division"] = division;

            return(calculator);
        }
        public static void Activate(ICalculatorComponent calculator, Publisher publisher)
        {
            bool repeat = true;

            while (repeat)
            {
                Prompts.Functionality();

                String Done           = "";
                string operationInput = Console.ReadLine();

                while ((!operationInput.Equals("addition")) && (!operationInput.Equals("subtraction")) && (!operationInput.Equals("multiplication")) && (!operationInput.Equals("division") && (!operationInput.Equals("square root") && (!operationInput.Equals("square")) && (!operationInput.Equals("DONE")))))
                {
                    Prompts.NotAvailable();
                    operationInput = Console.ReadLine();
                }

                while (!Done.Equals("DONE"))
                {
                    Invoker command1 = new Invoker(operationInput);
                    calculator.Commands.Add(command1);
                    Prompts._Functionality();
                    operationInput = Console.ReadLine();
                    while ((!operationInput.Equals("addition")) && (!operationInput.Equals("subtraction")) && (!operationInput.Equals("multiplication")) && (!operationInput.Equals("division") && (!operationInput.Equals("square root") && (!operationInput.Equals("square")) && (!operationInput.Equals("DONE")))))
                    {
                        Prompts.NotAvailable();
                        operationInput = Console.ReadLine();
                    }
                    Done   = operationInput;
                    repeat = false;
                }

                Prompts.Divider();
            }

            Invoker finalCommand = new Invoker("Final Command");

            calculator.Commands.Add(finalCommand);

            // Handle User Input
            foreach (Invoker command in calculator.Commands)
            {
                string op = command.OperationString;

                while (op != "Final Command")
                {
                    // Event
                    calculator = publisher.AddFunctionality(command, calculator);
                    op         = "Final Command";
                }
            }
        }
Beispiel #10
0
        // The event adds functionality based on user input.
        public virtual ICalculatorComponent AddFunctionality(Invoker command, ICalculatorComponent calculator)
        {
            Operation = command.OperationString;
            command.Addition.Execute(command, calculator);
            command.Subtraction.Execute(command, calculator);
            command.Multiplication.Execute(command, calculator);
            command.Division.Execute(command, calculator);
            command.SquareRoot.Execute(command, calculator);
            command.Square.Execute(command, calculator);
            OnAddOperation(EventArgs.Empty);

            return(calculator);
        }
        public override ICalculatorComponent Execute(Invoker command, ICalculatorComponent calculator)
        {
            bool check = UserInputCheck(command);

            while (check)
            {
                calculator.OnAdd_Addition(calculator);
                calculator.TempOperations.Add("Addition", new AdditionDecorator(calculator));
                calculator = Events.Addition.Handler(calculator);
                check      = false;
            }

            return(calculator);
        }
Beispiel #12
0
        public override void ExecuteConsole(Invoker command, ICalculatorComponent calculator, ILogger <CalculatorManager> logger)
        {
            bool check = UserChoiceCheck(command);

            while (check)
            {
                Prompts.Division();

                double a, b;
                int    c, d;
                double result, test;
                bool   skip = false;

                Prompts.FirstNumber();
                a = Convert.ToDouble(Console.ReadLine());
                c = (int)a;

                Prompts.SecondNumber();
                b = Convert.ToDouble(Console.ReadLine());
                d = (int)b;

                // Handles Divide By Zero Condition + Log Entry
                try
                {
                    test = c / d;
                }
                catch (DivideByZeroException e)
                {
                    skip = true;
                    Prompts.Logger();
                    logger.LogInformation(e.Message);
                }

                while ((skip.Equals(false)) && (b != 0))
                {
                    calculator.Operations["division"].CreateCalculation(calculator, a, b);
                    result = calculator.Operations["division"].GetResult(calculator);

                    Prompts.Result(result);

                    calculator.UserOperations.Add("/");
                    calculator.CalculatorState.Add(new Context(new Unmodified()));
                    check = false;
                    skip  = true;
                }

                check = false;
                skip  = false;
            }
        }
        // Console Manager
        public static void Activate(ICalculatorComponent calculator, Publisher publisher, ILogger <CalculatorManager> logger)
        {
            Prompts.Intro();

            // User adds functionality to calculator.
            Decorator.Activate(calculator, publisher);

            // User chooses the operation they want to calculate from the functionality they added to the calculator and performs calculations.
            Receiver.Activate(calculator, logger);

            // User is displayed options to view the calculation history if different formats, perform another calculation, or exit the program.
            Options.Activate(calculator, logger);

            Prompts.Outro();
        }
        public static void DisplayOperations(ICalculatorComponent calculator, String options)
        {
            foreach (Invoker command in calculator.Commands)
            {
                string op = command.OperationString;

                while (op != "Final Command")
                {
                    options += command.OperationString;
                    options += ",";
                    op       = "Final Command";
                }
            }

            options = options.Replace(",", " | ");
            WriteToConsole.Write($"| {options}\n");
        }
        public void Next(ICalculatorComponent calculator)
        {
            Index += NextI;
            bool end = EndOfCollection();

            while (!end)
            {
                ShowSingle(Index, calculator);
                end = true;
            }

            end = EndOfCollection();
            while (end)
            {
                Index = CalculationHistory.Count - 1;
                WriteToConsole.Write("\nYou are at the end of the calculation history.");
                Last(calculator);
                end = false;
            }
        }
        public static void Activate(ICalculatorComponent calculator, ILogger <CalculatorManager> logger)
        {
            string another = "YES";

            while (!another.Equals("NO"))
            {
                Prompts.ChooseOperation();

                string options = "";
                DisplayOperations(calculator, options);

                string  choice           = Console.ReadLine();
                Invoker command2         = new Invoker(choice + "_USER_CHOICE");
                Invoker finalCalculation = new Invoker("Final Calculation");
                calculator.Commands2.Add(command2);
                calculator.Commands2.Add(finalCalculation);

                // Handle User Input
                string last = "";
                foreach (Invoker command in calculator.Commands2)
                {
                    while (!last.Equals("Final Calculation"))
                    {
                        command.Addition.ExecuteConsole(command, calculator, logger);
                        command.Subtraction.ExecuteConsole(command, calculator, logger);
                        command.Multiplication.ExecuteConsole(command, calculator, logger);
                        command.Division.ExecuteConsole(command, calculator, logger);
                        command.SquareRoot.ExecuteConsole(command, calculator, logger);
                        command.Square.ExecuteConsole(command, calculator, logger);
                        last += "Final Calculation";
                    }
                }

                Prompts.Another();
                another = Console.ReadLine();
                calculator.Commands2.Clear();
                options = "";
            }
        }
        public static void Activate(ICalculatorComponent calculator, ILogger <CalculatorManager> logger)
        {
            string choice = "";

            while (!choice.Equals("6"))
            {
                Prompts.Options();

                choice = Console.ReadLine();

                CalculationHistory.Activate(calculator, choice);


                // | 3 | Create New Calculations
                while (choice.Equals("3"))
                {
                    WriteToConsole.Write("\n");
                    Receiver.Activate(calculator, logger);
                    choice = "pass";
                }

                // | 4 | Display What The Calculator Is Capable Of Doing (In Its Current State)
                while (choice.Equals("4"))
                {
                    Prompts.Capability();
                    Receiver.DisplayOperations(calculator, "");
                    Prompts.Back();
                    String enter = Console.ReadLine();
                    choice = "pass";
                }

                while ((!choice.Equals("1")) && (!choice.Equals("2")) && (!choice.Equals("3")) && (!choice.Equals("4") && (!choice.Equals("5")) && (!choice.Equals("6")) && (!choice.Equals("pass"))))
                {
                    Prompts.Unavailable();
                    String enter = Console.ReadLine();
                    choice = "pass";
                }
            }
        }
Beispiel #18
0
        public override void ExecuteConsole(Invoker command, ICalculatorComponent calculator, ILogger <CalculatorManager> logger)
        {
            bool check = UserChoiceCheck(command);

            while (check)
            {
                Prompts.SquareRoot();

                double a;
                double result;

                Prompts.Number();
                a = Convert.ToDouble(Console.ReadLine());

                calculator.Operations["square root"].CreateCalculation(calculator, a);
                result = calculator.Operations["square root"].GetResult(calculator);

                Prompts.Result(result);

                calculator.UserOperations.Add("SQUARE ROOT OF");
                calculator.CalculatorState.Add(new Context(new Unmodified()));
                check = false;
            }
        }
Beispiel #19
0
 public abstract void ExecuteConsole(Invoker command, ICalculatorComponent calculator, ILogger <CalculatorManager> logger);
Beispiel #20
0
 public abstract ICalculatorComponent Execute(Invoker command, ICalculatorComponent calculator);
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //AbstractCalculatorDecorator currentDecorator;

            // Base
            BaseCalculatorComponent baseComponent
                = new BaseCalculatorComponent(cmb_taxRegime.SelectedValue.ToString(), cmb_operationCountRanges.SelectedValue.ToString(), new BasicPriceList());

            ICalculatorComponent currentComponent = baseComponent;

            // Employees decorator
            EmployeesCalculatorDecorator employeeDecorator = new EmployeesCalculatorDecorator(currentComponent, BASE_EMPLOYEE_COUNT, EXTRA_EMPLOYEE_PRICE);

            employeeDecorator.EmployeeCount = nud_employees.Value.Value;
            currentComponent = employeeDecorator;

            // VED decorator
            if (chk_ved.IsChecked.Value)
            {
                VEDExportImportDecorator vedDecorator = new VEDExportImportDecorator(currentComponent, VED_PRICE);
                currentComponent = vedDecorator;
            }
            // Currency account decorator
            CurrencyAccountCountDecorator currencyDecorator
                = new CurrencyAccountCountDecorator(currentComponent, price: CURRENCY_ACCOUNT_PRICE, accountCount: nud_currencyAccounts.Value.Value);

            currentComponent = currencyDecorator;

            // KKM decorator
            KKMDecorator kkmDecorator = new KKMDecorator(currentComponent, nud_kkmCount.Value.Value, BASE_KKM_COUNT, EXTRA_KKM_PRICE);

            currentComponent = kkmDecorator;

            // Branches decorator
            if (chk_branches.IsChecked.Value)
            {
                BranchesDecorator branchesDecorator
                    = new BranchesDecorator(currentComponent, EXTRA_BRANCH_PRICE);
                currentComponent = branchesDecorator;
            }
            // Leasing/Credit
            if (chk_leasingCredits.IsChecked.Value)
            {
                LeasingCreditDecorator leasingCreditDecorator = new LeasingCreditDecorator(currentComponent, LEASING_CREDIT_PRICE);
                currentComponent = leasingCreditDecorator;
            }
            // Expats decorator
            ExpatsDecorator expatsDecorator = new ExpatsDecorator(currentComponent, nud_expatCount.Value.Value, EXPAT_PRICE);

            currentComponent = expatsDecorator;

            // Client bank decorator
            if (chk_clientBank.IsChecked.Value)
            {
                ClientBankDecorator clientBankDecorator = new ClientBankDecorator(currentComponent, CLIENT_BANK_PRICE);
                currentComponent = clientBankDecorator;
            }
            // Primary documents decorator
            if (chk_primaryDocuments.IsChecked.Value)
            {
                PrimaryDocumentsDecorator primaryDocumentsDecorator = new PrimaryDocumentsDecorator(currentComponent, baseComponent, PRIMERY_DOCUMENTS_PERCENT);
                currentComponent = primaryDocumentsDecorator;
            }
            // Fixed assets decorator
            if (chk_fixedAssets.IsChecked.Value)
            {
                FixedAssetsDecorator fixedAssetsDecorator = new FixedAssetsDecorator(currentComponent, FIXED_ASSETS_PRICE);
                currentComponent = fixedAssetsDecorator;
            }
            // Manufacture decorator
            if (chk_manufacture.IsChecked.Value)
            {
                ManufactureDecorator manufactureDecorator = new ManufactureDecorator(currentComponent, baseComponent, MANUFACTURE_PERCENT);
                currentComponent = manufactureDecorator;
            }

            // RESULT

            lbl_result.Content = currentComponent.GetPrice() * HIDDEN_COEFFICIENT + " rub.";

            //
            // Additional services
            //

            DummyBaseComponent   dummy          = new DummyBaseComponent();
            ICalculatorComponent addServCurrent = dummy;

            if (chk_keepingDocumentsOfPastYears.IsChecked.Value)
            {
                KeepingDocumentsOFPastYears keepingDecor = new KeepingDocumentsOFPastYears(addServCurrent, KEEPING_DOCUMENTS_OF_PAST_YEARS_PRICE);
                addServCurrent = keepingDecor;
            }

            if (chk_preparingDocumentsForTrading.IsChecked.Value)
            {
                PreparingDocumentsForBargainingDecorator preparingDocumentsDecor = new PreparingDocumentsForBargainingDecorator(addServCurrent, PREPARING_DOCUMENTS_FOR_BARGAINING_PRICE);
                addServCurrent = preparingDocumentsDecor;
            }

            if (chk_resubmissionOfDocuments.IsChecked.Value)
            {
                ResubmissionOfReport resubmissionDecor = new ResubmissionOfReport(addServCurrent, RESUBMISSION_OF_REPORT_PRICE);
                addServCurrent = resubmissionDecor;
            }
            // RESULT
            lbl_AdditionalServiceResult.Content = addServCurrent.GetPrice() + " rub.";
        }
 public ClientBankDecorator(ICalculatorComponent component, decimal price) : base(component)
 {
     mPrice = price;
 }
Beispiel #23
0
 public SquareDecorator(ICalculatorComponent calculator) : base(calculator)
 {
 }
Beispiel #24
0
 public override double GetResult(ICalculatorComponent calculator)
 {
     return(calculator.CalculationHistory[^ 1].Operation(calculator.CalculationHistory[^ 1].A, 0));
 public AdditionDecorator(ICalculatorComponent calculator) : base(calculator)
 {
 }
 public CurrencyAccountCountDecorator(ICalculatorComponent component, decimal price, int accountCount) : base(component)
 {
     mAccountCount = accountCount;
     mPrice        = price;
 }
 public BranchesDecorator(ICalculatorComponent component, decimal price) : base(component)
 {
     mPrice = price;
 }
 public ExpatsDecorator(ICalculatorComponent component, int expatCount, decimal price) : base(component)
 {
     mPrice      = price;
     mExpatCount = expatCount;
 }
 public PrimaryDocumentsDecorator(ICalculatorComponent component, ICalculatorComponent baseComponent, decimal percent) : base(component)
 {
     mPercent       = percent;
     mBaseComponent = baseComponent;
 }
Beispiel #30
0
        public override Calculation CreateCalculation(ICalculatorComponent calculator, double a)
        {
            var square = Calculation.Create(a, 0, Operations.Square, calculator);

            return(square);
        }