コード例 #1
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
        /// <summary>
        /// Führt den Check durch.
        /// </summary>
        /// <param name="schueler">Der Schüler.</param>
        /// <param name="reason">Die Art der Prüfung.</param>
        /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns>
        public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res)
        {
            base.Check(schueler, reason, res);
            int sum=0;
            foreach (var fach in noten.alleFaecher)
                sum += fach.getNotenanzahl(Notentyp.Fachreferat);

            if (sum == 0)
                res.Add(schueler,null,"Der Schüler hat kein Fachreferat.");
            else if (sum>1)
                res.Add(schueler, null, "Der Schüler hat " + sum + " Fachreferate.");
        }
コード例 #2
0
        public NotenCheckController(Zeitpunkt azeitpunkt)
        {
            zeitpunkt = azeitpunkt;
            alleNotenchecks.Add(new FachreferatChecker());
            alleNotenchecks.Add(new NotenanzahlChecker());
            alleNotenchecks.Add(new UnterpunktungChecker());

            /*
            int[] klassenIDs = new[] { 15, 20, 34 };
            foreach (int klassenId in klassenIDs)
            {

            }
            */
        }
コード例 #3
0
ファイル: NotenCheckController.cs プロジェクト: FOSBOS/diNo
        public NotenCheckController(Zeitpunkt azeitpunkt, NotenCheckModus amodus)
        {
            zeitpunkt = azeitpunkt;
            modus = amodus;
            // je nach Modus und Zeitpunkt werden nur bestimmte Klassen ausgewählt
            if (modus == NotenCheckModus.EigeneKlasse)
            {
              KlasseInNotenpruefungAufnehmen(Zugriff.Instance.eigeneKlasse);
            }
            else if (zeitpunkt==Zeitpunkt.ProbezeitBOS || zeitpunkt==Zeitpunkt.HalbjahrUndProbezeitFOS)
            {
              zuPruefendeKlassen = Zugriff.Instance.Klassen;
              AnzahlSchueler = Zugriff.Instance.AnzahlSchueler;
            }
            else
            {
              foreach (var k in Zugriff.Instance.Klassen)
                KlasseInNotenpruefungAufnehmen(k);
            }

            if (modus!=NotenCheckModus.BerechnungenSpeichern && modus != NotenCheckModus.VorkommnisseErzeugen
              && azeitpunkt !=Zeitpunkt.DrittePA)
              alleNotenchecks.Add(new NotenanzahlChecker(this));
            if (modus!=NotenCheckModus.EigeneNotenVollstaendigkeit)
              alleNotenchecks.Add(new UnterpunktungChecker(this));
            if (azeitpunkt == Zeitpunkt.ErstePA && (modus==NotenCheckModus.Gesamtpruefung || modus == NotenCheckModus.EigeneKlasse)) // nur dort FR prüfen
            {
              alleNotenchecks.Add(new FachreferatChecker(this));
              alleNotenchecks.Add(new SeminarfachChecker(this));
            }
            if (azeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS || azeitpunkt == Zeitpunkt.Jahresende)
              alleNotenchecks.Add(new FpABestandenChecker(this));
            if ((azeitpunkt == Zeitpunkt.ZweitePA || azeitpunkt == Zeitpunkt.DrittePA)  && (modus==NotenCheckModus.Gesamtpruefung || modus == NotenCheckModus.EigeneKlasse))
            {
              alleNotenchecks.Add(new AbiergebnisChecker(this));
              alleNotenchecks.Add(new EliteChecker(this));
            }
            if (azeitpunkt == Zeitpunkt.DrittePA  && (modus==NotenCheckModus.Gesamtpruefung || modus == NotenCheckModus.EigeneKlasse))
              alleNotenchecks.Add(new MAPChecker(this));
        }
コード例 #4
0
ファイル: Faecherspiegel.cs プロジェクト: FOSBOS/diNo
        public string FindeAPSchriftlichNoten(string faecherspiegel, int index, Schulart schulart, Schueler schueler, Zeitpunkt zeitpunkt)
        {
            string faecherKuerzel = omnis.SucheFach(faecherspiegel, index, schulart); // hier nur zur Anzeige etwaiger Fehlermeldungen benötigt
              if (string.IsNullOrEmpty(faecherKuerzel))
              {
            return "";
              }

              var noten = FindeFachNoten(faecherKuerzel, schueler);
              if (noten == null)
              {
            return "-"; // Fach wurde wohl nicht belegt (kann ab und zu vorkommen, z. B. bei Wahlfächern)
              }

              var apnote = noten.getNoten(Halbjahr.Zweites, Notentyp.APSchriftlich);
              if (apnote == null || apnote.Count == 0)
              {
            return "";
              }

              return string.Format(CultureInfo.CurrentCulture, "{0:00}", apnote[0]);
        }
コード例 #5
0
ファイル: SchuelerNoten.cs プロジェクト: FOSBOS/diNo
 // Doku s. private Variable
 public int AnzahlNoten(int note, bool SAP)
 {
     if (anzahlNoten == null)
       {
     if (zeitpunkt==Zeitpunkt.None) zeitpunkt = (Zeitpunkt)Zugriff.Instance.aktZeitpunkt;
     anzahlNoten = new int[7,2];
     InitAnzahlNoten();
       }
       if (SAP) return anzahlNoten[note,1];
       else return anzahlNoten[note,0];
 }
コード例 #6
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public override bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason)
 {
     return jahrgangsstufe == Jahrgangsstufe.Zwoelf && reason == Zeitpunkt.ErstePA;
 }
コード例 #7
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public override bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason)
 {
     return true;
 }
コード例 #8
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public override bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason)
 {
     return jahrgangsstufe == Jahrgangsstufe.Dreizehn;
 }
コード例 #9
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public abstract bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason);
コード例 #10
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public override bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason)
 {
     // Diese Prüfung kann immer durchgeführt werden
       return true;
 }
コード例 #11
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Ob die implementierte Prüfung überhaupt sinnvoll ist.
 /// </summary>
 /// <param name="jahrgangsstufe">Die Jahrgangsstufe.</param>
 /// <param name="schulart">Die Schulart (FOS oder BOS)</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>true wenn check nötig.</returns>
 public override bool CheckIsNecessary(Jahrgangsstufe jahrgangsstufe, Schulart schulart, Zeitpunkt reason)
 {
     return jahrgangsstufe == Jahrgangsstufe.Elf && schulart == Schulart.FOS;
 }
コード例 #12
0
ファイル: Faecherspiegel.cs プロジェクト: FOSBOS/diNo
 public string GetNotenString(FachSchuelerNoten note, Zeitpunkt zeitpunkt)
 {
     byte? relevanteNote = note.getRelevanteNote(zeitpunkt);
       return relevanteNote == null ? "-" : string.Format("{0:00}", (byte)relevanteNote); //wichtig: Im Feld muss 08 stehen, nicht 8 (d.h. 2 Ziffern)
 }
コード例 #13
0
ファイル: Faecherspiegel.cs プロジェクト: FOSBOS/diNo
        /// <summary>
        /// Sucht das Fach am angegebenen Index aus dem angegebenen Fächerspiegel.
        /// </summary>
        /// <param name="faecherspiegel">Welcher Fächerspiegel, z. B. W11.</param>
        /// <param name="index">Der Index des Faches.</param>
        /// <param name="schulart">FOS oder BOS.</param>
        /// <param name="schueler">Den Schüler brauchen wir auch, um zu ermitteln ob er katholisch oder evangelisch ist.</param>
        /// <param name="zeitpunkt">Der Zeitpunkt, für welchen wir die Note ermitteln müssen.</param>
        /// <returns>Das Fach oder null, wenn kein weiteres Fach mehr im Fächerspiegel vorhanden ist.</returns>
        public string GetFachNoteString(string faecherspiegel, int index, Schulart schulart, Schueler schueler, Zeitpunkt zeitpunkt)
        {
            string faecherKuerzel = omnis.SucheFach(faecherspiegel, index, schulart); // hier nur zur Anzeige etwaiger Fehlermeldungen benötigt
              if (string.IsNullOrEmpty(faecherKuerzel))
              {
            return ""; // Wenn kein sinnvolles Fach mehr kommt, bleibt das Notenfeld leer
              }

              var dieRichtigeNote = FindeFachNoten(faecherKuerzel, schueler);
              if (dieRichtigeNote == null)
              {
            if (FehlendeNoteWirdWohlOKSein(faecherKuerzel))
            {
              log.Debug(schueler.NameVorname + " sollte in " + faecherKuerzel + " gehen, aber diese Zuordnung findet diNo nicht!");
            }
            else
            {
              log.Warn(schueler.NameVorname + " sollte in " + faecherKuerzel + " gehen, aber diese Zuordnung findet diNo nicht!");
            }
            return "-";
              }
              else
              {
            return GetNotenString(dieRichtigeNote, zeitpunkt);
              }
        }
コード例 #14
0
ファイル: Faecherspiegel.cs プロジェクト: FOSBOS/diNo
        public string FindeJahresfortgangsNoten(string faecherspiegel, int index, Schulart schulart, Schueler schueler, Zeitpunkt zeitpunkt)
        {
            string faecherKuerzel = omnis.SucheFach(faecherspiegel, index, schulart); // hier nur zur Anzeige etwaiger Fehlermeldungen benötigt
              if (string.IsNullOrEmpty(faecherKuerzel))
              {
            return "";
              }

              var noten = FindeFachNoten(faecherKuerzel, schueler);
              if (noten == null)
              {
            return "-";
              }

              return string.Format(CultureInfo.CurrentCulture, "{0:00.00}", noten.getSchnitt(Halbjahr.Zweites).JahresfortgangMitKomma);
        }
コード例 #15
0
ファイル: SchuelerNoten.cs プロジェクト: FOSBOS/diNo
 // Zu diesem Zeitpunkt werden die Notenanzahlen gebildet,
 // wird dieser geändert, muss neu gerechnet werden
 public void SetZeitpunkt(Zeitpunkt z)
 {
     if (zeitpunkt!=z)
       {
     anzahlNoten = null;
     zeitpunkt = z;
       }
 }
コード例 #16
0
ファイル: SchuelerNoten.cs プロジェクト: FOSBOS/diNo
        // TODO: Überflüssig, wegen lokaler Variable
        public string GetUnterpunktungenString(Zeitpunkt z)
        {
            string result = "";
              foreach (var fach in alleFaecher)
              {
            byte? note = fach.getRelevanteNote(z);
            if (note != null && note < 4)
            {
              result += fach.getFach.Kuerzel + "(" + note + ")";
            }
              }

              return result;
        }
コード例 #17
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Führt den Check durch.
 /// </summary>
 /// <param name="schueler">Der Schüler.</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res)
 {
     FpANotenTableAdapter fpAAdapter = new FpANotenTableAdapter();
       var fpANoten = fpAAdapter.GetDataBySchuelerId(schueler.Id);
       if (fpANoten.Count == 0)
       {
     res.Add(schueler, null, "Es liegt keine FpA-Note vor.");
       }
       else
       {
     var note = fpANoten[0].Note;
     if (note == 3)
     {
         res.Add(schueler, null, "Die fachpraktische Ausbildung wurde ohne Erfolg durchlaufen.");
     }
     }
 }
コード例 #18
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        private static AbschlusspruefungBestanden GetBestanden(Zeitpunkt zeitpunkt, Schueler schueler)
        {
            KlassenzielOderGefaehrdung zielerreichung = GetZielerreichung(zeitpunkt, schueler);
              if (zielerreichung == KlassenzielOderGefaehrdung.AbschlusspruefungOhneErfolg)
              {
            return AbschlusspruefungBestanden.NichtBestanden;
              }

              if (zielerreichung == KlassenzielOderGefaehrdung.NotenausgleichGewaehrt)
              {
            return AbschlusspruefungBestanden.BestandenMitNotenausgleichArt33;
              }

              return AbschlusspruefungBestanden.Bestanden;
        }
コード例 #19
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
        /// <summary>
        /// Führt den Check durch.
        /// </summary>
        /// <param name="schueler">Der Schüler.</param>
        /// <param name="reason">Die Art der Prüfung.</param>
        /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns>
        public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res)
        {
            base.Check(schueler, reason, res);
            int anz=0;
            foreach (var fachNoten in noten.alleFaecher)
            {
            // TODO: Nur für Test am Jahresende, da in manchen Fächern keine Datei vorlag
            /*            if (noten.Count == 0)
                        {
                            continue;
                        }*/

            // TODO: Anzahl SA direkt aus DB lesen!
            Schulaufgabenwertung wertung = fachNoten.getFach.GetSchulaufgabenwertung(schueler.getKlasse);
            Kurs kurs = new Kurs(fachNoten.kursId);

            //es müssen 2 oder 3 Schulaufgaben zum Ende des Jahres vorliegen - zum Halbjahr min. eine
            int noetigeAnzahlSchulaufgaben = GetAnzahlSchulaufgaben(wertung);
            if (noetigeAnzahlSchulaufgaben > 0)
            {
                if (reason == Zeitpunkt.HalbjahrUndProbezeitFOS || reason == Zeitpunkt.ProbezeitBOS)
                    noetigeAnzahlSchulaufgaben = 1;
                anz = fachNoten.getNotenanzahl(Notentyp.Schulaufgabe);
                if (anz < noetigeAnzahlSchulaufgaben)
                    res.Add(schueler, kurs,
                        "Es " + toText(anz) + " SA vorhanden.");
            }

            // egal, bei welcher Entscheidung: Es müssen im ersten Halbjahr min. 2 mündliche Noten vorliegen
            // am Jahresende bzw. zur PA-Sitzung müssen es entweder 2 Kurzarbeiten/Exen und 2 echte mündliche

            // die Prüfung unterscheidet wie der bisherige Notenbogen nicht, ob die Note aus einer Ex oder echt mündlich ist - das verantwortet der Lehrer
            int kurzarbeitenCount = fachNoten.getNotenanzahl(Notentyp.Kurzarbeit);
            int muendlicheCount = fachNoten.getNotenanzahl(Notentyp.Ex) + fachNoten.getNotenanzahl(Notentyp.EchteMuendliche);

            if (reason == Zeitpunkt.ProbezeitBOS || reason == Zeitpunkt.HalbjahrUndProbezeitFOS)
            {
                if ((kurzarbeitenCount == 0 && muendlicheCount < 2) || muendlicheCount == 0)
                {
                    res.Add(schueler, kurs,
                        "Es " + toText(muendlicheCount) + " mündliche Noten vorhanden.");
                }
            }
            else if (reason == Zeitpunkt.ErstePA || reason == Zeitpunkt.Jahresende)
            {
                if (kurzarbeitenCount == 1)
                {
                    res.Add(schueler, kurs,
                        "Es " + toText(kurzarbeitenCount) + " Kurzarbeit vorhanden.");
                }
                if ((kurzarbeitenCount == 0 && muendlicheCount < 4) || muendlicheCount < 2)
                {
                    res.Add(schueler, kurs,
                        "Es " + toText(muendlicheCount) + " mündliche Noten vorhanden.");
                }
            }

            // Zweite PA: nur Vorliegen der Prüfungsnoten prüfen
            else if (reason == Zeitpunkt.ZweitePA)
            {

                if (fachNoten.getNotenanzahl(Notentyp.APSchriftlich) == 0)
                {
                    res.Add(schueler, kurs,"Es liegt keine Note in der schriftlichen Abschlussprüfung vor.");
                }
            }
            }
        }
コード例 #20
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        private static fpaNote GetFpaNote(Zeitpunkt zeitpunkt, Schueler schueler)
        {
            if (zeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS && !schueler.FPANoten.IsErfolg1HjNull())
              {
            //das ist dieselbe Zahlencodierung ist wie in der DB (0=nicht gesetzt, 1 = sehr gut, ... 4 = ohne Erfolg)
            return (fpaNote)schueler.FPANoten.Erfolg1Hj;
              }
              else if (!schueler.FPANoten.IsErfolgNull())
              {
            return (fpaNote)schueler.FPANoten.Erfolg;
              }

              return fpaNote.Entfaellt;
        }
コード例 #21
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
 /// <summary>
 /// Führt den Check durch.
 /// </summary>
 /// <param name="schueler">Der Schüler.</param>
 /// <param name="reason">Die Art der Prüfung.</param>
 /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns>
 public virtual void Check(Schueler schueler, Zeitpunkt reason,NotenCheckResults res)
 {
     noten = schueler.getNoten;
 }
コード例 #22
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        private static KlassenzielOderGefaehrdung GetZielerreichung(Zeitpunkt zeitpunkt, Schueler schueler)
        {
            KlassenzielOderGefaehrdung ziel = zeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS ? KlassenzielOderGefaehrdung.NichtGefaehrdet : KlassenzielOderGefaehrdung.VorrueckenOK;
              foreach (var vorkommnis in schueler.Vorkommnisse)
              {
            switch (vorkommnis.Art)
            {
              case Vorkommnisart.starkeGefaehrdungsmitteilung: ziel = KlassenzielOderGefaehrdung.SehrGefaehrdet; break;
              case Vorkommnisart.Gefaehrdungsmitteilung: ziel = KlassenzielOderGefaehrdung.Gefaehrdet; break;
              case Vorkommnisart.BeiWeiteremAbsinken: ziel = KlassenzielOderGefaehrdung.BeiWeiteremAbsinkenGefaehrdet; break;
              case Vorkommnisart.NichtZurPruefungZugelassen: return KlassenzielOderGefaehrdung.AbschlusspruefungOhneErfolg;
              case Vorkommnisart.Notenausgleich: return KlassenzielOderGefaehrdung.NotenausgleichGewaehrt;
              case Vorkommnisart.NichtBestanden: return KlassenzielOderGefaehrdung.AbschlusspruefungOhneErfolg;
            }
              }

              return ziel;
        }
コード例 #23
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
        /// <summary>
        /// Führt den Check durch.
        /// </summary>
        /// <param name="schueler">Der Schüler.</param>
        /// <param name="reason">Die Art der Prüfung.</param>
        /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns>
        public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res)
        {
            SeminarfachnoteTableAdapter seminarfachAdapter = new SeminarfachnoteTableAdapter();
              var seminarfachnoten = seminarfachAdapter.GetDataBySchuelerId(schueler.Id);
              if (seminarfachnoten.Count == 0)
              {
            res.Add(schueler, null,"Es liegt keine Seminarfachnote vor.");
              }
              else
              {
            var note = seminarfachnoten[0].Gesamtnote;
            var thema = seminarfachnoten[0].ThemaLang;

            if (note < 4)
            {
            res.Add(schueler, null, "Im Seminarfach wurden " +note+" Punkte erzielt.");
            }

            if (string.IsNullOrEmpty(thema))
            {
            res.Add(schueler, null, "Es liegt kein Seminarfachthema vor.");
            }
            }
        }
コード例 #24
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        private static void SucheWahlpflichtfach(Zeitpunkt zeitpunkt, Faecherspiegel faecher, VerwalteZeile zeile, Schueler schueler, int bezeichnungCol, int noteCol)
        {
            if (string.IsNullOrEmpty(zeile[bezeichnungCol]))
              {
            return;
              }

              string fach = zeile[bezeichnungCol];
              if (fach =="F3")
              {
            fach = "F-Wi";
              }

              var wahlpflichtfach = schueler.getNoten.FindeFach(fach, false);
              if (wahlpflichtfach != null)
              {
            zeile[noteCol] = faecher.GetNotenString(wahlpflichtfach, zeitpunkt);
              }
              else
              {
            log.Warn("Für den Schüler "+schueler.NameVorname+" konnte das Wahlpflichtfach "+fach+" nicht gefunden werden.");
              }
        }
コード例 #25
0
ファイル: INotenCheck.cs プロジェクト: TheTypoMaster/diNo
        /// <summary>
        /// Führt den Check durch.
        /// </summary>
        /// <param name="schueler">Der Schüler.</param>
        /// <param name="reason">Die Art der Prüfung.</param>
        /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns>
        public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res)
        {
            base.Check(schueler, reason, res);
            int anz5=0,anz6=0,anz4P=0,anz2=0,anz1=0;
            string m="";

            foreach (var fachNoten in noten.alleFaecher)
            {
            byte? relevanteNote = fachNoten.getRelevanteNote(reason);
            if (relevanteNote == null)
            {
                res.Add(schueler,new Kurs(fachNoten.kursId) ,"Es konnte keine Note gebildet werden.");
            }
            else
            {
                if (relevanteNote == 0) anz6++;
                else if (relevanteNote < 4) anz5++;
                else if (relevanteNote == 4) anz4P++;
                else if (relevanteNote >=13) anz1++;
                else if (relevanteNote >= 10) anz2++;

                if (relevanteNote <4 || relevanteNote == 4 && reason == Zeitpunkt.HalbjahrUndProbezeitFOS)
                    m = m + fachNoten.getFach.Kuerzel + "(" + relevanteNote +") ";
            }
            }

            if (reason == Zeitpunkt.ErstePA)
            {
            if (anz6 > 1 || anz5 > 3) res.Add(schueler, null, "Zum Abitur nicht zugelassen: " + m);
            }
            else if (reason == Zeitpunkt.HalbjahrUndProbezeitFOS)
            {
            if (anz6>0 || anz5 > 1) res.Add(schueler, null, "Stark gefährdet: " + m);
            else if (anz5 > 0) res.Add(schueler, null, "Gefährdet: " + m);
            else if (anz4P > 1) res.Add(schueler, null, "Bei weiterem Absinken: " + m);
            }
            else
            {
            // TODO: Notenausgleich sauber implementieren
            if (anz6 > 0 || anz5 > 1)
            {
                if (anz2 < 2 || anz1 == 0) res.Add(schueler, null, "Nicht bestanden, kein Notenausgleich möglich: " + m);
                else res.Add(schueler, null, "Nicht bestanden, Notenausgleich prüfen: " + m);
            }
            }
        }
コード例 #26
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        private bool BrauchtZeugnis(Schueler schueler, Zeitpunkt zeitpunkt)
        {
            if (zeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS)
              {
            return true; // zum Halbjahr bekommen alle ein Zeugnis
              }

              // zu den PA-Sitzungen werden nur für die 12. und 13. Jahrgangsstufe Zeugnisse übertragen
              if (zeitpunkt == Zeitpunkt.ErstePA || zeitpunkt == Zeitpunkt.ZweitePA || zeitpunkt == Zeitpunkt.DrittePA)
              {
            return schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Dreizehn || schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Zwoelf;
              }

              if (zeitpunkt == Zeitpunkt.Jahresende)
              {
            return schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Elf || schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Vorklasse || schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Vorkurs;
              }

              return false;
        }
コード例 #27
0
ファイル: DZeugnisFileController.cs プロジェクト: FOSBOS/diNo
        /// <summary>
        /// Konstruktor.
        /// </summary>
        /// <param name="sourceFileName">Der Dateiname des Exportfiles der leeren DZeugnis-Tabelle.</param>
        /// <param name="targetFileName">Der Dateiname des zu erstellenden ImportFiles der DZeugnis-Tabelle.</param>
        public DZeugnisFileController(string sourceFileName, string targetFileName, Zeitpunkt zeitpunkt)
        {
            Faecherspiegel faecher = new Faecherspiegel();
              SchuelerTableAdapter ada = new SchuelerTableAdapter();

              using (FileStream inStream = new FileStream(sourceFileName, FileMode.Open, FileAccess.Read))
              using (StreamReader reader = new StreamReader(inStream, Encoding.GetEncoding("iso-8859-1")))
              using (FileStream outStream = new FileStream(targetFileName, FileMode.Create, FileAccess.Write))
              using (StreamWriter writer = new StreamWriter(outStream, Encoding.GetEncoding("iso-8859-1")))
              {
            while (!reader.EndOfStream)
            {
              var zeile = new VerwalteZeile(reader.ReadLine());
              int schuelerId = int.Parse(zeile[Konstanten.schuelerIdCol]);

              // Prüfe vorher, ob der Schüler existiert (hier kommen tausend Schüler aus den Vorjahren)
              if (ada.GetDataById(schuelerId).Count == 0)
              {
            continue;
              }

              Schueler schueler = Zugriff.Instance.SchuelerRep.Find(schuelerId);
              if (BrauchtZeugnis(schueler, zeitpunkt))
              {
            zeile[Konstanten.fpaCol] = Konstanten.GetFpaString(GetFpaNote(zeitpunkt, schueler));
            KlassenzielOderGefaehrdung zielerreichung = GetZielerreichung(zeitpunkt, schueler);
            zeile[Konstanten.klassenzielOderGefaehrdungCol] = Konstanten.GetKlassenzielOderGefaehrdungString(zielerreichung);
            if (zeitpunkt == Zeitpunkt.ErstePA || zeitpunkt == Zeitpunkt.ZweitePA || zeitpunkt == Zeitpunkt.DrittePA)
            {
              zeile[Konstanten.zeugnisartCol] = zielerreichung == KlassenzielOderGefaehrdung.AbschlusspruefungOhneErfolg ? "J" : "A";
              zeile[Konstanten.APBestandenCol] = Konstanten.GetBestandenString(GetBestanden(zeitpunkt, schueler));
            }

            zeile[Konstanten.abweisungCol] = Konstanten.GetAbweisungString(schueler.GefahrDerAbweisung);

            var seminarfachNote = new SeminarfachnoteTableAdapter().GetDataBySchuelerId(schuelerId);
            if (seminarfachNote != null && seminarfachNote.Count == 1 && !seminarfachNote[0].IsGesamtnoteNull())
            {
              zeile[Konstanten.seminarfachGesamtnote] = string.Format(CultureInfo.CurrentCulture, "{0:00}", seminarfachNote[0].Gesamtnote);
              zeile[Konstanten.seminarfachThema] = !string.IsNullOrEmpty(seminarfachNote[0].ThemaKurz) ? seminarfachNote[0].ThemaKurz : seminarfachNote[0].ThemaLang.Substring(0, 128);
            }

            string faecherspiegel = zeile[Konstanten.faecherspiegelCol];
            if (string.IsNullOrEmpty(faecherspiegel))
            {
              log.Warn("Für den Schüler " + schueler.NameVorname + " gibt es keinen passenden Fächerspiegel!");
              continue;
            }
            for (int i = 0; i < 30; i++)
            {
              zeile[Konstanten.notePflichtfach1Col + i] = faecher.GetFachNoteString(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt);
            }

            if (Konstanten.ZeugnisartFromString(zeile[Konstanten.zeugnisartCol]) != Zeugnisart.Zwischenzeugnis)
            {
              for (int i = 0; i < 20; i++)
              {
                zeile[Konstanten.jahresfortgangPflichtfach1Col + i] = faecher.FindeJahresfortgangsNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt);
                zeile[Konstanten.APschriftlichPflichtfach1Col + i] = faecher.FindeAPSchriftlichNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt);
                zeile[Konstanten.APmuendlichPflichtfach1Col + i] = faecher.FindeAPMuendlichNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt);
                zeile[Konstanten.gesamtNoteMitAPGanzzahlig1Col + i] = faecher.GetFachNoteString(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt);
              }
            }

            SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach1BezeichnungCol, Konstanten.weiteresFach1NoteCol);
            SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach2BezeichnungCol, Konstanten.weiteresFach2NoteCol);
            SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach3BezeichnungCol, Konstanten.weiteresFach3NoteCol);
              }

              // rausgeschrieben werden immer alle Zeugnisse, da im Import "ersetzen" angehakt werden muss
              writer.WriteLine(zeile.ToString());
            }
              }
        }
コード例 #28
0
ファイル: Berechnungen.cs プロジェクト: FOSBOS/diNo
 public Berechnungen(Zeitpunkt azeitpunkt)
 {
     zeitpunkt = azeitpunkt;
 }
コード例 #29
0
ファイル: SchuelerNoten.cs プロジェクト: TheTypoMaster/diNo
 /*
 public IList<int> getNoten(Notentyp typ)
 {
     IList<int> res = new List<int>(noten[(int)Halbjahr.Erstes, (int)typ]);
     noten[(int)Halbjahr.Zweites, (int)typ].CopyTo(res);
     return res;
 }
 */
 /// <summary>
 /// Liefert die zur Zeit z (z.B. Probezeit BOS) relevante Note (hier Jahresfortgang Ganzz. 1. Hj.)
 /// </summary>
 public byte? getRelevanteNote(Zeitpunkt z)
 {
     if (z == Zeitpunkt.ProbezeitBOS || z == Zeitpunkt.HalbjahrUndProbezeitFOS)
     {
         return getSchnitt(Halbjahr.Erstes).JahresfortgangGanzzahlig;
     }
     else if (z == Zeitpunkt.ErstePA || z == Zeitpunkt.Jahresende)
     {
         return getSchnitt(Halbjahr.Zweites).JahresfortgangGanzzahlig;
     }
     else // 2./3.PA
     {
         return getSchnitt(Halbjahr.Zweites).Abschlusszeugnis;
     }
 }
コード例 #30
0
ファイル: SchuelerNoten.cs プロジェクト: FOSBOS/diNo
        /*
        public IList<int> getNoten(Notentyp typ)
        {
        IList<int> res = new List<int>(noten[(int)Halbjahr.Erstes, (int)typ]);
        noten[(int)Halbjahr.Zweites, (int)typ].CopyTo(res);
        return res;
        }
        */
        /// <summary>
        /// Liefert die zur Zeit z (z.B. Probezeit BOS) relevante Note (hier Jahresfortgang Ganzz. 1. Hj.)
        /// </summary>
        public byte? getRelevanteNote(Zeitpunkt z)
        {
            if (Zugriff.Instance.KursRep.Find(kursId).getLehrer == null)
              {
            // wenn der Kurs keinen Lehrer hat, handelt es sich vermutlich um eine Note aus der 11ten Klasse
            return getSchnitt(Halbjahr.Zweites).Abschlusszeugnis;
              }

              if (z == Zeitpunkt.ProbezeitBOS || z == Zeitpunkt.HalbjahrUndProbezeitFOS)
              {
            return getSchnitt(Halbjahr.Erstes).JahresfortgangGanzzahlig;
              }
              else if (z == Zeitpunkt.ErstePA || z == Zeitpunkt.Jahresende)
              {
            return getSchnitt(Halbjahr.Zweites).JahresfortgangGanzzahlig;
              }
              else // 2./3.PA
              {
            return getSchnitt(Halbjahr.Zweites).Abschlusszeugnis;
              }
        }