• Nie Znaleziono Wyników

Kod aplikacji Rozwi ą zanie Na wy ż sz ą ocen ę KolVB3

N/A
N/A
Protected

Academic year: 2021

Share "Kod aplikacji Rozwi ą zanie Na wy ż sz ą ocen ę KolVB3"

Copied!
3
0
0

Pełen tekst

(1)

Copyright © 2009, Janusz Bonarowski 1

KolVB3

Wykonać aplikację Windows Forms Application przeliczającą temperaturę ze stopni Fahrenheita na stopnie Celsjusza i odwrotnie. Obliczenia wykonane zostaną zgodnie ze wzorami:

Zamiana stopni Celsjusza na stopnie Fahrenheita 32 5

9⋅ +

= C

F

Zamiana stopni Fahrenheita na stopnie Celsjusza

(

32

)

9 5⋅ −

= F

C

Aplikacja powinna być zabezpieczona przed wprowadzeniem danych, które mogłyby spowodować awarię aplikacji.

Na wyższą ocenę

Rozpoznawać przyczyny błędnie wpisanych danych:

1) Zawartość okna tekstowego jest pusta – nie wpisano żadnych danych.

2) Ciąg tekstowy zamiast liczby – dane nie są liczbą

3) Wpisano liczbę, ale jako separator wykorzystano kropkę.

Rozwiązanie

Rys. 1. Propozycja formularza

Kod aplikacji

Private Sub btnNaF_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnNaF.Click '--- 'Zamiana stopni Fahrenheita na stopnie Celsjusza

'Zabezpieczenie przed awarią aplikacji konstrukcją Try Catch '--- Dim C, F As Single

Try

' Jeśli dane poprawne, można przeliczać C = Single.Parse(txtC.Text)

F = 9 * C / 5 + 32

'txtF.Text = Format(F, "#0.00") 'Ewent. formatowanie wydruku txtF.Text = F.ToString

Catch ex As Exception

MsgBox("Proszę wprowadzić poprawnie temperaturę" & vbCrLf & _ "w stopniach Celsjusza", MsgBoxStyle.Critical, _ "Błąd danych, err = " & Err.Number.ToString) txtF.Text = ""

End Try End Sub

(2)

Copyright © 2009, Janusz Bonarowski 2 Private Sub btnNaC_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnNaC.Click '---

'Zamiana stopni Celsjusza na stopnie Fahrenheita 'Rozbudowane sprawdzanie poprawności danych w txtF '--- Dim C, F As Single

' Sprawdzenie, czy txtF jest pusty If txtF.Text = "" Then

MsgBox("Proszę wprowadzić temperaturę" & vbCrLf & _ "w stopniach Fahrenheita", _

MsgBoxStyle.Critical, "Brak danych") txtC.Text = ""

Exit Sub End If

' Sprawdzenie czy nie wprowadzono tekstu lub czy jako separator ' dziesiętny nie wprowadzono kropki

If Not IsNumeric(txtF.Text) Then

' Sprawdzenie czy błąd nie wynika z kropki jako separatora.

' Posłużono się funkcją InStr.

If InStr(1, txtC.Text, ".") <> 0 Then MsgBox("Jako separator dziesiętny " & _

"proszę wprowadzić przecinek", MsgBoxStyle.Critical, _

"Błąd danych - wprowadzono kropkę") txtC.Text = ""

Exit Sub Else

MsgBox("Temperatura musi być liczbą", MsgBoxStyle.Critical, _ "Błąd danych")

txtC.Text = ""

Exit Sub End If

End If

'Dane poprawne, można przeliczać

F = Single.Parse(txtF.Text) C = (F - 32) * 5 / 9

'txtC.Text = Format(C, "#0.00") txtC.Text = C.ToString

End Sub

Komentarz

W procedurze Sub btnNaF_Click(...) zastosowano strukturę programową

Try Catch End Try pozwalającą w prosty sposób zabezpieczyć aplikację przed awarią.

Tak zabezpieczona aplikacja nigdy nie przestanie działać, bez względu na to jak bardzo bezsensowne dany wpiszemy. Jednak bez dodatkowych wierszy kodu nie możemy użytkownikowi podpowiedzieć jaka jest przyczyna braku uzyskania poprawnego wyniku.

W procedurze Sub btnNaC_Click(...) zastosowano kilka instrukcji warunkowych rozpoznających różne możliwe przyczyny błędnych danych.

Pierwsza instrukcja warunkowa używa funkcji IsNumeric(txtF.Text)aby sprawdzić czy łańcuch tekstowy może być konwertowany na liczbę. Jeśli zawartość okna tekstowego txtF.Text może być konwertowana na liczbę - funkcja ta zwraca wartość True i działanie programu przekazywane jest do ostatnie części kodu wykonywanego gdy dane są poprawne.

(3)

Copyright © 2009, Janusz Bonarowski 3 Jeśli jednak dane w oknie tekstowym txtF.Text nie są poprawne - program zagłębia się w nową instrukcję warunkową sprawdzającą, czy w ciągu znaków okna tekstowego

txtF.Text jest znak kropki – jeśli jest - drukuje odpowiedni komunikat, jeśli nie ma kropki – komunikat mówi tylko o błędzie danych.

Istnienie kropki w łańcuchu znaków rozpoznano za pomocą funkcji InStr. Funkacja ta ma postać:

InStr(NrZnakuPoczątkowego, ŁańcuchPrzeszukiwany, ŁańcuchSzukany)

Funkcja ta sprawdza, czy w ciągu znaków ŁańcuchPrzeszukiwany znajduje się ciąg znaków ŁańcuchSzukany. Przeszukiwanie rozpoczynane jest od znaki o numerze kolejnym podanym w NrZnakuPoczątkowego.

Funkcja zwraca numer znaku, od którego ŁańcuchSzukany mieści się w ŁańcuchuPrzeszukiwanym.

Jeśli

ŁańcuchuPrzeszukiwanym = 123.45 ŁańcuchSzukany = "."

NrZnakuPoczątkowego = 1

funkcja InString zwróci wartość 4, bo kropka występuje na czwartej pozycji w ciągu znaków 123.45.

Jeśli podciąg ŁańcuchSzukany nie występuje w ŁańcuchuPrzeszukiwanym funkcja zwraca 0.

Cytaty

Powiązane dokumenty

Niniejszy raport klasyfikaryjny określa klasyfikację przyznaną Systemowi SlaU S docieplenie na docieplenie do vvykonywania ociepteń ścian zewnętrznych budynków z

Gou 4ta Ling.. 2a ustawy, poprzez niezachowanie uczciwej konkurencji oraz równego traktowania wykonawcÓw, w tym w szczególności popzez niezgodne z

For each sentence identify the one element that is wrong.. Na karcie odporviedzi nr 1 zlznz.cz literę odporr'iadającą łv1'branej przez ciebie możliłvości obok

osoba śt&lt;łaaa;ą-ca bś*iadc'enie obowiązana jest określić przynależność poszczególnych składników majątkowych, dochodów i zobowiązań do majątku odrębnego i

O ile w części eksperymentów manipulacje warunkami kodowania, wydobywania lub materiałem uczenia się prowadziĘ do przeciwnych efektów w pamięci bodźca docelowego i

Najświętsza Maryja Panna, która objawiła się w Szydłowie przed 407 laty (1608 r.)' umocniła wiarę Litwinów i pomo- gła im w1trwać w obliczu wszystkich

ll dzień jazda indywidualna na czas K, jazda indywidualna na czas M, pzyjazd do kolacjizawodników izawodniczek do stańu wspólnego lll dzień start wspólny K, start

Przemycie wszystkich ścian wodą z detergenlem zkutza i tłustych plam, następnie pokrycie wszystkich ścian w korytarzu wraz ŻE sfupem przy zabudowie recepcji,