Прошу покритиковать код моего консольного калькулятора - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д