1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
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)<letztestundeTHEN
fehlerzeitrasternichtvollstdFI .zeitwuenschevorhanden:IF records(
dnrzeitwuensche)=0.0THEN fehlerkeinezeitwuenscheFI .
fehlerzeitrasternichtvollstd:standardmeldung(meldungkeinzeitraster,"");return
(1);LEAVE zeitwuenschepruefenausfuehren.fehlerkeinefaecher:standardmeldung(
meldungkeinefaecher,"");return(1);LEAVE zeitwuenschepruefenausfuehren.
fehlerkeinezeitwuensche:standardmeldung(meldungkeinezeitwuensche,"");return(1
);LEAVE zeitwuenschepruefenausfuehren.END PROC zeitwuenschepruefenausfuehren;
PROC erstelleliste:bereitedateiauf;initialisiererow;inittupel(dnrzeitwuensche
);putwert(fnrzwbezug,kenn);statleseschleife(dnrzeitwuensche,schj,schhj,
fnrzwsj,fnrzwhj,PROC zeitwuenschelisten);bereitestatistikauf.bereitedateiauf:
forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei
,schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+
date);putline(datei,leerzeile);putline(datei,ueberschrift+anhang+schhj+". "+
text(schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich+length(anhang)*
"-");putline(datei,leerzeile).initialisiererow:FOR iFROM 1UPTO 4REP FOR j
FROM 1UPTO anzgewichteREP anzwuenschegesamt(i)(j):=0;anznerfwuensche(i)(j):=0
PER ;PER .bereitestatistikauf:putline(datei,"#page#");putline(datei,
"Endstatistik:");putline(datei,leerzeile);putline(datei,leerzeile);
gibwerteaus(" Stunden ",1);gibwerteaus(" ganze Tage ",2);gibwerteaus(
" Vormittage ",3);gibwerteaus(" Nachmittage",4).END PROC erstelleliste;
PROC gibwerteaus(TEXT CONST objekt,INT CONST row):putline(datei,
"Anzahl Gewichte Summe ");putline(datei,
objekt+" -3 -2 -1 +1 +2 +3 ");putline(datei,
"--------------+-----+-----+-----+-----+-----+-----+------");putline(datei,
"gesamt "+werte(row,TRUE ));putline(datei,"erfüllt "+erfuelltwerte
(row));putline(datei,"nicht erfüllt"+werte(row,FALSE ));putline(datei,
leerzeile);putline(datei,leerzeile).END PROC gibwerteaus;TEXT PROC werte(INT
CONST row,BOOL CONST allewerte):TEXT VAR ausgabe:="";INT VAR summe:=0,eintrag
;IF allewerteTHEN FOR iFROM 1UPTO anzgewichteREP eintrag:=anzwuenschegesamt(
row)(i);summeINCR eintrag;ausgabeCAT text(eintrag,6)PER ELSE FOR iFROM 1UPTO
anzgewichteREP eintrag:=anznerfwuensche(row)(i);summeINCR eintrag;ausgabeCAT
text(eintrag,6)PER FI ;ausgabeCAT text(summe,6);ausgabeEND PROC werte;TEXT
PROC erfuelltwerte(INT CONST row):TEXT VAR ausgabe:="";INT VAR summe:=0,
gesamt,nerf,erf;FOR iFROM 1UPTO anzgewichteREP gesamt:=anzwuenschegesamt(row)
(i);nerf:=anznerfwuensche(row)(i);erf:=gesamt-nerf;summeINCR erf;ausgabeCAT
text(erf,6)PER ;ausgabeCAT text(summe,6);ausgabeEND PROC erfuelltwerte;PROC
zeitwuenschelisten(BOOL VAR b):IF wert(fnrzwsj)<>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<wanzTHEN wnerf:=wanz-freietage;replace(unbestwtage,
ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;wunsch:=unbestwunschSUB posgewut;IF
wunsch<>" "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<wanz
THEN wnerf:=wanz-freievorm;replace(unbestwvorm,ausgnerfpos,text(wnerf))ELSE
wnerf:=0FI ;wunsch:=unbestwunschSUB posgewvm;IF wunsch<>" "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<wanzTHEN wnerf:=wanz-
freienachm;replace(unbestwnachm,ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;
wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "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
|