diff options
Diffstat (limited to 'app/schulis/2.2.1/src/1.stat intern')
-rw-r--r-- | app/schulis/2.2.1/src/1.stat intern | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/1.stat intern b/app/schulis/2.2.1/src/1.stat intern new file mode 100644 index 0000000..a94ef21 --- /dev/null +++ b/app/schulis/2.2.1/src/1.stat intern @@ -0,0 +1,337 @@ +PACKET statinternDEFINES statinternstart,statistiklistezeigen, +erstellestatistik,zeigefertigestatistik,statblaettern:LET matrix= +"ms stat matrix",obli="mu objektliste",ueberschriftenfeld=2,fortsetzungsfeld= +3,spaltentitel=4,wertebereichanfang=5,spaltenzahl=6,zeilenzahl=11, +zeilenlaenge=8,maxfeld=100,laengezaehlfeld=5,laengewertefeld=8;LET mv=100,nv= +20;ROW nvTEXT VAR spaltenwert;INT VAR maxspaltenwert;ROW mvTEXT VAR +zeilenwert;INT VAR maxzeilenwert;INT VAR zeileleer;LET anhangzeilen=2;LET +maxbestaende=8,maxauswertungen=17;LET titelergaenz1="alle Klassen ", +titelergaenz2="alle Tutorenkurse ";ROW maxbestaendeTEXT CONST bestandtitel1:= +ROW maxbestaendeTEXT :("der Jahrgangsstufe ","Jahrgangsstufen der Sek. 1", +"Jahrgangsstufen der Sek. 2","alle Jahrgangsstufen", +"Neuangemeldete zur Jgst. 5","Neuangemeldete zur Jgst. 11", +"Neuangemeldete zu einer anderen Jgst.","Abgegangene aller Jahrgangsstufen"); +LET allejgstsek1=2,allejgstsek2=3,allejgst=4,neuan5=5,neuan11=6,neuansonst=7, +abgegangene=8;ROW maxauswertungenTEXT CONST bestandtitel2:=ROW +maxauswertungenTEXT :("Geschlecht","Alter","Schultyp der Herkunftsschule", +"Art des Zugangs zur Jgst.","Versetzungsergebnis", +"Teilnahme Religionsunterricht","Sprachenfolge","Kunst/Musik", +"Ortsteil des Wohnortes","Staatsangehörigkeit","Muttersprache", +"Einschulungsjahr Grundschule","Herkunftsschule","Religionszugehörigkeit", +"Spätaussiedler","Abgangsgrund","Abschluß");LET geschlecht=1,alter=2,schultyp +=3,zugang=4,versetzung=5,teilnahmereli=6,fremdsprachen=7,kunst=8,ort=9,staat= +10,sprache=11,einschulung=12,herkunft=13,religion=14,aussiedler=15,abgang=16, +abschluss=17;LET fortsetzungstitel=" Forts.",leertitel="leer", +leertitelplatzhalter="�",sonsttitel="sonst",summentitel="Summe";LET +neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso",archivbestand="abg", +gesamtbestand="ls";LET bestort="c02 ortsteil",beststaat="c02 staaten", +bestsprache="c02 sprachen",bestreligion="c02 relizugehoerigkeit",bestabgang= +"c02 abgang",bestabschluss="c02 abschluss",bestschulart="c02 schulart", +bestversetzung="c02 versetzung",bestzugang="c02 zugang",bestherkunft= +"Schulen";LET null="0",niltext="",blank=" ";LET allesek1= +" 05 06 07 08 09 10",allesek2=" 11 12 13";LET einenbestand= +2,einejgst=1,alleinsek1=4,alleinsek2=5;LET sjahr="Schuljahr",shj= +"Schulhalbjahr",trenner1=".",trenner2="/",trennpos1=2,trennpos2=3,stattext1= +"alle",stattext2="Werte",maxsek1=10,titeltrenner=", ",links=4,rechts=3,oben=2 +,unten=1,minjgst=5,maxjgst=13,abgkz="abg. ",maxkreuzzahl=1,basisohnebestand=1 +,laengespaltentitel=30,standardanfang=2;LET weiblich="w",maennlich="m",ja="j" +,nein="n";LET unzulaessigewahlnr=56,wartennr=69,fertignr=77,meldzuvielewerte= +87,nproc=1,standardabstand=2;LET maxoblizeile=18,listenauskunft=2018;LET +beginntag=1,endetag=2,beginnmonat=4,endemonat=5,beginnjahr=7;BOOL VAR +rechtsverschiebbar,variablezaehlung,neueintragnoetig,#20.01.88dr# +vergleichsstart,sprungvonunten,fehlerzuvielewerte;INT VAR xaktuell,yaktuell, +aktuellerbestand,statbestandnr,statjgst,statauswertungsnr,statbasisnr, +jahrdestagesdatums,monatdestagesdatums,tagdestagesdatums,waspruefen,#06.07.87 +dr#dateinummer,#01.02.88dr#schluesseldateinr,vglfeld,gewindex;#05.08.87dr# +TEXT VAR kuerzelbestand,gewbestand,#06.08.87dr#bestaendezeile,vergleichsjgst, +statgrundmaske,aktschuljahr,akthalbjahr,titelzeile;PROC statinternstart: +standardvproc(maske(vergleichsknoten));sprungvonunten:=FALSE END PROC +statinternstart;PROC statistiklistezeigen:IF eingangsbildschirmkorrektTHEN +standardstartproc(obli);auskunftstextergaenzen;fuellestatistikliste; +standardnprocELSE fehlerbehandlungFI .auskunftstextergaenzen:titelzeile:= +niltext;IF statbestandnr=einejgstTHEN titelzeile1ELSE einfachetitelzeileFI ; +ergaenzeauskunft(titelzeile+auskunftstextende,listenauskunft).titelzeile1:IF +insek1THEN titelzeileCAT titelergaenz1ELSE titelzeileCAT titelergaenz2FI ; +titelzeileCAT bestandtitel1(statbestandnr);titelzeileCAT aufberzweistellig( +text(statjgst)).insek1:statjgst<=maxsek1.einfachetitelzeile:titelzeileCAT +bestandtitel1(statbestandnr).fuellestatistikliste:INT VAR feldnr:= +standardabstand+1;FOR iFROM 1UPTO maxauswertungenREP standardmaskenfeld( +bestandtitel2(i),feldnr);feldnrINCR standardabstandPER ;feldnrDECR 1;FOR i +FROM maxauswertungen+1UPTO maxoblizeileREP feldschutz(feldnr);feldnrINCR +standardabstandPER .eingangsbildschirmkorrekt:IF sprungvonuntenTHEN TRUE +ELSE INT VAR i,kreuzzahl:=0;TEXT VAR ankreuzfeld;statbestandnr:= +standardanfang;FOR iFROM standardanfangUPTO maxbestaende+1REP ankreuzfeld:= +standardmaskenfeld(i);IF ankreuzfeld<>niltextTHEN IF (i=standardanfang)THEN +statjgst:=int(ankreuzfeld);IF (NOT lastconversionok)COR statjgstungueltig +THEN LEAVE eingangsbildschirmkorrektWITH FALSE FI FI ;kreuzzahlINCR 1; +statbestandnr:=iFI PER ;statbestandnrDECR 1;(kreuzzahl<=maxkreuzzahl)CAND ( +kreuzzahl>0)FI .statjgstungueltig:(statjgst<minjgst)COR (statjgst>maxjgst). +fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext);infeld( +statbestandnr+1);return(nproc).END PROC statistiklistezeigen;PROC +erstellestatistik:reinitparsing;IF listenwahlkorrektTHEN startestatistik( +statbestandnr,statjgst,statauswertungsnr);initialisiereblaettern; +zeigefertigestatistikELSE fehlerbehandlungFI .listenwahlkorrekt:INT VAR i, +kreuzzahl:=0;TEXT VAR ankreuzfeld;statauswertungsnr:=standardanfang;INT VAR +feldnr:=standardabstand;FOR iFROM 1UPTO maxauswertungenREP ankreuzfeld:= +standardmaskenfeld(feldnr);IF ankreuzfeld<>niltextTHEN kreuzzahlINCR 1; +statauswertungsnr:=iFI ;feldnrINCR standardabstandPER ;(kreuzzahl<= +maxkreuzzahl)CAND (kreuzzahl>0).initialisiereblaettern:sprungvonunten:=TRUE ; +IF NOT fehlerzuvielewerteTHEN standardmeldung(fertignr,niltext)FI ;xaktuell:= +1;yaktuell:=1.fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext); +infeld(statauswertungsnr*standardabstand);return(nproc).END PROC +erstellestatistik;PROC zeigefertigestatistik:infeld(fortsetzungsfeld); +standardnprocEND PROC zeigefertigestatistik;PROC startestatistik(INT CONST +bestandnr,jgst,auswertungsnr):initialisiere;maskeausgeben;titelausgeben; +indexbestimmen;bestaendeausgeben;werteverarbeitung(auswertungsnr). +initialisiere:fehlerzuvielewerte:=FALSE ;statbasisnr:=basisohnebestand; +statgrundmaske:=niltext.maskeausgeben:standardstartproc(matrix); +standardmeldung(wartennr,niltext).titelausgeben:titelzeileCAT titeltrenner; +IF auswertungsnr=versetzungTHEN versetzungsergaenzungFI ;titelzeilenrest; +titelzeileausgeben.versetzungsergaenzung:liesschuljahr;lieshalbjahr; +titelzeilenzusatz.liesschuljahr:aktschuljahr:=schulkenndatum(sjahr). +lieshalbjahr:akthalbjahr:=schulkenndatum(shj).titelzeilenzusatz:titelzeile +CAT (subtext(aktschuljahr,1,trennpos1));titelzeileCAT trenner2;titelzeileCAT +(subtext(aktschuljahr,trennpos2));titelzeileCAT trenner1;titelzeileCAT +akthalbjahr;titelzeileCAT titeltrenner.titelzeilenrest:titelzeileCAT +bestandtitel2(auswertungsnr);.titelzeileausgeben:titelzeileIN +ueberschriftenfeld.indexbestimmen:SELECT bestandnrOF CASE allejgst,neuan5, +neuan11,neuansonst,abgegangene:gewindex:=ixsustatfamrufgebCASE allejgstsek1, +allejgstsek2,einejgst:gewindex:=ixsustatjgstEND SELECT ;indexvorbelegen. +indexvorbelegen:inittupel(dnrschueler);waspruefen:=einenbestand;gewbestand:= +gesamtbestand;SELECT bestandnrOF CASE einejgst:putwert(fnrsustatuss, +gesamtbestand);putwert(fnrsusgrpjgst,jgstkonv(jgst));waspruefen:=einejgst; +CASE allejgstsek1:putwert(fnrsustatuss,gesamtbestand);putwert(fnrsusgrpjgst, +"05");waspruefen:=alleinsek1;CASE allejgstsek2:putwert(fnrsustatuss, +gesamtbestand);putwert(fnrsusgrpjgst,"11");waspruefen:=alleinsek2;CASE +allejgst:putwert(fnrsustatuss,gesamtbestand);CASE neuan5:putwert(fnrsustatuss +,neuanmeld5);gewbestand:=neuanmeld5;CASE neuan11:putwert(fnrsustatuss, +neuanmeld11);gewbestand:=neuanmeld11;CASE neuansonst:putwert(fnrsustatuss, +neuanmeldsonst);gewbestand:=neuanmeldsonst;CASE abgegangene:putwert( +fnrsustatuss,archivbestand);gewbestand:=archivbestand;END SELECT . +bestaendeausgeben:SELECT bestandnrOF CASE einejgst:ermittleallekomponenten( +jgst)CASE allejgstsek1:ermittlebestaendezeile(allesek1)CASE allejgstsek2: +ermittlebestaendezeile(allesek2)CASE allejgst,neuansonst,abgegangene: +ermittlebestaendezeile(allesek1+allesek2)CASE neuan5:ermittlebestaendezeile( +praefix(allesek1))CASE neuan11:ermittlebestaendezeile(praefix(allesek2))END +SELECT ;bestaendezeileersterteilIN spaltentitel.bestaendezeileersterteil:IF +laengespaltentitel<length(bestaendezeile)THEN rechtsverschiebbar:=TRUE ;text( +bestaendezeile,laengespaltentitel)ELSE rechtsverschiebbar:=FALSE ;text( +bestaendezeile,laengespaltentitel)+summentitelFI .END PROC startestatistik; +PROC werteverarbeitung(INT CONST auswertungsnr):vorbereitung;auswertung. +vorbereitung:schluesseldateinr:=dnrschluessel.auswertung:dateinummer:= +dnrschueler;SELECT auswertungsnrOF CASE geschlecht:vglfeld:=fnrsugeschlechts; +statkonst(weiblich,maennlich);CASE alter:vglfeld:=fnrsugebdatums;statalter +CASE schultyp:vglfeld:=fnrschart;dateinummer:=dnrschulen;statschluessel( +bestschulart,PROC registriereeinenschueler)CASE zugang:vglfeld:= +fnrsuartzugang;statschluessel(bestzugang)CASE versetzung:vglfeld:= +fnrhjdversetzung;dateinummer:=dnrhalbjahresdaten;statschluessel( +bestversetzung,PROC registriereeinenschueler)CASE teilnahmereli:dateinummer:= +dnrdiffdaten;statreliCASE fremdsprachen:dateinummer:=dnrdiffdaten; +statfremdsprachenCASE kunst:vglfeld:=fnrddkunstmusik;dateinummer:= +dnrdiffdaten;statvariabel(PROC registriereeinenschueler)CASE ort:vglfeld:= +fnrsuortsteils;statschluessel(bestort)CASE staat:vglfeld:=fnrsustaatsangs; +statschluessel(beststaat)CASE sprache:vglfeld:=fnrsumuttersprache; +statschluessel(bestsprache)CASE einschulung:vglfeld:=fnrsujahreinschul; +stateinschulungCASE herkunft:vglfeld:=fnrsuskennlschule;statherkunftCASE +religion:vglfeld:=fnrsureligionsz;statschluessel(bestreligion)CASE aussiedler +:vglfeld:=fnrsuspaetaus;statkonst(ja,nein);CASE abgang:vglfeld:=fnrsuabggrund +;statschluessel(bestabgang)CASE abschluss:vglfeld:=fnrsuabschluss; +statschluessel(bestabschluss)END SELECT .statalter:holetagesdatum; +statvariabel(PROC zaehlmethodealter).stateinschulung:statvariabel(PROC +registriereeinenschueler).statherkunft:schluesseldateinr:=dnrschulen; +statschluessel(bestherkunft).statreli:statvariabel(PROC zaehlmethodereli). +statfremdsprachen:statvariabel(PROC zaehlmethodefremdsprachen).END PROC +werteverarbeitung;PROC ermittlebestaendezeile(TEXT CONST titel): +bestaendezeile:=titel;INT VAR lg:=length(titel),ug:=1,og:=laengezaehlfeld,i:= +0;REP iINCR 1;spaltenwert(i):=compress(subtext(titel,ug,og));ug:=og+1;ogINCR +laengezaehlfeldUNTIL og>lgPER ;maxspaltenwert:=iEND PROC +ermittlebestaendezeile;PROC ermittleallekomponenten(INT CONST jgst):INT VAR +dnrklassenbestand:=dnraktschuelergruppen;bestaendezeile:=niltext; +maxspaltenwert:=0;vergleichsjgst:=jgstkonv(jgst);vergleichsstart:=TRUE ; +inittupel(dnrklassenbestand);putwert(fnrsgrpsj,schulkenndatum(sjahr));putwert +(fnrsgrphj,schulkenndatum(shj));statleseschleife(dnrklassenbestand, +vergleichsjgst,niltext,dnrklassenbestand+3,dnrklassenbestand+4,PROC (BOOL +VAR )gibklasseaus);END PROC ermittleallekomponenten;PROC gibklasseaus(BOOL +VAR ende):INT CONST dnr:=dnraktschuelergruppen;TEXT CONST klassenjgst:= +jgstkonv(intwert(dnr+3));IF vergleichsstartTHEN IF vergleichsjgst<> +klassenjgstTHEN ende:=TRUE ELSE vergleichsjgst:=klassenjgst;vergleichsstart:= +FALSE FI ELSE IF vergleichsjgst<>klassenjgstTHEN ende:=TRUE FI FI ;IF NOT +endeTHEN TEXT CONST klassenkennung:=wert(dnr+4);maxspaltenwertINCR 1; +spaltenwert(maxspaltenwert):=compress(klassenkennung);bestaendezeileCAT +rechtstext(klassenkennung,laengezaehlfeld);FI END PROC gibklasseaus;PROC +felderparsen:IF dateinummer=dnrschuelerTHEN IF vglfeld<=fnrsujgsteintrTHEN +parsenooffields(fnrsujgsteintr-dnrschueler)ELSE parsenooffields(vglfeld- +dnrschueler)FI ELIF dateinummer=dnrhalbjahresdatenTHEN parsenooffields( +fnrhjdversetzung)ELIF dateinummer=dnrschulenTHEN parsenooffields( +fnrsuskennlschule)ELSE parsenooffields(fnrsutiddiffdaten-dnrschueler)FI END +PROC felderparsen;PROC statkonst(TEXT CONST wert1,wert2):#dr11.05.88#LET +konstwertezahl=2;felderparsen;setzewerte;gibwerteaus;startezaehlung. +setzewerte:variablezaehlung:=FALSE ;maxzeilenwert:=konstwertezahl+ +anhangzeilen;zeileleer:=konstwertezahl+1;zeilenwert(1):=wert1;zeilenwert(2):= +wert2;zeilenwert(zeileleer):=niltext.gibwerteaus:ausgabederzeilenwerte(1). +startezaehlung:statzaehlung(PROC registriereeinenschueler).END PROC statkonst +;PROC statschluessel(TEXT CONST bestand):statschluessel(bestand,PROC +registriereeinenschueler)END PROC statschluessel;PROC statschluessel(TEXT +CONST bestand,PROC zaehlmethode):systemdboff;setzewerte;gibwerteaus; +startezaehlung.setzewerte:kuerzelbestand:=bestand;variablezaehlung:=FALSE ; +maxzeilenwert:=0;inittupel(schluesseldateinr);IF schluesselbestandTHEN +statleseschleife(schluesseldateinr,bestand,niltext,schluesseldateinr+1, +schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)ELSE +statleseschleife(schluesseldateinr,niltext,niltext,schluesseldateinr+1, +schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)FI ; +maxzeilenwertINCR anhangzeilen;zeileleer:=maxzeilenwert-1;zeilenwert( +maxzeilenwert):=sonsttitel;zeilenwert(zeileleer):=niltext.schluesselbestand:( +bestandSUB 1)="c".gibwerteaus:ausgabederzeilenwerte(1).startezaehlung: +statzaehlung(PROC zaehlmethode).END PROC statschluessel;PROC +tragegefundenenzeilenwertein(BOOL VAR schluss):IF dbstatus=okTHEN IF +schluesseldateinr=dnrschluesselTHEN IF wert(fnrschlsachgebiet)=kuerzelbestand +THEN IF maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ; +standardmeldung(meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert( +maxzeilenwert):=wert(fnrschlschluessel)FI ELSE schluss:=TRUE FI ELSE IF +maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ;standardmeldung( +meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert(maxzeilenwert):= +wert(schluesseldateinr+1)FI FI ELSE schluss:=TRUE FI END PROC +tragegefundenenzeilenwertein;PROC statvariabel(PROC zaehlmethode):setzewerte; +gibwerteaus;startezaehlung.setzewerte:variablezaehlung:=TRUE ;maxzeilenwert:= +0.gibwerteaus:stattext1IN wertebereichanfang;stattext2IN (wertebereichanfang+ +zeilenlaenge).startezaehlung:statzaehlung(PROC zaehlmethode).END PROC +statvariabel;PROC statzaehlung(PROC zaehlmethode):LET stackgroesse=15;INT +VAR anzahl;vorbereitung;zaehlschleife;IF variablezaehlungTHEN umsortierenFI ; +ausgabe.vorbereitung:reinitparsing;neueintragnoetig:=FALSE ;statinit( +maxzeilenwert,maxspaltenwert).zaehlschleife:anzahl:=stackgroesse; +multisearchforward(gewindex,anzahl);WHILE anzahl>0REP felderparsen;multisucc; +IF pruefungbestand(waspruefen)THEN IF dateinummer=dnrdiffdaten#dr11.05.88# +THEN diffdatenlesenELIF dateinummer=dnrhalbjahresdatenTHEN hjddatenlesenELIF +dateinummer=dnrschulenTHEN schuldatenlesenFI ;zaehlmethode; +gegebenenfallsneuenzeilenwertausgeben;anzahlDECR 1; +wennstackabgearbeitetnachlesenELSE LEAVE zaehlschleifeFI ;PER .diffdatenlesen +:inittupel(dnrdiffdaten);IF wert(fnrsutiddiffdaten)<>niltextTHEN readtid( +dnrdiffdaten,wert(fnrsutiddiffdaten))FI .hjddatenlesen:inittupel( +dnrhalbjahresdaten);IF wert(fnrsutidakthjd)<>niltextTHEN readtid( +dnrhalbjahresdaten,wert(fnrsutidakthjd));FI .schuldatenlesen:inittupel( +dnrschulen);IF wert(fnrsuskennlschule)<>niltextTHEN putwert(fnrschkennung, +wert(fnrsuskennlschule));search(dnrschulen,TRUE )FI . +gegebenenfallsneuenzeilenwertausgeben:IF variablezaehlungCAND +neueintragnoetigTHEN ausgabederzeilenwerte(1)FI . +wennstackabgearbeitetnachlesen:IF anzahl=0THEN anzahl:=stackgroesse;multisucc +(gewindex,anzahl);FI .umsortieren:quicksort(1,maxzeilenwert).ausgabe: +zwischentitel(0);ausgabederzeilenwerte(1);statausgeben(1,1).END PROC +statzaehlung;PROC ausgabederzeilenwerte(INT CONST startzeile): +sovielzeilenwiemoeglich;uebrigezeilenloeschen.sovielzeilenwiemoeglich:INT +VAR i,endwert:=min(maxzeilenwert,startzeile+zeilenzahl-1);INT VAR basis:= +wertebereichanfang;TEXT VAR ausgabewert:="";FOR iFROM startzeileUPTO endwert +REP IF variablezaehlungTHEN ausgabewert:=zeilenwert(i);IF ausgabewert= +leertitelplatzhalterTHEN ausgabewert:=leertitelFI ELIF i=zeileleerTHEN +ausgabewert:=leertitelELIF i=maxzeilenwertTHEN ausgabewert:=sonsttitelELSE +ausgabewert:=zeilenwert(i)FI ;rechtstext(ausgabewert,laengewertefeld)IN basis +;basisINCR zeilenlaengePER .uebrigezeilenloeschen:TEXT CONST loeschwert:= +rechtstext(niltext,laengewertefeld);WHILE basis<maxfeldREP loeschwertIN basis +;basisINCR zeilenlaengePER .END PROC ausgabederzeilenwerte;PROC +ausgabederspaltenwerte(INT CONST startspalte):INT VAR basis:=((startspalte-1) +*laengezaehlfeld)+1;TEXT VAR titel:=subtext(bestaendezeile,basis);IF length( +titel)<=laengespaltentitelTHEN setzesummenspalteELSE titel:=text(titel, +laengespaltentitel)FI ;titelIN spaltentitel.setzesummenspalte:titel:=text( +titel,laengespaltentitel)+summentitel.END PROC ausgabederspaltenwerte;PROC +spaltenneuausgeben(INT CONST basisspalte):INT VAR i;FOR iFROM spaltenzahl-1 +DOWNTO 1REP statspalteausgeben(basisspalte+i,i)PER END PROC +spaltenneuausgeben;PROC zwischentitel(INT CONST bestandnr):IF bestandnr=0 +THEN IF rechtsverschiebbarTHEN bestaendetitelsoweitesgehtIN spaltentitel;FI +ELSE setzecursorFI .bestaendetitelsoweitesgeht:text(bestaendezeile, +laengespaltentitel).setzecursor:INT VAR aktuellespalte:=bestandnr,basis;IF +bestandnr>spaltenzahlTHEN basis:=((bestandnr-spaltenzahl)*laengezaehlfeld)+1; +text(subtext(bestaendezeile,basis),laengespaltentitel)IN spaltentitel; +aktuellespalte:=spaltenzahl;loeschespalte(wertebereichanfang+aktuellespalte); +spaltenneuausgeben(bestandnr-spaltenzahl)FI ;infeld(wertebereichanfang+ +aktuellespalte);INT VAR x,y;getcursor(x,y);cursor(x+laengezaehlfeld-1,y-2). +END PROC zwischentitel;PROC statblaettern(INT CONST richtung):SELECT richtung +OF CASE links:nachlinksblaetternCASE rechts:nachrechtsblaetternCASE unten: +nachuntenblaetternCASE oben:nachobenblaetternEND SELECT ;return(nproc). +nachlinksblaettern:blaettern(xaktuell,yaktuell,0,-spaltenzahl). +nachrechtsblaettern:blaettern(xaktuell,yaktuell,0,spaltenzahl). +nachuntenblaettern:blaettern(xaktuell,yaktuell,zeilenzahl,0). +nachobenblaettern:blaettern(xaktuell,yaktuell,-zeilenzahl,0).END PROC +statblaettern;PROC blaettern(INT VAR x,y,INT CONST xincr,yincr):IF zulaessig +THEN meldefortsetzung;fuehreausFI .zulaessig:INT CONST xneu:=x+xincr;INT +CONST yneu:=y+yincr;((xneu>0)CAND (xneu<=maxzeilenwert))CAND ((yneu>0)CAND ( +yneu<=maxspaltenwert)).meldefortsetzung:IF (xneu=1)CAND (yneu=1)THEN +rechtstext(niltext,laengewertefeld)IN fortsetzungsfeldELSE fortsetzungstitel +IN fortsetzungsfeldFI .fuehreaus:x:=xneu;y:=yneu;IF xincr=0THEN +spaltentitelneuELSE zeilentitelneuFI ;statausgeben(xneu,yneu).spaltentitelneu +:ausgabederspaltenwerte(yneu).zeilentitelneu:ausgabederzeilenwerte(xneu).END +PROC blaettern;PROC registriereeinenschueler:tragevariablenwertein(wert( +vglfeld))END PROC registriereeinenschueler;PROC zaehlmethodealter:TEXT CONST +suchwert:=jgstkonv(lebensalter(wert(fnrsugebdatums)));tragevariablenwertein( +suchwert)END PROC zaehlmethodealter;PROC zaehlmethodereli:TEXT VAR suchwert:= +"";suchwert:=wert(fnrddreliunter);IF NOT leerTHEN IF abgemeldetTHEN suchwert +:=abgkz+suchwertFI FI ;eintragen.leer:suchwert=niltext.abgemeldet:datum( +datumrekonversion(wert(fnrddabmeldedatreli)))<>nildatum.eintragen: +tragevariablenwertein(suchwert).END PROC zaehlmethodereli;PROC +zaehlmethodefremdsprachen:TEXT VAR suchwert:=text(wert(fnrdd1fremdfach),2)+ +text(wert(fnrdd2fremdfach),2)+text(wert(fnrdd3fremdfach),2)+text(wert( +fnrdd4fremdfach),2);IF suchwert=zeilenlaenge*blankTHEN suchwert:=niltextFI ; +tragevariablenwertein(suchwert)END PROC zaehlmethodefremdsprachen;PROC +tragevariablenwertein(TEXT CONST suchwert):INT VAR lva:=0,zeilennr:=0;BOOL +VAR gefunden:=TRUE ;TEXT VAR gefundenerwert:=niltext;sucheaktuellenbestand; +suchegefundenenwert;IF NOT gefundenAND variablezaehlungTHEN IF maxzeilenwert= +mvTHEN fehlerzuvielewerte:=TRUE ;standardmeldung(meldzuvielewerte,niltext) +ELSE neueintragnoetig:=TRUE ;zeilennrINCR 1;maxzeilenwert:=zeilennr; +zeilenwert(zeilennr):=gefundenerwert;statinit(maxzeilenwert);registrierenFI +ELSE neueintragnoetig:=FALSE ;registrierenFI .sucheaktuellenbestand:SELECT +statbestandnrOF CASE einejgst:bestimmeaktuellenbestandCASE allejgstsek2: +aktuellerbestand:=int(wert(fnrsusgrpjgst))-10CASE allejgst,allejgstsek1, +abgegangene:aktuellerbestand:=int(wert(fnrsusgrpjgst))-4CASE neuansonst: +aktuellerbestand:=int(wert(fnrsujgsteintr))-4CASE neuan5,neuan11: +aktuellerbestand:=1END SELECT ;.bestimmeaktuellenbestand:FOR lvaFROM 1UPTO +maxspaltenwertREP IF compress(wert(fnrsusgrpzugtut))=compress(spaltenwert(lva +))THEN aktuellerbestand:=lva;LEAVE bestimmeaktuellenbestandFI PER . +suchegefundenenwert:IF suchwert=niltextTHEN IF variablezaehlungTHEN +gefundenerwert:=leertitelplatzhalter;zeilennr:=gefundenezeile(gefundenerwert, +maxzeilenwert,gefunden)ELSE zeilennr:=zeileleerFI ELSE gefundenerwert:= +suchwert;zeilennr:=gefundenezeile(gefundenerwert,maxzeilenwert,gefunden)FI . +registrieren:statauszaehlen(zeilennr,aktuellerbestand).END PROC +tragevariablenwertein;INT PROC gefundenezeile(TEXT CONST vergleichswert,INT +CONST oberegrenze,BOOL VAR gefunden):INT VAR i;FOR iFROM 1UPTO oberegrenze +REP IF vergleichswert=zeilenwert(i)THEN gefunden:=TRUE ;LEAVE gefundenezeile +WITH iFI PER ;gefunden:=FALSE ;maxzeilenwertEND PROC gefundenezeile;PROC +holetagesdatum:TEXT CONST tagesdatum:=date;jahrdestagesdatums:=int(subtext( +tagesdatum,beginnjahr));monatdestagesdatums:=int(subtext(tagesdatum, +beginnmonat,endemonat));tagdestagesdatums:=int(subtext(tagesdatum,beginntag, +endetag));END PROC holetagesdatum;INT PROC lebensalter(TEXT CONST +geburtsdatum):INT VAR grundalter:=jahrdestagesdatums-int(subtext(geburtsdatum +,beginnjahr));IF spaeterermonatgeborenCOR (gleichermonatgeborenCAND +spaeterertaggeboren)THEN einsjuengerFI ;grundalter.einsjuenger:grundalter +DECR 1.spaeterermonatgeboren:INT CONST geburtsmonat:=int(subtext(geburtsdatum +,beginnmonat,endemonat));geburtsmonat>monatdestagesdatums. +gleichermonatgeboren:geburtsmonat=monatdestagesdatums.spaeterertaggeboren:int +(subtext(geburtsdatum,beginntag,endetag))>tagdestagesdatums.END PROC +lebensalter;TEXT PROC aufberzweistellig(TEXT CONST jgst):IF length(jgst)=1 +THEN null+jgstELSE jgstFI END PROC aufberzweistellig;TEXT PROC praefix(TEXT +CONST t):subtext(t,1,laengezaehlfeld)END PROC praefix;PROC quicksort(INT +CONST anfang,ende):IF anfang<endeTHEN waehlepivot;sortieregrob;fuegepivotein; +quicksort(anfang,pivotstelle-1);quicksort(pivotstelle+1,ende)FI .waehlepivot: +vertauscheinzeilenwert(anfang,(anfang+ende)DIV 2);TEXT CONST pivot:= +zeilenwert(anfang).sortieregrob:nimmreduziertezeilenwert;REP schluckelinks; +schluckerechts;IF nochnichtleerTHEN vertauscheamrandELSE LEAVE sortieregrob +FI PER .nimmreduziertezeilenwert:INT VAR bereichsanfang:=anfang+1, +bereichsende:=ende.nochnichtleer:bereichsanfang<=bereichsende.schluckelinks: +WHILE nochnichtleerCAND zeilenwert(bereichsanfang)<=pivotREP bereichsanfang +INCR 1PER .schluckerechts:WHILE nochnichtleerCAND zeilenwert(bereichsende)>= +pivotREP bereichsendeDECR 1PER .vertauscheamrand:vertauscheinzeilenwert( +bereichsanfang,bereichsende).fuegepivotein:INT CONST pivotstelle:= +bereichsende;vertauscheinzeilenwert(anfang,pivotstelle).END PROC quicksort; +PROC vertauscheinzeilenwert(INT CONST i,j):TEXT VAR hilfselement:=zeilenwert( +i);zeilenwert(i):=zeilenwert(j);zeilenwert(j):=hilfselement; +statzeilevertauschen(i,j)END PROC vertauscheinzeilenwert;TEXT PROC jgstkonv( +INT CONST jgst):TEXT CONST tjgst:=text(jgst);IF jgst<maxsek1THEN null+tjgst +ELSE tjgstFI END PROC jgstkonv;BOOL PROC pruefungbestand(INT CONST welchen): +BOOL VAR b;SELECT welchenOF CASE einenbestand:pruefungeinenbestand(b)CASE +einejgst:pruefungeinejgst(b)CASE alleinsek1:pruefungsek1(b)CASE alleinsek2: +pruefungsek2(b)END SELECT ;bEND PROC pruefungbestand;PROC pruefungeinejgst( +BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND wert(fnrsusgrpjgst)= +vergleichsjgst)END PROC pruefungeinejgst;PROC pruefungeinenbestand(BOOL VAR b +):b:=(wert(fnrsustatuss)=gewbestand)END PROC pruefungeinenbestand;PROC +pruefungsek1(BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND intwert( +fnrsusgrpjgst)<=maxsek1)END PROC pruefungsek1;PROC pruefungsek2(BOOL VAR b):b +:=(wert(fnrsustatuss)=gewbestandCAND intwert(fnrsusgrpjgst)>maxsek1)END PROC +pruefungsek2;END PACKET statintern; + |