Självstudie: Lägga till matematiska problem i en WinForms-app för matematikquiz
I den här serien med fyra självstudier skapar du ett matematiskt test. Testet innehåller fyra slumpmässiga matematiska problem som en testtagare försöker besvara inom en angiven tid.
Kontroller använder C# eller Visual Basic-kod. I den här andra självstudien gör du frågesporten utmanande genom att lägga till kod för matematiska problem som baseras på slumpmässiga tal. Du kan också skapa en metod med namnet StartTheQuiz()
för att fylla i problemen.
I den andra självstudiekursen lär du dig att:
- Skriv kod för att skapa slumpmässiga objekt som ska användas i matematiska problem.
- Lägg till en händelsehanterare för startknappen.
- Skriv kod för att starta testet.
Förutsättningar
Den här självstudien bygger på en tidigare självstudie, Skapa en WinForms-app för matematikquiz. Gå igenom den självstudien först om du inte har slutfört den.
Skapa ett slumpmässigt tilläggsproblem
I Visual Studio-projektet väljer du Windows Forms Designer.
Välj formuläret Form1.
På menyraden väljer du Visa>Kod. Form1.cs eller Form1.vb visas, beroende på vilket programmeringsspråk du använder, så att du kan visa koden bakom formuläret.
Skapa ett Random objekt genom att lägga till en
new
-instruktion längst upp i koden i Form1.cs eller Form1.vb.
Du kan använda new
-instruktioner som den här för att skapa knappar, etiketter, paneler, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms och till och med formulär. Dessa objekt kallas objekt.
När du kör programmet startas formuläret. Koden bakom den skapar ett slumpmässigt objekt och namnger det randomizer.
Din frågesport behöver variabler för att lagra de slumpmässiga tal som skapas för varje problem. Innan du använder variabler deklarerar du dem, vilket innebär att deras namn och datatyper visas.
Lägg till två heltalsvariabler i formuläret och ge dem namnet addend1 och addend2 i Form1.cs eller Form1.vb.
Obs
En heltalsvariabel kallas för en int i C# eller ett heltal i Visual Basic. Den här typen av variabel lagrar ett positivt eller negativt tal från -2147483648 till 2147483647 och kan endast lagra heltal, inte decimaler.
Du använder liknande syntax för att lägga till en heltalsvariabel som du gjorde för att lägga till det slumpmässiga objektet, som följande kod visar.
Lägg till en metod med namnet
StartTheQuiz()
Form1.cs eller Form1.vb. Den här metoden använder random-objektets Next()-metod för att generera slumpmässiga tal för etiketterna.StartTheQuiz()
kommer så småningom att fylla i alla problem och sedan starta timern, så lägg till den här informationen i sammanfattningskommentaren. Funktionen bör se ut som följande kod./// <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; }
När du använder metoden Next()
med ett slumpmässigt objekt, till exempel när du anropar randomizer.Next(51)
, får du ett slumptal som är mindre än 51 eller mellan 0 och 50. Den här koden anropar randomizer.Next(51)
så att de två slumpmässiga talen lägger till ett svar som är mellan 0 och 100.
Ta en närmare titt på dessa uttalanden.
Dessa instruktioner anger egenskaperna TextplusLeftLabel och plusRightLabel så att de visar de två slumpmässiga talen. Etikettkontroller visar värden i textformat och i programmering innehåller strängar text. Varje heltals ToString()
-metod konverterar heltal till text som en etikett kan visa.
Skapa problem med slumpmässig subtraktion, multiplikation och division
Nästa steg är att deklarera variabler och ange slumpmässiga värden för de andra matematiska problemen.
Lägg till heltalsvariabler för återstående matematiska problem i formuläret efter tilläggsproblemvariablerna. Koden i Form1.cs eller Form1.vb bör se ut som i följande exempel.
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;
Ändra
StartTheQuiz()
-metoden i Form1.cs eller Form1.vb genom att lägga till följande kod, med början i kommentaren "Fyll i subtraktionsproblemet"./// <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;
Den här koden använder Next()-metoden för klassen Random lite annorlunda än hur additionsproblemet fungerar. När du ger metoden Next()
två värden väljer den ett slumpmässigt tal som är större än eller lika med det första värdet och mindre än det andra.
Genom att använda metoden Next()
med två argument kan du se till att subtraktionsproblemet har ett positivt svar, multiplikationssvaret är högst 100 och att divisionssvaret inte är en bråkdel.
Lägg till en händelsehanterare på startknappen
I det här avsnittet lägger du till kod för att starta frågesporten när startknappen har valts. Kod som körs som en reaktion på en händelse som en knappmarkering kallas händelsehanterare.
I Windows Forms Designerdubbelklickar du antingen på knappen Starta frågesporten, eller så markerar du den och väljer sedan Enter. Formulärets kod visas och en ny metod visas.
De här åtgärderna lägger till en klick händelsehanterare på startknappen. När en testtagare väljer den här knappen kör appen den kod som du ska lägga till i den nya metoden.
Lägg till följande två instruktioner så att händelsehanteraren startar frågesporten.
Den första instruktionen anropar den nya metoden StartTheQuiz()
. Den andra instruktionen anger egenskapen Aktiverad för startButton kontroll till false
så att frågetesttagaren inte kan välja knappen under ett test.
Kör din app
Spara koden.
Kör appen och välj sedan Starta frågesporten. Slumpmässiga matematiska problem visas, som följande skärmbild visar.
Nästa steg
Gå vidare till nästa självstudie för att lägga till en timer i ditt mattetest och kontrollera användarens svar.