'
' Erstellt mit SharpDevelop.
' Benutzer: Tobi
' Datum: 26.12.2017
' Zeit: 11:22
' 
' Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
'


Public Partial Class MainForm
	Dim zufall As New System.Random()
	Dim zufallszahl As Integer
	Dim zahl1 As Integer
	Dim zahl2 As Integer
	Dim ergebnis As Integer
	Dim rechenzeichenzahl As Integer
	Dim rechenzeichen As String
	Dim tauschzahl As Integer
	Dim fehlercode As Integer
	Dim rechenzeichenauswahl As String
	Dim anzahlRichtig As Integer
	Dim anzahlFalsch As Integer
	Dim verbleibendeZeit As Integer
	Dim textZeile As String
	Dim pruefungsergebnis As String
	
	Dim mySQLConn As MySql.Data.MySqlClient.MySqlConnection = New MySql.Data.MySqlClient.MySqlConnection
	Dim READER As MySql.Data.MySqlClient.MySqlDataReader
	Dim COMMAND As MySql.Data.MySqlClient.MySqlCommand
	Dim mySQLBefehl As String
	
	Public Sub New()
		' The Me.InitializeComponent call is required for Windows Forms designer support.
		Me.InitializeComponent()
		
		'
		' TODO : Add constructor code after InitializeComponents
		'
	End Sub
	
	Sub BtEndeClick(sender As Object, e As EventArgs)
		End		
	End Sub
	
	Sub BtNeueRechnungClick(sender As Object, e As EventArgs)
		lblPruefungsergebnis.Text = ""
		If chkAddition.Checked = True Or chkMultiplikation.Checked = True Or chkSubtraktion.Checked = True Or chkDivision.Checked = True Then
			fehlercode = 1
			tbErgebnisEingabe.Text = ""
			zufallszahl = zufall.Next(0, tbGrenzeZahl1.Text + 1)
			zahl1 = zufallszahl
			zufallszahl = zufall.Next(0, tbGrenzeZahl2.Text + 1)
			zahl2 = zufallszahl
			
			'lässt nur Rechenoperationen enstprechend der Auswahl zu
			zufallszahl = -1
			While zufallszahl = -1
				zufallszahl = zufall.Next(0, 3 + 1)
				If chkAddition.Checked = False And zufallszahl = 0 Then
					zufallszahl = -1
				End If
				If chkMultiplikation.Checked = False And zufallszahl = 1 Then
					zufallszahl = -1
				End If			
				If chkSubtraktion.Checked = False And zufallszahl = 2 Then
					zufallszahl = -1
				End If
				If chkDivision.Checked = False And zufallszahl = 3 Then
					zufallszahl = -1
				End If
			End While
			
			rechenzeichenzahl = zufallszahl
			Select Case rechenzeichenzahl
				Case 0
					rechenzeichen = "+"
					ergebnis = zahl1 + zahl2
				Case 1
					rechenzeichen = "*"
					ergebnis = zahl1 * zahl2
				Case 2
					rechenzeichen = "-"
					'Zur Verhinderung von negativen Zahlen:
					If zahl1 < zahl2 Then
						tauschzahl = zahl1
						zahl1 = zahl2
						zahl2 = tauschzahl
					End If
					ergebnis = zahl1 - zahl2
				Case 3
					rechenzeichen = "/"
					'Zur Verhinderung von 0 als Ergebnis:
					If zahl1 < zahl2 Then
						tauschzahl = zahl1
						zahl1 = zahl2
						zahl2 = tauschzahl
					End If
					Try
						ergebnis = zahl1 / zahl2
						'Zur Verhinderung von Kommazahlen
						zahl1 = zahl2 * ergebnis
					Catch
						fehlercode = 0
					End Try
			End Select
			
			
			lblRechenzeichen.Text = rechenzeichen
			lblZahl1.Text = zahl1
			lblZahl2.Text = zahl2
			lblErgebnis.BackColor = Color.Black
			If fehlercode = 0 Then
				lblErgebnis.Text = "???"
			Else
				lblErgebnis.Text = ergebnis
			End If
			tbErgebnisEingabe.Focus
			
			btPruefen.Enabled = True
			btNeueRechnung.Enabled = False
			lblZeit.Visible = True
			verbleibendeZeit = 10
			lblZeit.Text = verbleibendeZeit
			timer1.Start()
			
		Else
			MsgBox("Lassen Sie mindestens eine Rechneoperation zu !!!", 64, "Unzulässige Auswahl")
		End If
	End Sub
	
	Sub BtPruefenClick(sender As Object, e As EventArgs)
		If tbErgebnisEingabe.Text = lblErgebnis.Text Then
			lblErgebnis.BackColor = Color.Chartreuse
			lblPruefungsergebnis.Text = "Richtig"
			anzahlRichtig = anzahlRichtig + 1
		Else
			lblErgebnis.BackColor = Color.Red
			lblPruefungsergebnis.Text = "Falsch"
			anzahlFalsch = anzahlFalsch + 1
		End If	
		lblAnzahlFalsch.Text = anzahlFalsch
		lblAnzahlRichtig.Text = anzahlRichtig
		btPruefen.Enabled = False
		btNeueRechnung.Enabled = True
		timer1.Stop()
		
		textZeile = zahl1.ToString & " " & rechenzeichen & " " & zahl2.ToString & " = " & ergebnis.ToString & "  " & lblPruefungsergebnis.Text
		lfRechnungen.Items.Add(textZeile)
		
		Dim lvEintrag As New ListViewItem(zahl1)
		lvEintrag.SubItems.Add(rechenzeichen)
		lvEintrag.SubItems.Add(zahl2)
		lvEintrag.SubItems.Add("=")
		lvEintrag.SubItems.Add(ergebnis)
		lvEintrag.SubItems.Add(lblPruefungsergebnis.Text)
		lvRechnungen.Items.Add(lvEintrag)
		
		Try
			mySQLConn.Open()
			
			mySQLBefehl = "insert into rechnungen (zahl1, rechenzeichen, zahl2, ergebnis, ergebniseingabe, pruefungsergebnis) values(" & zahl1 & ", '" & rechenzeichen & "', " & zahl2 & ", " & ergebnis & ", '" & tbErgebnisEingabe.Text & "', '" & lblPruefungsergebnis.Text & "');"
			
			
			COMMAND = New MySql.Data.MySqlClient.MySqlCommand(mySQLBefehl, mySQLConn)
			READER = Command.ExecuteReader
			MsgBox("Daten gespeichert", 64, "MySQL-Datenbank")
			mySQLConn.Close()
		Catch ex As MySql.Data.MySqlClient.MySqlException
			MsgBox(ex.Message)
		End Try
	End Sub
	
	Sub MainFormLoad(sender As Object, e As EventArgs)
		anzahlFalsch = 0
		anzahlRichtig = 0
		btPruefen.Enabled = False
		mySQLConn.ConnectionString = "server=localhost;userid=root;password='';database=kopfrechnen"
	End Sub
	
	Sub Timer1Tick(sender As Object, e As EventArgs)
		If verbleibendeZeit > 0 Then
			verbleibendeZeit = verbleibendeZeit - 1
			lblZeit.Text = verbleibendeZeit
		Else
			BtPruefenClick(Nothing, Nothing)
			lblZeit.Visible = False
		End If
	End Sub
	
	Sub BtAnzeigenClick(sender As Object, e As EventArgs)
		rbZahl1.Checked = False
		rbRechenzeichen.Checked = False
		rbZahl2.Checked = False
		rbPruefungsergebnis.Checked = False
		datenauslesen()		
	End Sub
	
	Sub datenauslesen()
		lfRechnungen.Items.Clear()
		lvRechnungen.Items.Clear()
		mySQLConn.Open()
		
		mySQLBefehl = "select * from rechnungen"
		
		If chkNurFalsche.Checked = True Then
			mySQLBefehl = mySQLBefehl & " where pruefungsergebnis = 'Falsch'"
		End If
		
		If rbZahl1.Checked = True Then
			mySQLBefehl = mySQLBefehl & " order by zahl1"
		End If
		If rbRechenzeichen.Checked = True Then
			mySQLBefehl = mySQLBefehl & " order by rechenzeichen"
		End If
		If rbZahl2.Checked = True Then
			mySQLBefehl = mySQLBefehl & " order by zahl2"
		End If
		If rbPruefungsergebnis.Checked = True Then
			mySQLBefehl = mySQLBefehl & " order by pruefungsergebnis"
		End If
		
		mySQLBefehl = mySQLBefehl & ";"
		
		Try
			
			COMMAND = New MySql.Data.MySqlClient.MySqlCommand(mySQLBefehl, mySQLConn)
			READER = COMMAND.ExecuteReader
			While READER.Read
				zahl1 = READER.GetInt32(1)
				rechenzeichen = READER.GetString(2)
				zahl2 = READER.GetInt32(3)
				ergebnis = READER.GetInt32(5)
				pruefungsergebnis = READER.GetString(6)
				textZeile = zahl1.ToString & " " & rechenzeichen & " " & zahl2.ToString & " = " & "  ???  " & "  " & pruefungsergebnis
				lfRechnungen.Items.Add(textZeile)
				
				Dim lvEintrag As New ListViewItem(zahl1)
				lvEintrag.SubItems.Add(rechenzeichen)
				lvEintrag.SubItems.Add(zahl2)
				lvEintrag.SubItems.Add("=")
				lvEintrag.SubItems.Add(" ??? ")
				lvEintrag.SubItems.Add(pruefungsergebnis)
				lvRechnungen.Items.Add(lvEintrag)
			End While
			READER.Close()
			mySQLConn.Close()
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub
	
	Sub ChkNurFalscheCheckedChanged(sender As Object, e As EventArgs)
		datenauslesen()		
	End Sub
	
	Sub RbZahl1CheckedChanged(sender As Object, e As EventArgs)
		datenauslesen()		
	End Sub
	
	Sub RbRechenzeichenCheckedChanged(sender As Object, e As EventArgs)
		datenauslesen()		
	End Sub
	
	Sub RbZahl2CheckedChanged(sender As Object, e As EventArgs)
		datenauslesen()		
	End Sub
	
	Sub RbPruefergebnisCheckedChanged(sender As Object, e As EventArgs)
		datenauslesen()	
	End Sub
End Class
