Прошу покритиковать код моего консольного калькулятора - C#

Узнай цену своей работы

Формулировка задачи:

Прошу покритиковать код моего консольного калькулятор. Также я не уверен, что правильно организовал исключительные ситуации. Калькулятор принимает строки
4+5
2,1 * 5,2
interface ICalculator
        {
            void CalculateAmount(double value1, double value2);
            void CalculateDifference(double value1, double value2);
            void CalculateProduct(double value1, double value2);
            void CalculateQuotient(double value1, double value2);
        }
     
        class Calculator : ICalculator
        {
            private double firstValueEntry;
            private double secondValueEntry;
            private string arithmeticOperation;
            static string[] arithemitcOperations = { "+", "-", "*", "/", "q" };
     
            public double Result { get; private set; }

            public void CalculateAmount(double value1, double value2)
            {
                firstValueEntry = value1;
                secondValueEntry = value2;
                Result = firstValueEntry + secondValueEntry;
            }
     
            public void CalculateDifference(double value1, double value2)
            {
                firstValueEntry = value1;
                secondValueEntry = value2;
                Result = firstValueEntry - secondValueEntry;
            }
     
            public void CalculateProduct(double value1, double value2)
            {
                firstValueEntry = value1;
                secondValueEntry = value2;
                Result = firstValueEntry * secondValueEntry;
            }
     
            public void CalculateQuotient(double value1, double value2)
            {
                try
                {
                    if (value2 == 0)
                    {
                        throw new DivideByZeroException("Попытка деления на нуль.");
                    }
                    firstValueEntry = value1;
                    secondValueEntry = value2;
                    Result = firstValueEntry / secondValueEntry;
                }
                catch (DivideByZeroException e)
                {
                    Console.WriteLine(e);
                    Menu();
                }
            }
     
            public void ShowResult()
            {
                Console.WriteLine("Результат: {0}", Result);
            }
     
            private bool IsArithmeticOperation(string operation)
            {
                foreach (string searchOperation in arithemitcOperations)
                {
                    if (operation == searchOperation)
                        return true;
                }
     
                return false;
            }
     
            private string DeleteSpace(char[] partsArithmeticExpression)
            {
                string expression = string.Empty;
     
                for (int i = 0; i < partsArithmeticExpression.Length; i++)
                {
                    if (partsArithmeticExpression[i] == ' ')
                        continue;
                    if (IsArithmeticOperation(partsArithmeticExpression[i].ToString()))
                    {
                        arithmeticOperation = partsArithmeticExpression[i].ToString();
                    }
                    expression += partsArithmeticExpression[i];
                }
     
                return expression;
            }
     
            public void Menu()
            {
                string inputData = "";
                while (inputData != "q")
                {
                    try
                    {
                        Console.WriteLine("Введите математическое выражежение или q для выхода из программы");
                        inputData = Console.ReadLine();
                        while (string.IsNullOrEmpty(inputData))
                        {
                            Console.WriteLine("Вы не ввели математическое выражение. Введите пожалуйста.");
                            inputData = Console.ReadLine();
                        }
     
                        string[] stringSeparators = { "+", "-", "*", "/" };
                        string arthimeticExpression = DeleteSpace(inputData.ToCharArray());
                        string[] arrayOfarthimeticExpression = arthimeticExpression.Split(stringSeparators,
                                                                                          StringSplitOptions.None);
                        double value1 = 0;
                        double value2 = 0;
     
                        ////if (!((double.TryParse(arrayOfarthimeticExpression[0], out value1) &&
                        ////      double.TryParse(arrayOfarthimeticExpression[1], out value2)) || inputData == "q"))
                        ////    throw new FormatException("Строка имеет не вервый формат. Правильный вариант, например 5+2.");
                        //value1 = double.Parse(arrayOfarthimeticExpression[0]);
                        //value2 = double.Parse(arrayOfarthimeticExpression[1]);
     
                        if (inputData != "q")
                        {
                            value1 = double.Parse(arrayOfarthimeticExpression[0]);
                            value2 = double.Parse(arrayOfarthimeticExpression[1]);
                        }
     
                        switch (arithmeticOperation)
                        {
                            case "+":
                                CalculateAmount(value1, value2);
                                ShowResult();
                                break;
                            case "-":
                                CalculateDifference(value1, value2);
                                ShowResult();
                                break;
                            case "*":
                                CalculateProduct(value1, value2);
                                ShowResult();
                                break;
                            case "/":
                                CalculateQuotient(value1, value2);
                                ShowResult();
                                break;
                            case "q":
                                Console.WriteLine("Программа успешно завершенна.");
                                break;
                            default:
                                break;
                        }
                    }
                    catch (FormatException e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }
        }

        class Program
        {
            static void Main(string[] args)
            {
                Calculator calc = new Calculator();
                try
                {
                    calc.Menu();
                }
     
                catch (Exception)
                {
                    Console.WriteLine("Аварийное завершение работы программы.");
                }
            }
        }
    }

Решение задачи: «Прошу покритиковать код моего консольного калькулятора»

textual
Листинг программы
using System;
 
class Program
{
    static void Main()
    {
        Console.ForegroundColor = ConsoleColor.Magenta;
        Console.WriteLine("Консольный калькулятор (версия 1.0)");
        Console.WriteLine(' ');
        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.WriteLine(@"Выберите арифметическое действие:
            - Умножение (введите 1 и намите Enter)
            - Деление (введите 2 и намите Enter)
            - Сложение (введите 3 и намите Enter)
            - Вычитание (введите 4 и намите Enter)
            - Возведение числа в степень (введите 5 и намите Enter)");
        Console.ForegroundColor = ConsoleColor.Red;
        string q = Console.ReadLine();
        double a, b;
        Console.WriteLine(' ');
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Введите первое значение и намите Enter");
        Console.ForegroundColor = ConsoleColor.Red;
        a = double.Parse(Console.ReadLine());
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Введите второе значение и намите Enter");
        Console.ForegroundColor = ConsoleColor.Red;
        b = double.Parse(Console.ReadLine());
        Console.WriteLine(' ');
        if (q == "1")
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Результат умножения = {0}", a * b);
        }
        if (q == "2")
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Результат деления = {0}", a / b);
        }
        if (q == "3")
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Результат сложения = {0}", a + b);
        }
        if (q == "4")
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Результат вычитания = {0}", a - b);
        }
        if (q == "5")
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Результат возведения числа в степень = {0}", 
                Math.Pow(a, b));
        }
        Console.ReadKey();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5
Похожие ответы