/* * Nechá uživatele vybrat a přiřadit na školení lektora ze seznamu lektorů, * kteří mohou na školení učit. */ public void PriraditLektora(Skoleni skoleni) { // Vytvoříme si seznam lektorů, kteří ještě nejsou přiřazeni na toto školení // a mohou tedy být přiřazeni List <Lektor> lektori = new List <Lektor>(); foreach (Lektor lektor in Lektori) { if (!skoleni.Lektori.Contains(lektor)) { lektori.Add(lektor); } } Console.WriteLine("*** Přiřazení lektora na školení ***"); // Zobrazíme seznam lektorů, které je možné přiřadit na školení a necháme // uživatele vybrat, kterého chce přiřadit. for (int i = 0; i < lektori.Count; i++) { Console.WriteLine("{0}. {1} {2} ({3})", i + 1, lektori[i].Jmeno, lektori[i].Prijmeni, lektori[i].Kod); } Console.WriteLine("0. Zpět"); Console.Write("Přiřadit lektora:"); int volba = Int32.Parse(Console.ReadLine()) - 1; if (volba >= 0 && volba < lektori.Count) { skoleni.Lektori.Add(lektori[volba]); UlozitSkoleni(); Console.WriteLine("! Lektor byl úspěšně přihlášen na školení !"); } }
/* * Nechá uživatele vybrat a přihlásit na školení studenta ze seznamu studentů, * kteří se mohou přihlásit na školení. */ public void PrihlasitStudenta(Skoleni skoleni) { // Vytvoříme si seznam studentů, kteří ještě na školení nejsou přihlášení // a mohou se tedy přihlásit List <Student> studenti = new List <Student>(); foreach (Student student in Studenti) { if (!skoleni.Studenti.Contains(student)) { studenti.Add(student); } } Console.WriteLine("*** Přihlášení studenta na školení ***"); // Zobrazíme seznam studentů, které je možné přihlásit na školení a necháme // uživatele vybrat, kterého chce přihlásit. for (int i = 0; i < studenti.Count; i++) { Console.WriteLine("{0}. {1} {2} ({3})", i + 1, studenti[i].Jmeno, studenti[i].Prijmeni, studenti[i].Kod); } Console.WriteLine("0. Zpět"); Console.Write("Přihlásit studenta:"); int volba = Int32.Parse(Console.ReadLine()) - 1; if (volba >= 0 && volba < studenti.Count) { skoleni.Studenti.Add(studenti[volba]); UlozitSkoleni(); Console.WriteLine("! Student byl úspěšně přihlášen na školení !"); } }
/* * Výpiše na konzoli detailní informace o školení. Pokud je školení uzavřené, pak * vypíše i hodnocení jednotlivých studentů */ public void ZobrazDetailSkoleni(Skoleni skoleni) { string stav = "Otevřené"; if (skoleni.Uzavreno) { stav = "Uzavřené"; } Console.WriteLine("*** Detail Skoleni ***\n"); Console.WriteLine("Název školení: {0}", skoleni.Nazev); Console.WriteLine("\tStav: {0}", stav); Console.WriteLine("\tPopis: {0}", skoleni.Popis); Console.WriteLine("\tDoporučený počet účastníků: {0}", skoleni.DoporucenyPocetUcastniku); Console.WriteLine("\tDatum konání: {0} - {1}", skoleni.PocatecniDatum.ToShortDateString(), skoleni.KoncoveDatum.ToShortDateString()); Console.WriteLine("\tLektori:"); foreach (Lektor lektor in skoleni.Lektori) { Console.WriteLine("\t\t{0} {1} ({2})", lektor.Jmeno, lektor.Prijmeni, lektor.Kod); } Console.WriteLine("\tStudenti:"); foreach (Student student in skoleni.Studenti) { if (skoleni.Uzavreno) { Console.WriteLine("\t\t{0} {1} ({2}) - {3}%", student.Jmeno, student.Prijmeni, student.Kod, skoleni.HodnoceniStudentu[student]); } else { Console.WriteLine("\t\t{0} {1} ({2})", student.Jmeno, student.Prijmeni, student.Kod); } } }
/* * Postupně vyzve k zadání hodnocení jednotlivých studentů. Po ohodnocení * všech studentů nastaví školení jako uzavřené. */ public void UzavritSkoleni(Skoleni skoleni) { Console.WriteLine("*** Uzavření školení ***"); Console.WriteLine("Vyplňte hodnocení jednotlivých studentů"); foreach (Student student in skoleni.Studenti) { Console.Write("{0} {1} ({2}): ", student.Jmeno, student.Prijmeni, student.Kod); int hodnoceni = Int32.Parse(Console.ReadLine()); skoleni.HodnoceniStudentu[student] = hodnoceni; } skoleni.Uzavreno = true; UlozitSkoleni(); Console.WriteLine("! Školení bylo úspěšně uzavřeno !"); }
/* * Postupně od uživatele načte informace a vytvoří nové školení a uloží jej do seznamu školení */ public void NoveSkoleni() { Console.WriteLine("*** Vytvoření nového školení ***"); Console.Write("Název:"); string nazev = Console.ReadLine(); Console.Write("Popis:"); string popis = Console.ReadLine(); Console.Write("Doporučený počet účastníků:"); int doporucenyPocetUcastniku = Int32.Parse(Console.ReadLine()); Console.WriteLine("Počáteční datum:"); Console.Write("\tDen:"); int pocDatDen = Int32.Parse(Console.ReadLine()); Console.Write("\tMesic:"); int pocDatMes = Int32.Parse(Console.ReadLine()); Console.Write("\tRok:"); int pocDatRok = Int32.Parse(Console.ReadLine()); DateTime pocatecniDatum = new DateTime(pocDatRok, pocDatMes, pocDatDen); Console.WriteLine("Koncové datum:"); Console.Write("\tDen:"); int konDatDen = Int32.Parse(Console.ReadLine()); Console.Write("\tMesic:"); int konDatMes = Int32.Parse(Console.ReadLine()); Console.Write("\tRok:"); int konDatRok = Int32.Parse(Console.ReadLine()); DateTime koncoveDatum = new DateTime(konDatRok, konDatMes, konDatDen); Skoleni noveSkoleni = new Skoleni(nazev, popis, pocatecniDatum, koncoveDatum, new List <Student>(), new List <Lektor>(), new Dictionary <Student, int>(), doporucenyPocetUcastniku, false); SeznamSkoleni.Add(noveSkoleni); UlozitSkoleni(); Console.WriteLine("! Školení bylo úspěšně vytvořeno !"); }
/* * Nechá uživatele vybrat a odebrat ze školení lektora, který je již na školení přiřazen */ public void OdebratLektora(Skoleni skoleni) { Console.WriteLine("*** Odebrání lektora ze školení ***"); // Zobrazíme seznam lektorů, které je možné odebrat ze školení a necháme // uživatele vybrat, kterého chce odebrat. for (int i = 0; i < skoleni.Lektori.Count; i++) { Console.WriteLine("{0}. {1} {2} ({3})", i + 1, skoleni.Lektori[i].Jmeno, skoleni.Lektori[i].Prijmeni, skoleni.Lektori[i].Kod); } Console.WriteLine("0. Zpět"); Console.Write("Odebrat lektora:"); int volba = Int32.Parse(Console.ReadLine()) - 1; if (volba >= 0 && volba < skoleni.Lektori.Count) { skoleni.Lektori.Remove(skoleni.Lektori[volba]); UlozitSkoleni(); Console.WriteLine("! Lektor byl úspěšně odebrán ze školení !"); } }
/* * Nechá uživatele vybrat a odhlásit ze školení studenta, který je již na školení přihlášen */ public void OdhlasitStudenta(Skoleni skoleni) { Console.WriteLine("*** Odhlášení studenta ze školení ***"); // Zobrazíme seznam studentů, které je možné odhlásit ze školení a necháme // uživatele vybrat, kterého chce odhlásit. for (int i = 0; i < skoleni.Studenti.Count; i++) { Console.WriteLine("{0}. {1} {2} ({3})", i + 1, skoleni.Studenti[i].Jmeno, skoleni.Studenti[i].Prijmeni, skoleni.Studenti[i].Kod); } Console.WriteLine("0. Zpět"); Console.Write("Odhlásit studenta:"); int volba = Int32.Parse(Console.ReadLine()) - 1; if (volba >= 0 && volba < skoleni.Studenti.Count) { skoleni.Studenti.Remove(skoleni.Studenti[volba]); UlozitSkoleni(); Console.WriteLine("! Student byl úspěšně odhlášen ze školení !"); } }
static void Main(string[] args) { SpravaSkoleni spravaSkoleni = new SpravaSkoleni(); spravaSkoleni.NacistZamestnance(); spravaSkoleni.NacistSkoleni(); int volba = 0; while (volba != 3) { volba = ZobrazVyberMenu("Hlavní menu", new string[] { "Nové školení", "Seznam školení", "Ukončit program", "Vypsat ladící info" }); switch (volba) { case 1: spravaSkoleni.NoveSkoleni(); break; case 2: Skoleni vybraneSkoleni = spravaSkoleni.VybratSkoleni(); if (vybraneSkoleni != null) { int volbaDetailSkoleni = 0; while (volbaDetailSkoleni != 6) { spravaSkoleni.ZobrazDetailSkoleni(vybraneSkoleni); if (vybraneSkoleni.Uzavreno) { Console.WriteLine("! Školení je uzavřené a nelze s ním provést žádnou operaci. Pro návrat zpět stiskněte libovolnou klávsesu !"); Console.ReadKey(); break; } else { volbaDetailSkoleni = ZobrazVyberMenu("Školení", new string[] { "Přihlásit studenta", "Odhlásit studenta", "Přiřadit lektora", "Odebrat lektora", "Uzavřít školení", "Zpět na hlavní menu" }); switch (volbaDetailSkoleni) { case 1: spravaSkoleni.PrihlasitStudenta(vybraneSkoleni); break; case 2: spravaSkoleni.OdhlasitStudenta(vybraneSkoleni); break; case 3: spravaSkoleni.PriraditLektora(vybraneSkoleni); break; case 4: spravaSkoleni.OdebratLektora(vybraneSkoleni); break; case 5: spravaSkoleni.UzavritSkoleni(vybraneSkoleni); break; } } } } break; case 4: spravaSkoleni.VypisLadiciInfo(); break; } } Console.ReadKey(); }
/* Předpokládáme, že soubor skoleni.txt existuje a obsahuje data * v očekávaném formátu. Nestandardní situace jako např. chybějící údaje * nebo neexistující soubor neošetřujeme. */ public void NacistSkoleni() { StreamReader reader = new StreamReader("skoleni.txt"); // Přeskočíme první řádek souboru reader.ReadLine(); string radek = ""; while ((radek = reader.ReadLine()) != null) { // Přečteme informace o školení, které jsou vždy na řádku, // který následuje po řádku obsahujícím řetězec SKOLENI string[] informaceSkoleni = radek.Split(';'); string nazev = informaceSkoleni[0]; string popis = informaceSkoleni[1]; string[] pocatecniDatumSlozky = informaceSkoleni[2].Split('.'); DateTime pocatecniDatum = new DateTime(Int32.Parse(pocatecniDatumSlozky[2]), Int32.Parse(pocatecniDatumSlozky[1]), Int32.Parse(pocatecniDatumSlozky[0])); string[] koncoveDatumSlozky = informaceSkoleni[3].Split('.'); DateTime koncoveDatum = new DateTime(Int32.Parse(koncoveDatumSlozky[2]), Int32.Parse(koncoveDatumSlozky[1]), Int32.Parse(koncoveDatumSlozky[0])); int doporucenyPocetUcastniku = Int32.Parse(informaceSkoleni[4]); bool skoleniUzavreno = false; if (informaceSkoleni[5] == "ANO") { skoleniUzavreno = true; } // Přeskočíme řádek na kterém očekáváme, že musí být řetězec LEKTORI reader.ReadLine(); List <Lektor> lektori = new List <Lektor>(); while ((radek = reader.ReadLine()) != "STUDENTI") { // Dokud nenarazíme na řádek s řetězcem STUDENTI, tak čteme lektory lektori.Add(NajdiLektoraPodleKodu(radek)); } List <Student> studenti = new List <Student>(); while ((radek = reader.ReadLine()) != "HODNOCENI") { // Dokud nenarazíme na řádek s řetězcem HODNOCENI, tak čteme studenty studenti.Add(NajdiStudentaPodleKodu(radek)); } Dictionary <Student, int> hodnoceni = new Dictionary <Student, int>(); while (true) { // Dokud nenarazíme na řádek s řetězcem SKOLENI, tak čteme hodnocení radek = reader.ReadLine(); if (radek == null || radek == "SKOLENI") { break; } string[] hodnotyHodnoceni = radek.Split(';'); hodnoceni.Add(NajdiStudentaPodleKodu(hodnotyHodnoceni[0]), Int32.Parse(hodnotyHodnoceni[1])); } /* * Vytvoříme instanci Skoleni. Ta v sobě bude mít informaci kteří studenti a lektoři se školení účastní. * Zároveň jednotlivým studentům a lektorům přiřadíme informaci o výše vytvořeném školení * Toto se nám bude hodit ve chvíli, kdy budeme chtít jednoduše získat pro daného studenta nebo lektora seznam jeho školení */ Skoleni skoleni = new Skoleni(nazev, popis, pocatecniDatum, koncoveDatum, studenti, lektori, hodnoceni, doporucenyPocetUcastniku, skoleniUzavreno); foreach (Student student in studenti) { student.Skoleni.Add(skoleni); } foreach (Lektor lektor in lektori) { lektor.VyucovanaSkoleni.Add(skoleni); } SeznamSkoleni.Add(skoleni); } reader.Close(); }