|
|
Cvičenie 7
|
|
|
# Cvičenie 7
|
|
|
|
|
|
Vytvorte si dva nové projekty: Cv7 (console application) Cv7Lib (class library), nech sú obidve postavené na .NET framework
|
|
|
Vytvorte si dva nové projekty: Cv7 (console application) Cv7Lib (class library), nech sú obidve postavené na .NET framework (__musia byť v jednom solution!__)
|
|
|
|
|
|
Konzolová aplikácia nám bude slúžiť len pre jednoduchšie zobrazenie dát, užívateľské rozhranie budeme vytvárať nabudúce.
|
|
|
|
... | ... | @@ -8,7 +8,7 @@ Konzolová aplikácia nám bude slúžiť len pre jednoduchšie zobrazenie dát, |
|
|
|
|
|
V Cv7Lib si vytvorte triedu Employee, nech táto obsahuje verejne dostupné vlastnosti (properties) Name, Address, PhoneNumber, Salary (teda public getter & setter)
|
|
|
|
|
|
Vytvorte si triedu CompanyEmployees ktorá bude v sebe obsahovať zoznam zamestnancov.
|
|
|
Vytvorte si triedu CompanyEmployees ktorá bude v sebe obsahovať __zoznam__ zamestnancov.
|
|
|
|
|
|
Vytvorte pre tento zoznam prístupové funkcie: AddEmployee, GetEmployees
|
|
|
|
... | ... | @@ -31,21 +31,21 @@ Niekoľko príkladov: |
|
|
```csharp
|
|
|
Func<int, int> addOne = x => x + 1; //x je implicitne deklarovaná premenná - vstupný parameter
|
|
|
//tento lambda výraz je totožný s nasledujúcou funkciou
|
|
|
int AddOne(int x)
|
|
|
int AddOne(int x)
|
|
|
{
|
|
|
return x + 1;
|
|
|
}
|
|
|
//---------------------------------------------------
|
|
|
Func<int, int, int> addValues = (a, b) => a + b;
|
|
|
|
|
|
int AddValues(int a, int b)
|
|
|
int AddValues(int a, int b)
|
|
|
{
|
|
|
return a + b;
|
|
|
}
|
|
|
//---------------------------------------------------
|
|
|
Func<int, int, bool> compareValues = (a, b) => a > b;
|
|
|
|
|
|
bool CompareValues(int a, int b)
|
|
|
bool CompareValues(int a, int b)
|
|
|
{
|
|
|
return a > b;
|
|
|
}
|
... | ... | @@ -54,22 +54,29 @@ bool CompareValues(int a, int b) |
|
|
Ako ale tieto metódy implementovať?
|
|
|
|
|
|
- pridajte si `using System.Linq;`
|
|
|
- toto nám umožní používať takzvané extension methods nad kolekciami, tieto nám umožňujú, okrem iného filtrovať a transformovať kolekcie. Takéto metódy sú napr. Where a First. Keď si všimnete, tieto očakávajú ako parameter práve lambda funkciu so signatúrou popísanou vyššie.
|
|
|
- toto nám umožní používať takzvané extension methods nad kolekciami, tieto nám umožňujú, okrem iného filtrovať a transformovať kolekcie. Takéto metódy sú napr. Where a First. Keď si všimnete, tieto očakávajú ako parameter práve lambda funkciu so signatúrou popísanou vyššie.
|
|
|
|
|
|
```csharp
|
|
|
Func<Employee, bool> predicate = e => e.Name.Length > 15;
|
|
|
Func<Employee, bool> predicate = e => e.Name.Length > 15; //táto lambda funkcia je použitá frameworkom pri filtrovaní, ako je to ukázané v ďalšom riadku, môžeme ju poslať aj ako parameter do funkcie
|
|
|
|
|
|
List<Employee> employeesWithLongName = employees.Where(predicate).ToList(); //ToList() nám vytvorí nový zoznam s týmito hodnotami
|
|
|
|
|
|
//alternatíva 2:
|
|
|
List<Employee> employeesWithLongName = employees.Where(e => e.Name.Length > 15).ToList();
|
|
|
```
|
|
|
|
|
|
V konzolovej aplikácií si pridajte knižnicu do referencií - keď máte v solution explorer zvolený projekt s konzolou, choďte na Project -> Add Reference..., prípadne kliknite pravým tlačidlom na references a Add Reference... tu si v záložke project zaškrtnite Cv7Lib. Teraz bude naša knižnica referencovaná v rámci konzolovej aplikácie a vieme ju použiť.
|
|
|
V konzolovej aplikácií si pridajte knižnicu do referencií - keď máte v solution explorer zvolený projekt s konzolou, choďte na Project -> Add Reference..., prípadne kliknite pravým tlačidlom na references a Add Reference... tu si v záložke project zaškrtnite Cv7Lib. Teraz bude naša knižnica referencovaná v rámci konzolovej aplikácie a vieme ju použiť.
|
|
|
|
|
|
V Main si vytvorte CompanyEmployees a pridajte tam niekoľko zamestnancov (možete priamo v kóde, toto je cvičná úloha, nemusíte čítať z obrazovky), do triedy Employee ešte pridajte ToString() nech vieme spraviť výpis do konzoly.
|
|
|
|
|
|
V Main napíšte lambda výraz, pomocou ktorého nájdete zamestnancov, ktorí majú plat vyšší ako určitá suma, vypíšte ich na obrazovku.
|
|
|
|
|
|
Môžete si vyskúšať aj ForEach pomocou lambda expression:
|
|
|
|
|
|
```csharp
|
|
|
collection.ForEach(x => Console.WriteLine(x)); //x je typu aký je držaný v danej kolekcií, takže ak to nie je string, nezabudnite spraviť prevod / zavolať ToString()
|
|
|
```
|
|
|
|
|
|
## 2
|
|
|
|
|
|
V Cv7Lib si pridajte triedu CsvFile, táto trieda bude slúžiť na čítanie a zápis do CSV súboru.
|
... | ... | @@ -96,7 +103,6 @@ https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/file-system/how |
|
|
CSV súbory:
|
|
|
https://en.wikipedia.org/wiki/Comma-separated_values
|
|
|
|
|
|
|
|
|
Následne:
|
|
|
1. Pridajte si do Employee metódu `string ToCSVLine()` ktorá vytvorí zo záznamu riadok do CSV súboru
|
|
|
2. Pridajte si do CsvFile `private Employee CreateEmployee(string csv)` tu rozdeľte riadok z CSV súboru na jednotlivé hodnoty a vytvorte pomocou nich nového zamestnanca. Na rozdelenie hodnôt použite `String.Split(',')`
|
... | ... | |