Struktury i listy w Visual Studio C#. Część 1

Czym jest struktura danych? Struktura danych to rozbudowany typ wartościowy, który pozwala przy pomocy jednej zmiennej przechowywać wiele zmiennych o różnych wartościach.

Struktura danych odpowiada pojedynczemu wierszowi dowolnej tabeli, w której to kolumny są typami danych przechowywanych w takim wierszu tabeli.

Lista, jest to typ danych odpowiadający kolekcji przypisanych elementów. Elementami danych mogą być typy proste, typy złożone- struktury, klasy. Listy ułatwiają pracę ze zbirami danych.

Cel: Napisz aplikację przechowującą dane w postaci: nazwisko, imię, klasa, które są dodawane do listy

struktury i listy danych w c# visual studio

Krok 1. Układ komponentów

Proponowane rozmieszczenie kontrolek przedstawia poniższy rysunek

układ kontrolek c#

W kontrolce StatusStrip uaktywniamy kontrolkę toolStripStatusLabel1

W kontrolce StatusStrip uaktywniamy kontrolkę toolStripStatusLabel1

W tym miejscy będziemy wyświetlać informację o aktualnej ilości wpisanych rekordów danych do listy

Całą listę danych będziemy pokazywać w jednej z kontrolek TextBox. Wybranej kontrolce właściwość pola Dock ustaw na Fill

fill visual studio

Przypisz tryb pracy w układzie wielu linii.

multiline

Dodaj możliwość przewijania zawartości w pionie

scrolbars

Krok 2. Deklarujemy strukturę danych

Deklaracja typu sktrukturalnego odbywa się na podobnych zasadach co innych typów zmiennych. Podajemy nazwę tworzonej struktury oraz nazwę przechowywanych pól, którym nadajemy status publiczny (dzięki czemu będą dostępne spoza struktury)

Wskazówka:


using System.Windows.Forms;

struct Dane
{
    public string nazwisko;
    public string imie;
    public string klasa;
}

Krok 3. Deklaracja zmiennej strukturalnej i listy

Kod tworzonej aplikacji wymaga zadeklarowania zmiennej utworzonej na zadeklarowanej strukturze danych oraz listy opartej na tej strukturze.

Wskazówka:


public partial class Form1 : Form
{
	private Dane d;
	private List<Dane> lista = new List<Dane>();
	private int idBiezacy = 0;
	public Form1()

Po skompilowaniu i uruchomieniu projektu nic nie będzie wykonywane przez program, dopóki nie zaprogramujemy dodawania i wyświetlania elementów listy danych

Krok 4. Funkcja dodająca dane do listy

Napiszemy dwie funkcje pracujące na utworzonej strukturze danych. Jedna z funkcji będzie czyścić zmienną opisaną strukturze, a druga przypisywać jej nowe wartości i dodawać jako kolejny element do listy

Wskazówka:


private void czyscDana()
{
	d.nazwisko = "";
	d.imie = "";
	d.klasa = "";
}

Funkcja czyscDana() wywołana jest w funkcji dodaj()

Wskazówka:


private void dodaj()
{
	czyscDana();
	d.nazwisko = textBox1.Text; 
	d.imie = textBox2.Text;
	d.klasa = textBox3.Text;
	lista.Add(d);
	idBiezacy = lista.Count - 1;
}

Skompiluj program i sprawdź czy nie zawiera błędów kompilacji

Krok 5. Dodajemy kolejne rekordy danych do listy

W zdarzeniu Click przycisku button1 wywołamy funkcje dodającą rekordy danych oraz wyświetlimy informacje o ilości dodanych elementów

Wskazówka:


private void Button1_Click(object sender, EventArgs e)
{
	dodaj();
	toolStripStatusLabel1.Text = lista.Count.ToString();
}

Uruchom program i sprawdź jak zmienia się licznik dodawanych elementów

jak zmienia się licznik dodawanych elementów

Krok 6. Wyświetlamy całą zawartość listy

Wyświetlenie na ekranie monitora kolejnych elementów listy wymaga użycia dowolnej pętli, która odczyta zgromadzone dane i pokaże je w wybranej kontrolce TextBox, która będzie podawana do ciała funkcji jako jej parametr

Proponowany kod ma postać

Wskazówka:


private void pokazListe(TextBox tb)
{
	tb.Clear();
	for(int i = 0; i < lista.Count;i++)
	{
		tb.AppendText((i+1).ToString()+"*******************"+ Environment.NewLine);
		tb.AppendText(lista[i].nazwisko + Environment.NewLine);
		tb.AppendText(lista[i].imie + Environment.NewLine);
		tb.AppendText(lista[i].klasa + Environment.NewLine);
	}
}

Wywołanie tej funkcji przypiszemy do zdarzenia Click przycisku button2

Wskazówka:


private void button2_Click(object sender, EventArgs e)
{
	pokazListe(textBox4);
}

Skompiluj program i sprawdź efekt działania

pokazListe(TextBox tb)

Ćwiczenie sprawdzające: Dopisz funkcję czyszczącą pola edycyjne

Pełny kod

Poniżej podaje pełny kod rozwiązania dla aplikacji desktopowej

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;

struct Dane
{
    public string nazwisko;
    public string imie;
    public string klasa;
}

namespace _29StrukturyListy
{
    
    public partial class Form1 : Form
    {
        private Dane d;
        private List<Dane> lista = new List<Dane>();
        private int idBiezacy = 0;
		
        public Form1()
        {
            InitializeComponent();
        }
		
        private void czyscDana()
        {
            d.nazwisko = "";
            d.imie = "";
            d.klasa = "";
        }
		
        private void dodaj()
        {
            czyscDana();
            d.nazwisko = textBox1.Text; 
            d.imie = textBox2.Text;
            d.klasa = textBox3.Text;
            lista.Add(d);
            idBiezacy = lista.Count - 1;
        }
 
        private void pokazListe(TextBox tb)
        {
            tb.Clear();
            for(int i = 0; i < lista.Count;i++)
            {
                tb.AppendText((i+1).ToString()+"*******************"+ Environment.NewLine);
                tb.AppendText(lista[i].nazwisko + Environment.NewLine);
                tb.AppendText(lista[i].imie + Environment.NewLine);
                tb.AppendText(lista[i].klasa + Environment.NewLine);
            }
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            dodaj();
            toolStripStatusLabel1.Text = lista.Count.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            pokazListe(textBox4);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
        }
        
    }
}

Rozwiązanie pod konsolę

Pisząc rozwiązanie pod konsolę projektujemy proste menu, a pozostałe funkcje nieznacznie się różnią od tych napisanych dla rozwiązania desktopowego. Poniżej kod rozwiązania dla konsoli:

Wskazówka:


namespace struktury_listy_konsola_cz1
{
    struct Dane
    {
        public string nazwisko;
        public string imie;
        public string klasa;
    }
    internal class Program
    {
        static Dane d;
        static List<Dane> lista = new List<Dane>();
        static int idBiezacy = 0;

        static void czyscDana()
        {
            d.nazwisko = "";
            d.imie = "";
            d.klasa = "";
        }

        static void dodaj()
        {
            czyscDana();
            Console.WriteLine("nazwisko: ");
            d.nazwisko = Console.ReadLine();
            Console.WriteLine("imię: ");
            d.imie = Console.ReadLine();
            Console.WriteLine("klasa: ");
            d.klasa = Console.ReadLine();
            lista.Add(d);
            idBiezacy = lista.Count - 1;
        }

        static void pokazListe()
        {
            Console.WriteLine("nr\tnazwisko\timię\tklasa");
            for (int i = 0; i < lista.Count; i++)
            {
                Console.WriteLine((i+1)+"\t"
                    + lista[i].nazwisko + "\t"
                    + lista[i].imie + "\t"
                    + lista[i].klasa);
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Witaj w CzD!");
            Console.WriteLine("Wybierz działanie\n" +
                            "+- dodaj dane\n" +
                            "p- pokaz listę\n" +
                            "Esc- koniec");
            ConsoleKeyInfo klawiszInfo;
            do
            {
                klawiszInfo = Console.ReadKey();
                switch (klawiszInfo.KeyChar)
                {
                    case '+': dodaj(); break;
                    case 'p': pokazListe(); break;
                }
            } while (klawiszInfo.Key != ConsoleKey.Escape);
        }
    }
}

Poniżej zrzut ekranu rozwiązania konsolowego

struktury i listy, Visual Studio C#
Układ okresowy- kod qr
Układ okresowy

Układ okresowy pierwiastków- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Alkomat- wirtualny test kod qr
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Taklarz- olinowanie stałe kod qr
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz