/// <summary>
        /// V databazi vzplni slovnik, ktery slouzi pro ziskani odkazu na vsechny studenty,
        /// kteri navstevuji danou rozvrhovou akci, tj. preklar RoakIdno na seznam studentu.
        /// </summary>
        /// <param name="data"></param>
        private static void FillStudentsOnRoakIdno(STAG_Database data)
        {
            foreach (Student student in data.Students)
            {
                foreach (RozvrhovaAkce ra in student.Rozvrh)
                {
                    if (!data.StudentsOnRoakIdno.ContainsKey(ra.RoakIdno))
                    {
                        // Na zkoumanou akci jsme narazili poprve => pridame do slovniku

                        // "Zapiseme" na ni studenta, u ktereho jsme ji objevili
                        List <Student> studentList = new List <Student>();
                        studentList.Add(student);

                        // Pridame zaznam do slovniku
                        data.StudentsOnRoakIdno.Add(ra.RoakIdno, studentList);
                    }
                    else
                    {
                        // Zkoumanou akci jsme uz nekdy zavedli => staci jen pridat studenta
                        // Student bude v kazdem listu zaveden jen jednou, protoze informace zpracovavam po jednotlivych studentech
                        data.StudentsOnRoakIdno[ra.RoakIdno].Add(student);
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Přidá list akcí jako jednu SRA
        /// </summary>
        private static void PridejSRADoDatabaze(List <NormalizovanaAkce> listAkci, ref STAG_Database data)
        {
            List <RozvrhovaAkce> rAkce = new List <RozvrhovaAkce>();

            foreach (var akce in listAkci)
            {
                rAkce.Add(akce.Akce);
            }
            data.SuperRozvrhoveAkce.Add(new SRA(rAkce));
        }
Beispiel #3
0
        /// <summary>
        /// Hlavní funkce, která zpracuje rozvrhové akce do SRA
        /// </summary>
        /// <param name="data">STAG databáze</param>
        public static void Preprocess(this STAG_Database data)
        {
            Dictionary <Tuple <string, string, string>, List <NormalizovanaAkce> > zimakRozdelene =
                new Dictionary <Tuple <string, string, string>, List <NormalizovanaAkce> >();
            Dictionary <Tuple <string, string, string>, List <NormalizovanaAkce> > letnakRozdelene =
                new Dictionary <Tuple <string, string, string>, List <NormalizovanaAkce> >();

            Dictionary <string, List <string> > zimakBudovyMistnosti  = new Dictionary <string, List <string> >();
            Dictionary <string, List <string> > letnakBudovyMistnosti = new Dictionary <string, List <string> >();

            Debug.WriteLine("---- Zacatek Preprocess debug vypisu ----");
            foreach (var dvojce in data.Akce)
            {
                var akce = dvojce.Value;
                switch (akce.Semestr)
                {
                case ("ZS"):
                    if (akce.DenZkr != null && akce.Budova != null && akce.Mistnost != null)
                    {
                        RozdelAkce(akce, ref zimakRozdelene, ref zimakBudovyMistnosti);
                    }
                    else
                    {
                        //Debug.WriteLine("Akce bez dne/budovy/mistnosti (ZS): "+akce.Katedra+"/"+ akce.Predmet);
                        PridejSRADoDatabaze(akce, ref data);
                    }
                    break;

                case ("LS"):
                    if (akce.DenZkr != null && akce.Budova != null && akce.Mistnost != null)
                    {
                        RozdelAkce(akce, ref letnakRozdelene, ref letnakBudovyMistnosti);
                    }
                    else
                    {
                        //Debug.WriteLine("Akce bez dne/budovy/mistnosti (LS): " + akce.Katedra + "/" + akce.Predmet);
                        PridejSRADoDatabaze(akce, ref data);
                    }
                    break;

                default:
                    Debug.WriteLine("!!! Akce bez semestru (0S): " + akce.Katedra + "/" + akce.Predmet);
                    //TODO by asi nemělo nastat takže jinak asi vyhodit nějakou chybu
                    break;
                }
            }

            VytvorSuperRozvrhoveAkce(zimakRozdelene, zimakBudovyMistnosti, ref data);
            VytvorSuperRozvrhoveAkce(letnakRozdelene, letnakBudovyMistnosti, ref data);


            Debug.WriteLine("---- Konec Preprocess debug vypisu ----");
        }
        /// <summary>
        /// Analyza zateze pomoci SRA.
        /// </summary>
        /// <param name="data"></param>
        private static void Normalni_metoda(STAG_Database data)
        {
            // Zjistime si, kdo chodi na predmety
            FillStudentsOnRoakIdno(data);

            SRAAnalyzer analyzer = new SRAAnalyzer(data.zatezNaStudenta, data.StudentsOnRoakIdno);

            foreach (SRA sra in data.SuperRozvrhoveAkce)
            {
                analyzer.AnalyzeSRA(sra);
            }
        }
        private static void Fandova_hloupa_metoda(STAG_Database data)
        {
            foreach (var student in data.Students)
            {
                List <Predmet> kredityLS    = new List <Predmet>();
                List <Predmet> kredityZS    = new List <Predmet>();
                int            maxKredituZS = 0;
                int            maxKredituLS = 0;
                // projdu vsechny akce na ktere student chodi a ulozim nazev predmetu
                foreach (var akce in student.Rozvrh)
                {
                    if (akce.Semestr == "LS")
                    {
                        if (!kredityLS.Contains(akce.PredmetRef))
                        {
                            kredityLS.Add(akce.PredmetRef);
                        }
                    }
                    else
                    {
                        if (!kredityZS.Contains(akce.PredmetRef))
                        {
                            kredityZS.Add(akce.PredmetRef);
                        }
                    }
                }

                int a;
                if (student.OsCislo == "F13104")
                {
                    a = 5;
                }
                // spocteni kreditu ze vsech predmetu v ZS a LS
                maxKredituZS = (from predmet in kredityZS select predmet.Kreditu).Sum();
                maxKredituLS = (from predmet in kredityLS select predmet.Kreditu).Sum();
                if (maxKredituZS == 0)
                {
                    continue;
                }
                // spocteni zatizeni kateder v zimnim semestru
                SpoctiPodil(student.PodilKatedryZS, kredityZS, maxKredituZS);
                SpoctiPodil(student.PodilKatedry, kredityZS, maxKredituZS + maxKredituLS); // podil za oba semestry
                if (maxKredituLS == 0)
                {
                    continue;
                }
                // spocteni zatizeni kateder v letnim semestru
                SpoctiPodil(student.PodilKatedryLS, kredityLS, maxKredituLS);
                SpoctiPodil(student.PodilKatedry, kredityLS, maxKredituZS + maxKredituLS); // podil za oba semestry
                Debug.WriteLine("Hloupá analýza hotavá");
            }
        }
Beispiel #6
0
 /// <summary>
 /// Přidá jednu akci jako jednu SRA
 /// </summary>
 private static void PridejSRADoDatabaze(RozvrhovaAkce akce, ref STAG_Database data)
 {
     data.SuperRozvrhoveAkce.Add(new SRA(akce));
 }
Beispiel #7
0
        /// <summary>
        /// Funkce, která zpracuje všechny a propojí akce, které probíhají společně
        /// </summary>
        private static void VytvorSuperRozvrhoveAkce(
            Dictionary <Tuple <string, string, string>, List <NormalizovanaAkce> > rozdeleneAkce,
            Dictionary <string, List <string> > budovyMistnosti,
            ref STAG_Database data)
        {
            List <string> dny = new List <string>()
            {
                "Po", "Út", "St", "Čt", "Pá", "So", "Ne"
            };                                                                                  //vytvoření Listu pro projetí dnů

            //TextWriter tw = new StreamWriter("kontrola_pakci.txt");

            foreach (var budova in budovyMistnosti.Keys)                                                   //budovy
            {
                foreach (var mistnost in budovyMistnosti[budova])                                          //místnosti v budově
                {
                    foreach (var den in dny)                                                               //den v týdnu
                    {
                        var denBudovaMistnost = new Tuple <string, string, string>(den, budova, mistnost); //vytvoření trojce - budova-místnost-den
                        if (!rozdeleneAkce.ContainsKey(denBudovaMistnost))
                        {
                            break;                                       //zjištení jestli existuje toto spojení
                        }
                        var normAkce = rozdeleneAkce[denBudovaMistnost]; //získání akcí v dané budově, místnosti a dnu
                        List <List <NormalizovanaAkce> > listPodezdrelichAkci = new List <List <NormalizovanaAkce> >()
                        {
                        };                                                                                            //vyvoření listu pro spol rozvrhové akce pro pozdější zpracování
                        //tw.WriteLine(budova + " " + mistnost + " - " + den);
                        //tw.WriteLine("--- Všechny akce ---");
                        foreach (var nAkce in normAkce) //všechny akce v dané budově-místnosti-dni
                        {
                            //tw.WriteLine(nAkce.ToString());
                            bool jePouzita = false;
                            foreach (var podezdreleAkce in listPodezdrelichAkci)
                            {
                                foreach (var pAkce in podezdreleAkce)
                                {
                                    if (nAkce.NormZacatek >= pAkce.NormZacatek && nAkce.NormKonec <= pAkce.NormKonec &&
                                        nAkce.Tyden == pAkce.Tyden && nAkce.TydenOd >= pAkce.TydenOd && nAkce.TydenDo <= pAkce.TydenDo)    //kontrola, zda li patří k již roztříděné akci
                                    {
                                        podezdreleAkce.Add(nAkce);
                                        jePouzita = true;
                                        break;
                                    }
                                }
                                if (jePouzita)
                                {
                                    break;
                                }
                            }
                            if (!jePouzita)
                            {
                                listPodezdrelichAkci.Add(new List <NormalizovanaAkce>()
                                {
                                    nAkce
                                });                                                                //nepatřila k žádné jiné akci tak dostane vlastní list
                            }
                        }
                        //tw.WriteLine("--- Podezdřelé akce ---");
                        //int pocet = 1;
                        foreach (var podezdeleAkce in listPodezdrelichAkci) //zpracování roztříděný akcí do SRA
                        {
                            PridejSRADoDatabaze(podezdeleAkce, ref data);

                            /*
                             * tw.WriteLine("--- List " + pocet + " ---");
                             * foreach (var pAkce in podezdeleAkce)
                             * {
                             *  tw.WriteLine(pAkce.ToString());
                             * }
                             * pocet++;
                             */
                        }
                        //tw.WriteLine("--------------------------------------");
                        //tw.WriteLine();
                    }
                }
            }
            //tw.Flush();
            //tw.Close();
        }