Задать вопрос

Какие изменения можно внести в лучшую сторону, и почему?

Привет всем.
Знакомых программистов у меня нет. Так что и спросить не у кого. Изучаю C# по "Г. Шилдт С# 4.0 полное руководство" - пока на 241 странице.

Написал небольшой консольный калькулятор. Всё как-бы работает и не падает. А вопрос, собственно, в заголовке.
Приму любую конструктивную критику.

using System;

class Program
{
    static void Main(string[] args)
    {
        Calculator calculator = new Calculator();
        calculator.Header();
        calculator.Instruction();
        calculator.Start();
    }
}

public class Calculator
{
    string number;
    char znak;
    double[] Numbers = {0, 0};

    public void Start()
    {
        InputNumbers();
        InputAction();
        DataProcessing();
    }

    public void Header()
    {
        Console.WriteLine("Программа \"Простой калькулятор\"");
    }

    public void Instruction()
    {
        Console.WriteLine("\nДля дроби используй запятую - ','");
        Console.WriteLine("+ - для сложения чисел");
        Console.WriteLine("- - для вычитания чисел");
        Console.WriteLine("* - для умножения чисел");
        Console.WriteLine("/ - для деления чисел");
        Console.WriteLine("q - для выхода из программы\n");
    }

    void InputNumbers()
    {
        for (int count = 0; count < Numbers.Length; count++)
        {
            Console.Write("Введите {0} число: ", count + 1);
            number = Console.ReadLine();

            if (number == "q")
            {
                Environment.Exit(0);
            }
            else
            {
                try
                {
                    Numbers[count] = Convert.ToDouble(number);
                }
                catch
                {
                    Console.WriteLine("{0}-число не может принять значение \"{1}\". Внимательно читайте интрукцию.", count + 1, number);
                    Instruction();
                    Start();
                }
            }
        }        
    }

    void InputAction()
    {
        Console.Write("Введите действие: ");
        number = Console.ReadLine();

        if (number == "q")
        {
            Environment.Exit(0);
        }
        else
        {
            try
            {
                znak = Convert.ToChar(number);
            }
            catch
            {
                Instruction();
                InputAction();
            }
        }

        if(Numbers[1] == 0 & znak == '/')
        {
            Console.WriteLine("\n<<<<<<      Деление на нуль невозможно      >>>>>>\n");
            Start();
        }
    }

    void DataProcessing()
    {
        switch (znak)
        {
            case '+': Console.WriteLine("\n<<<<<<      {0} + {1} = {2}      >>>>>>\n", Numbers[0], Numbers[1], Numbers[0] + Numbers[1]); break;
            case '-': Console.WriteLine("\n<<<<<<      {0} - {1} = {2}      >>>>>>\n", Numbers[0], Numbers[1], Numbers[0] - Numbers[1]); break;
            case '*': Console.WriteLine("\n<<<<<<      {0} * {1} = {2}      >>>>>>\n", Numbers[0], Numbers[1], Numbers[0] * Numbers[1]); break;
            case '/': Console.WriteLine("\n<<<<<<      {0} / {1} = {2}      >>>>>>\n", Numbers[0], Numbers[1], Numbers[0] / Numbers[1]); break;
        }
        Start();
    }
}
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
Код читал поверхностно и советов по оптимизации не дам, но скажу что от вашего кода сильно пахнет процедурным программированием. Я тут немножко про другое. Вы калькулятором пользовались когда-нибудь? настоящим или виндовым или еще каким-то. Никто не просит ввести число, никто не просит ввести действия. Человек нажимает последовательность кнопок исходя из которых решается действие. Читайте не строку, а каждую нажатую кнопку. Если цифра - обновить цифру , если знак - проставить действие, если enter - вывести результат. Подумайте не о том как проще написать вычисления вам, а о том как работает реальный калькулятор.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы