using System.Collections.Generic;
public List<Predmet> ZapsaneAbsolvovanePredmety;
public Student(string jmeno, string primeni)
ZapsaneAbsolvovanePredmety = new List<Predmet>();
public override string ToString()
return String.Format("{0}, {1}", Primeni, Jmeno);
public List<string> PrerekvizityKod;
public Predmet(string kod, string jmeno)
Kod = kod; Jmeno = jmeno; PrerekvizityKod = new List<string>();
public Predmet(string kod, string jmeno, List<string> prerekvizity)
Kod = kod; Jmeno = jmeno; PrerekvizityKod = prerekvizity;
public class Prihlasovani
List<Student> seznamStudentu;
Dictionary<string, Predmet> katalogPredmetu;
seznamStudentu = new List<Student>();
seznamStudentu.Add(new Student("Jan", "Novak"));
seznamStudentu.Add(new Student("Petra", "Svobodova"));
seznamStudentu.Add(new Student("Jarda", "Kadlec"));
seznamStudentu.Add(new Student("Honza", "Kratochvíla"));
for (int i = 0; i < seznamStudentu.Count; i++)
Console.WriteLine(seznamStudentu[i]);
katalogPredmetu = new Dictionary<string, Predmet>
{"M001", new Predmet("M001", "Uvod do elektronove mikroskopie")},
{"P001", new Predmet("P001", "Programovani C# 1")},
{"P002", new Predmet("P002", "Programovani C# 2", new List<string> {"P001"})}
katalogPredmetu.Add("P020", new Predmet("P020", "Vyvoj mobilnich aplikaci", new List<string> { "X111" }));
katalogPredmetu.Add("P030", new Predmet("P030", "Vyvoj aplikaci pro elektronove mikroskopy", new List<string> { "M001", "P002" }));
katalogPredmetu.Add("C001", new Predmet("C001", "C# 1"));
katalogPredmetu.Add("C002", new Predmet("C002", "C# 2", new List<string> { "C001" }));
ZkontrolujKatalog(katalogPredmetu);
Student studentNovak = null;
foreach (Student student in seznamStudentu)
if (student.Primeni == "Novak")
ZapisPredmet(studentNovak, "P001");
ZapisPredmet(studentNovak, "P002");
ZapisPredmet(studentNovak, "P030");
ZapisPredmet(studentNovak, "M001");
ZapisPredmet(studentNovak, "P030");
ZapisPredmet(studentNovak, "X222");
private void ZkontrolujKatalog(Dictionary<string, Predmet> katalog)
foreach (KeyValuePair<string, Predmet> item in katalog)
Predmet predmet = item.Value;
foreach (string kodPrerekvizity in predmet.PrerekvizityKod)
if (!katalog.ContainsKey(kodPrerekvizity))
Console.WriteLine($"Predmet {predmet.Jmeno} obsahuje neexistujici prerekvizitu: {kodPrerekvizity}");
private void ZapisPredmet(Student student, string kodPredmetu)
if (!katalogPredmetu.TryGetValue(kodPredmetu, out Predmet predmet))
Console.WriteLine($"{student.Jmeno}, {student.Primeni}: Nebylo mozno zapsat predmet {kodPredmetu} (neexistujici predmet)");
bool splnujePrerekvizity = true;
foreach (string kodPrerekvizity in predmet.PrerekvizityKod)
Predmet nalezenyPredmet = student.ZapsaneAbsolvovanePredmety.Find(p => p.Kod == kodPrerekvizity);
if (nalezenyPredmet == null)
Console.WriteLine($"{student.Jmeno}, {student.Primeni}: Nebylo mozno zapsat predmet {predmet.Jmeno} (chybi prerekvizita)");
splnujePrerekvizity = false;
student.ZapsaneAbsolvovanePredmety.Add(predmet);
Console.WriteLine($"Uspesne zapsany predmet {predmet.Jmeno}");
public static void Main()
var prihlasovani = new Prihlasovani();