Прошу покритиковать код моего консольного калькулятора - 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();
}
}