Struktura i tablice
Struktura to złożony typ danych, która pozwala pod jedną zmienną przechowywać określoną ilość różnych wartości typów danych. Ilość wartości przypisana jest podczas definiowania struktury. Słowo kluczowe definiujące strukturę to struct
Przykład definicji struktury
Poniżej przykład definiowania struktury zaprojektowanej do przechowywania podstawowych informacji o uczniu: imię, nazwisko, klasa i numer z dziennika
Wskazówka:
struct Dane
{
public string nazwisko;
public string imie;
public string klasa;
public int nr;
}
Aby atrybuty (pola) wewnętrzne struktury były dostępne poza strukturą definiuje się je ze słowem kluczowym public
Zmienna oparta na strukturze inicjowana jest jak poniżej
Wskazówka:
private Dane d;
Przypisanie wartości do dowolnego pola struktury odbywa się jak poniżej
Wskazówka:
d.nazwisko = "Kowalski";
d.imie = "Jan";
Odczyt wartości z dowolnego pola struktury przeprowadza się na tych samych zasadach jak dla każdej innej zmiennej. Na przykład odczyt i przypisanie wartości pola do kontrolki typu TextBox
Wskazówka:
textBox1.Text = d.imie;
Typ tablicowy oparty na strukturze
Definiując typ tablicowy oparty na strukturze postępuje się w identyczny sposób jak dla każdego innego typu danych. Poniżej fragment kodu z deklaracją tablicy jednowymiarowej o rozmiarze pięciu elementów typu strukturalnego.
Wskazówka:
struct Ksiazka
{
public string tytul;
public string autor;
public float cena;
}
namespace struktura_danych_cz1
{
public partial class Form1 : Form
{
Ksiazka[] tab=new Ksiazka[5];
Zasady pracy z tablicami typu strukturalnego oparte są na tych samych zasadach co z innymi tablicami. Na przykład dodanie nowej książki do tablicy typu strukturalnego powyżej zdefiniowanego
Wskazówka:
//dodanie ksiązki
tab[licznik].tytul = textBox1.Text;
tab[licznik].autor = textBox2.Text;
tab[licznik].cena = (float)Convert.ToDouble(textBox3.Text);
Metody w strukturze
Typ strukturalny może zawierać własne metody (funkcje) ułatwiające programowanie złożonych aplikacji. Poniżej przedstawię strukturę definiująca książki z metodami dodania książki, odczytu danych i czyszczenia przypisanych wartości.
Wskazówka:
struct Ksiazka2
{
string tytul;
string autor;
float cena;
public void PrzypiszDane(string _t,string _a,float _c) {
tytul = _t;
autor = _a;
cena = _c;
}
public void PokazDane(TextBox tb)
{
tb.AppendText("Tytuł: "+tytul+"\r\n");
tb.AppendText("Autor: " + autor + "\r\n");
tb.AppendText("Cena: " + cena.ToString("C") + "\r\n");
}
public void Czysc()
{
tytul = null;
autor=null;
cena = 0;
}
}
Odwołanie do metody zdefiniowanej w strukturze jest możliwe wtedy gdy metoda jest publiczna- definicja jest poprzedzona słowem kluczowym public. Poniżej przykład zastosowania
Wskazówka:
//dodanie ksiązki do tablicy typu drugiego
tab2[licznik].PrzypiszDane(textBox1.Text,
textBox2.Text,
(float)Convert.ToDouble(textBox3.Text)
);
Zadanie
Utwórz aplikację, która będzie zawierać dwie tablice jednowymiarowe o rozmiarze równym 5. Pierwsza tablica ma być oparta na strukturze Ksiazka, druga tablica na strukturze Ksiazka2. Obie struktury zdefiniowane są powyżej. W aplikacji zaprojektuj możliwość dodawania książek, pokazanie pełnej zawartości tablic, czyszczenie zawartości tablic. Zawartość tablic pokaż w kontrolce TextBox pracującej w układzie wielu linii z belkami przewijania.
Wskazówka: Proponowany układ kontrolek
Widok na wynik działania aplikacji
Deklaracja struktur
Wskazówka:
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
struct Ksiazka
{
public string tytul;
public string autor;
public float cena;
}
struct Ksiazka2
{
string tytul;
string autor;
float cena;
public void PrzypiszDane(string _t,string _a,float _c) {
tytul = _t;
autor = _a;
cena = _c;
}
public void PokazDane(TextBox tb)
{
tb.AppendText("Tytuł: "+tytul+"\r\n");
tb.AppendText("Autor: " + autor + "\r\n");
tb.AppendText("Cena: " + cena.ToString("C") + "\r\n");
}
public void Czysc()
{
tytul = null;
autor=null;
cena = 0;
}
}
Deklaracja tablic
Wskazówka:
namespace struktura_danych_cz1
{
public partial class Form1 : Form
{
Ksiazka[] tab=new Ksiazka[5];
Ksiazka2[] tab2 = new Ksiazka2[5];
//licznik wpisanych ksiazek
int licznik = 0;
Dodanie nowych elementów do tablic
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
//dodanie ksiązki do tablicy typu pierwszego
tab[licznik].tytul = textBox1.Text;
tab[licznik].autor = textBox2.Text;
tab[licznik].cena = (float)Convert.ToDouble(textBox3.Text);
//dodanie ksiązki do tablicy typu drugiego
tab2[licznik].PrzypiszDane(textBox1.Text,
textBox2.Text,
(float)Convert.ToDouble(textBox3.Text)
);
//sprawdz czy nie przekroczono zakresu rozmiaru tablic
if (licznik + 1 < tab.GetLength(0))
//zwieksz licznik dodanych ksiazek
licznik++;
}
Pokazanie zawartości obu tablic
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
textBox4.AppendText("Zawartośc tablicy typu pierwszego+\r\n");
foreach (Ksiazka k in tab)
{
textBox4.AppendText("***********\r\n");
textBox4.AppendText("Tytuł: " + k.tytul+"\r\n");
textBox4.AppendText("Autor: " + k.autor + "\r\n");
textBox4.AppendText("Cena: " + k.cena.ToString("C") + "\r\n");
};
}
private void button3_Click(object sender, EventArgs e)
{
textBox5.AppendText("Zawartośc tablicy typu drugiego+\r\n");
foreach (Ksiazka2 k in tab2)
{
textBox5.AppendText("***********\r\n");
k.PokazDane(textBox5);
}
}