Свойства. Пример «Ввод целого числа в заданном диапазоне»

В профессиональных программах необходим контроль вводимых данных. Например, вам нужно ввести двухзначное целое число. Не важно, в каком приложении будет ввод числа, так как в C# числа получают после конвертации строки. Например, в консольном приложении:
int n = Convert.ToInt32(Console.ReadLine( ));
или в Windows-приложении через элемент textBox
int n =Convert.ToInt32(textBox1.Text);

При вводе данных ошибки могут быть двух типов:
1) введенная текстовая строка не может быть преобразована в целое число. При этом возникает исключительная ситуация, которая может быть обработана с использованием конструкции try-catch;
2) Другой случай — когда строка в  целое число преобразуется верно, но число выходит за требуемый в задаче диапазон. В этом случае также необходимы проверка, информирование пользователя и присвоение целочисленной переменной некоторого разумного значения.

Если таких данных более одного, то целесообразно решить эту проблему один раз, создав класс с необходимым набором инструментов.

Решение:

Создадим класс Restricted Integer Number (RIN) — «Ограниченное целое число»:

class RIN
{
   int min = 0;    // нижняя граница
   int max = 100;  // верхняя граница
   public string info = "число"; // имя параметра
   public bool n_bool; // успешность преобразования

   // Ограниченное число: поле n и свойство N
   int n;
   public int N    // свойство
   {
      get { return n; }
      set
      {
         if (value < min)
         {
            n = min;
            n_bool = false;
         }
         else if (value > max)
         {
            n = max;
            n_bool = false;
         }
         else
         {
            n = value;
            n_bool = true;
         }
      }
   }

   // конструктор
   public RIN(string n_st, int n_min, int n_max, int n_def, string n_info)
   {
      min = n_min;
      max = n_max;
      info = n_info;
      n_bool = true;
      try
         {
            N = Convert.ToInt32(n_st);
            if (!n_bool)
            {
               info = "Ошибка ввода параметра << " + info + " >>. Число вне диапазона. Автоматически присваивается нижняя/верхняя граница. Для изменения введите целое число от " + min.ToString() + " до " + max.ToString();
            }
         }
         catch
         {
            info = "Ошибка ввода параметра << " + info + " >>. Введите целое число от " + min.ToString() + " до " + max.ToString() + ". По умолчанию параметр =  " + n_def.ToString(); ;
            n = n_def;
            n_bool = false;
         }
      }
   }   // end class RIN

Использование свойства N гарантирует, что в программе полю n не может быть присвоено число вне заданного диапазона, что обеспечивается кодом аксессора set, см. также статью Свойства в C#.

Для проверки создадим консольное приложение с кодом в классе Program:

class Program
{
   static void Main(string[] args)
   {
      Console.Write("Введите двухзначное целое число: ");
      string number = Console.ReadLine();

      RIN k = new RIN(number, 10, 99, 55, "число");
      int n = k.N;

      Console.WriteLine("Ваше число: {0}",n);

      if (!k.n_bool)
         Console.WriteLine(k.info);

      Console.ReadKey();
   }
}

После ввода числа в строку number инициализируем объект k, используя конструктор с параметрами: 1-й — значение числа, 2-й и 3-й — минимальное и максимальное значение целого числа (для двухзначного числа это 10 и 99), 4-й параметр — некоторое «серединное» значение, когда строка не может быть преобразована в целое число, 5-й параметр — его имя.

Два общедоступных поля объекта string info  и bool n_bool можно использовать для анализа результата преобразования строки в число.

Тестовые значения:44 (ответ — 44), 9 (ответ -10), 100 (ответ — 99), qwerty (ответ -55). Последние три ответа сопровождаются сообщениями об ошибках ввода.

Заметим, что класс RIN может быть использован в Windows-приложении без изменений.

 


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x