Udostępnij za pośrednictwem


Samouczek: dodawanie problemów matematycznych do aplikacji WinForms do testu matematycznego

W tej serii czterech samouczków utworzysz test matematyczny. Test zawiera cztery losowe problemy matematyczne, na które test próbuje odpowiedzieć w określonym czasie.

Kontrolki używają kodu C# lub Visual Basic. W tym drugim samouczku test jest trudny, dodając kod dla problemów matematycznych opartych na losowych liczbach. Utworzysz również metodę o nazwie StartTheQuiz() , aby wypełnić problemy.

Z tego drugiego samouczka dowiesz się, jak wykonywać następujące działania:

  • Napisz kod, aby utworzyć obiekty losowe do użycia w problemach matematycznych.
  • Dodaj procedurę obsługi zdarzeń dla przycisku uruchamiania.
  • Napisz kod, aby rozpocząć test.

Wymagania wstępne

Ten samouczek opiera się na poprzednim samouczku: Tworzenie testu matematycznego aplikacji WinForms. Jeśli ten samouczek nie został ukończony, zapoznaj się z nim najpierw.

Tworzenie zadania z dodawaniem losowych liczb

  1. W projekcie programu Visual Studio wybierz pozycję Windows Forms Projektant.

  2. Wybierz formularz Form1.

  3. Na pasku menu wybierz pozycję Wyświetl>kod. Zostanie wyświetlony format Form1.cs lub Form1.vb w zależności od używanego języka programowania, dzięki czemu można wyświetlić kod formularza.

  4. Utwórz obiekt, dodając instrukcję Randomnew w górnej części kodu.

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

Ważne

Użyj kontrolki języka programowania w prawym górnym rogu tej strony, aby wyświetlić fragment kodu języka C# lub fragment kodu języka Visual Basic.

Programming language control for Microsoft Learn

Można użyć new instrukcji takich jak ten do tworzenia przycisków, etykiet, paneli, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms, a nawet formularzy. Te elementy są nazywane obiektami.

Po uruchomieniu programu formularz zostanie uruchomiony. Kod za nim tworzy obiekt losowy i nada mu losowy nazwę randomizatora.

Test wymaga zmiennych do przechowywania losowych liczb tworzonych dla każdego problemu. Przed użyciem zmiennych należy je zadeklarować, co oznacza wyświetlanie ich nazw i typów danych.

  1. Dodaj dwie zmienne całkowite do formularza i nadaj im nazwę addend1 i addend2.

    Uwaga

    Zmienna całkowita jest nazywana int w języku C# lub Integer w Visual Basic. Ten rodzaj zmiennej przechowuje dodatnią lub ujemną liczbę z -2147483648 przez 2147483647 i może przechowywać tylko liczby całkowite, a nie liczby dziesiętne.

    Podobna składnia służy do dodawania zmiennej całkowitej, tak jak w przypadku dodawania obiektu Random, jak pokazano w poniższym kodzie.

    // 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. Dodaj metodę o nazwie StartTheQuiz(). Ta metoda używa metody random object do generowania Next() losowych liczb dla etykiet. StartTheQuiz() W końcu wypełni wszystkie problemy, a następnie uruchom czasomierz, więc dodaj te informacje do komentarza podsumowania. Funkcja powinna wyglądać podobnie do poniższego kodu.

    /// <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;
    }
    

Jeśli używasz Next() metody z obiektem Losowym, na przykład podczas wywoływania randomizer.Next(51), otrzymasz losową liczbę mniejszą niż 51 lub z zakresu od 0 do 50. Ten kod wywołuje randomizer.Next(51) metodę tak, aby dwie losowe liczby sumować się do odpowiedzi z zakresu od 0 do 100.

Przyjrzyj się bliżej tym instrukcjom.

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

Te instrukcje ustawiają właściwości Text plusLeftLabel i plusRightLabel, tak aby wyświetlały dwie losowe liczby. Kontrolki Etykieta wyświetlają wartości w formacie tekstowym, a w programowaniu ciągi przechowują tekst. Metoda każdej liczby całkowitej ToString() konwertuje liczbę całkowitą na tekst, który może być wyświetlany przez etykietę.

Tworzenie losowych problemów z odejmowaniem, mnożeniem i dzieleniem

Następnym krokiem jest zadeklarowanie zmiennych i podanie losowych wartości dla innych problemów matematycznych.

  1. Dodaj zmienne całkowite dla pozostałych problemów matematycznych do formularza po dodaniu zmiennych problemowych. Kod powinien wyglądać podobnie do poniższego przykładu.

    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. Zmodyfikuj metodę StartTheQuiz() , dodając następujący kod, zaczynając od komentarza "Wypełnij problem z odejmowaniem".

    /// <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;
    

Ten kod używa Next() metody Random klasy nieco inaczej niż sposób wykonywania problemu dodawania. Gdy nadasz metodzie Next() dwie wartości, wybiera liczbę losową większą lub równą pierwszej wartości i mniejszą niż druga.

Korzystając z Next() metody z dwoma argumentami, można upewnić się, że problem z odejmowaniem ma pozytywną odpowiedź, odpowiedź mnożenia wynosi co najwyżej 100, a odpowiedź dzielenia nie jest ułamkiem.

Dodawanie procedury obsługi zdarzeń do przycisku uruchamiania

W tej sekcji dodasz kod, aby rozpocząć test po wybraniu przycisku uruchamiania. Kod uruchamiany w reakcji na zdarzenie, takie jak wybór przycisku, jest nazywany procedurą obsługi zdarzeń.

  1. W Projektant formularzy systemu Windows kliknij dwukrotnie przycisk Rozpocznij test lub wybierz go, a następnie wybierz klawisz Enter. Zostanie wyświetlony kod formularza, a nowa metoda jest widoczna.

    Te akcje dodają procedurę obsługi zdarzeń kliknięcia do przycisku Uruchamiania. Gdy użytkownik quizu wybierze ten przycisk, aplikacja uruchomi kod, który zostanie dodany do tej nowej metody.

  2. Dodaj następujące dwie instrukcje, aby program obsługi zdarzeń uruchamiał test.

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

Pierwsza instrukcja wywołuje nową StartTheQuiz() metodę. Druga instrukcja ustawia właściwość Enabled kontrolki startButton tak false , aby użytkownik quizu nie mógł wybrać przycisku podczas testu.

Uruchamianie aplikacji

  1. Zapisz kod.

  2. Uruchom aplikację, a następnie wybierz pozycję Rozpocznij test. Wyświetlane są losowe problemy matematyczne, jak pokazano na poniższym zrzucie ekranu.

    Screenshot that shows random values in all four math problems. The Start the quiz button appears dimmed.

Następne kroki

Przejdź do następnego samouczka, aby dodać czasomierz do testu matematycznego i sprawdzić odpowiedzi użytkowników.