Поделиться через


Руководство: Добавление математических задач в приложение WinForms для математической викторины

В этой серии четырех учебников вы создадите математический тест. Тест содержит четыре случайные математические задачи, которые участник теста пытается решить в течение указанного времени.

Элементы управления используют код C# или Visual Basic. В этом втором руководстве вы делаете тест сложным путем добавления кода для математических задач, основанных на случайных числах. Вы также создаете метод, который называется StartTheQuiz() для решения проблем.

В этом втором руководстве описано, как:

  • Написание кода для создания случайных объектов для использования в математических задачах.
  • Добавьте обработчик событий для кнопки запуска.
  • Напишите код, чтобы запустить тест.

Необходимые условия

Это руководство основывается на предыдущем руководстве, Создание приложения WinForms для математической викторины. Если вы еще не выполнили это руководство, сначала ознакомьтесь с ним.

Создайте случайное задание по сложению

  1. В проекте Visual Studio выберите конструктор Windows Forms.

  2. Выберите форму, Form1.

  3. В строке меню выберите пункт Вид>Код. появится Form1.cs или Form1.vb в зависимости от языка программирования, чтобы вы могли просмотреть код, связанный с формой.

  4. Создайте объект Random путем добавления инструкции new в верхней части кода в Form1.cs или Form1.vb.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    

Можно использовать new для создания кнопок, меток, панелей, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms и даже форм. Эти элементы называются объектами .

При запуске программы запускается форма. Код создает объект Random и называет его randomizer.

Викторина нуждается в переменных для хранения случайных чисел, создаваемых для каждой задачи. Перед использованием переменных вы объявите их, что означает перечисление их имен и типов данных.

  1. Добавьте две целые переменные в форму и присвойте им имя addend1 и addend2 в Form1.cs или Form1.vb.

    Заметка

    Целочисленная переменная называется int в C# или целочисленным в Visual Basic. Эта переменная сохраняет положительное или отрицательное число от -2147483648 до 2147483647 и может хранить только целые числа, а не десятичные.

    Вы используете аналогичный синтаксис для добавления целочисленной переменной, как и для добавления случайного объекта, как показано в следующем коде.

    // Create a Random object called randomizer 
    // to generate random numbers.
    Random randomizer = new Random();
    
    // These integer variables store the numbers 
    // for the addition problem. 
    int addend1;
    int addend2;
    

  1. Добавьте метод, который называется StartTheQuiz()Form1.cs или Form1.vb. Этот метод использует метод Next() случайного объекта для создания случайных чисел для меток. StartTheQuiz() в конечном итоге заполнит все поля, а затем запустит таймер, поэтому добавьте эти сведения в сводный комментарий. Функция должна выглядеть следующим образом.

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    }
    

При использовании метода Next() с случайным объектом, например при вызове randomizer.Next(51), вы получаете случайное число, которое меньше 51 или от 0 до 50. Этот код вызывает randomizer.Next(51), чтобы сумма двух случайных чисел была в диапазоне от 0 до 100.

Ознакомьтесь с этими заявлениями.

plusLeftLabel.Text = addend1.ToString();
plusRightLabel.Text = addend2.ToString();

Эти инструкции задают свойства textplusLeftLabel и plusRightLabel таким образом, чтобы они отображали два случайных числа. Элементы управления метками отображают значения в текстовом формате и в программировании, строки содержат текст. Метод ToString() каждого целого числа преобразует целое число в текст, который может отображать метка.

Создание случайных проблем вычитания, умножения и деления

Следующим шагом является объявление переменных и предоставление случайных значений для других математических задач.

  1. Добавьте целые переменные для оставшихся математических проблем в форму после добавления переменных проблемы. Код в Form1.cs или Form1.vb должен выглядеть следующим образом.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    
        // These integer variables store the numbers 
        // for the addition problem. 
        int addend1;
        int addend2;
    
        // These integer variables store the numbers 
        // for the subtraction problem. 
        int minuend;
        int subtrahend;
    
        // These integer variables store the numbers 
        // for the multiplication problem. 
        int multiplicand;
        int multiplier;
    
        // These integer variables store the numbers 
        // for the division problem. 
        int dividend;
        int divisor;
    

  1. Измените метод StartTheQuiz() в Form1.cs или Form1.vb, добавив следующий код. Начните с комментария "Заполните задачу вычитания".

    /// <summary>
    /// Start the quiz by filling in all of the problem 
    /// values and starting the timer. 
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    
        // Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101);
        subtrahend = randomizer.Next(1, minuend);
        minusLeftLabel.Text = minuend.ToString();
        minusRightLabel.Text = subtrahend.ToString();
        difference.Value = 0;
    
        // Fill in the multiplication problem.
        multiplicand = randomizer.Next(2, 11);
        multiplier = randomizer.Next(2, 11);
        timesLeftLabel.Text = multiplicand.ToString();
        timesRightLabel.Text = multiplier.ToString();
        product.Value = 0;
    
        // Fill in the division problem.
        divisor = randomizer.Next(2, 11);
        int temporaryQuotient = randomizer.Next(2, 11);
        dividend = divisor * temporaryQuotient;
        dividedLeftLabel.Text = dividend.ToString();
        dividedRightLabel.Text = divisor.ToString();
        quotient.Value = 0;
    

Этот код использует метод Next() класса Random немного иначе, чем это делает задача на сложение. При указании двух значений метода Next() выбирается случайное число, которое больше или равно первому значению и меньше второго.

Используя метод Next() с двумя аргументами, можно убедиться, что проблема вычитания имеет положительный ответ, ответ умножения составляет не более 100, и ответ деления не является дробью.

Добавление обработчика событий в кнопку "Пуск"

В этом разделе вы добавите код для запуска теста при выборе кнопки запуска. Код, который выполняется в реакции на событие, например выбор кнопки, называется обработчиком событий.

  1. В конструкторе Windows Formsдважды щелкните кнопку Запустить викторину или выберите её, затем нажмите ВВОД. Появится код формы, и отображается новый метод.

    Эти действия добавляют обработчик событий к кнопке "Пуск". Когда участник теста выбирает эту кнопку, приложение запускает код, который вы добавите в этот новый метод.

  2. Добавьте следующие два оператора, чтобы обработчик событий запускал тест.

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    

Первая инструкция вызывает новый метод StartTheQuiz(). Вторая инструкция устанавливает свойство Включено элемента управления startButton в значение false, чтобы принимающий тест не мог выбрать кнопку во время теста.

Запуск приложения

  1. Сохраните код.

  2. Запустите приложение, а затем выберите Запустить тест. На экране появляются случайные математические задачи, как показано на следующем снимке.

    снимок экрана со случайными значениями во всех четырех математических задачах. Кнопка

Дальнейшие действия

Перейдите к следующему руководству, чтобы добавить таймер в математический тест и проверить ответы пользователей.