Microsoft Visual Basic 2008 Express Edition, r. ak. 2013/2014

Transkrypt

Microsoft Visual Basic 2008 Express Edition, r. ak. 2013/2014
Microsoft Visual Basic 2008 Express Edition, r. ak. 2013/2014
Zajęcia 9: Praca z plikami. Okna OpenFileDialog i SaveFileDialog, obiekty StreamReader
i StreamWriter
Public Class Form1
'
'
Rozwiązywanie równania kwadratowego przy użyciu współczynników zapisanych w kolejnych
'
wierszach pliku tekstowego oraz zapisywanie rozwiązania do pliku tekstowego.
'
Private Sub btnWczytaj_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnWczytaj.Click
'
'
Otwarcie okna wyboru pliku ze współczynnikami równania
dlgOdczyt.ShowDialog()
End Sub
Private Sub dlgOdczyt_FileOk(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgOdczyt.FileOk
'
'
Otwarcie pliku ze współczynnikami równania
'
i wczytanie ich do pól tekstowych formularza
Dim strKom, strTyt As String
Dim srDane As System.IO.StreamReader
Try
srDane = New System.IO.StreamReader(dlgOdczyt.FileName)
txtA.Text = srDane.ReadLine
txtB.Text = srDane.ReadLine
txtC.Text = srDane.ReadLine
'
'
Zamknięcie i usunięcie zbędnego obiektu StreamReader
srDane.Close()
srDane.Dispose()
'
'
Wyczyszczenie pól tekstowych pierwiastków
txtX1.Clear()
txtX2.Clear()
Catch ex As Exception
strKom = ex.Message
strTyt = "Błąd wykonania nr " & Err.Number
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub btnRozwiaz_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnRozwiaz.Click
'
'
Rozwiązanie równania kwadratowego i wpisanie pierwiastków
'
do pól tekstowych formularza
Dim sngA, sngB, sngC As Single
Dim delta, X1, X2 As Single
Dim strKom, strTyt As String
'
Try
sngA = CSng(txtA.Text)
If sngA = 0 Then
strKom = "Współczynnik A nie może być zerem"
strTyt = "Błędne dane"
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _
MessageBoxIcon.Warning)
Exit Sub
End If
sngB = CSng(txtB.Text)
sngC = CSng(txtC.Text)
'
delta = sngB ^ 2 - 4 * sngA * sngC
If delta >= 0 Then
X1 = (-sngB - Math.Sqrt(delta)) / (2 * sngA)
X2 = (-sngB + Math.Sqrt(delta)) / (2 * sngA)
txtX1.Text = X1.ToString
txtX2.Text = X2.ToString
Else
strKom = "Brak rozwiązań w dziedzinie rzeczywistej"
strTyt = "Delta < 0"
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If
Catch ex As Exception
strKom = ex.Message
strTyt = "Błąd wykonania nr " & Err.Number
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub btnZapisz_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnZapisz.Click
'
'
Otwarcie okna wyboru pliku do zapisu (tylko wtedy, gdy uzyskano
'
rozwiązanie i zapisano je do pól tekstowych formularza)
Dim strKom, strTyt As String
If txtX1.Text <> "" Then
dlgZapis.ShowDialog()
Else
strKom = "Brak znalezionego rozwiązania równania"
strTyt = "Brak danych do zapisu"
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, _
MessageBoxIcon.Asterisk)
End If
End Sub
Private Sub dlgZapis_FileOk(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles dlgZapis.FileOk
'
'
Zapis rozwiązania do pliku (z zachowywaniem dotychczasowej
'
zawartości pliku, o ile istnieje)
Dim swZapis As System.IO.StreamWriter
Dim strWierszZapisu As String
Dim strKom, strTyt As String
'
Try
swZapis = New System.IO.StreamWriter(dlgZapis.FileName, True)
'
strWierszZapisu = "Równanie kwadratowe " & txtA.Text & "*x^2 + " & _
txtB.Text & "*x + " & txtC.Text & " = 0 "
swZapis.WriteLine(strWierszZapisu)
'
strWierszZapisu = "X1 = " & txtX1.Text
swZapis.WriteLine(strWierszZapisu)
'
strWierszZapisu = "X2 = " & txtX2.Text
swZapis.WriteLine(strWierszZapisu)
'
'
Usunięcie zbędnego obiektu StreamWriter
swZapis.Close()
swZapis.Dispose()
Catch ex As Exception
strKom = ex.Message
strTyt = "Błąd wykonania nr " & Err.Number
MessageBox.Show(strKom, strTyt, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class