2023. október 13., péntek

2023.10.13. Employee hagyományos megoldás

  Az Employee feladat nem LINQ-s, hagyományos megoldása

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Employee
{
    class Dolgozok
    {
        //name, age, city, department, position, gender, marital status, salary (EUR)
        public string Nev { get; set; }
        public int Eletkor { get; set; }
        public string Varos { get; set; }
        public string Osztaly { get; set; }
        public string Pozicio { get; set; }
        public string Nem { get; set; }
        public string CsaladiAllapot { get; set; }
        public double Fizetes { get; set; }


        public Dolgozok(string sor)
        {
            var v = sor.Split(';');
            Nev = v[0];
            Eletkor = int.Parse(v[1]);
            Varos = v[2];
            Osztaly = v[3];
            Pozicio = v[4];
            Nem = v[5];
            CsaladiAllapot = v[6];
            Fizetes = Convert.ToDouble(v[7]);
        }

        public double EvesFizetesForintban()
        {
            return Fizetes * 12 * 390;
        }

        //Készíts egy osztályon belüli virtuális metódust az adatok kiírására.
        public override string ToString()
        {
            return $"{Nev}; {Eletkor}; {Varos}; {Osztaly}; {Pozicio}; {Nem}; {CsaladiAllapot}; {Fizetes}";
        }
    }
}


using System;
using System.IO;
using System.Collections.Generic;
namespace Employee
{
    class Program
    {
        //A következő feladatokat a program osztályban elhelyezett statikus metódusokkal oldd meg. (Aki szeret kísérletezni, teheti ezeket a metódusokat egy újabb osztályba.) Egyes feladatokat meg lehet oldani LINQ-val is, de ha belefér az időbe, kódoljátok le hagyományosan is.Ha van olyan feladat, ami nem egyértelmű, pl.az, hogyan kell kiírni, ott rád van bízva a megoldás.
        //Függvény segítségével írd ki az életkorok átlagát.
        #region statikus metódusok
        static double atlagEletkor(List<Dolgozok> k)
        {
            double osszegEletkor = 0;
            for (int i = 0; i < k.Count; i++)
            {
                osszegEletkor = osszegEletkor + k[i].Eletkor;
            }
            return osszegEletkor / k.Count;
        }
        //Függvény segítségével írd ki azon személyek számát, akiknek a városa 'Budapest'.
        static int szemelyekBp(List<Dolgozok> k)
        {
            int db = 0;
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Varos == "Budapest")
                {
                    db++;
                }
            }
            return db;
        }
        //Függvény segítségével keresd ki, majd a virtuális metódus segítségével írd ki a legidősebb személy adatait.
        //Ez a megoldás nem függvénnyel készült.
        static void legidosebbSzemely(List<Dolgozok> k)
        {
            int legidosebbEletkor = k[0].Eletkor;
            for (int i = 1; i < k.Count; i++)
            {
                if (k[i].Eletkor > legidosebbEletkor)
                {
                    legidosebbEletkor = k[i].Eletkor;
                }
            }            
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Eletkor == legidosebbEletkor)
                {
                    Console.WriteLine(k[i]);
                }
            }
        }

        //Függvény segítségével keresd ki, majd a virtuális metódus segítségével írd ki a legidősebb személy adatait.
        //Ez a megoldás függvénnyel készült.
        static Dolgozok legidosebbSzemely1(List<Dolgozok> k)
        {
            Dolgozok legidosebb = k[0];
            for (int i = 1; i < k.Count; i++)
            {
                if (k[i].Eletkor > legidosebb.Eletkor)
                {
                    legidosebb = k[i];
                }
            }
            return legidosebb;
        }
        //Függvény segítségével döntsd el, majd a főprogramban írd ki, hogy van - e 30 év fölötti személy, és emellett írd ki a nevét is. (Ez a függvény tehát két értéket kell, hogy generáljon, ezt egyetlen szövegként add vissza a főprogramnak, és a főprogram bontsa szét az adatokat, majd utána írja ki.)
        static string harmincFeletti(List<Dolgozok> k)
        {
            bool van = false;
            int i = 0;
            while (i < k.Count)
            {
                if (k[i].Eletkor > 30)
                {
                    van = true;
                }
                i++;
            }

            if (van)
            {
                return $"{"true"} {k[i - 1].Nev}";
            }
            else
            {
                return $"{"false"} {"nincs"}";
            }
        }
        //Függvénnyel válogasd ki azon személyek nevét egy új tömbbe (nem listába), akik 30 évnél fiatalabbak. Ennek a tömbnek a hasznos tartalmát írd ki a főprogramban.
        static string[] harmincAlatt(List<Dolgozok> k)
        {
            int x = 0;
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Eletkor < 30)
                {
                    x++;
                }
            }
            string[] harmincAlattTomb = new string[x];
            int j = 0;
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Eletkor < 30)
                {
                    harmincAlattTomb[j] = k[i].Nev;
                    j++;
                }
            }
            return harmincAlattTomb;
        }
        //Egyetlen függvénnyel keresd meg a legfiatalabb és a legidősebb személyt. A függvénynek legyen két olyan paramétere, amiben az eredményt vissza lehet juttatni a főprogramba, és ott ki lehet írni a nevüket és a korukat. A függvény visszatérési értéke pedig képes legyen azt jelezni, hogy van-e több ugyanolyan korú legfiatalabb személy.
        static bool legidosebbEsLegfiatalabbSzemely(List<Dolgozok> k, out string legidosebbNev, out string legfiatalabbNev)
        {
            int legidosebbEletkor = k[0].Eletkor;
            legidosebbNev = k[0].Nev;
            int szamlalo1 = 0;
            for (int i = 1; i < k.Count; i++)
            {
                if (k[i].Eletkor > legidosebbEletkor)
                {
                    legidosebbEletkor = k[i].Eletkor;
                    legidosebbNev = k[i].Nev;
                }
            }
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Eletkor == legidosebbEletkor) szamlalo1++;
            }

            int legfiatalabbEletkor = k[0].Eletkor;
            legfiatalabbNev = k[0].Nev;
            int szamlalo2 = 0;
            for (int j = 1; j < k.Count; j++)
            {
                if (k[j].Eletkor < legfiatalabbEletkor)
                {
                    legfiatalabbEletkor = k[j].Eletkor;
                    legfiatalabbNev = k[j].Nev;
                    szamlalo2++;
                }
            }
            for (int i = 0; i < k.Count; i++)
            {
                if (k[i].Eletkor == legfiatalabbEletkor) szamlalo2++;
            }
            //a legutolsó legidősebbet és a legutolsó legfiatalabbat adja meg
            //ez is jó:
            //if (szamlalo1 > 0 || szamlalo2 > 0)
            //{
            //    return true;
            //}
            //else
            //{
            //    return false;
            //}
            //de ez még szebb:
            return szamlalo1 > 0 || szamlalo2 > 0 ? true : false;
        }
        //Készíts egy függvényt, ami átszámolja az euróban megadott havi fizetést éves fizetéssé, és az eredményt még váltsd át magyar forintba is.
        //ez az osztályban van

        //Készíts egy függvényt, amelynek visszatérési értéke egy objektumokat tartalmazó lista, amelyben szerepel az 5 millió forint éves fizetés feletti munkavállalók neve és az éves fizetésük forintban. (Az átszámításhoz használd az előző feladat függvényét.)  Az elkészült listát a főprogram írja ki egy új fájlba(a virtuális metódus segítségével).
        //itt folytatjuk
        static List<string> FajlbaIras(List<Dolgozok> k)
        {
            List<string> evesForint = new List<string>();
            foreach (var item in k)
            {
                if (item.EvesFizetesForintban() > 5000000)
                {
                    evesForint.Add($"Név: {item.Nev} Éves fizetés forintban: {item.EvesFizetesForintban()}");
                }
            }
            return evesForint;
        }
        //Írj egy függvényt, aminek a paramétere az eredeti adatokat tartalmazó listának megfelelő típusú. Ennek segítségével számold ki az összes alkalmazott átlagfizetését.
        static double atlag(List<Dolgozok> k)
        {
            double osszeg = 0;
            for (int i = 0; i < k.Count; i++)
            {
                osszeg = osszeg + k[i].Fizetes;
            }
            return Math.Round (osszeg / k.Count, 2);
        }
        #endregion
        static void Main(string[] args)
        {
            //Az osztály segítségével hozz létre egy listát, amely objektumpéldányokat tartalmaz a forrásfájlból beolvasott adatokkal.
            var dolgozok = new List<Dolgozok>();
            foreach (var i in File.ReadAllLines(@"../../src/employee.txt"))
            {
                if (i != "")
                {
                    dolgozok.Add(new Dolgozok(i));
                }
            }
            //A virtuális metódus segítségével írd ki az összes adatot.
            Console.WriteLine("7.feladat");
            Console.WriteLine();
            foreach (var item in dolgozok)
            {
                Console.WriteLine(item);
            }
            //Propertyk kidolgozása(Szorgalmi feladat)
            //Dolgozd ki a property-ket is, és használd őket az adatokhoz való korrekt hozzáférésre és módosításra.
            //Hibakezelés(Szorgalmi feladat)
            //Implementálj hibakezelést az alkalmazásban, például az adatok beolvasásakor vagy a fájlba írás során.      
            Console.WriteLine();
            Console.WriteLine("8.feladat");
            Console.WriteLine();
            Console.WriteLine($"Az átlagéletkor: {atlagEletkor(dolgozok):0.00}");
            Console.WriteLine();
            Console.WriteLine("9.feladat");
            Console.WriteLine();
            Console.WriteLine($"Budapesti lakosok száma: {szemelyekBp(dolgozok)}");
            Console.WriteLine();
            Console.WriteLine("10.feladat 1. megoldás");
            Console.WriteLine();
            legidosebbSzemely(dolgozok);
            Console.WriteLine();
            Console.WriteLine("10.feladat 2. megoldás");
            Console.WriteLine();
            Dolgozok legidosebbDolgozo = legidosebbSzemely1(dolgozok);
            for (int i = 0; i < dolgozok.Count; i++)
            {
                if (dolgozok[i].Eletkor == legidosebbDolgozo.Eletkor)
                {
                    Console.WriteLine(dolgozok[i]);
                }
            }
            Console.WriteLine();
            Console.WriteLine("11.feladat");
            Console.WriteLine();
            var valasz = harmincFeletti(dolgozok).Split(' ');
            if (valasz[0] =="true")
            {
                Console.WriteLine($"Van 30 év feletti személy, az elsőnek a neve: {valasz[1]}");
            }
            else
            {
                Console.WriteLine($"Nincs 30 év feletti személy. ");
            }
            Console.WriteLine();
            Console.WriteLine("12.feladat");
            Console.WriteLine();
            foreach (var item in harmincAlatt(dolgozok))
            {
                Console.WriteLine(item);
            }          
            Console.WriteLine();
            Console.WriteLine("13.feladat");
            Console.WriteLine();
            string legidosebb, legfiatalabb;
            legidosebbEsLegfiatalabbSzemely(dolgozok, out legidosebb, out legfiatalabb);
            Console.WriteLine($"Utolsó legidősebb: {legidosebb}, utolsó legfiatalabb: {legfiatalabb}");
            Console.WriteLine();
            Console.WriteLine("14.feladat");
            Console.WriteLine();
            Console.WriteLine("Kész");
            Console.WriteLine();
            Console.WriteLine("15.feladat Fájlba írás");
            Console.WriteLine();
            using (var sw = new StreamWriter(@"../../src/otmillio.txt"))
            {
                foreach (var item in FajlbaIras(dolgozok))
                {
                    sw.WriteLine(item);
                }
            }
            Console.WriteLine("Kész.");
            Console.WriteLine();
            Console.WriteLine("16.feladat");
            Console.WriteLine();
            Console.WriteLine($"Az átlag havi fizetés: {atlag(dolgozok)} Euró.");
            //Készíts a főprogramban egy olyan listát, amiben csak a developer beosztásúak találhatók, minden tulajdonságukkal. Hívd meg újra a főprogramból az előző függvényt, de most ez az új lista legyen a paramétere. A főprogram írja ki a developerek átlagfizetését.

            Console.WriteLine();
            Console.WriteLine("17.feladat");
            Console.WriteLine();
            var developerLista = new List<Dolgozok>();  
            for (int i = 0; i < dolgozok.Count; i++)
            {
                if (dolgozok[i].Pozicio == "Developer")
                {
                    developerLista.Add(dolgozok[i]);
                }
            }
            Console.WriteLine($"A developerek átlagfizetése: {atlag(developerLista)} Euró");
            Console.WriteLine();
            Console.WriteLine("18.feladat");
            Console.WriteLine();
            //Számold ki a férfi és női alkalmazottak átlagfizetését tetszőleges módszerrel.
            var FerfiAtlag = new List<Dolgozok>();
            var NoiAtlag = new List<Dolgozok>();
            for (int i = 0; i < dolgozok.Count; i++)
            {
                if (dolgozok[i].Nem == "Male")
                {
                    FerfiAtlag.Add(dolgozok[i]);
                }
                else if (dolgozok[i].Nem == "Female")
                {
                    NoiAtlag.Add(dolgozok[i]);
                }
            }
            Console.WriteLine($"A férfiak átlagfizetése: {atlag(FerfiAtlag)} Euró");
            Console.WriteLine();
            Console.WriteLine($"A nők átlagfizetése: {atlag(NoiAtlag)} Euró");
            Console.ReadLine();
        }
    }
}



John;25;Budapest;IT;Engineer;Male;Single;1200

Alice;30;Debrecen;Marketing;Manager;Female;Married;900

Bob;22;Szeged;HR;Assistant;Male;Single;650

Eva;28;Budapest;Finance;Analyst;Female;Married;1100

Michael;35;Pécs;Sales;Representative;Male;Single;800

Sophia;29;Budapest;IT;Developer;Female;Married;1350

David;40;Szeged;Finance;Manager;Male;Married;1600

Sarah;27;Debrecen;IT;Designer;Female;Single;950

Daniel;32;Szeged;HR;Manager;Male;Single;1400

Emma;31;Pécs;Marketing;Coordinator;Female;Married;720

Matthew;34;Budapest;IT;Team Lead;Male;Single;1450

Olivia;26;Szeged;Sales;Representative;Female;Single;710

William;38;Budapest;Finance;Analyst;Male;Married;1150

Ava;23;Debrecen;IT;Developer;Female;Single;1300

James;29;Budapest;Marketing;Manager;Male;Single;950

Mia;33;Pécs;HR;Assistant;Female;Married;660

Benjamin;24;Szeged;Finance;Analyst;Male;Single;1120

Charlotte;36;Budapest;Sales;Representative;Female;Married;720

Logan;30;Debrecen;IT;Engineer;Male;Single;1150

Luna;28;Szeged;Finance;Manager;Female;Single;1400

Ethan;26;Pécs;IT;Designer;Male;Single;990

Harper;35;Budapest;Marketing;Coordinator;Female;Married;810

Liam;22;Budapest;IT;Developer;Male;Single;1250

Aria;31;Szeged;Finance;Analyst;Female;Married;930

Noah;37;Pécs;Sales;Representative;Male;Single;720

Grace;29;Budapest;IT;Team Lead;Female;Married;1520

Oliver;28;Debrecen;Marketing;Manager;Male;Single;1120

Nincsenek megjegyzések:

Megjegyzés küldése

2024.04.25., 29., 05.02. Időjárás app

 Feladat: Időjárás app - OOP módszerekkel, haladóknak adatkötéssel Az alkalmazás célja, hogy a felhasználók hozzáadjanak és eltávolítsanak v...