diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
commit | 04e68443040c7abad84d66477e98f93bed701760 (patch) | |
tree | 2b6202afae659e773bf6916157d23e83edfa44e3 /app/schulis/2.2.1/src/4.stundenplan im dialog erstellen | |
download | eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2 eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip |
Initial import
Diffstat (limited to 'app/schulis/2.2.1/src/4.stundenplan im dialog erstellen')
-rw-r--r-- | app/schulis/2.2.1/src/4.stundenplan im dialog erstellen | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen new file mode 100644 index 0000000..634545c --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen @@ -0,0 +1,382 @@ +PACKET stundenplanimdialogerstellenundaendernDEFINES stupidstart, +stupidbearbeitendesstundenplans,stupidspeicherndieserzeitenfuerkopplung, +stupidspeichernderraeumeundzeitenderlv,stupidkopierenderraumangabe, +stupidnichtaendernweitermitkopplung, +stupidnichtaendernweitermitnaechsterkopplung,stupidstoerendelvlisten, +stupidraumbelegunglisten,stupidlistedrucken:LET maskeeingang= +"ms erf stuplan im dialog 0";LET maskebearb1="ms erf stuplan im dialog 1"; +LET maskebearb2="ms erf stuplan im dialog 2";LET fnrkopplungbs0=2, +fnrakthalbjahr=3,fnrmitzeitwuenschen=4,fnrkopplungbs1=2,fnrwstdmaxbs1=3, +felderbistabbeginn=2,fnrersteseingabefeldbs1=4,felderproeintragbs1=2, +fnrletztesfeldbs1=135,fnrlehrveranstaltbs2=2,fnrwstdbs2=3,fnrparaphebs2=4, +fnrklassengruppenbeginn=5,fnrraumwunsch=9,felderbistabbeginnbs2=10, +fnrersterraumbs2=12,fnrletztesfeldbs2=142,felderproeintragbs2=2;INT VAR +fnrersteseingabefeldbs2;INT VAR ifnr;LET meldnrbittewarten=69, +meldnrdatenwurdengespeichert=302,meldnrdatenwurdennichtgespeichert=303, +meldnrungueltigekopplung=325,meldnrkeinelv=326,meldnrkeinesugruppen=334, +meldnrzuvielesugruppen=356,meldnrdatenaufbereitet=357,meldnrzuvielelv=358, +meldnrungueltigerraum=359,meldnrzuordnungwegensperrungunmoegl=368, +meldnrzuvielezuordnungen=369,meldnrraumschonbelegt=370, +meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378, +meldnrkeinestoerendenlv=371;FILE VAR ausgabeliste;LET liste1= +"störende Lehrveranstaltungen",liste2="Raumbelegungen";TEXT VAR zeigdatei; +LET raumgruppendatei="Datei mit Raumgruppen";FILE VAR datraumgruppen;LET +wunschraumdatei="Datei mit Raumwünschen";FILE VAR datraumwunsch;LET +zwdateiname="Datei mit Zeitwünschen";FILE VAR zwdatei;LET laengelv=8, +laengefachkenn=6,laengekopplung=8,laengeparaphe=4,laengeraum=4,laengewstd=2, +laengesugruppe=6,laengeklagruppe=4,laengenfaktor=2;LET erstestd=1,letztestd= +66;LET kennzlehrergesperrt="L",kennzzeitgesperrt="X",kennzraumgesperrt="R", +kennzschuelergesperrt="S",kennzzeitrastersperrung="x",kennzlehrerwunsch="l", +kennzraumevtlgesperrt="r",kennzverplant="x",kennzkeinfreierwunschraum="x", +kennzraumungeprueft="-";LET kennungkopplung="K",kennungparaphe="P",kennunglv= +"L",kennungraum="R",kennungwunschraum="RW",kennungersatzraum="RE";LET +stundeverplant="1",stundefrei="0",stundefehlerhaft="$";LET textschulj= +"Schuljahr",texthalbj="Schulhalbjahr";LET raumkenndaten="c02 raeume";LET +posraeumeinrgzeile=5;LET raumplatzhalter=" ",lehrerplatzhalter=" ", +blankzeichen=" ",trennstrich="/",vorschlagzeichen="*",textueberschriftanhang= +" für Halbjahr ",textueberschriftbs2="Raumzuordnung in Kopplung ";LET zwbezug +="P";LET minusdrei="-3";INT VAR fstatusstuplan;INT VAR i;INT VAR +maxwochenstunden;TEXT VAR aktschulj:="",akthalbj:="",gewschulj,gewhalbj, +behandeltesschulj:="",behandelteshalbj:="";TEXT VAR kopplung,ankreuzung, +eintrag,lv,paraphe,raum,raumhinweis,raumzeile,raumgruppenzeile,zwdateizeile, +raumbelegliste,raumsetzliste,alleraeume:="",paraphenmitzeitwuenschen:="", +sugruppen;INT VAR anzahlraeume,posraum;INT VAR wstdderlv;TEXT VAR +kopplungszeiten,schuelerschnittzeiten,zeitrasterleiste:="", +halbjderzeitrasterleiste:="",zeitwunschleiste,halbjderzeitwuensche:="", +lvliste,paraphenliste;INT VAR ilv,anzahllv;TEXT VAR suchlv,suchraum, +suchparaphe;TEXT VAR ueberschrift,ueberschriftbs1:="";BOOL VAR +mitzeitwuenschen,meldungzufehlergezeigt;TEXT VAR wertfeld2:="",wertfeld3:="", +wertfeld4:="";PROC stupidstart:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrkopplungbs0); +standardfelderausgeben;infeld(fnrkopplungbs0);standardnprocEND PROC +stupidstart;PROC stupidbearbeitendesstundenplans: +schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN +stundenplanfehlerbehandeln;return(1)ELSE suchekopplung;IF +keinegueltigekopplungTHEN standardmeldung(meldnrungueltigekopplung,"");return +(1)ELSE wertedeseingangsbildschirmsmerken;standardstartproc(maskebearb1); +kopplungzeigen;standardnprocFI FI .schulhalbjahrbestimmenundstundenplanholen: +IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:= +schulkenndatum(textschulj);FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF +standardmaskenfeld(fnrakthalbjahr)=""THEN geplanteshjundsjberechnen(gewhalbj, +gewschulj)FI ;mitzeitwuenschen:=standardmaskenfeld(fnrmitzeitwuenschen)<>""; +IF mitzeitwuenschenTHEN IF paraphenmitzeitwuenschen=""COR gewhalbj<> +halbjderzeitwuenscheTHEN halbjderzeitwuensche:=gewhalbj;standardmeldung( +meldnrbittewarten,"");dateimitzeitwuenschenzusammenstellenFI FI ;IF NOT ( +gewhalbj=behandelteshalbjAND gewschulj=behandeltesschulj)THEN +behandelteshalbj:=gewhalbj;behandeltesschulj:=gewschulj; +stundenplanhalbjahrsetzen(gewhalbj,gewschulj);standardmeldung( +meldnrdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstatusstuplan +);IF fstatusstuplan=0THEN stundenplanreorganisierenundsichern(fstatusstuplan) +ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,""); +stundenplanreorganisierenundsichern(fstatusstuplan)ELSE +stundenplanbasisundstundenplanerstellen(fstatusstuplan);IF fstatusstuplan=0 +THEN stundenplanbasissichern(fstatusstuplan);stundenplansichern( +fstatusstuplan)FI FI FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN +standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN +standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN +standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN +standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung( +meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt, +"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI . +suchekopplung:kopplung:=standardmaskenfeld(fnrkopplungbs0);putwert(fnrlvsj, +gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvkopplung,kopplung);search( +ixlvsjhjkopp,FALSE ).END PROC stupidbearbeitendesstundenplans;BOOL PROC +keinegueltigekopplung:dbstatus<>0OR wert(fnrlvhj)<>gewhalbjOR wert(fnrlvsj)<> +gewschuljEND PROC keinegueltigekopplung;PROC +dateimitzeitwuenschenzusammenstellen:forget(zwdateiname,quiet);zwdatei:= +sequentialfile(output,zwdateiname);paraphenmitzeitwuenschen:="";inittupel( +dnrzeitwuensche);putwert(fnrzwbezug,zwbezug);statleseschleife(dnrzeitwuensche +,gewschulj,gewhalbj,fnrzwsj,fnrzwhj,PROC zeitwunschlesen)END PROC +dateimitzeitwuenschenzusammenstellen;PROC zeitwunschlesen(BOOL VAR b):IF +dbstatus<>0OR wert(fnrzwsj)<>gewschuljOR wert(fnrzwhj)<>gewhalbjOR wert( +fnrzwbezug)>zwbezugTHEN b:=TRUE ELSE paraphenmitzeitwuenschenCAT text(wert( +fnrzwbezugsobjekt),laengeparaphe);zwdateizeile:=wert(fnrzwbestimmtewuensche); +putline(zwdatei,zwdateizeile)FI END PROC zeitwunschlesen;PROC kopplungzeigen: +ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift); +standardmeldung(meldnrbittewarten,"");datenbestimmenundausgeben;infeld( +fnrersteseingabefeldbs1).ueberschriftzeilezusammensetzen:IF ueberschriftbs1= +""THEN ueberschriftbs1:=text(vergleichsknoten)FI ;ueberschrift:= +ueberschriftbs1;ueberschriftCAT textueberschriftanhang;ueberschriftCAT +gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext(gewschulj,1,2); +ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj,3,4). +datenbestimmenundausgeben:kopplung:=wert(fnrlvkopplung); +maxwochenstundenbestimmen;zeitrasterleistefestlegen;kopplungszeitenfestlegen; +lvlisteholen;paraphenlisteundwunschraumlisteholen;schuelerschnittzeitenholen; +zeitwunschleistefestlegen;standardmaskenfeld(kopplung,fnrkopplungbs1); +standardmaskenfeld(text(maxwochenstunden),fnrwstdmaxbs1); +meldungzufehlergezeigt:=FALSE ;FOR iFROM erstestdUPTO letztestdREP +fuelleeintrag;standardmaskenfeld(ankreuzung,i*felderproeintragbs1+ +felderbistabbeginn);standardmaskenfeld(text(eintrag,3),i*felderproeintragbs1+ +felderbistabbeginn+1);PER ;IF meldungzufehlergezeigtTHEN infeld(2)ELSE infeld +(1)FI ;standardfelderausgeben.maxwochenstundenbestimmen:maxwochenstunden:=0; +putwert(fnrlvkopplung,kopplung);putintwert(fnrlvjgst,0);statleseschleife( +ixlvsjhjkopp,gewschulj,gewhalbj,fnrlvsj,fnrlvhj,PROC maxwochenstdberechnen). +fuelleeintrag:IF (kopplungszeitenSUB i)=stundeverplantTHEN ankreuzung:= +kennzverplantELSE ankreuzung:=""FI ;eintrag:="";IF (zeitrasterleisteSUB i)= +kennzzeitrastersperrungTHEN eintragCAT kennzzeitgesperrtELSE +weiterepruefungenzueintragFI .weiterepruefungenzueintrag:IF +istlehrerzurzeitverplantTHEN eintragCAT kennzlehrergesperrtELSE IF +mitzeitwuenschenCAND (zeitwunschleisteSUB i)=stundeverplantTHEN eintragCAT +kennzlehrerwunschFI FI ;IF (schuelerschnittzeitenSUB i)=stundeverplantTHEN +eintragCAT kennzschuelergesperrtELIF (schuelerschnittzeitenSUB i)= +stundefehlerhaftCAND NOT meldungzufehlergezeigtTHEN standardmeldung( +meldnrbasisinkons,"");meldungzufehlergezeigt:=TRUE FI ;IF eintrag= +kennzlehrergesperrt+kennzschuelergesperrtTHEN eintragCAT kennzraumungeprueft +ELSE raumhinweis:="";prueferaumbelegung;eintragCAT raumhinweisFI . +kopplungszeitenfestlegen:kopplungszeiten:=allezeitenvon(kennungkopplung, +kopplung).lvlisteholen:lvliste:=allelvmit(kennungkopplung,kopplung);anzahllv +:=length(lvliste)DIV laengelv.schuelerschnittzeitenholen: +schuelerschnittzeiten:=schuelergruppenschnittallezeiten(kennungkopplung, +kopplung).paraphenlisteundwunschraumlisteholen:paraphenliste:=""; +raumgruppeninraumgruppendateiauslesen;forget(wunschraumdatei,quiet); +datraumwunsch:=sequentialfile(output,wunschraumdatei);INT VAR lvpos:=1,iraum; +FOR ilvFROM 1UPTO anzahllvREP lv:=subtext(lvliste,lvpos,lvpos+laengelv-1); +paraphenlisteCAT datenzurlv(kennungparaphe,lv);raumzeile:="";raum:=datenzurlv +(kennungwunschraum,lv);IF bezeichnungzulaessig(kennungraum,compress(raum)) +THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;raum:= +datenzurlv(kennungersatzraum,lv);IF bezeichnungzulaessig(kennungraum,compress +(raum))THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;putline +(datraumwunsch,raumzeile);lvpos:=lvpos+laengelvPER . +raumgruppeninraumgruppendateiauslesen:IF NOT exists(raumgruppendatei)THEN +datraumgruppen:=sequentialfile(output,raumgruppendatei);inittupel( +dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp, +fnrrgraeume,PROC raumgruppeindateischreiben)FI .raeumederraumgruppe: +datraumgruppen:=sequentialfile(modify,raumgruppendatei);toline(datraumgruppen +,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen)REP downety( +datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof(datraumgruppen) +THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE raeumederraumgruppe +WITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(datraumgruppen,col( +datraumgruppen)+1)FI ;PER ;"".prueferaumbelegung:BOOL VAR vorlaeufiggesetzt; +raumbelegliste:=datenderzeit(i,kennungraum);IF raumbelegliste<>""THEN +raumsetzliste:="";datraumwunsch:=sequentialfile(input,wunschraumdatei);ilv:=0 +;WHILE NOT eof(datraumwunsch)REP getline(datraumwunsch,raumzeile);ilv:=ilv+1; +IF raumzeile<>""THEN anzahlraeume:=length(raumzeile)DIV laengeraum; +vorlaeufiggesetzt:=FALSE ;posraum:=1;FOR iraumFROM 1UPTO anzahlraeumeREP raum +:=subtext(raumzeile,posraum,posraum+laengeraum-1);prueferaum;posraum:=posraum ++laengeraumUNTIL vorlaeufiggesetztPER ;IF NOT vorlaeufiggesetztTHEN +raumhinweis:=kennzraumevtlgesperrtFI ;FI ;PER ;FI .prueferaum:IF suchpos( +raumbelegliste,raum,laengeraum)>0THEN lv:=subtext(lvliste,(ilv-1)*laengelv+1, +ilv*laengelv);planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe +);IF suchlv<>lvTHEN IF iraum=anzahlraeumeTHEN raumhinweis:=kennzraumgesperrt; +LEAVE prueferaumbelegungFI ELSE vorlaeufiggesetzt:=TRUE FI ELSE IF suchpos( +raumsetzliste,raum,laengeraum)=0THEN raumsetzliste:=raum;vorlaeufiggesetzt:= +TRUE FI FI .zeitwunschleistefestlegen:IF mitzeitwuenschenTHEN zwdatei:= +sequentialfile(modify,zwdateiname);zeitwunschleiste:=letztestd*stundefrei; +INT VAR fundpos,posparaphe:=1;WHILE posparaphe<length(paraphenliste)REP +suchparaphe:=subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1); +fundpos:=suchpos(paraphenmitzeitwuenschen,suchparaphe,laengeparaphe);IF +fundpos>0THEN zeitwuenschezerlegenFI ;posparapheINCR laengeparaphe;PER ;FI . +zeitwuenschezerlegen:INT VAR izeile:=(fundpos+3)DIV laengeparaphe;toline( +zwdatei,izeile);readrecord(zwdatei,zwdateizeile);fundpos:=pos(zwdateizeile, +minusdrei,1);WHILE fundpos>0REP fundposINCR 1;replace(zeitwunschleiste, +fundposDIV 2,stundeverplant);fundpos:=pos(zwdateizeile,minusdrei,fundpos)PER +.END PROC kopplungzeigen;PROC raumgruppeindateischreiben(BOOL VAR b):IF +dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+ +wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC +maxwochenstdberechnen(BOOL VAR b):IF dbstatus=0CAND wert(fnrlvkopplung)= +kopplungCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbjTHEN +maxwochenstunden:=max(intwert(fnrlvwochenstd),maxwochenstunden)ELSE b:=TRUE +FI END PROC maxwochenstdberechnen;PROC zeitrasterleistefestlegen:IF gewhalbj +<>halbjderzeitrasterleisteOR zeitrasterleiste=""THEN zeitrasterleiste:= +letztestd*blankzeichen;inittupel(dnrzeitraster);statleseschleife( +dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,PROC +erstellezeitrasterleiste);halbjderzeitrasterleiste:=gewhalbj;FI END PROC +zeitrasterleistefestlegen;PROC erstellezeitrasterleiste(BOOL VAR b):IF wert( +fnrzrsj)<>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE +ELSE IF wert(fnrzrkennungteil)=kennzzeitrastersperrungTHEN replace( +zeitrasterleiste,intwert(fnrzrtagstunde),kennzzeitrastersperrung)FI FI END +PROC erstellezeitrasterleiste;BOOL PROC istlehrerzurzeitverplant:TEXT VAR +kopplungenderzeit:="";TEXT VAR lehrerderzeit:=datenderzeit(i,kennungparaphe); +IF lehrerderzeit=""COR paraphenliste=lehrerplatzhalterTHEN LEAVE +istlehrerzurzeitverplantWITH FALSE FI ;INT VAR posparaphe:=1;INT VAR +poslehrer,poskopplung;WHILE posparaphe<=length(paraphenliste)REP paraphe:= +subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);IF paraphe<> +lehrerplatzhalterTHEN poslehrer:=suchpos(lehrerderzeit,paraphe,laengeparaphe) +;IF poslehrer>0THEN IF kopplungenderzeit=""THEN kopplungenderzeit:= +datenderzeit(i,kennungkopplung)FI ;poskopplung:=(poslehrer-1)*laengenfaktor+1 +;IF subtext(kopplungenderzeit,poskopplung,poskopplung+laengekopplung-1)<>text +(kopplung,laengekopplung)THEN LEAVE istlehrerzurzeitverplantWITH TRUE FI FI ; +FI ;posparaphe:=posparaphe+laengeparaphePER ;FALSE END PROC +istlehrerzurzeitverplant;PROC stupidstoerendelvlisten:TEXT VAR prueflv, +pruefkopplung,pruefparaphe,lvderzeit,kopplungenderzeit,paraphenderzeit, +vglkopplung,auszeile;INT VAR feldnr:=infeld;IF +sperrungderzeitdurchlehreroderschuelerTHEN erstelledateimitstoerendenlv; +zeigedatei(zeigdatei,"");ELSE standardmeldung(meldnrkeinestoerendenlv,""); +return(1)FI .sperrungderzeitdurchlehreroderschueler:pos(standardmaskenfeld( +feldnr+1),kennzlehrergesperrt)>0OR pos(standardmaskenfeld(feldnr+1), +kennzschuelergesperrt)>0.erstelledateimitstoerendenlv:i:=(feldnr- +felderbistabbeginn)DIV felderproeintragbs1;zeigdatei:=liste1;forget(zeigdatei +,quiet);ausgabeliste:=sequentialfile(output,zeigdatei);auszeile:="Kopplung "; +auszeileCAT kopplung;auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE ); +auszeileCAT ".Stunde verhindert durch:";putline(ausgabeliste,auszeile);line( +ausgabeliste);auszeile:="Lehrveranst. (Kopplung) Lehrer Klassengruppen"; +putline(ausgabeliste,auszeile);lvderzeit:=datenderzeit(i,kennunglv); +kopplungenderzeit:=datenderzeit(i,kennungkopplung);paraphenderzeit:= +datenderzeit(i,kennungparaphe);INT VAR poslv:=1,poskopplung:=1,posparaphe:=1; +vglkopplung:=text(kopplung,laengekopplung);WHILE poslv<=length(lvderzeit)REP +pruefkopplung:=subtext(kopplungenderzeit,poskopplung,poskopplung+ +laengekopplung-1);IF pruefkopplung<>vglkopplungTHEN pruefparaphe:=subtext( +paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);prueflv:=subtext( +lvderzeit,poslv,poslv+laengelv-1);IF suchpos(paraphenliste,pruefparaphe, +laengeparaphe)>0CAND pruefparaphe<>lehrerplatzhalterTHEN vermerkelvELIF +gemeinsameschuelergruppen(kennungkopplung,kopplung,kennunglv,prueflv)THEN +vermerkelvFI ;FI ;poskopplung:=poskopplung+laengekopplung;poslv:=poslv+ +laengelv;posparaphe:=posparaphe+laengeparaphe;PER .vermerkelv:auszeile:= +subtext(prueflv,1,2);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,3,4 +);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,5);auszeileCAT " "; +auszeileCAT pruefkopplung;auszeileCAT " ";auszeileCAT pruefparaphe;auszeile +CAT " ";sugruppen:=beteiligteschuelergruppen(kennunglv,prueflv);INT VAR +possu:=1;WHILE possu<=length(sugruppen)REP auszeileCAT subtext(sugruppen, +possu,possu+laengesugruppe-1);auszeileCAT blankzeichen;possu:=possu+ +laengesugruppePER ;putline(ausgabeliste,auszeile).END PROC +stupidstoerendelvlisten;PROC stupidraumbelegunglisten:TEXT VAR auszeile;INT +VAR feldnr:=infeld;erstelledateimitraumbelegung;zeigedatei(zeigdatei,""). +erstelledateimitraumbelegung:i:=(feldnr-felderbistabbeginnbs2)DIV +felderproeintragbs2;zeigdatei:=liste2;forget(zeigdatei,quiet);ausgabeliste:= +sequentialfile(output,zeigdatei);auszeile:= +"Raumbelegung für Lehrveranstaltung ";auszeileCAT subtext(lv,1,2);auszeile +CAT blankzeichen;auszeileCAT subtext(lv,3,4);auszeileCAT blankzeichen; +auszeileCAT subtext(lv,5);auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE ); +auszeileCAT ".Stunde:";putline(ausgabeliste,auszeile);line(ausgabeliste); +putline(ausgabeliste,"freie Räume:");line(ausgabeliste);IF alleraeume=""THEN +alleraeumeholenFI ;posraum:=1;WHILE posraum<=length(alleraeume)REP raum:= +subtext(alleraeume,posraum,posraum+laengeraum-1);planeintraglesen(i, +kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum=""THEN putline( +ausgabeliste,raum)FI ;posraum:=posraum+laengeraumPER ;line(ausgabeliste);line +(ausgabeliste);putline(ausgabeliste,"Belegung der Wunsch- und Ersatzräume:"); +datraumwunsch:=sequentialfile(modify,wunschraumdatei);toline(datraumwunsch, +ilv);readrecord(datraumwunsch,raumzeile);posraum:=1;WHILE posraum<=length( +raumzeile)REP raum:=subtext(raumzeile,posraum,posraum+laengeraum-1); +planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum +<>""THEN auszeile:=raum;auszeileCAT " : ";auszeileCAT subtext(suchlv,1,2); +auszeileCAT blankzeichen;auszeileCAT subtext(suchlv,3,4);auszeileCAT +blankzeichen;auszeileCAT subtext(suchlv,5);putline(ausgabeliste,auszeile);FI +;posraum:=posraum+laengeraumPER .alleraeumeholen:inittupel(dnrschluessel); +statleseschleife(dnrschluessel,raumkenndaten,"",fnrschlsachgebiet, +fnrschlschluessel,PROC raeumeholen).END PROC stupidraumbelegunglisten;PROC +raeumeholen(BOOL VAR b):IF wert(fnrschlsachgebiet)>raumkenndatenCOR dbstatus +<>0THEN b:=TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum) +FI END PROC raeumeholen;PROC stupidspeicherndieserzeitenfuerkopplung:BOOL +VAR plausifehler:=FALSE ;INT VAR anzahlankreuzungen:=0;ifnr:= +fnrersteseingabefeldbs1;REP IF standardmaskenfeld(ifnr)<>""THEN IF zeitbelegt +OR lehrerbelegtOR schuelerbelegtTHEN plausifehler:=TRUE ;standardmeldung( +meldnrzuordnungwegensperrungunmoegl,"");infeld(ifnr)FI ;anzahlankreuzungen +INCR 1FI ;ifnrINCR felderproeintragbs1UNTIL (ifnr>fnrletztesfeldbs1)OR +plausifehlerPER ;IF plausifehlerTHEN return(1)ELIF anzahlankreuzungen> +maxwochenstundenTHEN standardmeldung(meldnrzuvielezuordnungen,"");return(1) +ELSE speichernderkopplung;standardmeldung(meldnrdatenwurdengespeichert,""); +stundenplansichern(fstatusstuplan);IF anzahlankreuzungen=0THEN +stupidnichtaendernweitermitnaechsterkopplungELSE standardstartproc( +maskebearb2);erstelvzurkopplungnocheinmallesen;ilv:=1;lvzeigen;standardnproc +FI FI .zeitbelegt:pos(standardmaskenfeld(ifnr+1),kennzzeitgesperrt)>0. +lehrerbelegt:pos(standardmaskenfeld(ifnr+1),kennzlehrergesperrt)>0. +schuelerbelegt:pos(standardmaskenfeld(ifnr+1),kennzschuelergesperrt)>0. +erstelvzurkopplungnocheinmallesen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj, +gewhalbj);putwert(fnrlvkopplung,kopplung);search(ixlvsjhjkopp,FALSE ). +speichernderkopplung:INT VAR poslv;ifnr:=fnrersteseingabefeldbs1;FOR iFROM +erstestdUPTO letztestdREP ankreuzung:=standardmaskenfeld(ifnr);IF ( +kopplungszeitenSUB i)=stundeverplantTHEN IF ankreuzung=""THEN +kopplungentfernenELSE kopplungueberschreibenFI ELSE IF ankreuzung<>""THEN +kopplungschreibenFI ;FI ;ifnr:=ifnr+felderproeintragbs1PER .kopplungschreiben +:BOOL VAR ok;poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste, +poslv,poslv+laengelv-1);planeintragvornehmen(i,lv,raumplatzhalter,ok);poslv:= +poslv+laengelvPER ;replace(kopplungszeiten,i,stundeverplant). +kopplungentfernen:poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext( +lvliste,poslv,poslv+laengelv-1);planeintragloeschen(i,lv,ok);poslv:=poslv+ +laengelvPER ;replace(kopplungszeiten,i,stundefrei).kopplungueberschreiben: +poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,poslv,poslv+ +laengelv-1);planeintraglesen(i,kennunglv,lv,suchlv,suchraum,suchparaphe); +suchraum:=compress(suchraum);IF suchraum=""THEN suchraum:=raumplatzhalterFI ; +planeintragvornehmen(i,lv,suchraum,ok);poslv:=poslv+laengelvPER .END PROC +stupidspeicherndieserzeitenfuerkopplung;PROC lvzeigen: +ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift); +datenbestimmenundausgeben.ueberschriftzeilezusammensetzen:ueberschrift:= +textueberschriftbs2;ueberschriftCAT kopplung;ueberschriftCAT +textueberschriftanhang;ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen; +ueberschriftCAT subtext(gewschulj,1,2);ueberschriftCAT trennstrich; +ueberschriftCAT subtext(gewschulj,3,4).datenbestimmenundausgeben: +werteauslvsatzholen;ifnr:=felderbistabbeginnbs2;fnrersteseingabefeldbs2:=0; +FOR iFROM erstestdUPTO letztestdREP IF (kopplungszeitenSUB i)=stundeverplant +THEN planeintraglesen(i,kennunglv,text(lv,laengelv),suchlv,suchraum, +suchparaphe);IF compress(suchraum)<>""THEN standardmaskenfeld(blankzeichen, +ifnr+1);standardmaskenfeld(compress(suchraum),ifnr+2)ELSE standardmaskenfeld( +vorschlagzeichen,ifnr+1);standardmaskenfeld(compress(wunschraumvorschlag), +ifnr+2)FI ;IF fnrersteseingabefeldbs2=0THEN fnrersteseingabefeldbs2:=ifnr+2 +FI ELSE standardmaskenfeld(blankzeichen,ifnr+1);standardmaskenfeld( +raumplatzhalter,ifnr+2);feldschutz(ifnr+2)FI ;ifnr:=ifnr+felderproeintragbs2 +PER ;infeld(1);standardfelderausgeben;infeld(fnrersteseingabefeldbs2). +werteauslvsatzholen:lv:=jgstzweistellig(intwert(fnrlvjgst))+text(wert( +fnrlvfachkennung),laengefachkenn);wstdderlv:=intwert(fnrlvwochenstd);paraphe +:=wert(fnrlvparaphe);standardmaskenfeld(text(lv,laengelv), +fnrlehrveranstaltbs2);standardmaskenfeld(text(wstdderlv,laengewstd), +fnrwstdbs2);standardmaskenfeld(text(paraphe,laengeparaphe),fnrparaphebs2); +standardmaskenfeld(text(wert(fnrlvklgrp1),laengeklagruppe), +fnrklassengruppenbeginn);standardmaskenfeld(text(wert(fnrlvklgrp2), +laengeklagruppe),fnrklassengruppenbeginn+1);standardmaskenfeld(text(wert( +fnrlvklgrp3),laengeklagruppe),fnrklassengruppenbeginn+2);standardmaskenfeld( +text(wert(fnrlvklgrp4),laengeklagruppe),fnrklassengruppenbeginn+3); +standardmaskenfeld(text(wert(fnrlvraumgrp1),laengeraum),fnrraumwunsch); +standardmaskenfeld(text(wert(fnrlvraumgrp2),laengeraum),fnrraumwunsch+1). +wunschraumvorschlag:datraumwunsch:=sequentialfile(modify,wunschraumdatei); +toline(datraumwunsch,ilv);readrecord(datraumwunsch,raumzeile);raumbelegliste +:=datenderzeit(i,kennungraum);posraum:=1;WHILE posraum<=length(raumzeile)REP +raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);IF suchpos( +raumbelegliste,raum,laengeraum)=0THEN LEAVE wunschraumvorschlagWITH raumFI ; +posraum:=posraum+laengeraumPER ;kennzkeinfreierwunschraum.END PROC lvzeigen; +PROC stupidspeichernderraeumeundzeitenderlv(BOOL CONST speichern):BOOL VAR +plausifehler,ok;IF speichernTHEN plausifehler:=FALSE ; +plausipruefungfuerraeumezulv;IF plausifehlerTHEN return(1)ELSE +raeumezulvspeichern;standardmeldung(meldnrdatenwurdengespeichert,""); +stundenplansichern(fstatusstuplan);naechstelvzurbearbeitungFI ELSE +standardmeldung(meldnrdatenwurdennichtgespeichert,""); +naechstelvzurbearbeitungFI .plausipruefungfuerraeumezulv:INT VAR +anzahlankreuzungen:=0;ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO letztestd +REP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress( +standardmaskenfeld(ifnr));IF raum<>""THEN anzahlankreuzungen:= +anzahlankreuzungen+1;IF raum<>kennzkeinfreierwunschraumTHEN IF NOT +bezeichnungzulaessig(kennungraum,raum)THEN standardmeldung( +meldnrungueltigerraum,"");infeld(ifnr);plausifehler:=TRUE ELIF +raumdurchanderelvbelegtTHEN standardmeldung(meldnrraumschonbelegt,"");infeld( +ifnr);plausifehler:=TRUE FI FI FI FI ;ifnr:=ifnr+felderproeintragbs2UNTIL +plausifehlerPER ;IF NOT plausifehlerTHEN IF anzahlankreuzungen>wstdderlvTHEN +standardmeldung(meldnrzuvielezuordnungen,"");infeld(fnrersteseingabefeldbs2); +plausifehler:=TRUE FI FI .raumdurchanderelvbelegt:planeintraglesen(i, +kennungraum,raum,suchlv,suchraum,suchparaphe);compress(suchraum)<>""AND +suchlv<>lv.raeumezulvspeichern:ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO +letztestdREP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress( +standardmaskenfeld(ifnr));IF raum=""THEN planeintragloeschen(i,lv,ok);ELSE +IF raum=kennzkeinfreierwunschraumTHEN raum:=raumplatzhalterFI ; +planeintragvornehmen(i,lv,raum,ok);FI FI ;ifnr:=ifnr+felderproeintragbs2PER . +naechstelvzurbearbeitung:succ(ixlvsjhjkopp);IF dbstatus=0THEN IF +weiterelvzukopplungvorhandenTHEN ilv:=ilv+1;lvzeigen;return(1)ELSE +standardstartproc(maskebearb1);kopplungzeigen;return(2)FI ELSE enter(3)FI . +weiterelvzukopplungvorhanden:wert(fnrlvkopplung)=kopplungAND wert(fnrlvhj)= +gewhalbjAND wert(fnrlvsj)=gewschulj.END PROC +stupidspeichernderraeumeundzeitenderlv;PROC stupidkopierenderraumangabe:INT +VAR feldnr:=infeld;ifnr:=feldnr;WHILE ifnr<fnrletztesfeldbs2REP ifnrINCR +felderproeintragbs2;IF standardmaskenfeld(ifnr)<>raumplatzhalterTHEN +standardmaskenfeld(standardmaskenfeld(feldnr),ifnr)FI PER ;return(1)END PROC +stupidkopierenderraumangabe;PROC stupidnichtaendernweitermitkopplung:putwert( +fnrlvkopplung,kopplung+blankzeichen);search(ixlvsjhjkopp,FALSE );IF +keinegueltigekopplungTHEN enter(3)ELSE standardstartproc(maskebearb1); +kopplungzeigen;return(2)FI END PROC stupidnichtaendernweitermitkopplung;PROC +stupidnichtaendernweitermitnaechsterkopplung:putwert(fnrlvkopplung,kopplung+ +blankzeichen);search(ixlvsjhjkopp,FALSE );IF keinegueltigekopplungTHEN enter( +2)ELSE kopplungzeigen;return(1)FI END PROC +stupidnichtaendernweitermitnaechsterkopplung;PROC stupidlistedrucken(BOOL +CONST drucken):IF druckenTHEN print(zeigdatei)FI ;forget(zeigdatei,quiet); +return(2)END PROC stupidlistedrucken;INT PROC suchpos(TEXT CONST quelle, +suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE +findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos +:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC +jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND +intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig +;PROC wertedeseingangsbildschirmsmerken:wertfeld2:=standardmaskenfeld( +fnrkopplungbs0);wertfeld3:=standardmaskenfeld(fnrakthalbjahr);wertfeld4:= +standardmaskenfeld(fnrmitzeitwuenschen)END PROC +wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen: +standardmaskenfeld(wertfeld2,fnrkopplungbs0);standardmaskenfeld(wertfeld3, +fnrakthalbjahr);standardmaskenfeld(wertfeld4,fnrmitzeitwuenschen)END PROC +wertedeseingangsbildschirmsholen;END PACKET +stundenplanimdialogerstellenundaendern + |