Kalkulator prosty. Łączenie ciągu znaków
Przez łączenie ciągu znaków rozumiemy operację łączenia co najmniej dwóch dowolnych ciągów znaków w jeden. Najłatwiej jest połączyć dwa osobne ciągi znaków poprzez dołączenie jednego ciągu na koniec drugiego ciągu. W języku C# służy do tego operator +.
Poniżej prosty przykład łączenia dwóch ciągów
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
String t1 = "Ala",
t2 = "ma kota",
t ="";
t = t1 + " " + t2;
this.Text = t;
}
Kalkulator prosty
Na metodzie łączenia ciągów znaków oprzemy sposób wprowadzania danych do aplikacji symulującej działanie prostego kalkulatora. Na nasz kalkulator nakładamy warunek, że dane wprowadzamy poprzez klawisze reprezentujące cyfry, a nie przez wpisanie z klawiatury.
Układ kontrolek
Przygotuj formatkę z poniższym układem kontrolek.
Zielone pole to kontrolka TextBox, w której blokujemy wprowadzanie danych z klawiatury
Ustawiamy dużą czcionkę i ewentualny kolor tła
Wprowadzamy wartości liczbowe
Przyjmujemy, że kalkulator będzie działać na liczbach rzeczywistych podanych poprzez klawisze jako osobne cyfry łączone w kodzie programu w łańcuch znaków i konwertowane w wartość liczbową.
W tym celu klawisze z cyframi obsłużymy jedną metodą zdarzenia Click z wykorzystaniem odczytu pola tekstowego jako wartości cyfry. W kodzie programu deklarujemy trzy zmienne a (liczba a), b (liczba b) i w (wynik)
Wskazówka:
public partial class Form1 : Form
{
float a = 0, b = 0, w = 0;
W projekcie aplikacji zaznaczamy grupę klawiszy reprezentujących cyfry
Przechodzimy do zakładki Zdarzeń i inicjujemy zdarzenie Click
Teraz wykorzystujemy możliwości programowania obiektowego poprzez przechwycenie kontroli wybranego elementu w zdarzeniu Click
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
Control c = (Control)sender;
textBox1.Text+=c.Text;
}
Skompiluj program i sprawdź efekt działania. Powinieneś zobaczyć podobny efekt działania
Jak wprowadzić drugą wartość liczbową?
Aby nie komplikować kodu programu można zauważyć, że druga wartość liczbowa zawsze jest wprowadzana po wybraniu na przykład dowolnego klawisza operatora działania matematycznego. W naszym przykładzie to klawisze z symbolami: /, *, -, +. Zaznaczamy tę grupę klawiszy
Dla zaznaczonej grupy klawiszy inicjujemy zdarzenie Click
W metodzie Click dla wskazanej grupy klawiszy obsługujemy zapamiętanie pierwszej wprowadzonej wartości liczbowej oraz czyszczenie ekranu kalkulatora (kontrolki TextBox)
Wskazówka:
private void button16_Click(object sender, EventArgs e)
{
//wyskocz jak puste
if (textBox1.Text.Length < 1) return;
a=(float)Convert.ToDouble(textBox1.Text);
textBox1.Text = "";
}
Skompiluj program i sprawdź efekt działania
Jaki wybrano operator działania matematycznego?
Ten etap tworzenia aplikacji desktopowej symulacji kalkulatora prostego można rozwiązać na kilka sposobów- krótszych lub dłuższych, łatwiejszych lub trudniejszych. W naszym rozwiązaniu zastosujemy typ wyliczeniowy, który jest zbiorem kolejnych liczb całkowitych reprezentowanych w kodzie programu przez nadane nazwy podczas pisania kodu.
W kodzie programu zdefiniuj typ wyliczeniowy, czyli zbiór działań oraz zmienną, która będzie pamiętać wybrane działanie dopóki użytkownik nie wciśnie klawisza równa się
Wskazówka:
public partial class Form1 : Form
{
float a = 0, b = 0, w = 0;
enum Dzialanie {BRAK,
DODAWANIE,
ODEJMOWANIE,
DZIELENIE,
MNOZENIE};
Dzialanie dzialanie=Dzialanie.BRAK;
Teraz modyfikujemy metodę Click klawiszy operatorów działań matematycznych. Wprowadź poniższy kod
Wskazówka:
private void button16_Click(object sender, EventArgs e)
{
//wyskocz jak puste
if (textBox1.Text.Length < 1) return;
a=(float)Convert.ToDouble(textBox1.Text);
textBox1.Text = "";
//określ wybrane działanie wykorzystujac funkcję switch
Control c = (Control)sender;
switch (c.Text)
{
case "/":dzialanie = Dzialanie.DZIELENIE; break;
case "*": dzialanie = Dzialanie.MNOZENIE; break;
case "-": dzialanie = Dzialanie.ODEJMOWANIE; break;
case "+": dzialanie = Dzialanie.DODAWANIE; break;
default:dzialanie=Dzialanie.BRAK; break;
}
}
Skompiluj program i sprawdź czy nie zawiera błędów
Jak uzyskać wynik wybranego działania matematycznego
Wynik wybranego działania matematycznego wymaga odczytu drugiej wartości liczbowej. Jeżeli użytkownik jej nie wprowadzi to traktujemy, że wynosi zero. Oznacza to, że dla dzielenia trzeba obsłużyć taki wyjątek.
Inicjujemy zdarzenie Click dla klawisza równa się
Do zainicjowanej metody wprowadzamy poniższy kod, który obsłuży działanie dodawania
Wskazówka:
private void button17_Click(object sender, EventArgs e)
{
//konwertuj jak nie jest puste
if (textBox1.Text.Length > 0) b = (float)Convert.ToDouble(textBox1.Text);
else b = 0;
//wykonaj wybrane działanie
switch (dzialanie)
{
case Dzialanie.DODAWANIE: w = a + b;break;
default:w = a;break;
}
//wypisz wynik
textBox1.Text = w.ToString();
//zeruj wartości
a = 0;
b = 0;
w = 0;
dzialanie = Dzialanie.BRAK;
}
Skompiluj program i sprawdź efekt działania. Program na tym etapie potrafi tylko dodawać
Usunięcie ostatniej wprowadzonej cyfry
Usuniecie ostatniej wprowadzonej cyfry będzie polegać na skopiowaniu wprowadzonego łańcucha znaków cyfrowych o jeden mniej. W tym celu wykorzystamy metodę Substring klasy String. Usuwanie wykonamy w metodzie Click klawisza oznaczonego symbolem <
Kod zdarzenia Click dla usuwania ostatniej wprowadzonej cyfry
Wskazówka:
private void button18_Click(object sender, EventArgs e)
{
//usunięcie ostatniej wprowadzonej cyfry
if (textBox1.Text.Length < 1) return;
string zrodlo=textBox1.Text;
textBox1.Text = zrodlo.Substring(0,zrodlo.Length-1);
}
Skompiluj program i sprawdź efekt działania
Zadanie
Na podstawie omówionych metod oprogramuj pozostałe funkcje działania osadzonych w projekcie klawiszy. Klawisz z czerwonym tłem to klawisz kończący działanie aplikacji.
Pełny kod omówionych metod
Poniżej przedstawiam pełny kod aplikacji z do tej pory omówionymi funkcjami
Zawartośc pliku Form1.cs
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace KalkulatorProsty
{
public partial class Form1 : Form
{
float a = 0, b = 0, w = 0;
enum Dzialanie {BRAK,
DODAWANIE,
ODEJMOWANIE,
DZIELENIE,
MNOZENIE};
Dzialanie dzialanie=Dzialanie.BRAK;
private void button1_Click(object sender, EventArgs e)
{
Control c = (Control)sender;
textBox1.Text+=c.Text;
}
private void button16_Click(object sender, EventArgs e)
{
//wyskocz jak puste
if (textBox1.Text.Length < 1) return;
a=(float)Convert.ToDouble(textBox1.Text);
textBox1.Text = "";
//określ wybrane działanie wykorzystujac funkcję switch
Control c = (Control)sender;
switch (c.Text)
{
case "/":dzialanie = Dzialanie.DZIELENIE; break;
case "*": dzialanie = Dzialanie.MNOZENIE; break;
case "-": dzialanie = Dzialanie.ODEJMOWANIE; break;
case "+": dzialanie = Dzialanie.DODAWANIE; break;
default:dzialanie=Dzialanie.BRAK; break;
}
}
private void button17_Click(object sender, EventArgs e)
{
//konwertuj jak nie jest puste
if (textBox1.Text.Length > 0) b = (float)Convert.ToDouble(textBox1.Text);
else b = 0;
//wykonaj wybrane działanie
switch (dzialanie)
{
case Dzialanie.DODAWANIE: w = a + b;break;
default:w = a;break;
}
//wypisz wynik
textBox1.Text = w.ToString();
//zeruj wartości
a = 0;
b = 0;
w = 0;
dzialanie = Dzialanie.BRAK;
}
private void button18_Click(object sender, EventArgs e)
{
//usunięcie ostatniej wprowadzonej cyfry
if (textBox1.Text.Length < 1) return;
string zrodlo=textBox1.Text;
textBox1.Text = zrodlo.Substring(0,zrodlo.Length-1);
}
public Form1()
{
InitializeComponent();
}
}
}