PACKET likwkurskombinatilonensek2DEFINES kurskombinationmaskebearbeiten, kurskombinationggferstellen,kurskombinationzeigen,kurskombinationendrucken: LET maske="ms kurskombination auszaehlen sek2 eingang",fnr2fuerjgst=2, fnr3fuerhj=3,fnr4jgstls=4,fnr5jgstneu=5,fnr6kurswahl=6,fnr7bestart=7, fnr8klausur=8,fnr9bs=9,fnr10dr=10,mnrjgstfalsch=404,mnrjgstfehlt=172, mnrhjfalsch=405,mnrkeinekwdatenda=406,mnrkeinedbdatenda=407, mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58,mnrbittewarten=69, mnrlistewirdaufbereitet=190;INT VAR mnrallgemein;TEXT VAR mnrzusatz;TEXT CONST mark:="#";LET niltext="",punkt=".",querstrich="/",blank=" ", blankklammer=" )",doppelpunkt=":",null=0,neuangemeldete="N",allederjgst="", ohneneuang="O";BOOL VAR bildschirmausgabe,kurswahlen,lsundneue,nurneue,nurls, bestimmtekursart;TEXT VAR dbsj,dbhj,dbjgst,fuerkwsj,fuerhj,fuerjgst,jgstls, jgstneu,hilfsstring,kursart,klausur,kennung,fachart,lvart,fachkennung1, fachkennung2,fachart1,fachart2,kursart1,kursart2;LET maxkurse=200,maxspalten= 13;TEXT CONST ueberschrift3:="-------:"+13*"----+";TEXT VAR ueberschrift1, ueberschrift2,zeile;LET ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT , AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ; AUSGKOPFDRUCK VAR ausgkopfdruck;LET ausgkopflaenge=2,ueberschriftenzeilen=2; TEXT CONST kopfueb1teil1:="Wahlergebnis für Jgst. ",kopfueb1teil2:= " im Schuljahr ",kopfueb1teil3:=" (Art/Klausur: ",kopfueb2teil1:= "Schüler der jetzigen Jgst. ",kopfueb2teil2:=" und der ",kopfueb2teil3:= "Neuangemeldeten zur Jgst. ";TEXT VAR textueb1:="",textueb2:="";INT VAR status,dbstatusmerker,zaehler,x,y,z,anzangebote,anztabellen,anzspaltenschluss ,anfang,ende,zeilenzaehler,druckzeilenzahl;LET datenraum="datenraum";LET ZEILE =STRUCT (TEXT angebot,ROW maxkurseINT anzahl);BOUND ROW maxkurseZEILE VAR zeilespalte;ROW maxspaltenINT VAR summen;PROC kurskombinationmaskebearbeiten:standardvproc(maske);END PROC kurskombinationmaskebearbeiten;PROC kurskombinationggferstellen:lsundneue:= FALSE ;nurls:=FALSE ;nurneue:=FALSE ;standardmeldung(mnrbittewarten,niltext); standardpruefe(5,fnr9bs,fnr10dr,null,niltext,status);IF status<>0THEN infeld( status);return(1)ELSE fuerjgst:=standardmaskenfeld(fnr2fuerjgst);fuerhj:= standardmaskenfeld(fnr3fuerhj);jgstls:=standardmaskenfeld(fnr4jgstls);jgstneu :=standardmaskenfeld(fnr5jgstneu);IF NOT eingabenzujgstundhjkorrektTHEN standardmeldung(mnrallgemein,niltext);return(1);ELSE kursart:= standardmaskenfeld(fnr7bestart);klausur:=standardmaskenfeld(fnr8klausur); bestimmtekursart:=kursart<>niltext;kurswahlen:=standardmaskenfeld( fnr6kurswahl)<>niltext;bildschirmausgabe:=standardmaskenfeld(fnr10dr)=niltext ;IF NOT datenraumfürgewaehltessjdaTHEN standardmeldung(mnrkeinekwdatenda, niltext);return(1);ELSE IF angebotelvsoderfaecherimrowTHEN druckdateifuellenundausgebenELSE standardmeldung(mnrkeinedbdatenda,mnrzusatz+ mark);return(1)FI ;FI ;FI ;FI ;.eingabenzujgstundhjkorrekt:dbhj:= schulkenndatum("Schulhalbjahr");dbsj:=schulkenndatum("Schuljahr");INT VAR jgst;standardpruefe(2,fnr2fuerjgst,null,null,niltext,status);IF status<>0 THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(fuerjgst);IF jgst<11COR jgst>13THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;IF fuerhj<>"1"AND fuerhj<>"2"THEN mnrallgemein:=mnrhjfalsch;infeld(fnr3fuerhj);LEAVE eingabenzujgstundhjkorrekt WITH FALSE FI ;IF jgstls=niltextAND jgstneu=niltextTHEN mnrallgemein:= mnrjgstfehlt;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(jgstls);IF jgstls<>niltextTHEN standardpruefe(2,fnr4jgstls,null ,null,niltext,status);IF status<>0COR (jgst<10COR jgst>13)THEN mnrallgemein:= mnrjgstfalsch;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;jgst:=int(jgstneu);IF jgstneu<>niltextTHEN standardpruefe(2, fnr5jgstneu,null,null,niltext,status);IF status<>0COR (jgst<11COR jgst>13) THEN mnrallgemein:=mnrhjfalsch;infeld(fnr5jgstneu);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;IF jgstls<>niltextAND jgstneu<> niltextTHEN IF int(jgstls)+1=int(jgstneu)AND jgstneu<=fuerjgstTHEN lsundneue :=TRUE ELSE mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;ELIF jgstls=niltextTHEN IF jgstneu> fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELSE nurneue:=TRUE FI ;ELSE IF jgstls> fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELIF (jgstls="10"AND dbhj="1")COR ( jgstls=fuerjgstAND fuerhj0;angebotedaEND PROC angebotelvsoderfaecherimrow; PROC angebotlvmerken(BOOL VAR ende):IF status<>0COR wert(fnrlvjgst)<>dbjgst THEN ende:=TRUE ;ELSE lvart:=wert(fnrlvart);IF (NOT bestimmtekursart)COR lvart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text( wert(fnrlvfachkennung),6)+lvart;FI ;FI ;END PROC angebotlvmerken;PROC angebotfangmerken(BOOL VAR ende):IF status<>0COR wert(fnrfangjgst)<>dbjgst THEN ende:=TRUE ;ELSE fachart:=wert(fnrfangart);IF (NOT bestimmtekursart)COR fachart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text( wert(fnrfangfach),2)+fachart;FI ;FI ;END PROC angebotfangmerken;PROC druckdateifuellenundausgeben:zeilenzaehler:=0;standardmeldung( mnrlistewirdaufbereitet,niltext);wahldatenauskwdatenrauminrowablegen; anztabellen:=anzangeboteDIV maxspalten;anzspaltenschluss:=anzangeboteMOD maxspalten;ueberschriftenimdruckkopfbauen;variablenfuerdrucksetzen; druckvorbereiten;initdruckkopf(textueb1,textueb2);FOR zFROM 1UPTO anztabellen REP ende:=z*maxspalten;anfang:=ende-(maxspalten-1); tabellevonbisspalteausgeben(maxspalten);IF z0THEN IF anztabellen<>0THEN anfang:=ende+1; seitenwechselELSE anfang:=1FI ;ende:=anzangebote;tabellevonbisspalteausgeben( anzspaltenschluss);FI ;IF bildschirmausgabeTHEN kurskombinationzeigenELSE kurskombinationendrucken(FALSE )FI ;.variablenfuerdrucksetzen:druckzeilenzahl :=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge. ueberschriftenimdruckkopfbauen:textueb1:=kopfueb1teil1;textueb1CAT fuerjgst; textueb1CAT punkt;textueb1CAT fuerhj;textueb1CAT kopfueb1teil2;textueb1CAT subtext(fuerkwsj,1,2)+querstrich;textueb1CAT subtext(fuerkwsj,3,4);IF bestimmtekursartOR klausur<>niltextTHEN textueb1CAT kopfueb1teil3;textueb1 CAT kursart+querstrich;textueb1CAT klausur+blankklammer;FI ;IF NOT (fuerhj= dbhjAND fuerjgst=jgstls)THEN geplanteshjundsjberechnen(dbhj,dbsj);FI ;IF nurneueTHEN textueb2:=kopfueb2teil3;textueb2CAT jgstneu;ELSE textueb2:= kopfueb2teil1;textueb2CAT jgstls;IF lsundneueTHEN textueb2CAT kopfueb2teil2; textueb2CAT kopfueb2teil3;textueb2CAT jgstneu;FI ;FI ;END PROC druckdateifuellenundausgeben;PROC wahldatenauskwdatenrauminrowablegen:FOR x FROM 1UPTO anzangeboteREP y:=1;IF kurswahlenTHEN WHILE y<=xREP kombiationenlvsmerken(x,y);yINCR 1;PER ;ELSE WHILE y<=xREP kombinationenfaechermerken(x,y);yINCR 1;PER ;FI ;PER ;END PROC wahldatenauskwdatenrauminrowablegen;PROC kombiationenlvsmerken(INT CONST zeil ,spal):fachkennung1:=zeilespalte(zeil).angebot;fachkennung2:=zeilespalte(spal ).angebot;IF NOT bestimmtekursartTHEN kursart1:=subtext(fachkennung1,7,7); kursart2:=subtext(fachkennung2,7,7);ELSE kursart1:=kursart;kursart2:=kursart FI ;dbstatusmerker:=dbstatus;zeilespalte(zeil).anzahl(spal):= anzahlschuelermitwahl(subtext(fachkennung1,1,2),subtext(fachkennung1,3,6), kursart1,klausur,subtext(fachkennung2,1,2),subtext(fachkennung2,3,6),kursart2 ,klausur);dbstatus(dbstatusmerker);END PROC kombiationenlvsmerken;PROC kombinationenfaechermerken(INT CONST zeil,spal):fachart1:=zeilespalte(zeil). angebot;fachart2:=zeilespalte(spal).angebot;IF bestimmtekursartTHEN kursart1 :=kursart;kursart2:=kursart;ELSE kursart1:=subtext(fachart1,3,3);kursart2:= subtext(fachart2,3,3);FI ;kennung:=niltext;dbstatusmerker:=dbstatus; zeilespalte(zeil).anzahl(spal):=anzahlschuelermitwahl(subtext(fachart1,1,2), kennung,kursart1,klausur,subtext(fachart2,1,2),kennung,kursart2,klausur); dbstatus(dbstatusmerker);END PROC kombinationenfaechermerken;PROC tabellevonbisspalteausgeben(INT CONST spaltenzahl):INT VAR s,kombinationen; FOR sFROM 1UPTO maxspaltenREP summen(s):=0PER ;zeilenzaehler:=0;ueberschrift1 :=" :";ueberschrift2:=" :";FOR zaehlerFROM anfangUPTO endeREP ueberschrift1CAT text(zeilespalte(zaehler).angebot,2)+" :";IF NOT kurswahlen THEN ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,3)+" :";ELSE ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,6)+":";FI ;PER ; druckkopfschreiben;setzemitseitennummern(TRUE );druckzeileschreiben( ueberschrift1);druckzeileschreiben(ueberschrift2);druckzeileschreiben( ueberschrift3);zeilenzaehlerINCR 12;FOR zaehlerFROM 1UPTO anzangeboteREP s:=1 ;hilfsstring:=zeilespalte(zaehler).angebot;zeile:=text(hilfsstring,2)+blank; IF kurswahlenTHEN zeileCAT subtext(hilfsstring,3,6)+doppelpunkt;ELSE zeile CAT subtext(hilfsstring,3,3)+3*blank+doppelpunktFI ;FOR xFROM anfangUPTO ende REP IF x