PACKET einhaltungzeitwuenschepruefenDEFINES zeitwuenschepruefenausfuehren: LET dateiname="Liste zur Einhaltung der Zeitwünsche",trenner="198", letztestunde=66,fldlehrer=2,fldsugrup=3,fldraeume=4,fldfaecher=5, fldkopplungen=6,fldakthalbj=7,meldungwarten=69,meldungbearbwird=352,# meldungkeinelehrer=337,meldungkeineraeume=365,#meldungkeinefaecher=68, meldungkeinzeitraster=336,meldungkeinezeitwuensche=389,meldungserverfehler= 376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen= 356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378, meldungstdplauswvorber=384,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6, posanznm=7,posgewnm=9,ausgfreipos=2,ausganzpos=11,ausggewpos=18,ausgnerfpos= 27,ausgabeparam="#",ausgnerf="*",minus="-",plus="+",leerzeile=" ",kennzlehrer ="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzlv="L",kennzkoppl= "K",moeintrag="Mo ",dieintrag="Di ",mieintrag="Mi ",doeintrag="Do ", freintrag="Fr ",saeintrag="Sa ",anhangl="Lehrer ",anhangs="Schülergruppen " ,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift= "Liste zur Einhaltung der Zeitwünsche für ",unterstrich= "-------------------------------------------------",leererunbestwunsch= " ",kennungvorm="v",kennungnachm="n",schuljahr="Schuljahr", schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort", anzgewichte=6,anzunterrichtstage=6,anzvormittage=6,anznachmittage=5, anzsamstagstunden=6,anzunterrichtsstunden=12;FILE VAR datei;INT VAR hjkennneu :=0,hjkennalt:=-1;INT VAR i,j,fstat,fall,anztage,anzvorm,anznachm;TEXT VAR schj,schhj,kenn,plan:="",anhang,faecherkatalog:=trenner;TEXT VAR bestwzeile, unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:= " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+ " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ";TEXT VAR moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag ;BOOL VAR keinezeitwuensche:=TRUE ;ROW 4ROW anzgewichteINT VAR anzwuenschegesamt;ROW 4ROW anzgewichteINT VAR anznerfwuensche;PROC zeitwuenschepruefenausfuehren:keinezeitwuensche:=TRUE ;kenn:=""; standardmeldung(meldungwarten,"");pruefeeingangsmaske;pruefehalbjahr; zeitwuenschevorhanden;IF halbjahrveraendertTHEN hjkennalt:=hjkennneu; holestundenplan;erstellezeitrasterFI ;erstelleliste;IF keinezeitwuenscheTHEN fehlerkeinezeitwuenscheELSE zeigedatei(dateiname,"vr")FI .halbjahrveraendert: hjkennneu<>hjkennalt.pruefeeingangsmaske:standardpruefe(5,2,6,0,"",fstat);IF fstat<>0THEN infeld(fstat);return(1);LEAVE zeitwuenschepruefenausfuehrenELIF standardmaskenfeld(fldlehrer)<>""THEN fall:=fldlehrer;anhang:=anhangl;kenn:= kennzlehrerELIF standardmaskenfeld(fldsugrup)<>""THEN fall:=fldsugrup;anhang :=anhangs;kenn:=kennzsugrupELIF standardmaskenfeld(fldraeume)<>""THEN fall:= fldraeume;anhang:=anhangr;kenn:=kennzraeume;pruefefaecherELIF standardmaskenfeld(fldfaecher)<>""THEN fall:=fldfaecher;anhang:=anhangf;kenn :=kennzfaecher;IF faecherkatalog=trennerTHEN holallefaecherFI ;ELIF standardmaskenfeld(fldkopplungen)<>""THEN fall:=fldkopplungen;anhang:=anhangk ;kenn:=kennzkopplFI .holallefaecher:inittupel(dnrfaecher);statleseschleife( dnrfaecher,"","",fnrffach,fnrffach,PROC faecher).pruefefaecher:IF records( dnrfaecher)=0.0THEN fehlerkeinefaecherFI .pruefehalbjahr:schj:=schulkenndatum (schuljahr);schhj:=schulkenndatum(schulhalbjahr);IF standardmaskenfeld( fldakthalbj)=""THEN geplanteshjundsjberechnen(schhj,schj);hjkennneu:=1ELSE hjkennneu:=0FI .holestundenplan:standardmeldung(meldungstdplauswvorber,""); stundenplanhalbjahrsetzen(schhj,schj);stundenplanbasisundstundenplanholen( fstat);IF fstat<>0CAND fstat<>8THEN meldungausgeben(fstat);return(1);LEAVE zeitwuenschepruefenausfuehrenFI .erstellezeitraster:plan:="";IF records( dnrzeitraster)=0.0THEN fehlerzeitrasternichtvollstdELSE inittupel( dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,fnrzrsj,fnrzrhj, PROC zeitrasterdaten)FI ;IF length(plan)schjCOR wert(fnrzwhj)<>schhj COR wert(fnrzwbezug)<>kennCOR dbstatus<>0THEN b:=TRUE ELSE IF keinezeitwuenscheTHEN keinezeitwuensche:=FALSE FI ;bereiteobjektauf(wert( fnrzwbezugsobjekt))FI END PROC zeitwuenschelisten;PROC bereiteobjektauf(TEXT CONST objekt):TEXT VAR bestwunsch,unbestwunsch;INT VAR suchpos:=1,freietage, freievorm,freienachm,wnerf,wanz;TEXT VAR wunsch:="";standardmeldung( meldungbearbwird,objekt+ausgabeparam);IF kenn=kennzfaecherTHEN IF pos( faecherkatalog,trenner+objekt+trenner)=0THEN fehlereintragELSE listeneintrag FI ELIF bezeichnungzulaessig(kenn,objekt)THEN listeneintragELSE fehlereintrag FI .fehlereintrag:putline(datei,objekt+": (ungültige Bezeichnung)");putline (datei,leerzeile).listeneintrag:moobjeintrag:=moeintrag;diobjeintrag:= dieintrag;miobjeintrag:=mieintrag;doobjeintrag:=doeintrag;frobjeintrag:= freintrag;saobjeintrag:=saeintrag;uebertragwuensche;putline(datei,objekt+":") ;putline(datei,leerzeile);putline(datei,"Wünsche zu festen Zeiten:");putline( datei,"(nicht erfüllte sind mit * markiert)");putline(datei, " 1 2 3 4 5 6 7 8 9 10 11 12");putline(datei, moobjeintrag+text(bestwzeile,48));putline(datei,diobjeintrag+subtext( bestwzeile,49,96));putline(datei,miobjeintrag+subtext(bestwzeile,97,144)); putline(datei,doobjeintrag+subtext(bestwzeile,145,192));putline(datei, frobjeintrag+subtext(bestwzeile,193,240));putline(datei,saobjeintrag+subtext( bestwzeile,241));putline(datei,leerzeile);putline(datei, " im Plan allgemeine Wünsche:");putline(datei, " frei Anzahl/Gewicht nicht erfüllt");putline(datei, "ganze Tage "+unbestwtage);putline(datei,"zusätzl. Vorm. "+unbestwvorm) ;putline(datei,"zusätzl. Nachm. "+unbestwnachm);putline(datei,leerzeile); putline(datei,leerzeile).uebertragwuensche:bestwunsch:=wert( fnrzwbestimmtewuensche);unbestwunsch:=wert(fnrzwunbestimmtewuensche); bestwzeile:=bestwurzeile;unbestwtage:=" _ _ _ _ "; unbestwvorm:=" _ _ _ _ ";unbestwnachm:= " _ _ _ _ ";tragbestwuenscheein;tragunbestwuenscheein. tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch, minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1 );zaehlebestwunsch(1,wunsch,TRUE );IF unterricht(objekt,suchposDIV 2+1)THEN wunschCAT ausgnerf;zaehlebestwunsch(1,wunsch,FALSE )FI ;replace(bestwzeile, suchpos*2-1,wunsch);suchposINCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN wunsch:=subtext( bestwunsch,suchpos,suchpos+1);zaehlebestwunsch(1,wunsch,TRUE );IF NOT ( unterricht(objekt,suchposDIV 2+1))THEN wunschCAT ausgnerf;zaehlebestwunsch(1, wunsch,FALSE )FI ;replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ; PER .tragunbestwuenscheein:anztage:=0;anzvorm:=0;anznachm:=0; ermittleunbestwdaten(objekt);freietage:=anzunterrichtstage-anztage;freievorm :=anzvormittage-freietage-anzvorm;freienachm:=anznachmittage-freietage- anznachm;replace(unbestwtage,ausgfreipos,text(freietage));replace(unbestwvorm ,ausgfreipos,text(freievorm));replace(unbestwnachm,ausgfreipos,text( freienachm));IF unbestwunsch<>leererunbestwunschTHEN wunsch:=unbestwunschSUB posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos,wunsch)FI ;wanz:= int(wunsch);IF freietage" "THEN replace(unbestwtage,ausggewpos,wunsch)FI ;zaehleunbestwunsch( 2,wanz,wnerf,wunsch);wunsch:=unbestwunschSUB posanzvm;IF wunsch<>" "THEN replace(unbestwvorm,ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freievorm" "THEN replace( unbestwvorm,ausggewpos,wunsch)FI ;zaehleunbestwunsch(3,wanz,wnerf,wunsch); wunsch:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm, ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freienachm" "THEN replace(unbestwnachm, ausggewpos,wunsch)FI ;zaehleunbestwunsch(4,wanz,wnerf,wunsch);FI .END PROC bereiteobjektauf;PROC ermittleunbestwdaten(TEXT CONST objekt):BOOL VAR tagnichtgezaehlt:=TRUE ;INT VAR incr:=0,anz,zeitstd;anz:= anzunterrichtsstunden;FOR iFROM 1UPTO anzunterrichtstage-1REP tagnichtgezaehlt:=TRUE ;suchevormunterricht;suchenachmunterricht;incrINCR anzunterrichtsstundenPER ;anz:=anzsamstagstunden;tagnichtgezaehlt:=TRUE ; suchevormunterricht;suchenachmunterricht.suchevormunterricht:FOR jFROM 1UPTO anzREP zeitstd:=incr+j;IF (planSUB zeitstd)=kennungvormTHEN IF unterricht( objekt,incr+j)THEN anzvormINCR 1;anztageINCR 1;tagnichtgezaehlt:=FALSE ; LEAVE suchevormunterrichtFI ;ELIF (planSUB zeitstd)=kennungnachmTHEN LEAVE suchevormunterrichtFI ;PER .suchenachmunterricht:FOR jFROM anzDOWNTO 1REP zeitstd:=incr+j;IF (planSUB zeitstd)=kennungnachmTHEN IF unterricht(objekt, incr+j)THEN anznachmINCR 1;IF tagnichtgezaehltTHEN anztageINCR 1;LEAVE suchenachmunterrichtFI ;FI ;ELIF (planSUB zeitstd)=kennungvormTHEN LEAVE suchenachmunterrichtFI ;PER .END PROC ermittleunbestwdaten;PROC zaehlebestwunsch(INT CONST rowindex,TEXT CONST wunsch,BOOL CONST erfuellt): INT VAR gew;IF wunsch="-3"THEN gew:=1ELIF wunsch="-2"THEN gew:=2ELIF wunsch= "-1"THEN gew:=3ELIF wunsch="+1"THEN gew:=4ELIF wunsch="+2"THEN gew:=5ELIF wunsch="+3"THEN gew:=6FI ;IF erfuelltTHEN anzwuenschegesamt(rowindex)(gew) INCR 1ELSE anznerfwuensche(rowindex)(gew)INCR 1FI END PROC zaehlebestwunsch; PROC zaehleunbestwunsch(INT CONST rowindex,wanz,wnerf,TEXT CONST wunsch):INT VAR gewicht;SELECT int(wunsch)OF CASE 3:gewicht:=1CASE 2:gewicht:=2OTHERWISE gewicht:=3END SELECT ;anzwuenschegesamt(rowindex)(gewicht)INCR wanz;IF wnerf <>0THEN anznerfwuensche(rowindex)(gewicht)INCR wnerfFI END PROC zaehleunbestwunsch;BOOL PROC unterricht(TEXT CONST objekt,INT CONST zeit): TEXT VAR lv,ra,par,daten;INT VAR spos,findpos;IF fall=fldsugrupCOR fall= fldlehrerCOR fall=fldraeumeTHEN objektunterrichtELSE objektindatenderzeitFI . objektunterricht:planeintraglesen(zeit,kenn,objekt,lv,ra,par);lv<>"". objektindatenderzeit:IF fall=fldfaecherTHEN daten:=datenderzeit(zeit,kennzlv) ;findpos:=3ELSE daten:=datenderzeit(zeit,kenn);findpos:=1FI ;IF daten=""THEN FALSE ELSE suchindatenFI .suchindaten:spos:=1;WHILE spos<>0REP spos:=pos( daten,objekt,spos);IF spos<>0THEN IF (sposMOD 8)=findposTHEN LEAVE unterricht WITH TRUE FI ;sposINCR 1FI ;PER ;FALSE .END PROC unterricht;PROC zeitrasterdaten(BOOL VAR b):IF wert(fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhj COR dbstatus<>0THEN b:=TRUE ELSE planCAT wert(fnrzrkennungteil);FI END PROC zeitrasterdaten;PROC faecher(BOOL VAR b):faecherkatalogCAT wert(fnrffach)+ trennerEND PROC faecher;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung( meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen ,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6 THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); FI END PROC meldungausgeben;END PACKET einhaltungzeitwuenschepruefen