Foorum: TABEL/PROTSEDUURID

SQL ADMINISTRATOR (vaata alla XMAPP)

CREATE DATABASE arvaLoodust;

Create table puu(
puuId int Primary Key identity(1,1),
puudeHulk int,
puuNimi varchar(30),
puuKõrgus int);

-- seeing it
Select * from puu;
-- deleting it if I am confused 
DROP TABLE puu;
-- I wasn't told how to add so :P
Insert into puu(puudeHulk, puuNimi, puuKõrgus)
values (1, 'MegaTree', 200)

Insert into puu(puudeHulk, puuNimi, puuKõrgus)
values (2, 'Honourtree', 30)

Insert into puu(puudeHulk, puuNimi, puuKõrgus)
values (3, 'ObagTree', 20)

-- Created a procedure to count and calculate (what I have been told)
CREATE PROCEDURE kokkuPuu

AS
BEGIN
SELECT count(*) AS 'puu arv', AVG(puuKõrgus) AS 'keskimine puu kõrgus', MAX(puuKõrgus) AS 'maximum puuKõrgus', Min(puuKõrgus) AS 'minimum puuKõrgus'
FROM puu;
END;

EXEC kokkuPuu;

-- adding more tress
CREATE PROCEDURE AddMoreTrees
@pHulk int,
@pnimi varchar(30),
@pKõrgus int
AS
BEGIN
Insert into puu(puudeHulk, puuNimi, puuKõrgus)
values (@pHulk, @pnimi, @pKõrgus);
SELECT * from puu

END;

-- adding more
EXEC AddMoreTrees @pHulk = 4, @pnimi='obamium', @pKõrgus=56


DELETE FROM puu WHERE puuID=4;

--Now... DESTROYING THEM   >:3
CREATE PROCEDURE BurningDownTheTress
@deleteID int
AS
BEGIN
SELECT * from puu;
DELETE FROM puu WHERE puuID=@deleteID;
SELECT * from puu;

END;

drop procedure BurningDownTheTress;

--DESTROY
EXEC BurningDownTheTress 5;

SQL/XMAPP

BEGIN
SELECT count(*) AS 'puu arv', AVG(puuKõrgus) AS 'keskimine puu kõrgus', MAX(puuKõrgus) AS 'maximum puuKõrgus', Min(puuKõrgus) AS 'minimum puuKõrgus'
FROM puu;
END
BEGIN
Insert into puu(puudeHulk, puuNimi, puuKõrgus)
values (pHulk, pnimi, pKõrgus);

END
BEGIN
SELECT * from puu;
DELETE FROM puu WHERE puuID=deleteID;
SELECT * from puu;

END

C# põhialused

See on C# alus, seal on koodinäiteid, teemasid ja palju muud. (See keel ei ole algajatele sõbralik >:[ )

1. Põhi ja projekti loomine

C# programm koosneb nimiruumist (namespace), klassist ja meetoditest. Peamine käivituskoht on Main() meetod.
Muutujad saavad erinevaid andmetüüpe: täisarvud (int), ujukomaarvud (float, double), tekst (string), tõeväärtus (bool), märk (char).
Arvutamine toimub põhioperaatoritega (+, -, *, /, %).
Lisaks toetab C# stringide ühendamist (+ ja interpoleerimine).

Näide kood:

int a = 1000;
Console.WriteLine("Tere tulemast!");
string tekst = Console.ReadLine();
Console.WriteLine($"Teie sisestatud tekst on: {tekst}");

Console.Write($"Esimene arv on {a}, siseta b: ");
int b = int.Parse(Console.ReadLine());
Console.WriteLine($"Summa on: {a + b}");

Uued funktsioonid:

  • Console.WriteLine() ja Console.ReadLine() – sisend/väljund.
  • int.Parse() / double.Parse() – teisendamine tekstist arvuks.
  • String interpolation $”{…}”.
  • Random rnd = new Random(); rnd.Next(1, 11); – juhuarvu genereerimine.

2. Valikukonstruktsioonid

Valikukonstruktsioonid juhivad programmi kulgu tingimuste alusel.

Switch-case: kasulik, kui on palju diskreetseid valikuid (nt kuunimed, menüü valikud).
Loogikaoperaatorid (&&, ||, !) kombineerivad tingimusi.
If-else: kontrollib, kas tingimus on tõene või väär.
Else-if: võimaldab mitmeid astmelisi valikuid.

Näide kood:

if (vanus > 0 && vanus < 6)
    hinnatyyp = "Tasuta";
else if (vanus >= 6 && vanus <= 14)
    hinnatyyp = "Lastepilet";
else if (vanus >= 15 && vanus <= 65)
    hinnatyyp = "Täispilet";
else
    hinnatyyp = "Vale vanus";
switch (kuunr)
{
    case 1: kuu = "jaanuar"; break;
    case 2: kuu = "veebruar"; break;
    ...
    default: kuu = "Vale kuu number"; break;
}

Uued funktsioonid:

  • if, else if, else.
  • switch (value) { … }.
  • Loogikaoperaatorid (&&, ||, !).

3. Kordused, massiivid ja klassid

Kordused võimaldavad sama koodi plokki korduvalt täita:

  • for tsükkel, kui korduste arv on teada.
  • while, kui korduste arv sõltub tingimusest.
  • do-while, kui tuleb tingimust kontrollida alles pärast esimest käivitust.
  • foreach, kui soovitakse läbida kogumit, nt massiiv või List.

Massiiv on kindla suuruse ja ühtlase andmetüübiga elementide kogum.
Klassid kirjeldavad objekte, neil võivad olla omadused (fields, properties) ja meetodid. See on OOP (objektorienteeritud programmeerimise) põhi.

Näide kood:

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(i + 1);
}

int[] arvud = new int[10];
for (int i = 0; i < 10; i++)
{
    arvud[i] = Random.Shared.Next(1, 101);
}
foreach (int arv in arvud)
{
    Console.WriteLine(arv);
}

Klassi näide:

public class Inimene
{
    public string Nimi;
    public int Vanus;
    public void PrindiAndmed()
    {
        Console.WriteLine($"Nimi: {Nimi}, Vanus: {Vanus}");
    }
}

Uued funktsioonid:

  • for, while, do … while, foreach.
  • Massiiv (int[]).
  • OOP põhi – class, konstruktor, omadused (public string Nimi).

4. Failitöötlus

Failid võimaldavad andmete püsivat salvestamist ja lugemist.

Faili teega töötamiseks kasutatakse Path.Combine().
Failitöötlus tuleb alati panna try-catch plokki vigade vältimiseks.

Tekstifailid: lugemine (StreamReader, File.ReadAllText(), File.ReadAllLines()), kirjutamine (StreamWriter, File.WriteAllText()).

Näide kood:

// Faili kirjutamine
StreamWriter text = new StreamWriter(path, true);
text.WriteLine("Uus rida");
text.Close();

// Faili lugemine
string laused = File.ReadAllText(path);
Console.WriteLine(laused);

// Faili reahaaval lugemine
foreach (string rida in File.ReadAllLines(path))
{
    Console.WriteLine(rida);
}

Uued funktsioonid:

  • File.ReadAllText(), File.ReadAllLines().
  • StreamReader, StreamWriter.
  • Sõne töötlemine rea kaupa (foreach rida failist).
  • Faili tee ühendamine: Path.Combine().

5. Kollektsioonid, Listid ja sõnastikud

Kollektsioonid on paindlikumad kui tavalised massiivid.

LINQ laiendmeetodid (nt Sum(), Average(), First()), mis lubavad kogumeid analüüsida.
List<T>: sarnane massiivile, kuid elementide arvu saab muuta. Toetab meetodeid nagu Add(), Remove(), Sort().
Dictionary<TKey,TValue>: andmestruktuur võtme-väärtuse paaridega. Võimaldab kiiresti andmeid otsida võtme järgi.

Näide kood:

List&lt;string> nimed = new List&lt;string>();
nimed.Add("Mari");
nimed.Add("Kati");
nimed.Sort();

Dictionary&lt;string, string> maakonnad = new Dictionary&lt;string, string>();
maakonnad["Harjumaa"] = "Tallinn";
maakonnad["Tartumaa"] = "Tartu";

if (maakonnad.ContainsKey("Harjumaa"))
    Console.WriteLine(maakonnad["Harjumaa"]);

Uued funktsioonid:

  • Kollektsioonid: List<T>, Dictionary<TKey, TValue>.
  • Meetodid: Add(), Remove(), Sort(), ContainsKey().
  • LINQ meetodid (nt Sum(), Average()).

C# OOP

Objektorienteeritud programmeerimise mõisted. Ajalugu

Objektorienteeritud programmeerimine (OOP) on programmeerimise paradigma, mis kasutab “objekte” – andmestruktuure, mis koosnevad andmeväljadest ning meetoditest. Kasutusel võivad olla selliseid võtted nagu andmete abstraktsioon, kapseldamine, modulaarsus, polümorfism ning pärimine. Kuni 1990-ndateni polnud objektorienteeritud programmeerimine tarkvaraarenduses kuigivõrd levinud, kuid tänapäeval on selle tugi juba paljudesse programmeerimiskeeltesse sisse ehitatud.


Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует «объекты» — структуры данных, состоящие из полей данных и методов. Могут использоваться такие приемы, как абстракция данных, инкапсуляция, модульность, полиморфизм и наследование. До 1990-х годов объектно-ориентированное программирование не было широко распространено в разработке программного обеспечения, но сегодня его поддержка уже встроена во многие языки программирования.

Põhilised ideed

Klass

Pikemalt artiklis Klass (programmeerimine)

Klass defineerib olemi (objekti) abstraktsed omadused, muuhulgas ka olemi iseloomustavad omadused ning olemi käitumise ja oskused. Klass on nagu šabloon, mis kirjeldab millegi olemust. Näiteks klass Koer koosneks kõigile koertele omastest omadustest nagu näiteks tõug ja kasuka värv ning oskustest nagu haukumine ja istumine. Objektorienteeritud programmis on klassid need, mis pakuvad modulaarsust ning struktuuri.

Näide:

public class Inimene
{
    public string Nimi;
    public int Vanus;

    public void Tervita()
    {
        Console.WriteLine("Tere! Mina olen " + Nimi);
    }
}


Класс определяет абстрактные свойства объекта, в том числе его характерные черты, поведение и навыки. Класс — это как шаблон, который описывает сущность чего-либо. Например, класс «Собака» состоит из свойств, присущих всем собакам, таких как порода и окрас шерсти, а также навыков, таких как лай и сидение. В объектно-ориентированной программе классы обеспечивают модульность и структуру.

Objekt

Objekt on klassi eksemplar.

<private>, <protected>, <public>

Eksemplar

Klassist saab luua eksemplari. Eksemplar on tegelik objekt, mis tekitatakse programmi täitmisajal. Objekt Pauka on klassi Koer eksemplar. Objekti olekuks nimetatakse tema atribuutide väärtust. Objekt koosneb olekust ning käitumisviisidest, mis on defineeritud selle objekti klassis.


Из класса можно создать экземпляр. Экземпляр — это реальный объект, который создается во время выполнения программы. Объект Pauka является экземпляром класса «Собака». Состояние объекта определяется значениями его атрибутов. Объект состоит из состояния и поведения, которые определены в классе этого объекта.

Meetod

Meetod on objekti võime midagi teha. Meetodeid märgitakse tegusõnaga. Pauka on Koer, seega on tal võime haukuda. Seega haugu() on üks Pauka meetoditest. Tal võib olla ka teisi meetodeid, näiteks istu(), söö() või kõnni(). Meetod mõjutab tavaliselt ainult ühte kindlat objekti. Kõik Koer tüüpi objektid suudavad haukuda, kuid on vaja panna üks kindel koer haukuma.


Метод — это способность объекта что-то делать. Методы обозначаются глаголом. Паука — это собака, поэтому она умеет лаять. Таким образом, гавкать() является одним из методов Паука. У него могут быть и другие методы, например сидеть(), есть() или ходить(). Метод обычно влияет только на один конкретный объект. Все объекты типа Собака могут гавкать, но нужно заставить гавкать одну конкретную собаку.

Pärimine

Alamklassid on klassi kitsam versioon, mis pärib omadused ja käitumise oma ülemklassilt ning võivad lisada enda omi. Näiteks klass Koer võib omada alamklasse Terjer, Taks. Pauka võiks ka olla klassi Koer alamklassi Hurt eksemplar. Oletame, et klass Koer defineerib meetodi haugu() ning omaduse kasukaVärv. Iga selle alamklass pärib need liikmed ehk kood tuleb kirjutada ainult üks kord. Iga alamklass saab ka muuta oma päritud omadusi, näiteks vaikimisi oleks kasukaVärv Taks tüüpi objektidel pruunikas. Pärimine on “x on y” seose tüüp. Hurt on Koer, Pauka on Hurt. Seega omab objekt Pauka omadusi nii klassist Hurt kui ka klassist Koer.


Подклассы — это более узкие версии классов, которые наследуют свойства и поведение от своих родительских классов и могут добавлять свои собственные. Например, класс «Собака» может иметь подклассы «Терьер» и «Такса». Паука также может быть экземпляром подкласса «Хорт» класса «Собака». Предположим, что класс «Собака» определяет метод haugu() и свойство kasukaVärv. Каждый его подкласс наследует эти члены, то есть код нужно писать только один раз. Каждый подкласс может также изменять свои унаследованные свойства, например, по умолчанию kasukaVärv для объектов типа Такса будет коричневым. Наследование — это тип связи «x является y». Шерсть — это Собака, Паука — это Шерсть. Таким образом, объект Паука имеет свойства как от класса Шерсть, так и от класса Собака.

Abstraktsioon

Abstraktsioon on keerulise reaalse probleemi lihtsustamine modelleerides probleemile vastavaid klasse ning probleemile vastaval pärimisastmel. Näiteks võib Paukat, kes on Koer, käsitleda kui Koer tüüpi objekti suurem osa ajast, Hurt tüüpi objekti, kui on vaja ligi pääseda tema hurdalikele omadustele ja käitumisele ning Loom tüüpi objekti (Koer ülemklass), kui Juku tahab kokku lugeda, kui palju on tal lemmikloomi. Abstraktsiooni saavutatakse ka kompositsiooni abil. Näiteks klass Auto sisaldab Mootor, Käigukast, Roolisüsteem ja palju muid tüüpi objekte. Klassi Auto loomiseks ei ole vaja teada, kuidas erinevad komponendid sisemiselt töötavad, kuid on vaja teada, kuidas nendega suhelda (saata ja vastu võtta teateid).


Абстракция — это упрощение сложной реальной проблемы путем моделирования классов, соответствующих проблеме, и уровня наследования, соответствующего проблеме. Например, Паукат, который является Собакой, может рассматриваться как объект типа Собака большую часть времени, объект типа Хорт, когда необходимо получить доступ к его шерстистым свойствам и поведению, и объект типа Животное (надкласс Собака), когда Юку хочет подсчитать, сколько у него домашних животных. Абстракция также достигается с помощью композиции. Например, класс «Автомобиль» содержит «Двигатель», «Коробка передач», «Рулевая система» и многие другие типы объектов. Для создания класса «Автомобиль» не нужно знать, как работают различные компоненты внутри, но нужно знать, как с ними взаимодействовать (отправлять и принимать сообщения).

Kapseldamine

Kapseldamine eraldab klassi funktsionaalse sisu ja liidese. Meetodi haugu() sisu defineerib, kuidas haukumine toimub (hingaSisse(), hingaVälja(), teeTeatudKõrgusegaHäält()). Juku ei pea teadma, kuidas see kõik tegelikult toimub, talle on vaja teada, kuidas seda esile kutsuda. Kapseldamise saavutamiseks kirjeldatakse, millised klassid võivad objekti liikmeid kasutada. Tulemuseks on see, et objekt eksponeerib igale klassile kindla liidese – liikmed, mis on sellele klassile kättesaadavad. Eesmärgiks on see, et selle liidese kliendid ei sõltuks realisatsiooni nendest osadest, mis võivad tulevikus muutuda. Muudatuste tegemine muutub aga lihtsamaks.


Капсулирование отделяет функциональное содержание класса и интерфейс. Содержание метода haugu() определяет, как происходит лай (hingaSisse(), hingaVälja(), teeTeatudKõrgusegaHäält()). Juku не должен знать, как все это происходит на самом деле, ему нужно знать, как это вызвать. Для достижения инкапсуляции описывается, какие классы могут использовать члены объекта. В результате объект экспонирует для каждого класса определенный интерфейс — члены, доступные для этого класса. Цель состоит в том, чтобы клиенты этого интерфейса не зависели от тех частей реализации, которые могут измениться в будущем. При этом внесение изменений становится проще.

Polümorfism

Polümorfism võimaldab programmeerijal käsitleda päritud klassi eksemplare kui ülemklassi eksemplare. Polümorfism tähendab seda, et erinevat tüüpi objektid reageerivad sama nimega meetodi väljakutsetele, kuid käitumine sõltub objekti tüübist. Olgu meil klassid Koer ja Siga, mis on mõlemad päritud klassist Loom, mis sisaldab meetodit ütleMidagi(). Nii Siga kui ka Koer tüüpi objektid sisaldavad meetodit ütleMidagi(), kuid selle meetodi sisu on kahel erinev. Kui meil on Koer tüüpi objekt koer ja Siga tüüpi objekt siga, aga me käsitleme neid kui Loom tüüpi objekte, siis on mõlemad võimalik panna häälitsema, kasutades meetodit ütleMidagi(), objekti koer puhul aga kutsutakse objektisiseselt välja meetod haugu() ning objekti siga puhul meetod röhitse().


Полиморфизм позволяет программисту рассматривать экземпляры унаследованного класса как экземпляры суперкласса. Полиморфизм означает, что объекты разных типов отвечают на вызовы методов с одинаковым именем, но поведение зависит от типа объекта. Рассмотрим классы Dog и Pig, оба из которых унаследованы от класса Animal, который содержит метод saySomething(). Оба объекта Pig и Dog содержат метод saySomething(), но содержимое этого метода для них различно. Если у нас есть объект типа Dog и объект типа Pig, но мы рассматриваем их как объекты типа Animal, то оба можно заставить издавать звук с помощью метода saySomething(), но в случае объекта Dog внутри вызывается метод bark(), а в случае объекта Pig внутри вызывается метод burp().

C# class

Klass

  • Klass on mall või plaan, mille põhjal luuakse objekte.
  • Kirjeldab omadusi (välju) ja tegevusi (meetodeid).
public class Inimene
{
    public string Nimi;
    public int Vanus;
    public void Tervita()
    {
        Console.WriteLine("Tere! Mina olen " + Nimi);
    }
}

Pärilus (inheritance)

  • Võimaldab luua uue klassi olemasoleva põhjal.
  • Alamklass pärib kõik vanema omadused ja meetodid.
  • Võimalik laiendada või muuta käitumist.
public class Töötaja : Inimene
{
    public string Ametikoht;
    public void Töötan()
    {
        Console.WriteLine($"{Nimi} töötab ametikohal {Ametikoht}.");
    }
}

Abstraktsioon (abstraction)

  • Peidab keerulise loogika ja näitab ainult vajalikku infot.
  • Kasutatakse abstraktsete klasside ja liideste abil.
public abstract class Loom
{
    public string Nimi;
    public abstract void TeeHääl();
}
public class Koer : Loom
{
    public override void TeeHääl()
    {
        Console.WriteLine("Auh-auh!");
    }
}

Kapseldamine (encapsulation)

  • Andmete peitmine otse ligipääsu eest.
  • Kasutatakse private välju ja public omadusi (get/set).
  • Kontrollib, kuidas andmeid muudetakse.
public class Pank
{
    private double saldo;
    public double Saldo
    {
        get { return saldo; }
        set
        {
            if (value &gt;= 0)
                saldo = value;
        }
    }
}

Liides (interface)

  • Kirjeldab ainult meetodite allkirjadei sisalda loogikat.
  • Klassi, mis rakendab liidest, kohustab neid meetodeid defineerima.
  • Võimaldab mitut “päritud” tüüpi.
public interface IHeliline
{
    void TeeHääl();
}
public class Kass : IHeliline
{
    public void TeeHääl()
    {
        Console.WriteLine("Mjäu!");
    }
}

Kokkuvõte

MõisteKirjeldus
KlassMall objektide loomiseks.
PärilusAlamklass pärib vanema omadused ja meetodid.
AbstraktsioonPeidab detailid, näitab vaid olulist.
KapseldamineAndmete kaitse, kontrollitud ligipääs.
Liides (interface)Nagu leping – määrab, millised meetodid peavad olemas olema.

Näide kasutuses:

public interface ITööline
{
    double ArvutaPalk();
}
public class Töötaja : Inimene, ITööline
{
    public double Tunnitasu;
    public int Tunnid;
    public double ArvutaPalk()
    {
        return Tunnitasu * Tunnid;
    }
    public override string ToString()
    {
        return $"{Nimi}, Vanus: {Vanus}, Palk: {ArvutaPalk()}";
    }
}

Andmebaasisüsteemide alused:

Põhimõisted

mille jaoks me kasutame andmebaase (AB)?

  1. Hoiustada andmed
  2. päringu tegemine, et vajalikud andmed leida
  3. vältida andmete dubleerimist

Andmetüübid:

  1. text/sümbol (Varchar(25), char(5), TEXT
  2. Number (int, smallint, decimal(5, 3)
  3. Loogika (bit, boolean, bool. true/false)
  4. date/time (date, time, interval)

Piirangud:

Primary key – primaarne võti – lisab andmetabelis iga kirje unikaalsus

Foreign key – välisvõti – seos teise tabeliga

not null

unique – ainult üks kord tabelis

check – valik – kasutaja saab valida

SQL – Structure Query Languge – Struktuurne päringukeel

SQL SERVER Managment stuudio

Server name: (localdb)\mssqllocaldb

Windows Autentification

–AB loomine

--AB loomine
Create database TahmazovBaas;
use TahmazovBaas;
CREATE TABLE opilane(
opilaneID int primary key identity (1,1),
eesnimi varchar(25) not null,
perenimi varchar (25) not null,
synniaeg date,
stip bit,
aadres text,
keskmine_hinne decimal(2,1)
)
select * from opilane;
--andmete lisamine tabilisse
INSERT INTO opilane(eesnimi,
perenimi,
synniaeg,
stip,
keskmine_hinne)
VALUES(
'Nikita',
'Nikita',
'2000-12-12',
1,
4.5),
(
'Nikita2',
'Nikita2',
'2000-12-12',
1,
4.5),
(
'Nikita3',
'Nikita3',
'2000-12-12',
1,
4.5),
(
'Nikita4',
'Nikita4',
'2000-12-12',
1,
4.5),
(
'Nikita5',
'Nikita5',
'2000-12-12',
1,
4.5)
--tabeli kustutamine
drop table opilane;
--rida kustutamine, kus on opilaneId=2
DELETE FROM opilane WHERE opilaneId=2;
select * from opilane;
--andmete uuendamine
UPDATE opilane SET aadres='Tartu'
WHERE opilaneId=3

Andmebaaside normaliseerimise alusedandmebaas

Normaliseerimine – andmebaasi andmete korratastamine

Otsime abelites –

  • KORDUSED
  • vastuolud

1 NormaalKuju (1NF)

  • Tabeli artibuudid on unikaalse nimega
  • Igas veerus on ainult ühe tüübid andmed
  • Igal tabelil on Primaarvõti
  • Igas lahtris on ainult ühte väärtust, see tähendab kui õpilasel on kaks moobiilinumbrit, siis ei tohi neid sisestada ühe lahtrisse – on vaja luua eraldi tabeli

2 NormaaliKuj (2NF)

  • Täidetud NF1
  • Luuakse eraldi tabeleid mis on seotud primaarvõtmega (võõrvõti, väline VÕTI)

3 NormaalKuju (3NF)

  • Täidetud 1NF, 2NF
  • on vaja kustutada need veerud, mis ei ole otse seotud priimaarvõtmega.
  • Näiteks, kui tabelis opilane on veerg keskmine_hinne, siis keskmine_hinne ei ole seotud primaarvõtmega

Normaliseerimine
See on protsess, mille käigus andmed korraldatakse tõhusalt
andmebaasi


Eesmärgid:

  1. üleliigsete andmete kõrvaldamine;
  2. Andmete sõltuvuse tagamine.
    üksteisest;
  3. tagada kõigi andmete järjepidevus ja
    võimalike vastuolude kõrvaldamine.