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