app/schulis/2.2.1/src/2.schueler zu kursen zuordnen

Raw file
Back to index

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;