2017-10-20 23 views
0

Le programme que j'essaie d'écrire est supposé être utilisé par une compagnie de bus. L'entreprise dispose de 18 bus et pour chaque bus, l'utilisateur doit pouvoir entrer le nombre de personnes qui se trouvaient dans le bus via des boîtes de saisie.Réinitialiser en permanence les valeurs minimales et maximales dans une boucle vb.net

Si plus de 55 personnes étaient dans le bus, le bus est classé comme plein. Lorsque les données pour l'ensemble des 18 bus ont été collectées, le nombre moyen de passagers par bus ainsi que le nombre minimum et maximum doivent être sortis.

Voici ce que j'ai codé jusqu'à présent:

Public Class FirstBus 
    Dim passengers As Integer 
    Dim TotalPassengers As Integer 
    Dim bus As Integer 
    Dim FullBus As Integer 
    Dim min As Integer 
    Dim max As Integer 
    Dim average As Decimal 

    Private Sub FirstBus_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    average = TotalPassengers/18 
    lblOutput.Text = "Average number of passengers = " & average & vbNewLine & "Maxium number of passengers = " & max & vbNewLine & "Minimum number of passengers = " & min 
    bus = 1 
    min = 1000 
    max = 1 
    End Sub 

    Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click 
    For i = 1 To 18 
     passengers = InputBox("Enter the number of passengers on bus number " & bus) 
     If passengers > 54 Then 
      FullBus = FullBus + 1 
     End If 
     If passengers > max Then 
      max = passengers 
     ElseIf passengers < min Then 
      min = passengers 
     End If 
     TotalPassengers = TotalPassengers + passengers 
     bus = bus + 1 
    Next i 
    End Sub 

Le problème est que lorsque je saisie des données pour l'ensemble des 18 bus, la moyenne, minimum et maximum sont tous à 0 émis, je dois trouver un moyen de sortir ceux-ci comme la moyenne réelle, minimum et maximum

+2

Je ne sais pas si les deux sont méthode sous la même forme, mais rien qu'en le regardant, la charge est exécutée avant le bouton presse. Vous devriez donc également afficher les informations après avoir appuyé sur le bouton. –

+0

Tout est dans une forme, j'ai déplacé la charge à la position correcte et le code est bien maintenant, je me donne des coups de pied pour ne pas avoir compris –

Répondre

0

Vous devez initialiser avant que la logique du bouton ne soit terminée et l'afficher une fois la logique du bouton terminée.

je pourrais ressembler à ceci:

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click 
    ' Reset variables 
    TotalPassengers = 0 
    bus = 0 
    FullBus = 0 
    min = 1000 
    max = 0 
    average = 0 

    ' Get values 
    For i = 1 To 18 
     passengers = InputBox("Enter the number of passengers on bus number " & bus) 
     If passengers > 54 Then 
      FullBus = FullBus + 1 
     End If 
     If passengers > max Then 
      max = passengers 
     ElseIf passengers < min Then 
      min = passengers 
     End If 
     TotalPassengers = TotalPassengers + passengers 
     bus = bus + 1 
    Next i 

    ' Display values 
    average = TotalPassengers/18 
    lblOutput.Text = "Average number of passengers = " & average & vbNewLine & "Maxium number of passengers = " & max & vbNewLine & "Minimum number of passengers = " & min 
End Sub 

La charge est exécutée une seule fois lorsque le formulaire est chargé.

0

Vous n'êtes pas en train de rafraîchir le en cliquant sur le bouton.

Public Class FirstBus 

    Dim passengers As Integer 
    Dim TotalPassengers As Integer 
    Dim bus As Integer 
    Dim FullBus As Integer 
    Dim min As Integer 
    Dim max As Integer 
    Dim average As Decimal 

    Private Sub FirstBus_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     average = 0 
     min = 1000 
     max = 1 
     lblOutput.Text = "Average number of passengers = " & average & vbNewLine & "Maxium number of passengers = " & max & vbNewLine & "Minimum number of passengers = " & min 
    End Sub 


    Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click 

    TotalPassengers = 0 
    passengers = 0 
    average = 0 
    FullBus = 0 
    bus = 1 
    min = 1000 
    max = 1 
     For i = 1 To 18 
      passengers = InputBox("Enter the number of passengers on bus number " & bus) 
      If passengers > 54 Then 
       FullBus = FullBus + 1 
      End If 
      If passengers > max Then 
       max = passengers 
      ElseIf passengers < min Then 
       min = passengers 
      End If 
      TotalPassengers = TotalPassengers + passengers 
      bus = bus + 1 
     Next i 
     average = TotalPassengers/18 
     lblOutput.Text = "Average number of passengers = " & average & vbNewLine & "Maxium number of passengers = " & max & vbNewLine & "Minimum number of passengers = " & min 
    End Sub 

End Class 
0

Vous pouvez afficher tous les bus du DataGridView et y mettre à jour leurs données.

Public Class Bus 
    Public Property Number As String 
    Public Property PassengersAmount As Integer 
End Class 

Ensuite, créez collection de bus et liés à la DataGridView.
Dans le formulaire

Public Sub New() 
    Me.InitializeComponents() 

    Dim buses = Enumerable.Range(1, 18). 
          Select(Function(n) New Bus With { .Number = $"Number {n}"}). 
          ToList() 

    ' Add DataGridView control in designer 
    yourDataGridView.DataSource = buses 
End Sub 

Lorsque forme ouvert écrivent les passagers montent à la deuxième colonne de datagridview.
Utilisez les méthodes LINQ pour calculer les valeurs moyennes, minimales et maximales.
Avis vous n'avez pas besoin d'avoir des variables privées dans la classe pour les valeurs

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click 
    Dim buses = DirectCast(yourDataGridView.DataSource, List(Of Bus)) 
    Dim amounts = buses.Select(Function(bus) bus.PassengersAmount).ToList() 

    ' You can create three labels for every output value 
    lblOutputAvg.Text = $"Average: {amounts.Avg()}" 
    lblOutputMin.Text = $"Min: {amounts.Min()}" 
    lblOutputMax.Text = $"Max: {amounts.Max()}" 
End Sub