Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Vb.NET - Disposizione Domande e Risposte Quiz
Forum - C# / VB.NET - Vb.NET - Disposizione Domande e Risposte Quiz

Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 4:00
Mercoledì, 02/07/2014
Salve sto creando un quiz, le domande e le risposte risiedono in un database MySQL
La tabella è costituita da:
ID (chiave primaria, autoincrement)
Domanda
Risposta1
Risposta2
Risposta3
RispostaEsatta

Per estrarre la domande e le risposte faccio così:

  strSQL = "SELECT * FROM domande where Domanda = '" & ListBox1.SelectedItem.ToString & "';"
        CONNECTION.Open()
        cmd = New MySqlCommand(strSQL, CONNECTION)
        dr = cmd.ExecuteReader()

        Do While dr.Read()
            DomandaEstratta = (dr.Item("Domanda").ToString())
            Risposta1Estratta = (dr.Item("Risposta1").ToString())
            Risposta2Estratta = (dr.Item("Risposta2").ToString())
            Risposta3Estratta = (dr.Item("Risposta3").ToString())
            RispostaEsattaEstratta = (dr.Item("RispostaEsatta").ToString())

            Label1.Text = DomandaEstratta & "?"
            RadioButton1.Text = Risposta1Estratta
            RadioButton2.Text = Risposta2Estratta
            RadioButton3.Text = Risposta3Estratta
            RadioButton4.Text = RispostaEsattaEstratta

        Loop
        dr.Close()
        cmd.Dispose()
        CONNECTION.Close()

Per ordinare le risposte in modo random come posso fare?
Mi spiego meglio: io al momento faccio così:

   Label1.Text = DomandaEstratta & "?"
            RadioButton1.Text = Risposta1Estratta
            RadioButton2.Text = Risposta2Estratta
            RadioButton3.Text = Risposta3Estratta
            RadioButton4.Text = RispostaEsattaEstratta

Però in questo modo la risposta esatta è sempre la numero 4, e non va bene.
Come posso risolvere? Grazie in anticipo

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 11:18
Mercoledì, 02/07/2014
Non so se ci sia un metodo più semplice, comunque la prima cosa che mi viene da consigliarti è di mettere le risposte in una lista
Codice sorgente - presumibilmente C# / VB.NET

  1. DomandaEstratta = (dr.Item("Domanda").ToString())
  2.             Dim Risposte As New List(Of String)
  3.             Risposte.Add(dr.Item("Risposta1").ToString())
  4.             Risposte.Add(dr.Item("Risposta2").ToString())
  5.             Risposte.Add(dr.Item("Risposta3").ToString())
  6.             RispostaEsattaEstratta = (dr.Item("RispostaEsatta").ToString()) 'lascio questa variabile nel caso che ti serva per controllare se l'utente ha risposto giusto
  7.             Risposte.Add(RispostaEsattaEstratta)


poi riordinare casualmente la lista
Codice sorgente - presumibilmente VB.NET

  1. Dim R As New Random
  2.             For i As Integer = 0 To Risposte.Count - 1
  3.                         Dim Scambio As String = Risposte(i)
  4.                         Dim j As Integer = R.Next(Risposte.Count)
  5.                         Risposte(i) = Risposte(j)
  6.                         Risposte(j) = Scambio
  7.             Next


e quindi prendere dalla lista i valori da assegnare ai RadioButton
Codice sorgente - presumibilmente Plain Text

  1. RadioButton1.Text = Risposte(0)
  2.             RadioButton2.Text = Risposte(1)
  3.             RadioButton3.Text = Risposte(2)
  4.             RadioButton4.Text = Risposte(3)



PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 16:44
Giovedì, 03/07/2014
Avevo trovato una soluzione, però era grezza:

Do While dr.Read()
            DomandaEstratta = (dr.Item("Domanda").ToString())
            Risposta1Estratta = (dr.Item("Risposta1").ToString())
            Risposta2Estratta = (dr.Item("Risposta2").ToString())
            Risposta3Estratta = (dr.Item("Risposta3").ToString())
            RispostaEsattaEstratta = (dr.Item("RispostaEsatta").ToString())

            Label1.Text = DomandaEstratta & "?"

            Dim x As New Random
            Dim y(4) As String
            y(1) = "1"
            y(2) = "2"
            y(3) = "3"
            y(4) = "4"

            Calcolo = y(x.Next(1, 5))

            If Calcolo = "1" Then
                RadioButton1.Text = RispostaEsattaEstratta
                RadioButton2.Text = Risposta2Estratta
                RadioButton3.Text = Risposta3Estratta
                RadioButton4.Text = Risposta1Estratta
            End If

            If Calcolo = "2" Then
                RadioButton1.Text = Risposta3Estratta
                RadioButton2.Text = RispostaEsattaEstratta
                RadioButton3.Text = Risposta2Estratta
                RadioButton4.Text = Risposta1Estratta
            End If

            If Calcolo = "3" Then
                RadioButton1.Text = Risposta2Estratta
                RadioButton2.Text = Risposta3Estratta
                RadioButton3.Text = RispostaEsattaEstratta
                RadioButton4.Text = Risposta1Estratta
            End If

            If Calcolo = "4" Then
                RadioButton1.Text = Risposta2Estratta
                RadioButton2.Text = Risposta1Estratta
                RadioButton3.Text = Risposta3Estratta
                RadioButton4.Text = RispostaEsattaEstratta
            End If

        Loop

Grazie, la tua soluzione è migliore. ;)

PM Quote