Руководство: Добавление математических задач в приложение WinForms для математической викторины
В этой серии четырех учебников вы создадите математический тест. Тест содержит четыре случайные математические задачи, которые участник теста пытается решить в течение указанного времени.
Элементы управления используют код C# или Visual Basic. В этом втором руководстве вы делаете тест сложным путем добавления кода для математических задач, основанных на случайных числах. Вы также создаете метод, который называется StartTheQuiz()
для решения проблем.
В этом втором руководстве описано, как:
- Написание кода для создания случайных объектов для использования в математических задачах.
- Добавьте обработчик событий для кнопки запуска.
- Напишите код, чтобы запустить тест.
Необходимые условия
Это руководство основывается на предыдущем руководстве, Создание приложения WinForms для математической викторины. Если вы еще не выполнили это руководство, сначала ознакомьтесь с ним.
Создайте случайное задание по сложению
В проекте Visual Studio выберите конструктор Windows Forms.
Выберите форму, Form1.
В строке меню выберите пункт Вид>Код. появится Form1.cs или Form1.vb в зависимости от языка программирования, чтобы вы могли просмотреть код, связанный с формой.
Создайте объект Random путем добавления инструкции
new
в верхней части кода в Form1.cs или Form1.vb.
Можно использовать new
для создания кнопок, меток, панелей, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms и даже форм. Эти элементы называются объектами .
При запуске программы запускается форма. Код создает объект Random и называет его randomizer.
Викторина нуждается в переменных для хранения случайных чисел, создаваемых для каждой задачи. Перед использованием переменных вы объявите их, что означает перечисление их имен и типов данных.
Добавьте две целые переменные в форму и присвойте им имя addend1 и addend2 в Form1.cs или Form1.vb.
Заметка
Целочисленная переменная называется int в C# или целочисленным в Visual Basic. Эта переменная сохраняет положительное или отрицательное число от -2147483648 до 2147483647 и может хранить только целые числа, а не десятичные.
Вы используете аналогичный синтаксис для добавления целочисленной переменной, как и для добавления случайного объекта, как показано в следующем коде.
Добавьте метод, который называется
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.
Ознакомьтесь с этими заявлениями.
Эти инструкции задают свойства textplusLeftLabel и plusRightLabel таким образом, чтобы они отображали два случайных числа. Элементы управления метками отображают значения в текстовом формате и в программировании, строки содержат текст. Метод ToString()
каждого целого числа преобразует целое число в текст, который может отображать метка.
Создание случайных проблем вычитания, умножения и деления
Следующим шагом является объявление переменных и предоставление случайных значений для других математических задач.
Добавьте целые переменные для оставшихся математических проблем в форму после добавления переменных проблемы. Код в 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;
Измените метод
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, и ответ деления не является дробью.
Добавление обработчика событий в кнопку "Пуск"
В этом разделе вы добавите код для запуска теста при выборе кнопки запуска. Код, который выполняется в реакции на событие, например выбор кнопки, называется обработчиком событий.
В конструкторе Windows Formsдважды щелкните кнопку Запустить викторину или выберите её, затем нажмите ВВОД. Появится код формы, и отображается новый метод.
Эти действия добавляют обработчик событий к кнопке "Пуск". Когда участник теста выбирает эту кнопку, приложение запускает код, который вы добавите в этот новый метод.
Добавьте следующие два оператора, чтобы обработчик событий запускал тест.
Первая инструкция вызывает новый метод StartTheQuiz()
. Вторая инструкция устанавливает свойство Включено элемента управления startButton в значение false
, чтобы принимающий тест не мог выбрать кнопку во время теста.
Запуск приложения
Сохраните код.
Запустите приложение, а затем выберите Запустить тест. На экране появляются случайные математические задачи, как показано на следующем снимке.
Дальнейшие действия
Перейдите к следующему руководству, чтобы добавить таймер в математический тест и проверить ответы пользователей.