Delen via


Zelfstudie: Wiskundige problemen toevoegen aan een WinForms-app voor wiskundige toetsen

In deze reeks van vier tutorials ga je een wiskundige quiz maken. De toets bevat vier willekeurige wiskundige problemen die een toetsnemer probeert te beantwoorden binnen een opgegeven tijd.

Besturingselementen gebruiken C# of Visual Basic-code. In deze tweede zelfstudie maakt u de toets lastig door code toe te voegen voor wiskundige problemen die zijn gebaseerd op willekeurige getallen. U maakt ook een methode met de naam StartTheQuiz() om de problemen in te vullen.

In deze tweede zelfstudie leert u het volgende:

  • Schrijf code om willekeurige objecten te maken die moeten worden gebruikt in wiskundige problemen.
  • Voeg een gebeurtenis-handler toe voor de startknop.
  • Schrijf code om de toets te starten.

Voorwaarden

Deze zelfstudie bouwt voort op een vorige zelfstudie, Een WinForms-app voor wiskundige toetsen maken. Als u deze zelfstudie nog niet hebt voltooid, doorloop deze dan eerst.

Een probleem met willekeurige toevoeging maken

  1. Selecteer in uw Visual Studio-project Windows Forms Designer-.

  2. Selecteer het formulier Formulier1.

  3. Selecteer in de menubalk >Codeweergeven. Form1.cs of Form1.vb wordt weergegeven, afhankelijk van de programmeertaal die u gebruikt, zodat u de code achter het formulier kunt bekijken.

  4. Maak een Random-object door boven aan de code een new-instructie toe te voegen in Form1.cs of Form1.vb.

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

U kunt new instructies zoals deze gebruiken om knoppen, labels, panelen, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms en zelfs formulieren te maken. Deze items worden objectengenoemd.

Wanneer u het programma uitvoert, wordt het formulier gestart. De code achter het maakt een willekeurig object en noemt het randomizer.

Uw toets heeft variabelen nodig om de willekeurige getallen op te slaan die voor elk probleem worden gemaakt. Voordat u variabelen gebruikt, declareert u deze, wat betekent dat hun namen en gegevenstypen worden vermeld.

  1. Voeg twee geheel getalvariabelen toe aan het formulier en geef ze een naam addend1 en addend2- in Form1.cs of Form1.vb.

    Notitie

    Een variabele voor een geheel getal wordt een int genoemd in C# of een Integer in Visual Basic. Met dit type variabele wordt een positief of negatief getal opgeslagen van -2147483648 tot 2147483647 en kunnen alleen hele getallen, niet decimalen, worden opgeslagen.

    U gebruikt vergelijkbare syntaxis om een geheel getalvariabele toe te voegen zoals u hebt gedaan om het random-object toe te voegen, zoals in de volgende code wordt weergegeven.

    // 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. Voeg een methode toe met de naam StartTheQuiz()Form1.cs of Form1.vb. Deze methode maakt gebruik van de Next() methode van het Random-object om willekeurige getallen voor de labels te genereren. StartTheQuiz() zal op den duur alle problemen invullen en vervolgens de timer starten, dus voeg deze informatie toe aan de samenvattende opmerking. De functie moet eruitzien als de volgende code.

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

Wanneer u de methode Next() gebruikt met een willekeurig object, zoals wanneer u randomizer.Next(51)aanroept, krijgt u een willekeurig getal dat kleiner is dan 51 of tussen 0 en 50. Met deze code wordt randomizer.Next(51) aanroepen, zodat de twee willekeurige getallen een antwoord vormen tussen 0 en 100.

Bekijk deze verklaringen nader.

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

Met deze instructies worden de eigenschappen Text van plusLeftLabel en plusRightLabel ingesteld, zodat de twee willekeurige getallen worden weergegeven. Labelbesturingselementen geven waarden weer in tekstindeling en in programmering, tekenreeksen bevatten tekst. Met de ToString() methode van elk geheel getal wordt het gehele getal geconverteerd naar tekst die door een label kan worden weergegeven.

Willekeurige opgaven voor aftrekken, vermenigvuldigen en delen maken

De volgende stap is het declareren van variabelen en het opgeven van willekeurige waarden voor de andere wiskundige problemen.

  1. Voeg gehele getallenvariabelen toe voor de resterende wiskundige problemen aan uw formulier, na de optellen van probleemvariabelen. De code in Form1.cs of Form1.vb moet eruitzien als in het volgende voorbeeld.

    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. Wijzig de methode StartTheQuiz() in Form1.cs of Form1.vb door de volgende code toe te voegen, te beginnen met de opmerking 'Vul het aftrekkingsprobleem' in.

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

Deze code maakt op een iets andere manier gebruik van de Next()-methode van de Random-klasse dan het optelprobleem doet. Wanneer u de Next() methode twee waarden geeft, wordt een willekeurig getal gekozen dat groter is dan of gelijk is aan de eerste waarde en kleiner is dan de tweede.

Door de methode Next() met twee argumenten te gebruiken, kunt u ervoor zorgen dat het aftrekkenprobleem een positief antwoord heeft, het vermenigvuldigingsantwoord maximaal 100 is en het antwoord op delen geen breuk is.

Een gebeurtenis-handler toevoegen aan de startknop

In deze sectie voegt u code toe om de toets te starten wanneer de startknop is geselecteerd. Code die wordt uitgevoerd als reactie op een gebeurtenis, zoals een knopselectie, wordt een gebeurtenis-handler genoemd.

  1. Dubbelklik in Windows Forms Designerop de knop Start de quiz, of selecteer deze en druk op Enter. De code van het formulier wordt weergegeven en er is een nieuwe methode zichtbaar.

    Met deze acties voegt u een Klik eventhandler toe aan de startknop. Wanneer een toetsnemer deze knop selecteert, voert de app de code uit die u aan deze nieuwe methode toevoegt.

  2. Voeg de volgende twee instructies toe, zodat de gebeurtenishandler de toets start.

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

Met de eerste instructie wordt de nieuwe methode StartTheQuiz() aangeroepen. Met de tweede instructie wordt de eigenschap Ingeschakeld van het besturingselement startButton ingesteld op false, zodat de quizdeelnemer de knop niet kan selecteren tijdens de quiz.

Uw app uitvoeren

  1. Sla uw code op.

  2. Voer uw app uit en selecteer vervolgens De toets starten. Willekeurige wiskundige problemen worden weergegeven, zoals in de volgende schermopname wordt weergegeven.

    Schermopname met willekeurige waarden in alle vier wiskundige problemen. De knop Toets starten wordt grijs weergegeven.

Volgende stappen

Ga naar de volgende zelfstudie om een timer toe te voegen aan uw wiskundige toets en de antwoorden van gebruikers te controleren.