summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
diff options
context:
space:
mode:
Diffstat (limited to 'app/schulis/2.2.1/src/2.schueler zu kursen zuordnen')
-rw-r--r--app/schulis/2.2.1/src/2.schueler zu kursen zuordnen384
1 files changed, 384 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
new file mode 100644
index 0000000..32187e4
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
@@ -0,0 +1,384 @@
+PACKET schuelerzukursenzuordnenDEFINES schuelerkursenzuordnenabbruch,
+schuelerkursenzuordnenanfang,schuelerkursenzuordnenpruefuebernahme,
+schuelerkursenzuordnenuebernahme,schuelerkursenzuordnenpruefung,
+schuelerkursenzuordnenspeichern,schuelerkursenzuordnenkopieren,
+schuelerkursenzuordnenlisten:LET server="kurswahl server",kuwa2sperre=
+"Kurswahl-2 ",anzschuelerbs=15,laengefakeartkl=9,laengekurs=6,laengedseintrag
+=15,az="#",trenner1="$",trenner2="�",maskeeingang=
+"ms schueler zu kursen zuordnen eingang",maskebearb=
+"ms schueler zu kursen zuordnen bearb",stdzeigbloecke=
+"1 2 3 4 5 6 7 8 9 10 11 ",leerewahldaten=" ",
+leereweiterewahldaten=" ",kzname="N",kzkurse="K",kznurneue="N",kzohneneue=
+"O",kzalle="A",kennungplanbl="P",kennungfapl="FP",kennungfaartkl="FAk",
+kennungfakeartkl="FKAk",kennungfake="FK",kennungkeinkurs=" - ",
+kennungkeinfach=" * ",meldungbearbwird=352,meldungfeldleeren=390,
+meldungunbeklv=360,meldungfeldfuellen=52,meldungschonkurs=424,
+meldungbittewarten=69,meldungfalscherwert=55,meldungspeicherfehler=364,
+meldungjgstfalsch=404,meldungjgstfehlt=172,meldunghjfalsch=405,meldungpruefen
+=329,meldungspeichern=50,meldungnspeichern=63,meldungandereauswahl=318,
+meldungunzulauswahl=56,meldungserverfehler=376,meldunglistezeigen=7,
+meldungparallelanw=425,meldungkeinedaten=68,meldungkeinekopfunktion=318,
+logtext1="Anw. 2.2.2 ",logtext2=" für akt. ",text1="Kurszuordnung ",text2=
+"Kurse übernehmen ",text3=" nach ",punkt=".",felderstername=7,
+felderstekennung=9,feldletztekennung=65,anzfeldereingang=36;INT VAR i,j,z;
+INT VAR letztepos:=2,ijgst,ihj,fstat,aktpos:=1,aktfeld,pos1,pos2,blockpos,
+suchab,jgst1,jgst2,findpos,feld,blpos,kopzeile,aktzeile,anfpos,anzkurse,
+anzsch,endpos,anzschueler,fapos,saktpos,ssuchab;TEXT VAR aktjgst,akthj:="",
+gewjgst,gewhj,zusjgst,zushj,gewsj,alleplblbez,alleschueler1:="",alleschueler2
+:="",wahl,neuewahldaten,weiterewahldaten,wahldaten,alleschueler:="",
+zeigbloecke,fach:="",art:="",kennungdesschuelers,name,kennungjetzt,
+kennungvorher,planbloecke,aktfeldinh,t,nname,vname,gdat,ausgabe:="",block,
+vorz,blockbez,aktkennung,liste:="",kurse,kurs,kennung,kursliste,fakennung,
+fawahl,sname,logmeldung,klkz,klwahl;ROW anzfeldereingangTEXT VAR eingangrow;
+ROW anzschuelerbsROW 4TEXT VAR schueler;BOOL VAR zusspaltezeigen:=FALSE ,
+belegungpruefen:=FALSE ,sperreok,speicherungsfehler:=FALSE ,bewertung,
+klausurkz:=FALSE ;WINDOW VAR w;PROC schuelerkursenzuordnenpruefuebernahme:IF
+menuedraussenTHEN reorganizescreenFI END PROC
+schuelerkursenzuordnenpruefuebernahme;PROC schuelerkursenzuordnenuebernahme(
+BOOL CONST uebernehmen):merkeeingangbs;IF uebernehmenTHEN standardmeldung(
+meldungbittewarten,"");aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);
+ijgst:=int(gewjgst);ihj:=int(gewhj);zusjgst:=eingangrow(35);zushj:=eingangrow
+(36);IF akthj=""THEN akthj:=schulkenndatum("Schulhalbjahr")FI ;prueffeld2und3
+;prueffeld4;prueffeld5;prueffeld634;prueffeld3536;datenholen;
+betrachtealleschueler;logmeldung:=text2;logmeldungCAT zusjgst;logmeldungCAT
+punkt;logmeldungCAT zushj;logmeldungCAT text3;logmeldungCAT gewjgst;
+logmeldungCAT punkt;logmeldungCAT gewhj;logbucheintragvornehmen(logmeldung);
+kurswahlsperrebeenden(kuwa2sperre)FI ;enter(2).prueffeld2und3:IF gewjgst=""
+THEN fehlermeldungausgeben(2,meldungjgstfehlt,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF gewhj=""THEN fehlermeldungausgeben(2,
+meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeELIF jgstfalsch(
+gewjgst,"11")THEN fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF ihj<1COR ihj>2THEN fehlermeldungausgeben
+(3,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld4:
+aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN
+fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELSE LEAVE prueffeld4FI ELIF jgstfalsch(
+gewjgst,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF
+aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI .pruefhj:IF
+gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
+LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld5:aktfeldinh:=eingangrow(5
+);IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)
+<>""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5
+,meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI ELIF int(
+aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI .prueffeld634:FOR iFROM 6UPTO 34REP IF
+standardmaskenfeld(i)<>""THEN fehlermeldungausgeben(i,meldungfeldleeren,1);
+LEAVE schuelerkursenzuordnenuebernahmeFI PER .prueffeld3536:zusjgst:=
+eingangrow(35);zushj:=eingangrow(36);IF zusjgst=""THEN fehlermeldungausgeben(
+35,meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenuebernahmeELIF zushj=""
+THEN fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF zusjgst=gewjgstCAND zushj=gewhjTHEN
+fehlermeldungausgeben(35,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF jgstfalsch(zusjgst,"11")THEN
+fehlermeldungausgeben(35,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF zushj<>"1"CAND zushj<>"2"THEN
+fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI .datenholen:IF NOT exists(/server)THEN
+fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI ;IF eingangrow(4)=""THEN t:=kznurneue;
+aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
+aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
+fstat);erweitertekurswahlbasisholen(zusjgst,zushj,fstat);kurswahlsperresetzen
+(kuwa2sperre,sperreok);IF NOT sperreokTHEN fehlermeldungausgeben(infeld,
+meldungparallelanw,1);LEAVE schuelerkursenzuordnenuebernahmeFI .
+betrachtealleschueler:FOR iFROM ersterschuelerUPTO letzterschuelerREP
+wahldaten:=wahldatenzumindex(i,kzkurse);name:=wahldatenzumindex(i,kzname);
+pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=subtext
+(name,1,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2+2,pos2
++9);standardmeldung(meldungbearbwird,vname+" "+nname+az);weiterewahldaten:=
+weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl);
+betrachtekennungen;kurswahl2sichern(fstat)PER .betrachtekennungen:pos1:=1;
+neuewahldaten:="";WHILE pos1<length(wahldaten)REP wahl:=subtext(wahldaten,
+pos1,pos1+laengedseintrag-1);kennungjetzt:=subtext(wahl,6,9);fach:=subtext(
+wahl,4,5);art:=subtext(wahl,2,3);kennungvorher:=kennungvonfach(TRUE );IF
+kennungjetzt<>kennungvorherTHEN planbloecke:=kursdaten(fach+kennungvorher,
+kennungplanbl);IF dbstatus=0THEN neuewahldatenCAT text(wahl,1);neuewahldaten
+CAT art;neuewahldatenCAT fach;neuewahldatenCAT kennungvorher;neuewahldaten
+CAT planbloeckeELSE neuewahldatenCAT wahlFI ELSE neuewahldatenCAT wahlFI ;
+pos1INCR laengedseintragPER ;IF wahldaten<>neuewahldatenTHEN
+schuelerwahleintragen(nname,vname,gdat,neuewahldaten)FI .END PROC
+schuelerkursenzuordnenuebernahme;PROC schuelerkursenzuordnenanfang:
+standardstartproc(maskeeingang);gibeingangaus;standardfelderausgeben;infeld(
+letztepos);standardnproc.gibeingangaus:FOR iFROM 2UPTO anzfeldereingangREP
+standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI
+PER .END PROC schuelerkursenzuordnenanfang;PROC
+schuelerkursenzuordnenpruefung:standardmeldung(meldungbittewarten,"");
+merkeeingangbs;aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);ijgst:=
+int(gewjgst);ihj:=int(gewhj);IF akthj=""THEN akthj:=schulkenndatum(
+"Schulhalbjahr")FI ;prueffeld2und3;prueffeld4;prueffeld5;prueffeld6und7;
+prueffeld8bis13;prueffeld3536;datenholen;betrachtebelegung;
+planblockbezpruefen;schueleraufzeigen.betrachtebelegung:FOR iFROM 14UPTO 23
+REP IF eingangrow(i)<>""THEN planblockvorzpruefen;planblockbez15bis23pruefen;
+belegungpruefen:=TRUE ;LEAVE betrachtebelegungFI ;PER ;belegungpruefen:=
+FALSE .prueffeld2und3:IF gewjgst=""THEN fehlermeldungausgeben(2,
+meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF gewhj=""THEN
+fehlermeldungausgeben(2,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN
+fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(3
+,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungFI .prueffeld4:
+aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN
+fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELSE LEAVE prueffeld4FI ELIF jgstfalsch(gewjgst
+,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF
+aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .pruefhj:IF
+gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
+LEAVE schuelerkursenzuordnenpruefungFI .prueffeld5:aktfeldinh:=eingangrow(5);
+IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)<>
+""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5,
+meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI ELIF int(
+aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungFI .prueffeld6und7:zusjgst:=eingangrow(6);zushj
+:=eingangrow(7);IF zusjgst=""CAND zushj<>""THEN fehlermeldungausgeben(6,
+meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF zushj=""CAND
+zusjgst<>""THEN fehlermeldungausgeben(7,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF zushj=""CAND zusjgst=""THEN
+zusspaltezeigen:=FALSE ELIF zusjgst=gewjgstCAND zushj=gewhjTHEN
+fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN
+fehlermeldungausgeben(6,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(7
+,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungELIF jgstfalsch(
+gewjgst,zusjgst)THEN fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELSE zusspaltezeigen:=TRUE FI .prueffeld8bis13:
+klkz:=compress(eingangrow(10));klausurkz:=klkz<>"";FOR iFROM 8UPTO 13REP IF
+eingangrow(i)<>""THEN LEAVE prueffeld8bis13FI PER ;fehlermeldungausgeben(8,
+meldungfeldfuellen,1);LEAVE schuelerkursenzuordnenpruefung.prueffeld3536:IF
+eingangrow(35)<>""COR eingangrow(36)<>""THEN fehlermeldungausgeben(35,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockvorzpruefen:IF planblockvorzfalsch(14)COR planblockvorzfalsch(16)
+COR planblockvorzfalsch(18)COR planblockvorzfalsch(20)COR planblockvorzfalsch
+(22)THEN kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungFI .datenholen:IF NOT exists(/server)THEN
+fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE
+schuelerkursenzuordnenpruefungFI ;IF eingangrow(4)=""THEN t:=kznurneue;
+aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
+aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
+fstat);IF zusspaltezeigenTHEN erweitertekurswahlbasisholen(zusjgst,zushj,
+fstat);FI ;kurswahlsperresetzen(kuwa2sperre,sperreok);IF sperreokTHEN
+alleplblbez:=alleplanblockbezeichnerELSE fehlermeldungausgeben(infeld,
+meldungparallelanw,1);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockbez15bis23pruefen:IF planblockbezfalsch(eingangrow(15))THEN
+fehlermeldungausgeben(15,meldungfalscherwert,1);kurswahlsperrebeenden(
+kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
+eingangrow(17))THEN fehlermeldungausgeben(17,meldungfalscherwert,1);
+kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF
+planblockbezfalsch(eingangrow(19))THEN fehlermeldungausgeben(19,
+meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungELIF planblockbezfalsch(eingangrow(21))THEN
+fehlermeldungausgeben(21,meldungfalscherwert,1);kurswahlsperrebeenden(
+kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
+eingangrow(23))THEN fehlermeldungausgeben(23,meldungfalscherwert,1);
+kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockbezpruefen:zeigbloecke:="";FOR iFROM 24UPTO 34REP IF
+planblockbezfalsch(eingangrow(i))THEN fehlermeldungausgeben(i,
+meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungFI ;IF eingangrow(i)<>""THEN zeigbloeckeCAT
+konvblock(eingangrow(i))FI ;PER .END PROC schuelerkursenzuordnenpruefung;
+BOOL PROC planblockbezfalsch(TEXT CONST anwblock):suchab:=1;IF anwblock=""
+THEN FALSE ELSE block:=text(anwblock,3);WHILE pos(alleplblbez,block,suchab)<>
+0REP j:=pos(alleplblbez,block,suchab);IF jMOD 3=1THEN LEAVE
+planblockbezfalschWITH FALSE ELSE suchab:=j+1FI PER ;TRUE FI END PROC
+planblockbezfalsch;BOOL PROC planblockvorzfalsch(INT CONST feld):t:=(
+eingangrow(feld)SUB 1);IF t<>""THEN IF eingangrow(feld+1)=""THEN
+fehlermeldungausgeben(feld+1,meldungfeldfuellen,1);TRUE ELIF NOT (t="-"COR t=
+"+")THEN fehlermeldungausgeben(feld,meldungfalscherwert,1);TRUE ELSE FALSE
+FI ELIF eingangrow(feld+1)<>""THEN fehlermeldungausgeben(feld,
+meldungfeldfuellen,1);TRUE ELSE FALSE FI END PROC planblockvorzfalsch;PROC
+fehlermeldungausgeben(INT CONST feld,meldung,ruecksprung):infeld(feld);
+standardmeldung(meldung,"");return(ruecksprung)END PROC fehlermeldungausgeben
+;BOOL PROC jgstfalsch(TEXT CONST jgst,abjgst):jgst1:=int(jgst);jgst2:=int(
+abjgst);jgst1<jgst2COR jgst1>13END PROC jgstfalsch;PROC initbspuffer:FOR i
+FROM 1UPTO anzschuelerbsREP schueler(i)(1):="";schueler(i)(2):="";schueler(i)
+(3):="";schueler(i)(4):=""PER END PROC initbspuffer;PROC schueleraufzeigen:
+fach:=text(eingangrow(8),2);art:=text(eingangrow(9),2);holschueler;IF
+alleschueler=""THEN meldungkeineschueler;kurswahlsperrebeenden(kuwa2sperre)
+ELSE zeigbearbschirm;standardnprocFI .zeigbearbschirm:standardstartproc(
+maskebearb);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
++aktjgst+" in "+gewjgst+"."+gewhj);ausgabe:=fach;ausgabeCAT art;ausgabeCAT
+text(eingangrow(10),1);IF eingangrow(11)<>""THEN ausgabeCAT "+";ausgabeCAT
+text(eingangrow(11),2);ausgabeCAT text(eingangrow(12),2);ausgabeCAT text(
+eingangrow(13),1);ELSE ausgabeCAT " "FI ;standardmaskenfeld(ausgabe,2);
+ausgabe:=" ";ausgabeCAT text(eingangrow(14),1);ausgabeCAT konvblock(
+eingangrow(15));ausgabeCAT text(eingangrow(16),1);ausgabeCAT konvblock(
+eingangrow(17));ausgabeCAT text(eingangrow(18),1);ausgabeCAT konvblock(
+eingangrow(19));ausgabeCAT text(eingangrow(20),1);ausgabeCAT konvblock(
+eingangrow(21));ausgabeCAT text(eingangrow(22),1);ausgabeCAT konvblock(
+eingangrow(23));standardmaskenfeld(ausgabe,3);IF zusspaltezeigenTHEN
+standardmaskenfeld(eingangrow(6)+"."+eingangrow(7),4);ELSE standardmaskenfeld
+(" ",4);FI ;standardmaskenfeld(fach,5);IF zeigbloecke=""THEN zeigbloecke:=
+stdzeigbloecke;standardmaskenfeld(stdzeigbloecke,6)ELSE standardmaskenfeld(
+text(zeigbloecke,33),6)FI ;zeigschueler.meldungkeineschueler:
+fehlermeldungausgeben(14,meldungkeinedaten,1).holschueler:alleschueler:="";
+alleschueler1:=schuelermitwahl(fach,"",art,eingangrow(10));IF eingangrow(11)
+<>""THEN alleschueler2:=schuelermitwahl(eingangrow(11),"",eingangrow(12),
+eingangrow(13));schuelervergleichELSE alleschueler2:="";IF belegungpruefen
+THEN pruefbelegungallerschuelerELSE alleschueler:=alleschueler1;anzschueler:=
+anzahlschuelermitwahl(fach,"",art,eingangrow(10))FI ;FI .
+pruefbelegungallerschueler:saktpos:=1;ssuchab:=2;alleschueler:="";anzschueler
+:=0;WHILE saktpos<>0REP saktpos:=pos(alleschueler1,trenner1,ssuchab);IF
+saktpos<>0THEN sname:=subtext(alleschueler1,ssuchab,saktpos-1);IF
+richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
+FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);IF
+richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
+FI .END PROC schueleraufzeigen;PROC zeigschueler:aktfeld:=felderstername;
+initbspuffer;FOR iFROM 1UPTO anzschuelerbsREP wahldaten:="";weiterewahldaten
+:="";kennungdesschuelers:="";standardmaskenfeld(schuelername,aktfeld);
+standardmaskenfeld(text(wahldaten,22),aktfeld+3);standardmaskenfeld(
+weiterewahldaten,aktfeld+1);IF kennungdesschuelers=leereweiterewahldatenTHEN
+standardmaskenfeld("",aktfeld+2)ELSE standardmaskenfeld(kennungdesschuelers,
+aktfeld+2)FI ;aktfeldINCR 4PER ;infeld(1);standardfelderausgeben;infeld(9).
+END PROC zeigschueler;TEXT PROC schuelername:findpos:=pos(alleschueler,
+trenner1,aktpos+1);IF findpos>0THEN name:=subtext(alleschueler,aktpos+2,
+findpos-1);aktpos:=findposELIF aktpos=length(alleschueler)THEN name:=""ELSE
+name:=subtext(alleschueler,aktpos+2);aktpos:=length(alleschueler)FI ;
+bereitenameauf(name)END PROC schuelername;TEXT PROC bereitenameauf(TEXT
+CONST name):ausgabe:=name;change(ausgabe,trenner2,", ");ausgabe:=text(ausgabe
+,pos(ausgabe,trenner2)-1);wahldatenaufbereiten(name);text(ausgabe,23)END
+PROC bereitenameauf;PROC wahldatenaufbereiten(TEXT CONST name):TEXT VAR
+zblock;IF name=""THEN wahldaten:=leerewahldaten;weiterewahldaten:=
+leereweiterewahldatenELSE pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,
+trenner2,pos1+2)-1;nname:=subtext(name,1,pos1);vname:=subtext(name,pos1+2,
+pos2);gdat:=subtext(name,pos2+2,pos2+9);kennungdesschuelers:=kennungvonfach(
+FALSE );IF kennungdesschuelers=kennungkeinfachCOR kennungdesschuelers=
+kennungkeinkursTHEN kennungdesschuelers:=""FI ;schueler(i)(1):=nname;schueler
+(i)(2):=vname;schueler(i)(3):=gdat;schueler(i)(4):=kennungdesschuelers;
+ermittlewahldaten;ermittleweiterewahldatenFI .ermittlewahldaten:wahl:=
+wahldatenzumschueler(nname,vname,gdat,kennungfake);blockpos:=1;WHILE blockpos
+<length(zeigbloecke)REP zblock:=subtext(zeigbloecke,blockpos,blockpos+2);IF
+schuelerinplanblock(nname,vname,gdat,zblock)THEN wahldatenCAT
+fachvomplanblock(zblock);ELSE wahldatenCAT " "FI ;blockposINCR 3PER .
+ermittleweiterewahldaten:IF zusspaltezeigenTHEN weiterewahldaten:=
+kennungvonfach(TRUE )ELSE weiterewahldaten:=leereweiterewahldatenFI .END
+PROC wahldatenaufbereiten;TEXT PROC kennungvonfach(BOOL CONST inweiterendaten
+):fapos:=1;fawahl:="";IF inweiterendatenTHEN fawahl:=
+weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)ELSE fawahl:=
+wahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)FI ;IF fawahl=""THEN
+leereweiterewahldatenELSE betrachteallefaecherFI .betrachteallefaecher:WHILE
+fapos<length(fawahl)REP IF subtext(fawahl,fapos,fapos+1)=fachCAND subtext(
+fawahl,fapos+6,fapos+7)=artTHEN fakennung:=subtext(fawahl,fapos+2,fapos+5);
+IF fakennung=leereweiterewahldatenTHEN LEAVE betrachteallefaecherWITH
+kennungkeinkursELSE LEAVE betrachteallefaecherWITH compress(fakennung)FI
+ELSE faposINCR laengefakeartklFI PER ;kennungkeinfach.END PROC kennungvonfach
+;TEXT PROC fachvomplanblock(TEXT CONST block):TEXT VAR plbld:=planblockdaten(
+block,kzkurse),k;blpos:=1;WHILE blpos<LENGTH wahlREP k:=subtext(wahl,blpos,
+blpos+laengekurs-1);IF kurseingetragen(plbld,k)THEN LEAVE fachvomplanblock
+WITH text(k,2)ELSE blposINCR laengekursFI PER ;" "END PROC fachvomplanblock;
+BOOL PROC kurseingetragen(TEXT CONST quelle,teilmuster):INT VAR suchab:=1,
+aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle,
+teilmuster,suchab);IF aktposMOD laengekurs=1THEN LEAVE kurseingetragenWITH
+TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC kurseingetragen;PROC
+schuelervergleich:saktpos:=1;ssuchab:=2;anzschueler:=0;WHILE saktpos<>0REP
+saktpos:=pos(alleschueler1,trenner1,ssuchab);IF saktpos<>0THEN sname:=subtext
+(alleschueler1,ssuchab,saktpos-1);IF pos(alleschueler2,sname)>0THEN IF
+belegungpruefenTHEN IF richtigebelegung(sname)THEN alleschuelerCAT trenner1+
+sname;anzschuelerINCR 1FI ELSE alleschuelerCAT trenner1+sname;anzschueler
+INCR 1FI FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);
+IF pos(alleschueler2,sname)>0THEN IF belegungpruefenTHEN IF richtigebelegung(
+sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI ELSE
+alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI FI .END PROC
+schuelervergleich;BOOL PROC richtigebelegung(TEXT CONST name):bewertung:=
+TRUE ;pos1:=pos(name,trenner2,2)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=
+subtext(name,2,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2
++2,pos2+9);feld:=12;FOR iFROM 1UPTO 5REP feldINCR 2;vorz:=eingangrow(feld);
+IF vorz<>""THEN blockbez:=eingangrow(feld+1);block:=konvblock(blockbez);IF
+vorz="-"THEN bewertung:=NOT schuelerinplanblock(nname,vname,gdat,block)ELSE
+bewertung:=schuelerinplanblock(nname,vname,gdat,block)FI ;IF NOT bewertung
+THEN LEAVE richtigebelegungWITH FALSE FI FI ;PER ;bewertungEND PROC
+richtigebelegung;PROC schuelerkursenzuordnenspeichern(BOOL CONST speichern):
+speicherungsfehler:=FALSE ;IF speichernTHEN pruefkennungen;speicherkennungen;
+logmeldung:=text1;logmeldungCAT gewjgst;logmeldungCAT punkt;logmeldungCAT
+gewhj;logbucheintragvornehmen(logmeldung);kurswahl2sichern(i);ELSE
+standardmeldung(meldungnspeichern," ")FI ;naechsterbildschirm.pruefkennungen:
+standardmeldung(meldungpruefen," ");j:=felderstekennung;FOR iFROM 1UPTO
+anzschuelerbsREP kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>""THEN
+IF schueler(i)(1)=""THEN fehlermeldungkeinschuelerFI ;planbloecke:=compress(
+kursdaten(fach+kennung,kennungplanbl));IF dbstatus<>0THEN
+fehlermeldungunbekkennungELIF planbloecke<>""CAND kennung<>schueler(i)(4)
+THEN pruefplanbloeckeFI FI ;jINCR 4PER .pruefplanbloecke:prueferstenblock;IF
+length(planbloecke)>3THEN pruefzweitenblockFI .prueferstenblock:IF
+schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),text(
+planbloecke,3))THEN fehlermeldungschonkursblock1FI .pruefzweitenblock:IF
+schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),subtext(
+planbloecke,4))THEN fehlermeldungschonkursblock2FI .
+fehlermeldungschonkursblock1:infeld((i-1)*4+9);standardmeldung(
+meldungschonkurs,text(planbloecke,3)+az);return(1);LEAVE
+schuelerkursenzuordnenspeichern.fehlermeldungschonkursblock2:infeld((i-1)*4+9
+);standardmeldung(meldungschonkurs,subtext(planbloecke,4)+az);return(1);
+LEAVE schuelerkursenzuordnenspeichern.fehlermeldungkeinschueler:
+fehlermeldungausgeben((i-1)*4+9,meldungfeldleeren,1);LEAVE
+schuelerkursenzuordnenspeichern.fehlermeldungunbekkennung:infeld((i-1)*4+9);
+standardmeldung(meldungunbeklv,fach+kennung+az);return(1);LEAVE
+schuelerkursenzuordnenspeichern.speicherkennungen:standardmeldung(
+meldungspeichern," ");j:=felderstekennung;FOR iFROM 1UPTO anzschuelerbsREP
+kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>schueler(i)(4)THEN IF
+NOT klausurkzTHEN ermittleklkennzFI ;schuelerwahlaendern(schueler(i)(1),
+schueler(i)(2),schueler(i)(3),fach,schueler(i)(4),art,fach,kennung,art,klkz);
+IF dbstatus<>0THEN speicherungsfehler:=TRUE FI ;FI ;jINCR 4PER ;IF
+speicherungsfehlerTHEN kurswahlserveraktualisieren(aktjgst,gewjgst,gewhj)FI .
+naechsterbildschirm:kurswahl0holen(fstat);kurswahl1holen(fstat);IF aktpos<
+length(alleschueler)CAND NOT speicherungsfehlerTHEN zeigschueler;return(1);
+IF speicherungsfehlerTHEN standardmeldung(meldungspeicherfehler,"");FI ELSE
+kurswahlsperrebeenden(kuwa2sperre);enter(2);IF speicherungsfehlerTHEN
+standardmeldung(meldungspeicherfehler,"");infeld(letztepos)FI FI .END PROC
+schuelerkursenzuordnenspeichern;PROC ermittleklkennz:klwahl:=
+wahldatenzumschueler(schueler(i)(1),schueler(i)(2),schueler(i)(3),
+kennungfaartkl);z:=1;WHILE z<LENGTH (klwahl)REP IF subtext(klwahl,z,z+3)=fach
++artTHEN klkz:=klwahlSUB z+4;LEAVE ermittleklkennzELSE zINCR 5FI PER ;klkz:=
+""END PROC ermittleklkennz;PROC schuelerkursenzuordnenabbruch:
+kurswahlsperrebeenden(kuwa2sperre);enter(2)END PROC
+schuelerkursenzuordnenabbruch;PROC schuelerkursenzuordnenkopieren:kopzeile:=
+infeld;aktzeile:=kopzeile+4;aktkennung:=standardmaskenfeld(kopzeile);IF
+kopzeile=feldletztekennungTHEN fehlermeldungkeinkopELSE WHILE aktzeile<=
+feldletztekennungCAND schueler((aktzeile-5)DIV 4)(1)<>""REP
+standardmaskenfeld(aktkennung,aktzeile);aktzeileINCR 4PER ;infeld(kopzeile+4)
+;standardfelderausgeben;infeld(kopzeile+4);FI ;return(1).fehlermeldungkeinkop
+:standardmeldung(meldungkeinekopfunktion,"").END PROC
+schuelerkursenzuordnenkopieren;PROC schuelerkursenzuordnenlisten:kursliste:=
+"";aktfeld:=infeld;w:=startwindow(35,23,77,1);liste:="";standardmeldung(
+meldunglistezeigen,"");IF menuedraussenTHEN reorganizescreenFI ;fuelleliste;
+infeld(1);standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
+reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
+listeCAT "Anzahl Schüler wie ausgewählt";listeCAT auskunftstextende;listeCAT
+text(anzschueler);listeCAT auskunftstextende;listeCAT " ";listeCAT
+auskunftstextende;listeCAT "Fach gewählt Kurszahl/-größe";listeCAT
+auskunftstextende;listeCAT fach;listeCAT " ";listeCAT art;listeCAT " ";
+listeCAT gewaehlteschueler;listeCAT " ";listeCAT anzahlkurse;listeCAT
+kursgroesse;listeCAT auskunftstextende;listeCAT " ";listeCAT
+auskunftstextende;listeCAT "Kurse Planblock Schüler";listeCAT
+auskunftstextende;listeallerkurse.listeallerkurse:anfpos:=1;WHILE anfpos<
+length(kursliste)REP listeCAT fach+" ";kennung:=subtext(kursliste,anfpos,
+anfpos+3);listeCAT kennung;listeCAT " ";kurs:=kursdaten(fach+kennung,
+kennungplanbl);IF kurs=""THEN listeCAT " "ELSE listeCAT text(int(
+text(kurs,3)),2);listeCAT " ";listeCAT text(int(subtext(kurs,4)),2);liste
+CAT " ";FI ;listeCAT text(anzahlschuelermitwahl(fach,kennung,"",""));
+listeCAT auskunftstextende;anfposINCR 4PER .gewaehlteschueler:anzsch:=
+anzahlschuelermitwahl(fach,"",art,"");text(text(anzsch),6).kursgroesse:text(
+anzschDIV anzkurse).anzahlkurse:kurse:=allekurse;suchanfang;suchende;IF
+anfpos=0THEN "0 "ELSE kurse:=subtext(kurse,anfpos,endpos);
+betrachtekurse;text(text(anzkurse),10)FI .betrachtekurse:anzkurse:=0;anfpos:=
+1;kursliste:="";WHILE anfpos<length(kurse)REP IF subtext(kurse,anfpos,anfpos+
+1)=fachCAND subtext(kurse,anfpos+8,anfpos+9)=artTHEN anzkurseINCR 1;kursliste
+CAT subtext(kurse,anfpos+2,anfpos+5);FI ;anfposINCR 10PER .suchanfang:anfpos
+:=pos(kurse,fach,1);WHILE anfpos<>0REP IF (anfposMOD 10)=1CAND subtext(kurse,
+anfpos+8,anfpos+9)=artTHEN LEAVE suchanfangELSE anfpos:=pos(kurse,fach,anfpos
++1)FI ;PER .suchende:findpos:=pos(kurse,fach,anfpos+1);IF anfpos<>0THEN
+endpos:=anfpos+9;WHILE findpos<>0REP IF (findposMOD 10)=1CAND subtext(kurse,
+findpos+8,findpos+9)=artTHEN endpos:=findpos+9FI ;findpos:=pos(kurse,fach,
+findpos+1)PER ;ELSE endpos:=0FI .END PROC schuelerkursenzuordnenlisten;TEXT
+PROC konvblock(TEXT CONST blockbez):INT VAR block;IF blockbez<>""THEN block:=
+int(text(blockbez,2));IF block<10THEN "0"+text(block)+text(blockbezSUB 3,1)
+ELSE text(block)+text(blockbezSUB 3,1)FI ELSE " "FI END PROC konvblock;
+PROC initrow:FOR iFROM 2UPTO anzfeldereingangREP eingangrow(i):=""PER END
+PROC initrow;PROC merkeeingangbs:FOR iFROM 2UPTO anzfeldereingangREP
+eingangrow(i):=standardmaskenfeld(i)PER .END PROC merkeeingangbs;PROC
+logbucheintragvornehmen(TEXT CONST escfunktion):logeintrag(logtext1+
+escfunktion+logtext2+aktjgst)END PROC logbucheintragvornehmen;initrow;END
+PACKET schuelerzukursenzuordnen;
+