Blog (55)
Komentarze (1.1k)
Recenzje (0)
@arlidWłasna aplikacja? Program? Tak!

Własna aplikacja? Program? Tak!

27.12.2012 | aktual.: 27.12.2012 17:18

Dzisiaj troszkę inny temat. Czy żeby napisać własną aplikację, program trzeba znać tysiące linii kodu? Czy to jest aż tak bardzo konieczne? Nie do końca...

Chciałbym pokazać jak można stworzyć co prawda prostą aplikację, lecz bez posiadania ogromnej wiedzy z zakresu programowania. Do tego celu użyjemy oprogramowania

445324

Co będziemy robić?

Nasza aplikacja będzie liczyła obwód i pole trójkąta prostokątnego. By usprawnić pracę stwórzmy...

Założenia

Tutaj zobaczmy co nam będzie potrzebne. Z pewnością użytkownik naszego małego programu będzie musiał podać nam długości boków trójkąta, więc potrzebne nam są trzy zmienne, w których je przechowamy. Warto byłoby także dodać opis, co nasz program robi oraz jak go używać. Razem potrzebujemy około 4‑5 pól tekstowych.

Przyda się również jakiś element graficzny, by użytkownik wiedział, którego boku długość podaje aktualnie. Wystarczy prosty szkic takiego trójkąta. Oczywiście nic nie stanie się samo, więc potrzebujemy także elementu, który wywoła obliczenia i pokaże wynik. Do tego celu przyda nam się np. Przycisk.Także nasz ogólny "Worek potrzeb" wygląda tak:

  • 5 pól tekstowych
  • 1 przycisk
  • 1 obrazek

Działamy

uruchamiamy Visual Studio i przystępujemy do prac. Na początku wybieramy "New Project...",a następnie Visual C# ->Windows Form Application. Na dole nadajemy jej nazwę i zatwierdzamy. Czekamy chwilkę, aż program stworzy projekt.

445333

Po chwili powinniśmy ujrzeć taki widok:

445335

By móc dodawać elementy z naszego "Worka potrzeb" musimy dostać się do przybornika (Toolbox). Najeżdżamy więc po lewej stronie na nazwę Toolbox, klikamy ją, a następnie przypinamy nas przybornik klikając na pinezkę. Możemy przystąpić do pracy.

445337

Na początku zmieńmy nazwę naszego okienka. W tym celu w prawej zakładce Properties szukamy opcji Text, gdzie zmieniamy nazwę Form1 na nasza własną. W przykładzie "Program do obliczania trójkąta". Z racji tego, że chciałem, by aplikacja miała wszystkie elementu w jednym oknie, rozszerzyłem pole okienka, by wszystko zmieścić.

445339

Worek potrzeb

Dodajemy kolejno elementu naszego "worka potrzeb" wybierając je z przybornika (Toolbox) i przeciągając na nasze okienko. Potrzebujemy:

  • 5 x Label
  • 3 x numericUpDown
  • 1 x Button
  • 1 x PictureBox

Oczywiście nie musimy dodawać wszystkiego naraz. Możemy to robić po kolei. Ja na początku dodałem opis tej małej aplikacji. By lepiej pogrupować elementy możemy nadać im własne nazwy. W tym celu klikamy LPM raz na danym elemencie i w prawej zakładce Properties znajdujemy gałąź DataBindings. Rozwijamy ja i w polu Name wpisujemy własną nazwę.

445344

Dla zachowania porządku nazwy w przykładzie to:

  • label1 -> Opis
  • label2 ->Działanie
  • numericUpDown1 -> dl_boku_A
  • numericUpDown2 -> dl_boku_B
  • numericUpDown3 -> dl_boku_C
  • button1 -> przycisk_Oblicz
  • picturebox -> trojkat

Ustawiamy wszystko. Wszelkich zmian w parametrach elementów dokonujemy w prawej zakładce Properties. W polu Text możemy zmienić domyślny tekst pól tekstowych czy przycisków.

445348

Natomiast w przypadku elementu PictureBox, możemy tam załadować obrazem klikając na przycisk przy parametrze Image.

445350

Gdy już uporamy się w "poskładaniem" elementów na ekranie naciskamy klawisz F5 lub zielona strzałkę w pasku narzędziowym. Jak widzimy nasz program uruchomił się, jednak jak nożna się tego spodziewać, po kliknięciu na przycisk "Oblicz" nic się nie dzieje.

445352

Czas to zmienić..

Trochę kodu

Na początku wyłączmy nasz program zamykając go. By stworzyć funkcję wywołująca określone zdarzenia po naciśnięciu przycisk "Oblicz" klikamy go podwójnie LPM. Przechodzimy do pisania kodu. Ukaże nam się taki widok:

445356
private void przycisk_Oblicz_Click(object sender, EventArgs e)
{
	// Tutaj wstawiamy zdarzenia
}

to funkcja, która wywoła określone przez nas zdarzenia po naciśnięciu przycisku "Oblicz" (nazwanego przez nas przycisk_Oblicz). Zdarzenia do wykonania wpisujemy wewnątrz nawiasów klamrowych.

Na początek dodajmy zdarzenie, które wyświetli zdefiniowany przez nas tekst po naciśnięciu przycisku za pomocą wyskakującego okienka. Tak więc w nawiasach klamrowych wpisujemy:

MessageBox.Show("Tutaj zobaczysz swój wynik");

Całość powinna wyglądać tak:

445362

Ponownie uruchamiamy nasz program poprzez F5 i naciskamy przycisk Oblicz. Efektem jest ukazanie się okienka z naszym tekstem.

445364

Zmienne

No dobrze, ale zamiast wyniku, chcemy liczny. Sprawdźmy jak to zrobić. Po pierwsze wiemy, ze trójkąt ma 3 boki. Przypiszmy do nich litery a,b,c z czego c będzie przeciwprostokątną trójkąta. Po drugie chcemy poznać obwód i pole tego trójkąta. Razem potrzebujemy pięciu zmiennych, które nam te wartości przechowają. Wprowadźmy to przed naszą informacją o wyniku.

Przykładowo  wprowadzona przez użytkownika długość boku A odczytamy następująco.

decimal a = dl_boku_A.Value;

Tłumacząc: decimal – typ zmiennej dl_boku_A – nazwa elementu jaką przypisaliśmy obiektowi, w którym użytkownik podaje nam długość tego boku (domyślnie był to obiekt numericUpDown1). Vale – wartość wskazana, wpisana przez użytkownika do elementu dl_boku_A

Podobnie postępujemy także ze zmienna obwód i pole. Są to po prostu wzory matematyczne

decimal obwod=(a+b+c);
deciaml pole=((a*b)/2);
445372

Ta wygląda nasz kawałek kodu po wpisaniu zmiennych. Zmieńmy teraz nasz tekst wyświetlany w wyskakującym okienku na wiadomość pokazująca nasz wynik:

MessageBox.Show("Obwód tego trójkąta wynosi: " + obwod + ", a tego pole jest równe: " + pole);
445375

Po ponownym uruchomieniu programu, wprowadzeniu losowych danych i kliknięciu przycisku "Oblicz" otrzymujemy następującą informację:

445377

Mała rzecz, a jak ważna

Jak wiadomo trójkąt prostokątny jest specyficznym rodzajem trójkąta. Więc co się stanie, gdy użytkownik poda nam długości, które nie tworzą tego trójkąta? Musimy się przed tym zabezpieczyć. Skorzystajmy więc z twierdzenia Pitagorasa , które mówi nam o tym, że trójkąt prostokątny otrzymamy wtedy, gdy suma kwadratów jego przyprostokątnych, będzie równa kwadratowi przeciwprostokątnej. Innymi słowy nasz warunek, jaki podane wartości muszą spełnić, by trójkąt został uznany za trójkąt prostokątny to:

a*a+b*b = c*c

Tutaj podziękowania dla lukasamd za zauważenie oczywistego błędu, jakiego tutaj nie zaimplementowałem. Bok nie może być równy 0, więc spełnione muszą być łącznie 4 założenia:

  • a*a+b*b = c*c
  • a>0
  • b>0
  • c>0

Skorzystajmy z instrukcji warunkowej if, by sprawdzić czy nasz warunek zaszedł

if (warunek) {

	//zdarzenie, jeżeli warunek jest prawdziwy

}

else{

//zdarzenie w przeciwnym wypadku – warunek jest nieprawdziwy

};

W tym celu "przerabiamy" nasz kod wiadomości na instrukcję if.

           if (a>0 && b>0 && c>0 && (a * a + b * b == c * c)) {

	MessageBox.Show("Obwód tego trójkąta wynosi: " + obwod + ", a tego pole jest równe: " + pole);

}

else{

MessageBox.Show("Podane przez Ciebie długości nie tworzą trójkąta prostokątnego!");

};

Całość prezentuje się następująco:

445388

Sprawdźmy teraz:

445390
445391

Jak widać program działa poprawnie i jedynie w przypadku trójkąta Pitagorasa (np. 3,4,5) dostajemy prawidłowy wynik. W innym przypadku program pokazuje nam okienko z drugą wiadomością, mówiąca o tym, że wprowadziliśmy złe dane. Teraz wystarczy tylko wykonać Build naszego programu i mamy gotowy plik .exe z nasza małą działająca aplikacją.

Jak widać nie jest to jakiś super złożony projekt, który policzy za nas od razu wszystko, ale myślę, ze wykonanie czegoś takiego i tak daje satysfakcję i pozwala poznać trochę mechanizmy, działanie i zdobyć jakąś wiedzę :)

Oczywiście każdy ma własne zdanie dotyczące danych kwestii nie zamierzam go w żaden sposób podważać, czy obrażać kogokolwiek w jakikolwiek sposób. Przepraszam także za ewentualne błędy.

Wybrane dla Ciebie
Komentarze (37)