// static Dictionary<Tanuló, Dictionary<ALT, int>> ponttábla = new Dictionary<Tanuló, Dictionary<ALT, int>>(); /// <summary> /// Minden tanulót lepontoz a megoldókulcs segítségével. (A megoldókulcs az utolsó !-jellel kezdődő tanulókönyvtár) /// </summary> /// <param name="debug"></param> public static void Pontozás(string debug) { debug += "Tanuló.Pontozás" + dbj; int sum = 0; Console.WriteLine("-----------------------------------------"); Dictionary <ALT, Dictionary <Teszt, Válasz> > megoldás_válaszai = megoldókulcs.Válaszai(); // itt olvassa be a megoldókulcs összes kérdésre adott összes válaszát! foreach (Tanuló tanuló in Tanuló.szótár.Values) { Színes.Write("[green]{=====================}"); Színes.Write("[green]{" + tanuló.név + "}"); Színes.Write("[green]{=====================\n}"); Dictionary <ALT, Dictionary <Teszt, Válasz> > tanuló_válaszai = tanuló.Válaszai(); // itt olvassa be az összes kérdésre az összes választ! foreach (ALT alt in tanuló_válaszai.Keys) { Dictionary <Teszt, int> tesztre_kapott_pont = new Dictionary <Teszt, int>(); sum = 0; foreach (Teszt teszt in tanuló_válaszai[alt].Keys) { tesztre_kapott_pont.Add(teszt, (tanuló_válaszai[alt][teszt] == (megoldás_válaszai[alt][teszt])) ? 1 : 0); sum += tesztre_kapott_pont[teszt]; } tanuló.tesztenkénti_pontjai.Add(alt, tesztre_kapott_pont); tanuló.pontjai[alt] = sum; } } }
public static void Write(string s) { int i = s.IndexOf('['); int j = s.IndexOf(']'); int l = s.IndexOf('}'); if (i == -1 || j == -1 || l == -1) { Console.Write(s); } else { if (i > 0) { Console.Write(s.Substring(0, i)); } Színtvált(s.Substring(i + 1, j - i - 1 )); Console.Write(s.Substring(j + 2, l - j - 2 )); Színtvált("white"); if (l < s.Length - 1) { Színes.Write(s.Substring(l + 1)); } } }
public static void Setup(string debug) { debug += "Tanuló.Setup" + dbj; Színes.WriteLine("Add meg, hogy mely könyvtárba lettek kiválogatva a dolgozatok! (A readme-ben az [green]{ide} könyvtár.)"); Teszt.root = Színes.Be(); #region Teszt-objektumok létrehozása Színes.WriteLine(debug + dbj + "[blue]{Teszt-objektumok létrehozása}"); foreach (string path in Directory.EnumerateDirectories(Directory.GetCurrentDirectory() + "\\" + Teszt.root).Where(x => !Path2name(x).StartsWith("-"))) { new Teszt(path); } #endregion #region Tanuló-objektumok létrehozása Színes.WriteLine(debug + dbj + "[blue]{Tanuló-objektumok létrehozása}"); Tanuló t; foreach (string tanulópath in Directory.EnumerateDirectories(Teszt.szótár.Values.First().path)) { if (tanulópath.Split('\\').Last()[0] != '-') // a kötőjellel kezdődőeket nem veszi figyelembe. { t = new Tanuló(tanulópath); Színes.Write(debug + "[green]{" + t.név + "}"); Console.Write(" tanuló inicializálva"); if (t.ezamegoldókulcs) { Színes.Write(" [blue]{<-- ez a megoldókulcs!}"); } Console.WriteLine(); } } #endregion // létrehozza az ALT-okat. #region ALT (Adatbázis-Lekérdezés-Típus) rendezett hármasok beolvasása a setup.exe-ből. Színes.WriteLine(debug + dbj + "[blue]{ALT-objektumok létrehozása} (Adatbázis-Lekérdezés-Típus: rendezett hármasok beolvasása a setup.exe-ből.)"); using (StreamReader f = new StreamReader("setup.txt", Encoding.UTF8)) { while (!f.EndOfStream) { string sor = f.ReadLine(); if (sor[0] != '%') // megjegyzés, nem mentjük el { new ALT(sor); } } } Színes.WriteLine(debug + "setup.txt beolvasva:"); Színes.WriteLine("[blue]{adatbázis neve}\t[blue]{lekérdezés neve}\t -> \t[blue]{lekérdezés típusa}"); Színes.WriteLine("---------------------------"); foreach (ALT nnt in ALT.szótár.Values) { Console.WriteLine("{0}\t{1}\t -> \t{2}", nnt.adatbázisfájl, nnt.lekérdezésfájl, nnt.tipus); } #endregion }
public static string Be(string megj = "") { if (megj != "") { Színes.WriteLine(megj); } Színes.Write("[green]{>> }"); return(Console.ReadLine()); }
public static bool operator ==(Válasz v, Válasz m) { if (v.tábla[0, 0].StartsWith("HIÁNYZIK")) { Színes.WriteLine("[red]{Hiányzási hiba a [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában: " + v.tábla[0, 0] + "}"); return(false); } if (v.tábla[0, 0] == nemválaszolt) { Színes.WriteLine("[red]{Nem válaszolt}: [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} kérdésére nem válaszolt."); return(false); } if (v.Size[0] < m.Size[0]) // precautions { Színes.Write("[red]{Mérethiba (X<):} [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában hiányzik [blue]{" + (m.Size[0] - v.Size[0]).ToString() + "} db sor.\n"); return(false); } if (v.Size[0] > m.Size[0]) // precautions { Színes.Write("[red]{Mérethiba (X>):} [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában több ([blue]{" + (v.Size[0] - m.Size[0]).ToString() + "} db) sor van a kelleténél.\n"); return(false); } if (v.Size[1] < m.Size[1]) // precautions { Színes.Write("[red]{Mérethiba (Y<):} [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában hiányzik [blue]{" + (m.Size[1] - v.Size[1]).ToString() + "} db oszlop.\n"); return(false); } if (v.Size[1] > m.Size[1]) // precautions { Színes.Write("[red]{Mérethiba (Y>):} [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában több ([blue]{" + (v.Size[1] - m.Size[1]).ToString() + "} db) sor van a kelleténél.\n"); return(false); } string típus = ALT.szótár[v.lekérdezés].tipus; if (Regex.IsMatch(típus, @"^szám-\d*$")) { double mx = 0, vx = 0; int pontosság = int.Parse(típus.Split('-')[1]); if (v.tábla[0, 0] == m.tábla[0, 0]) { return(true); // erre csak azért van szükség, hogy ha pl. a keresés esetében "nincs a listában" lenne a válasz, akkor ne húzza ki az ilyen válaszokat. } try { vx = Math.Round(double.Parse(v.tábla[0, 0]), pontosság); mx = Math.Round(double.Parse(m.tábla[0, 0]), pontosság); } catch (Exception) { Színes.WriteLine("[red]{Típuseltérési hiba}: [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában nem számmal válaszolt."); return(false); } if (mx != vx) { Színes.WriteLine("[red]{rossz számérték}: [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában rosszul számolt."); return(false); } } if (típus == "logikai") { if ((m.tábla[0, 0] != v.tábla[0, 0])) { Színes.WriteLine("[red]{rossz logikai érték}: [green]{" + v.tulajdonos.név + "} tanuló [blue]{" + v.teszt.név + "} tesztjének [blue]{" + v.lekérdezés + "} válaszában rosszul döntött."); return(false); } } if (típus == "rendezett halmaz") { for (int i = 0; i < v.Size[0]; i++) { for (int j = 0; j < v.Size[1]; j++) { if (v.tábla[i, j] != m.tábla[i, j]) { Színes.Write("[red]{Rekord- vagy sorrendhiba:} " + "[green]{" + v.tulajdonos.név + "} tanuló a " + "[blue]{" + v.teszt.név + "} teszt " + "[blue]{" + v.lekérdezés + "} feladatában a(z) " + "[blue]{" + i.ToString() + "}.sor " + "[blue]{" + j.ToString() + "}.oszlopában: " + "[green]{" + m.tábla[i, j] + "} helyett " + "[red]{" + v.tábla[i, j] + "} szerepel.\n"); return(false); } } } } if (típus == "multihalmaz" || típus == "halmaz") { if (v.halmaz == m.halmaz) { return(true); } if (v.halmaz < m.halmaz || v.halmaz > m.halmaz) { (string hiba, int k, int l) = Multihalmaz <string> .Részhalmaz_Első_Hibával(v.halmaz, m.halmaz); Színes.Write("[red]{Rekordhiba (multiplicitás): } " + "[green]{" + v.tulajdonos.név + "} tanuló " + "[blue]{" + v.teszt.név + "} tesztre adott " + "[blue]{" + v.lekérdezés + "} válaszában a " + "[red]{" + hiba + "} csak " + "[red]{" + k + "} alkalommal szerepel " + "[blue]{" + l + "} helyett.\n"); return(false); } Színes.Write("[red]{Rekordhiba (részhalmaz):} " + "[green]{" + v.tulajdonos.név + "} tanuló" + "[blue]{" + v.teszt + "} tesztre adott" + "[blue]{" + v.lekérdezés + "} válasza " + "és a megoldókulcs válasza közül egyik sem részhalmaza a másiknak.\n"); return(false); } return(true); }
public static void Eredmények_Összesítésének_Kiírása(string debug) { debug += "Teszt.Eredmények_Összesítésének_Kiírása" + dbj; Színes.WriteLine("---------------- " + debug + " ----------------------"); Színes.WriteLine("A tesztek összesítése:"); int p; Console.Write("\t"); string result = "\t"; foreach (ALT alt in ALT.szótár.Values) { Színes.Write("\t[blue]{" + alt.lekérdezésfájl.Substring(0, Math.Min(7, alt.lekérdezésfájl.Length)) + "}"); result += "\t" + alt.lekérdezésfájl.Substring(0, Math.Min(7, alt.lekérdezésfájl.Length)); } Console.WriteLine(); Console.Write("\t"); result += "\r\n\t"; foreach (ALT alt in ALT.szótár.Values) { Színes.Write("\t[blue]{" + Monogram(alt.tipus) + "}"); result += "\t" + Monogram(alt.tipus); } Console.WriteLine(); result += "\r\n"; int sum; foreach (Tanuló tanuló in Tanuló.szótár.Values) { Színes.Write("[green]{" + Monogram(tanuló.név) + "}"); result += Monogram(tanuló.név); // tanuló összes pontja sum = 0; foreach (ALT alt in ALT.szótár.Values) { sum += tanuló.pontjai[alt]; } Színes.Write("\t[blue]{" + sum + " <- }"); result += "\t" + sum; foreach (ALT alt in ALT.szótár.Values) { Console.Write("\t"); result += "\t"; p = tanuló.pontjai[alt]; if (tanuló.pontjai[alt] == Tanuló.megoldókulcs.pontjai[alt]) { Színes.Write("[green]{" + p.ToString() + "}"); } else if (tanuló.pontjai[alt] > 0) { Színes.Write("[yellow]{" + p.ToString() + "}"); } else { Színes.Write("[red]{" + p.ToString() + "}"); } result += p.ToString(); } Console.WriteLine(); result += "\r\n"; } Console.WriteLine("Add meg a fájlnevet (kiterjesztés nélkül), ahova menteni szeretnéd az eredményeket!"); string outputfájlnév = Színes.Be() + ".txt"; using (StreamWriter output = new StreamWriter(outputfájlnév)) { output.WriteLine(result); } // Clipboard.SetText(result); // Console.WriteLine("Táblázat kimásolva a vágólapra."); }
public void Eredmények_Kiírása(string debug) { debug += "Teszt.Eredmények_Kiírása" + dbj; Színes.WriteLine("---------------- " + debug + " ----------------------"); Színes.WriteLine("A [blue]{" + név + "} teszt eredményeinek összefoglalása:"); int p; Console.Write("\t"); string result = "\t"; foreach (ALT alt in ALT.szótár.Values) { Színes.Write("\t[blue]{" + alt.lekérdezésfájl.Substring(0, Math.Min(7, alt.lekérdezésfájl.Length)) + "}"); result += "\t" + alt.lekérdezésfájl.Substring(0, Math.Min(7, alt.lekérdezésfájl.Length)); } Console.WriteLine(); Console.Write("\t"); result += "\r\n\t"; foreach (ALT alt in ALT.szótár.Values) { Színes.Write("\t[blue]{" + Monogram(alt.tipus) + "}"); result += "\t" + Monogram(alt.tipus); } Console.WriteLine(); result += "\r\n"; int sum; foreach (Tanuló tanuló in Tanuló.szótár.Values) { Színes.Write("[green]{" + Monogram(tanuló.név) + "}"); result += Monogram(tanuló.név); // tanuló erre a tesztre kapott összes pontja sum = 0; foreach (ALT alt in ALT.szótár.Values) { sum += tanuló.tesztenkénti_pontjai[alt][this]; } Színes.Write("\t[blue]{" + sum + " <- }"); result += "\t" + sum; foreach (ALT alt in ALT.szótár.Values) { Console.Write("\t"); result += "\t"; p = tanuló.tesztenkénti_pontjai[alt][this]; switch (p) { case 1: Színes.Write("[green]{" + p.ToString() + "}"); break; case 0: Színes.Write("[yellow]{" + p.ToString() + "}"); break; case -1: Színes.Write("[red]{" + p.ToString() + "}"); break; case -2: Színes.Write("[magenta]{" + p.ToString() + "}"); break; } result += p.ToString(); } Console.WriteLine(); result += "\r\n"; } // ITT ezt kéne megcsinálni, minden tesztenkénti mo-t kiírni külön fájlba string outputfájlnév = "testresult_" + this.név + ".txt"; using (StreamWriter output = new StreamWriter(outputfájlnév)) { output.WriteLine(result); } }