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 pos1kennungvorherTHEN 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);jgst113END 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 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""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 anfpos0REP 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;