summaryrefslogtreecommitdiff
path: root/app/gs.warenhaus/1.01/src/ls-Warenhaus 2
blob: 7048affb7c1f9c8ef1c5da86131b36471b524c98 (plain)
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
(* 
        
         ********************************************************** 
         ********************************************************** 
         **                                                      ** 
         **                    ls-Warenhaus 2                    ** 
         **                                                      ** 
         **                     Version 1.01                     ** 
         **                                                      ** 
         **                                                      ** 
         **                  (Stand:  30.08.89)                  ** 
         **                                                      ** 
         **                                                      ** 
         **                                                      ** 
         **           Autor: Bruno Pollok, Bielefeld             ** 
         **                                                      ** 
         **    Copyright (C) 1988  Eva Latta-Weber, Bielefeld    ** 
         **    Copyright (C) 1990  ERGOS GmbH, Siegburg          ** 
         **                                                      ** 
         ********************************************************** 
         ********************************************************** 
 
                                                                           *) 
PACKET ls warenhaus 2 DEFINES                        
       max artikelzahl,{}       max kundenzahl,{}       min kundennummer,{}       max kundennummer,{}       min artikelnummer,{}       max artikelnummer,{}       filialverwaltung,{}       initialisiere verwaltung,{}       hole artikeldaten,{}       speichere artikeldaten,{}       registriere verkauf,{}       hole kundendaten,{}       speichere kundendaten,{}       sichere filialdaten,{}       lade filialdaten,{}       hole bestelliste,{}       hole auskunft ein:{}LET  max filialen  =  10,{}     max artikel   =  15,{}
     max kunden    =  31,{}     min kundennr  = 129,{}     max kundennr  = 159,{}     min artikelnr =   1,{}     max artikelnr =  15;{}LET  zentrale kundendatei holen code     = 100,{}     zentrale kundendatei ergaenzen code = 200,{}     filialdaten holen code              = 201,{}     filialdaten ergaenzen code          = 202;{}INT CONST max artikelzahl   :: max artikel,{}          max kundenzahl    :: max kunden,{}          min kundennummer  :: min kundennr,{}          max kundennummer  :: max kundennr,{}
          min artikelnummer :: min artikelnr,{}          max artikelnummer :: max artikelnr;{}TYPE ARTIKELDATEN  = STRUCT (TEXT artikelname, REAL preis,{}                             INT  mindestbestand, bestand),{}     KUNDENDATEN   = STRUCT (TEXT nachname, vorname, geschlecht),{}     WARENDATEI    = ROW max artikel ARTIKELDATEN,{}     KUNDENDATEI   = ROW max kunden  KUNDENDATEN,{}     EINKAUFSDATEI = ROW max kunden  ROW max artikel INT,{}     VERKAUFSDATEI = ROW max artikel INT,{}     FILIALDATEN   = STRUCT (WARENDATEI waren, KUNDENDATEI kunden,{}
                             EINKAUFSDATEI einkaeufe,{}                             VERKAUFSDATEI hitliste);{}KUNDENDATEI   VAR kunde;{}WARENDATEI    VAR artikel;{}EINKAUFSDATEI VAR einkaufsdatei;{}VERKAUFSDATEI VAR verkaufszahl;{}DATASPACE     VAR ds;{}INT           VAR codenummer, reply code;{}TASK          VAR zentrale, verwaltung, absender;{}TEXT          VAR hauptstelle  :: "",{}                  filialnummer :: "0",{}                  filialverwaltungsname :: "";{}PROC filialverwaltung:{}  enable stop;{}
  IF pos (name (myself), ".Filialverwaltung") = 0{}     THEN errorstop ("Unzulaessiger Befehl!"){}  FI;{}  disable stop;{}  REP wait (ds, codenummer, absender);{}      bearbeite auftrag;{}      send (absender, 0, ds);{}      IF is error THEN clear error FI{}  PER.{}  bearbeite auftrag:{}    IF   codenummer <= max artikel{}         THEN artikeldaten speichern{}    ELIF codenummer <= max kundennr{}         THEN kauf registrieren{}    ELIF codenummer <= max kundennr + max kunden{}         THEN kundendaten speichern{}
    ELIF codenummer = filialdaten holen code{}         THEN filialdaten holen{}    ELIF codenummer = filialdaten ergaenzen code{}         THEN filialdaten ergaenzen; init ds{}    ELIF codenummer = 256{}         THEN sperre task{}    FI.{}    sperre task:{}      call (absender, 256, ds, codenummer).{}END PROC filialverwaltung;{}PROC artikeldaten speichern:{}  BOUND ARTIKELDATEN VAR artikeldaten :: ds;{}  artikel [codenummer] := artikeldaten;{}  init ds{}END PROC artikeldaten speichern;{}PROC kauf registrieren:{}
  artikelnummer aus ds lesen;{}  artikel [artikelnummer].bestand DECR 1;{}  verkaufszahl [artikelnummer] INCR 1;{}  IF kundennummer > 0{}     THEN einkaufsdatei [kundennummer][artikelnummer] INCR 1{}  FI.{}  artikelnummer aus ds lesen:{}    BOUND INT VAR nummer    :: ds;{}    INT CONST artikelnummer :: nummer,{}              kundennummer  :: codenummer - min kundennr + 1;{}    init ds{}END PROC kauf registrieren;{}PROC kundendaten speichern:{}  BOUND KUNDENDATEN VAR kundendaten :: ds;{}  kunde [codenummer - min kundennr - max kunden + 1] := kundendaten{}
END PROC kundendaten speichern;{}PROC filialdaten holen:{}  init ds;{}  BOUND FILIALDATEN VAR filialdaten :: ds;{}  CONCR (filialdaten.waren)     := CONCR (artikel);{}  CONCR (filialdaten.kunden)    := CONCR (kunde);{}  CONCR (filialdaten.einkaeufe) := CONCR (einkaufsdatei);{}  CONCR (filialdaten.hitliste)  := CONCR (verkaufszahl){}END PROC filialdaten holen;{}PROC filialdaten ergaenzen:{}  BOUND FILIALDATEN VAR neue daten :: ds;{}  INT VAR kundennummer, artikelnummer;{}  ergaenze artikeldatei und verkaufszahlen;{}
  ergaenze kundendatei;{}  ergaenze einkaufsdatei.{}  ergaenze artikeldatei und verkaufszahlen:{}    FOR artikelnummer FROM 1 UPTO max artikel REP{}      verkaufszahl [artikelnummer] INCR neue daten.hitliste [artikelnummer];{}      IF artikel [artikelnummer].artikelname = ""{}         THEN artikel [artikelnummer] := neue daten.waren [artikelnummer]{}      FI{}    PER.{}  ergaenze kundendatei:{}    FOR kundennummer FROM 1 UPTO max kunden REP{}        IF kunde [kundennummer].nachname = ""{}           THEN kunde [kundennummer] := neue daten.kunden [kundennummer]{}
        FI{}    PER.{}  ergaenze einkaufsdatei:{}    FOR kundennummer FROM 1 UPTO max kunden REP{}      FOR artikelnummer FROM 1 UPTO max artikel REP{}        einkaufsdatei [kundennummer][artikelnummer]{}          INCR neue daten.einkaeufe [kundennummer][artikelnummer]{}      PER{}    PER.{}END PROC filialdaten ergaenzen;{}OP := (ARTIKELDATEN VAR ziel, ARTIKELDATEN CONST quelle):{}  CONCR (ziel) := CONCR (quelle){}END OP :=;{}OP := (KUNDENDATEN VAR ziel, KUNDENDATEN CONST quelle):{}  CONCR (ziel) := CONCR (quelle){}
END OP :=;{}PROC init ds:{}  forget (ds); ds := nilspace{}END PROC init ds;{}(************************************************************************){}PROC initialisiere verwaltung:{}  hauptstelle := hauptstellenname;{}  zentrale := task (hauptstelle + ".Zentrale");{}  filialnummer := text (channel (myself));{}  filialverwaltungsname := hauptstellenname + ".Filialverwaltung ";{}  begin (filialverwaltungsname + filialnummer,{}         PROC filialverwaltung, verwaltung){}END PROC initialisiere verwaltung;{}
PROC hole artikeldaten (INT  CONST artikelnummer,{}                        TEXT VAR name,  REAL VAR preis,{}                        INT  VAR mindestbestand, bestand):{}  enable stop;{}  pruefe artikelnummer;{}  hole daten.{}  pruefe artikelnummer:{}    INT CONST artikelindex :: artikelnummer - min artikelnr + 1;{}    IF artikelindex < 1  OR  artikelindex > max artikel{}       THEN errorstop ("Unzulässige Artikelnummer!"){}    FI.{}  hole daten:{}    name           := artikel [artikelindex].artikelname;{}
    preis          := artikel [artikelindex].preis;{}    mindestbestand := artikel [artikelindex].mindestbestand;{}    bestand        := artikel [artikelindex].bestand.{}END PROC hole artikeldaten;{}PROC speichere artikeldaten (INT  CONST artikelnummer,{}                             TEXT CONST name, REAL CONST preis,{}                             INT  CONST mindestbestand, bestand):{}  enable stop;{}  pruefe artikelnummer;{}  speichere daten;{}  schicke kopie an verwaltung.{}  pruefe artikelnummer:{}
    INT CONST artikelindex :: artikelnummer - min artikelnr + 1;{}    IF artikelindex < 1  OR  artikelindex > max artikel{}       THEN errorstop ("Unzulässige Artikelnummer!"){}    FI.{}  speichere daten:{}    artikel [artikelindex].artikelname   := name;{}    artikel [artikelindex].preis         := preis;{}    artikel [artikelindex].mindestbestand:= mindestbestand;{}    artikel [artikelindex].bestand       := bestand.{}  schicke kopie an verwaltung:{}    init ds;{}    BOUND ARTIKELDATEN VAR artikeldaten :: ds;{}
    artikeldaten := artikel [artikelindex];{}    call (verwaltung, artikelindex, ds, reply code).{}END PROC speichere artikeldaten;{}PROC registriere verkauf (INT CONST kundennummer, artikelnummer):{}  enable stop;{}  pruefe daten;{}  speichere daten;{}  schicke kopie zur verwaltung.{}  pruefe daten:{}    INT VAR kundenindex  :: kundennummer  - min kundennr  + 1,{}            artikelindex :: artikelnummer - min artikelnr + 1;{}    IF   kundenindex < 0  OR  kundenindex > max kunden{}         THEN errorstop ("Unzulässige Kundennummer!"){}
    ELIF artikelindex < 1  OR  artikelindex > max artikel{}         THEN errorstop ("Unzulässige Artikelnummer!"){}    FI.{}  speichere daten:{}    IF artikel [artikelindex].bestand > 0{}       THEN artikel [artikelindex].bestand DECR 1;{}            verkaufszahl [artikelindex] INCR 1;{}            IF kundenindex > 0{}               THEN trage evtl in einkaufsdatei ein{}    FI      FI.{}  trage evtl in einkaufsdatei ein:{}    IF kunde [kundenindex].nachname = ""{}       THEN kundenindex := 0{}       ELSE einkaufsdatei [kundenindex][artikelindex] INCR 1{}
    FI.{}  schicke kopie zur verwaltung:{}    init ds;{}    BOUND INT VAR nummer :: ds;{}    nummer := artikelindex;{}    call (verwaltung, kundenindex + min kundennr - 1, ds, reply code).{}END PROC registriere verkauf;{}PROC hole kundendaten (INT  CONST kundennummer,{}                       TEXT VAR   nachname, vorname, geschlecht):{}  enable stop;{}  pruefe kundennummer;{}  rufe zentrale an;{}  uebergib die zentraldaten;{}  IF aenderungen vorhanden{}     THEN aktualisiere filialdaten{}  FI;{}  forget (ds).{}
  pruefe kundennummer:{}    INT CONST index :: kundennummer - min kundennr + 1;{}    IF index < 1  OR  index > max kunden{}       THEN errorstop ("Unzulässige Kundennummer!"){}    FI.{}  rufe zentrale an:{}    init ds;{}    call (zentrale, kundennummer, ds, reply code).{}  aenderungen vorhanden:{}    (kunde [index].nachname   <> nachname  ) OR{}    (kunde [index].vorname    <> vorname   ) OR{}    (kunde [index].geschlecht <> geschlecht).{}  aktualisiere filialdaten:{}    kunde [index] := daten von zentrale;{}
    call (verwaltung, kundennummer + max kunden, ds, reply code).{}  uebergib die zentraldaten:{}    BOUND KUNDENDATEN VAR daten von zentrale :: ds;{}    nachname    := daten von zentrale.nachname;{}    vorname     := daten von zentrale.vorname;{}    geschlecht  := daten von zentrale.geschlecht.{}END PROC hole kundendaten;{}PROC speichere kundendaten(INT  CONST kundennummer,{}                           TEXT CONST nachname, vorname, geschlecht):{}  enable stop;{}  pruefe kundennummer;{}  IF kundendaten geaendert{}
     THEN speichere daten;{}          schicke kopie an verwaltung und zentrale{}  FI.{}  pruefe kundennummer:{}    IF kundennummer < min kundennr  OR  kundennummer > max kundennr{}       THEN errorstop ("Unzulässige Kundennummer!"){}    FI.{}  kundendaten geaendert:{}    INT CONST index :: kundennummer - min kundennr + 1;{}    nachname    <> kunde [index].nachname    OR{}    vorname     <> kunde [index].vorname     OR{}    geschlecht  <> kunde [index].geschlecht.{}  speichere daten:{}    kunde [index].nachname    := nachname;{}
    kunde [index].vorname     := vorname;{}    kunde [index].geschlecht  := geschlecht.{}  schicke kopie an verwaltung und zentrale:{}    init ds;{}    BOUND KUNDENDATEN VAR kundendaten :: ds;{}    kundendaten := kunde [index];{}    call (verwaltung, kundennummer + max kunden, ds, reply code);{}    call (zentrale, kundennummer - min kundennr + 1, ds, reply code);{}    forget (ds).{}END PROC speichere kundendaten;{}PROC sichere filialdaten (TEXT CONST name):{}  enable stop;{}  filialdaten holen;{}
  type (ds, 1951);{}  forget (name, quiet);{}  copy (ds, name);{}  forget (ds){}END PROC sichere filialdaten;{}PROC lade filialdaten (TEXT CONST name):{}  enable stop;{}  forget (ds);{}  ds := old (name);{}  IF type (ds) = 1951{}     THEN filialdaten ergaenzen;{}          kopie an verwaltung schicken;{}          kopie der kundendatei an zentrale schicken{}     ELSE errorstop ("'" + name + "' enthält keine Filialdaten!"){}  FI.{}  kopie an verwaltung schicken:{}    call (verwaltung, filialdaten ergaenzen code, ds, reply code).{}
  kopie der kundendatei an zentrale schicken:{}    BOUND KUNDENDATEI VAR kundendatei :: ds;{}    CONCR (CONCR (kundendatei)) := CONCR (kunde);{}    call (zentrale, zentrale kundendatei ergaenzen code, ds, reply code).{}END PROC lade filialdaten;{}PROC hole bestelliste (FILE VAR f):{}  bereite datei vor;{}  schreibe daten in datei.{}  bereite datei vor:{}    forget("Nachbestellung",quiet);{}    f := sequential file (output, "Nachbestellung");{}    line  (f);{}    write (f, "        Nachbestellungen für " +{}
                       invers ("Filiale " + filialnummer)+":");{}    line;{}    write (f, "        ==================================================");{}    line  (f, 2);{}    write (f, "        |  Art.Nr. | Artikelname             |   Anzahl  |");{}    line  (f);{}    write (f, "        +----------+-------------------------+-----------+");{}    line  (f).{}  schreibe daten in datei:{}    INT VAR artikelnummer;{}    FOR artikelnummer FROM 1 UPTO max artikel REP{}        IF artikel[artikelnummer].bestand{}
           < artikel[artikelnummer].mindestbestand{}           THEN bestelle artikel nach{}        FI{}    PER;{}    write (f, "        +----------+-------------------------+-----------+");{}    line  (f).{}   bestelle artikel nach:{}    write (f, "        |  " + wirkliche artikelnummer + "   | "{}              + text (artikel [artikelnummer].artikelname, 23) + " |  "{}              + text (nachzubestellende anzahl, 6) + "   |");{}    line  (f);{}    artikel [artikelnummer].bestand{}                           := 2 * artikel [artikelnummer].mindestbestand.{}
    wirkliche artikelnummer:{}      text (artikelnummer + min artikelnr - 1, 5).{}    nachzubestellende anzahl:{}      2 * artikel [artikelnummer].mindestbestand{}                                  - artikel [artikelnummer].bestand.{}END PROC hole bestelliste;{}PROC hole auskunft ein (INT CONST codenummer, artikel oder kundennummer,{}                        FILE  VAR f):{}  enable stop;{}  hauptstelle := hauptstellenname;{}  SELECT codenummer OF CASE 66 : hitliste von zentrale (f){}                       CASE 67 : hitliste von filiale (f){}
                       CASE 68 : hitlisten aller filialen (f){}                    (* --------------------------------------------- *){}                       CASE 73 : artikelkaeuferliste von zentrale{}                                   (artikel oder kundennummer, f){}                       CASE 74 : artikelkaeuferliste von filiale{}                                   (artikel oder kundennummer, f){}                       CASE 75 : artikelkaeuferlisten aller filialen{}                                   (artikel oder kundennummer, f){}
                    (* --------------------------------------------- *){}                       CASE 77 : kundenliste von zentrale (f){}                       CASE 78 : kundenliste von filiale (f){}                       CASE 79 : kundenlisten aller filialen (f){}                    (* --------------------------------------------- *){}                       CASE 84 : kundeneinkaufsliste von zentrale{}                                   (artikel oder kundennummer, f){}                       CASE 85 : kundeneinkaufsliste von filiale{}
                                   (artikel oder kundennummer, f){}                       CASE 86 : kundeneinkaufslisten aller filialen{}                                   (artikel oder kundennummer, f){}                    (* --------------------------------------------- *){}                       CASE 89 : lageruebersicht von zentrale (f){}                       CASE 90 : lageruebersicht von filiale (f){}                       CASE 91 : lageruebersichten aller filialen (f){}                    (* --------------------------------------------- *){}
  OTHERWISE  errorstop ("Unzulässige Code - Nummer bei Auskunft!"){}  END SELECT{}END PROC hole auskunft ein;{}PROC hitliste von zentrale (FILE VAR f):{}  INT VAR filialnr;{}  beginne mit eigener filiale;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF filialnr <> int (filialnummer) CAND{}       exists task (aktuelle verwaltung){}       THEN hole daten dieser filiale;{}            schreibe daten in zentralliste{}
    FI{}  PER;{}  werte zentralliste aus.{}  beginne mit eigener filiale:{}    WARENDATEI VAR zentrale warendatei;{}    CONCR (zentrale warendatei) := CONCR (artikel);{}    VERKAUFSDATEI VAR zentrale verkaufsdatei;{}    CONCR (zentrale verkaufsdatei) := CONCR (verkaufszahl).{}   hole daten dieser filiale:{}     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}     BOUND FILIALDATEN VAR aktuelle daten :: ds.{}   schreibe daten in zentralliste:{}     INT VAR i;{}
     FOR i FROM 1 UPTO max artikel REP{}       IF zentrale warendatei [i].artikelname = ""{}          THEN zentrale warendatei [i] := aktuelle daten.waren [i]{}       FI;{}       zentrale verkaufsdatei [i] INCR aktuelle daten.hitliste [i]{}     PER.{}  werte zentralliste aus:{}    forget (ds);{}    forget ("Auskunft: Zentrale", quiet);{}    f := sequential file (output, "Auskunft: Zentrale");{}    line  (f);{}    write (f, "   Zentrale Warenliste, geordnet nach Verkaufszahlen:");{}    sortiere (zentrale warendatei, zentrale verkaufsdatei);{}
    fuelle (f, zentrale warendatei, zentrale verkaufsdatei).{}END PROC hitliste von zentrale;{}PROC hitliste von filiale (FILE VAR f):{}  bereite auskunftsdatei vor;{}  kopiere artikeldatei und verkaufsdatei;{}  sortiere (hilfsdatei artikel, hilfsdatei verkaufszahlen);{}  fuelle (f,hilfsdatei artikel, hilfsdatei verkaufszahlen).{}  kopiere artikeldatei und verkaufsdatei:{}    WARENDATEI VAR hilfsdatei artikel;{}    CONCR (hilfsdatei artikel) := CONCR (artikel);{}    VERKAUFSDATEI VAR hilfsdatei verkaufszahlen;{}
    CONCR (hilfsdatei verkaufszahlen) := CONCR (verkaufszahl).{}  bereite auskunftsdatei vor:{}    forget ("Auskunft: Filiale " + filialnummer, quiet);{}    f := sequential file (output, "Auskunft: Filiale " + filialnummer);{}    line  (f);{}    write (f, "   Warenliste, geordnet nach Verkaufszahlen:").{}END PROC hitliste von filiale;{}PROC hitlisten aller filialen (FILE VAR f):{}  WARENDATEI    VAR aktuelle warendatei;{}  VERKAUFSDATEI VAR aktuelle verkaufsdatei;{}  INT           VAR filialnr;{}
  bereite auskunftsdatei vor;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF   filialnr = int (filialnummer){}         THEN nimm eigene daten{}    ELIF exists task (aktuelle verwaltung){}    THEN hole daten dieser filiale;{}         arbeite mit diesen daten{}    FI{}  PER;{}  forget (ds).{}  bereite auskunftsdatei vor:{}    forget ("Auskunft: Alle Filialen", quiet);{}    f := sequential file (output, "Auskunft: Alle Filialen");{}
    line  (f).{}  nimm eigene daten:{}    CONCR (aktuelle warendatei) := CONCR (artikel);{}    CONCR (aktuelle verkaufsdatei) := CONCR (verkaufszahl);{}    sortiere und fuelle.{}  sortiere und fuelle:{}    write (f, "   Warenliste von " + invers ("Filiale " + text (filialnr)){}            + ", geordnet nach Verkaufszahlen:");{}    sortiere (aktuelle warendatei, aktuelle verkaufsdatei);{}    fuelle (f,aktuelle warendatei, aktuelle verkaufsdatei).{}   hole daten dieser filiale:{}     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}
     BOUND FILIALDATEN VAR aktuelle daten :: ds.{}   arbeite mit diesen daten:{}    CONCR (aktuelle warendatei) := CONCR (aktuelle daten.waren);{}    CONCR (aktuelle verkaufsdatei) := CONCR (aktuelle daten.hitliste);{}    sortiere und fuelle.{}END PROC hitlisten aller filialen;{}PROC sortiere (WARENDATEI VAR warendatei, VERKAUFSDATEI VAR stueckzahl):{}  INT VAR i,j;{}  FOR i FROM 1 UPTO max artikel - 1 REP{}    FOR j FROM i + 1 UPTO max artikel REP{}      IF stueckzahl [i] < stueckzahl [j]{}         THEN vertausche{}
      FI{}  PER PER.{}  vertausche:{}    INT CONST hilfsint :: stueckzahl [i];{}    ARTIKELDATEN CONST hilfsartikel :: warendatei [i];{}    stueckzahl [i] := stueckzahl [j];{}    warendatei [i] := warendatei [j];{}    stueckzahl [j] := hilfsint;{}    warendatei [j] := hilfsartikel.{}END PROC sortiere;{}PROC fuelle (FILE VAR f, WARENDATEI VAR warendat, VERKAUFSDATEI VAR anzahl):{}  INT VAR nummer, platz :: 0;{}  bereite datei vor;{}  schreibe daten in datei.{}bereite datei vor:{} line (f);{} write(f,"   ============================================================");{}
 line (f,2);{} write(f,"   | Platz | Verk.Anzahl | Artikelname            |   Preis   |");{} line (f);{} write(f,"   +-------+-------------+------------------------+-----------+");{} line (f).{}schreibe daten in datei:{} FOR nummer FROM 1 UPTO max artikel REP{}     IF warendat [nummer].artikelname <> ""{}        THEN schreibe in datei; line (f){}     FI{} PER;{} write(f,"   +-------+-------------+------------------------+-----------+");{} line (f,3).{}schreibe in datei:{}  platz INCR 1;{}  write (f, "   |" + text (platz, 5) + "  |"{}
                   + text (anzahl [nummer], 9) + "    | "{}                   + text (warendat [nummer].artikelname, 22) + " | "{}                   + text (warendat [nummer].preis,8,2) + "  |").{}END PROC fuelle;{}PROC artikelkaeuferliste von zentrale (INT CONST artikelnummer, FILE VAR f):{}  INT VAR filialnr;{}  pruefe artikelnummer;{}  beginne mit eigener filiale;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}
    IF filialnr <> int (filialnummer) CAND{}       exists task (aktuelle verwaltung){}       THEN hole daten dieser filiale;{}            schreibe daten in zentralliste{}    FI{}  PER;{}  werte zentralliste aus.{}  pruefe artikelnummer:{}    INT CONST artikelindex :: artikelnummer - min artikelnr + 1;{}    IF artikelindex < 1  OR  artikelindex > max artikel{}       THEN errorstop ("Unzulässige Artikelnummer!"){}    FI.{}  beginne mit eigener filiale:{}    TEXT VAR aktueller artikelname :: artikel [artikelindex].artikelname;{}
    KUNDENDATEI VAR hilfsdatei;{}    CONCR (hilfsdatei) := CONCR (kunde);{}    ROW max kunden INT VAR kaeufe;{}    INT VAR i;{}    FOR i FROM 1 UPTO max kunden REP{}        kaeufe [i] := einkaufsdatei [i][artikelindex]{}    PER.{}   hole daten dieser filiale:{}     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code).{}   schreibe daten in zentralliste:{}     BOUND FILIALDATEN VAR aktuelle daten :: ds;{}     IF aktueller artikelname = ""{}        THEN aktueller artikelname{}
             := aktuelle daten.waren [artikelindex].artikelname{}     FI;{}     FOR i FROM 1 UPTO max kunden REP{}       kaeufe [i] INCR aktuelle daten.einkaeufe [i][artikelindex];{}       IF hilfsdatei [i].nachname = ""{}          THEN hilfsdatei [i] := aktuelle daten.kunden [i]{}       FI{}     PER.{}  werte zentralliste aus:{}    forget (ds);{}    forget ("Auskunft: Zentrale", quiet);{}    f := sequential file (output, "Auskunft: Zentrale");{}    line (f);{}    IF aktueller artikelname = ""{}       THEN write (f, "   Der Artikel Nr. " + text (artikelindex){}
                      +  " wird in keiner Filiale geführt.");{}            line (f);{}            write(f,{}        "   ============================================================");{}            line (f,3);{}       ELSE write (f, "   Gesamtkäuferliste des Artikels "{}                       +  invers (aktueller artikelname) + ":");{}            fuelle (f, hilfsdatei, kaeufe){}    FI.{}END PROC artikelkaeuferliste von zentrale;{}PROC artikelkaeuferliste von filiale (INT CONST artikelnummer, FILE VAR f):{}
  pruefe artikelnummer;{}  kopiere einkaufszahlen in hilfsliste;{}  erstelle filialliste.{}  pruefe artikelnummer:{}    INT CONST artikelindex :: artikelnummer - min artikelnr + 1;{}    IF artikelindex < 1  OR  artikelindex > max artikel{}       THEN errorstop ("Unzulässige Artikelnummer!"){}    FI.{}  kopiere einkaufszahlen in hilfsliste:{}    ROW max kunden INT VAR kaeufe;{}    INT VAR i;{}    FOR i FROM 1 UPTO max kunden REP{}        kaeufe [i] := einkaufsdatei [i][artikelindex]{}    PER.{}  erstelle filialliste:{}
    forget ("Auskunft: Filiale " + filialnummer, quiet);{}    f := sequential file (output, "Auskunft: Filiale " + filialnummer);{}    line (f);{}    IF artikel [artikelindex].artikelname = ""{}       THEN write (f, "   Der Artikel Nr. " + text (artikelindex){}                   +  " wird in dieser Filiale nicht geführt.");{}            line (f);{}            write(f,{}        "   ============================================================");{}            line (f,3);{}       ELSE write (f, "   Käufer des Artikels "{}
                   +  invers (artikel [artikelindex].artikelname){}                   +  ":");{}            fuelle (f, kunde, kaeufe){}    FI.{}END PROC artikelkaeuferliste von filiale;{}PROC artikelkaeuferlisten aller filialen(INT CONST artikelnummer,FILE VAR f):{}  INT VAR i, filialnr;{}  ROW max kunden INT VAR kaeufe;{}  pruefe artikelnummer;{}  bereite datei vor;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}
    IF   filialnr = int (filialnummer){}         THEN kopiere eigene einkaufszahlen in hilfsliste;{}              schreibe eigene daten in auskunftsdatei{}    ELIF exists task (aktuelle verwaltung){}         THEN hole daten dieser filiale;{}              schreibe daten in auskunftsdatei{}    FI{}  PER;{}  forget (ds).{}  pruefe artikelnummer:{}    INT CONST artikelindex :: artikelnummer - min artikelnr + 1;{}    IF artikelindex < 1  OR  artikelindex > max artikel{}       THEN errorstop ("Unzulässige Artikelnummer!"){}
    FI.{}  bereite datei vor:{}    forget ("Auskunft: Alle Filialen", quiet);{}    f := sequential file (output, "Auskunft: Alle Filialen");{}    line (f).{}  kopiere eigene einkaufszahlen in hilfsliste:{}    FOR i FROM 1 UPTO max kunden REP{}        kaeufe [i] := einkaufsdatei [i][artikelindex]{}    PER.{}  schreibe eigene daten in auskunftsdatei:{}    IF artikel [artikelindex].artikelname = ""{}       THEN write (f, "   Der Artikel Nr. " + text (artikelindex){}                   +  " wird in "{}
                   +    invers ("Filiale " + filialnummer){}                   +  " nicht geführt.");{}            line (f);{}            write(f,{}        "   ============================================================");{}            line (f,3){}       ELSE write (f, "   Käufer des Artikels '"{}                   +  artikel [artikelindex].artikelname{}                   +  "' in " + invers ("Filiale " + filialnummer) + ":");{}            fuelle(f, kunde, kaeufe){}    FI.{}   hole daten dieser filiale:{}
     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}     BOUND FILIALDATEN VAR aktuelle daten :: ds;{}     TEXT CONST aktueller artikelname{}                := aktuelle daten.waren [artikelindex].artikelname{}     FOR i FROM 1 UPTO max kunden REP{}       kaeufe [i] := aktuelle daten.einkaeufe [i][artikelindex];{}     PER.{}  schreibe daten in auskunftsdatei:{}    IF aktueller artikelname = ""{}       THEN write (f, "   Der Artikel Nr. " + text (artikelindex){}
                   +  " wird in "{}                   +    invers ("Filiale " + text (filialnr)){}                   +  " nicht geführt.");{}            line (f);{}            write(f,{}        "   ============================================================");{}            line (f,3){}       ELSE write (f, "   Käufer des Artikels '"{}                   +  aktueller artikelname{}                   +  "' in " + invers ("Filiale " + text(filialnr)) + ":");{}            fuelle(f, aktuelle daten.kunden, kaeufe){}
    FI.{}END PROC artikelkaeuferlisten aller filialen;{}PROC fuelle (FILE VAR f, KUNDENDATEI CONST  kundenliste,{}                         ROW max kunden INT CONST einkaufszahlen):{}  INT VAR kundennummer;{}  bereite datei vor;{}  schreibe daten in datei.{}bereite datei vor:{} line (f);{} write(f,"   ============================================================");{} line (f, 2);{} write(f,"   | Anzahl | Nachname,         Vorname          | Geschlecht |");{} line (f);{} write(f,"   +--------+------------------------------------+------------+");{}
 line (f).{}schreibe daten in datei:{} FOR kundennummer FROM 1 UPTO max kunden REP{}     IF  einkaufszahlen [kundennummer] > 0{}         THEN schreibe in  datei; line (f);{}     FI{} PER;{} write(f,"   +--------+------------------------------------+------------+");{} line (f, 3).{}schreibe in datei:{} write(f,"   |" + text(einkaufszahlen [kundennummer], 5) + "   | "{}                + text(kundenliste [kundennummer].nachname + ",", 17) + " "{}                + text(kundenliste [kundennummer].vorname, 16) + " | ");{}
 IF   kundenliste [kundennummer].geschlecht = "m"{}      THEN write (f, " männlich  |"){} ELIF kundenliste [kundennummer].geschlecht = "w"{}      THEN write (f, " weiblich  |"){}      ELSE write (f, "           |"){} FI.{}END PROC fuelle;{}PROC kundenliste von zentrale (FILE VAR f):{}  hole kundenliste von zentrale;{}  bereite datei vor;{}  schreibe daten in datei.{}  hole kundenliste von zentrale:{}    init ds;{}    call (zentrale, zentrale kundendatei holen code, ds, reply code);{}    BOUND KUNDENDATEI VAR zentrale kundenliste :: ds.{}
  bereite datei vor:{}   forget ("Auskunft: Zentrale", quiet);{}   f := sequential file (output, "Auskunft: Zentrale");{}   line  (f);{}   write (f, "   Zentrale Kundenliste:").{}  schreibe daten in datei:{}    fuelle (f, zentrale kundenliste);{}    forget (ds).{}END PROC kundenliste von zentrale;{}PROC kundenliste von filiale (FILE VAR f):{}  bereite datei vor;{}  schreibe daten in datei.{}  bereite datei vor:{}    forget ("Auskunft: Filiale " + filialnummer, quiet);{}    f := sequential file (output, "Auskunft: Filiale " + filialnummer);{}
    line  (f);{}    write (f,"   Kundenliste:").{}  schreibe daten in datei:{}    fuelle (f, kunde).{}END PROC kundenliste von filiale;{}PROC kundenlisten aller filialen (FILE VAR f):{}  INT VAR filialnr;{}  bereite datei vor;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF   filialnr = int (filialnummer){}         THEN schreibe eigene daten in auskunftsdatei{}    ELIF exists task (aktuelle verwaltung){}
         THEN hole daten dieser filiale;{}              schreibe daten dieser filiale in auskunftsdatei{}    FI{}  PER.{}  bereite datei vor:{}    forget ("Auskunft: Alle Filialen", quiet);{}    f := sequential file (output, "Auskunft: Alle Filialen");{}    line (f).{}  schreibe eigene daten in auskunftsdatei:{}    schreibe ueberschrift;{}    fuelle (f, kunde).{}  hole daten dieser filiale:{}    init ds;{}    call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}    BOUND FILIALDATEN VAR aktuelle filialdaten :: ds.{}
  schreibe daten dieser filiale in auskunftsdatei:{}    schreibe ueberschrift;{}    fuelle (f, aktuelle filialdaten.kunden).{}  schreibe ueberschrift:{}   write (f, "   Kundenliste für " +{}                 invers ("Filiale " + text (filialnr)) + ":").{}END PROC kundenlisten aller filialen;{}PROC fuelle (FILE VAR f, KUNDENDATEI VAR kundendatei):{}  INT VAR kundennummer;{}  bereite datei vor;{}  schreibe daten in datei.{}bereite datei vor:{} line (f);{} write(f,"   ============================================================");{}
 line (f,2);{} write(f,"   | Kun.Nr.| Nachname,         Vorname          | Geschlecht |");{} line (f);{} write(f,"   +--------+------------------------------------+------------+");{} line (f).{}schreibe daten in datei:{} FOR kundennummer FROM 1 UPTO max kunden REP{}     IF kundendatei [kundennummer].nachname <> ""{}        THEN schreibe in datei; line (f){}     FI{} PER;{} write(f,"   +--------+------------------------------------+------------+");{} line (f, 3).{}schreibe in datei:{}  write (f, "   |" + text (kundennummer + min kundennummer - 1, 6) + "  | "{}
            + text (kundendatei [kundennummer].nachname + ",", 17) + " "{}            + text (kundendatei [kundennummer].vorname, 16) + " | ");{}    IF   kundendatei [kundennummer].geschlecht = "m"{}         THEN write (f, " männlich  |"){}    ELIF kundendatei [kundennummer].geschlecht = "w"{}         THEN write (f, " weiblich  |"){}         ELSE write (f, "           |"){}    FI.{}END PROC fuelle;{}PROC kundeneinkaufsliste von zentrale (INT CONST kundennummer, FILE VAR f):{}  INT VAR filialnr;{}
  pruefe kundennummer;{}  beginne mit eigener filiale;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF filialnr <> int (filialnummer) CAND{}       exists task (aktuelle verwaltung){}       THEN hole daten dieser filiale;{}            schreibe daten in zentralliste{}    FI{}  PER;{}  werte zentralliste aus.{}  pruefe kundennummer:{}    INT CONST kundenindex :: kundennummer - min kundennr + 1;{}
    IF kundenindex < 1  OR  kundenindex > max kunden{}       THEN errorstop ("Unzulässige Kundennummer!"){}    FI.{}  beginne mit eigener filiale:{}    KUNDENDATEN VAR aktueller kunde :: kunde [kundenindex];{}    WARENDATEI VAR hilfsdatei;{}    CONCR (hilfsdatei) := CONCR (artikel);{}    ROW max artikel INT VAR kaeufe;{}    INT VAR i;{}    FOR i FROM 1 UPTO max artikel REP{}        kaeufe [i] := einkaufsdatei [kundenindex][i]{}    PER.{}   hole daten dieser filiale:{}     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code).{}
   schreibe daten in zentralliste:{}     BOUND FILIALDATEN VAR aktuelle daten :: ds;{}     IF aktueller kunde.nachname = ""{}        THEN aktueller kunde := aktuelle daten.kunden [kundenindex]{}     FI;{}     FOR i FROM 1 UPTO max artikel REP{}       kaeufe [i] INCR aktuelle daten.einkaeufe [kundenindex][i];{}       IF hilfsdatei [i].artikelname = ""{}          THEN hilfsdatei [i] := aktuelle daten.waren [i]{}       FI{}     PER.{}  werte zentralliste aus:{}    forget (ds);{}    forget ("Auskunft: Zentrale", quiet);{}
    f := sequential file (output, "Auskunft: Zentrale");{}    line (f);{}    IF aktueller kunde.nachname = ""{}       THEN write (f, "   Ein Kunde mit Nr. " + text (kundenindex){}                   +  " ist in keiner Filiale bekannt.");{}            line (f);{}            write(f,{}        "   ============================================================");{}            line (f,3);{}       ELSE write (f, "   Gesamteinkaufsliste " + anrede{}                       +  invers (aktueller kundenname) + ":");{}
            fuelle (f, hilfsdatei, kaeufe){}    FI.{}  anrede:{}    IF   aktueller kunde.geschlecht = "m"{}         THEN "des Kunden "{}    ELIF aktueller kunde.geschlecht = "w"{}         THEN "der Kundin "{}         ELSE "von "{}    FI.{}  aktueller kundenname:{}    (aktueller kunde.vorname SUB 1) + ". " + aktueller kunde.nachname.{}END PROC kundeneinkaufsliste von zentrale;{}PROC kundeneinkaufsliste von filiale (INT CONST kundennummer, FILE VAR f):{}  pruefe kundennummer;{}  erstelle filialliste.{}
  pruefe kundennummer:{}    INT CONST kundenindex :: kundennummer - min kundennr + 1;{}    IF kundenindex < 1  OR  kundenindex > max kunden{}       THEN errorstop ("Unzulässige Kundennummer!"){}    FI.{}  erstelle filialliste:{}    forget ("Auskunft: Filiale " + filialnummer, quiet);{}    f := sequential file (output, "Auskunft: Filiale " + filialnummer);{}    line (f);{}    IF kunde [kundenindex].nachname = ""{}       THEN schicke leere liste zurueck{}       ELSE schreibe dateikopf;{}            fuelle (f, artikel, einkaufsdatei [kundenindex]){}
    FI.{}  schicke leere liste zurueck:{}    write (f,"   Ein Kunde mit Nr. " + text (kundennummer) + " ist in "{}           +  "dieser Filiale nicht bekannt.");{}    line  (f);{}    write (f,{}      "   ============================================================");{}    line (f,3).{}  schreibe dateikopf:{}   write (f, "   Einkaufsliste " + anrede +{}                 invers ((kunde [kundenindex].vorname  SUB 1) + ". " +{}                  kunde [kundenindex].nachname) + ":").{}  anrede:{}    IF   kunde [kundenindex].geschlecht = "m"{}
         THEN "des Kunden "{}    ELIF kunde [kundenindex].geschlecht = "w"{}         THEN "der Kundin "{}         ELSE "von "{}    FI.{}END PROC kundeneinkaufsliste von filiale;{}PROC kundeneinkaufslisten aller filialen (INT CONST kundennummer,FILE VAR f):{}  INT VAR filialnr;{}  pruefe kundennummer;{}  bereite datei vor;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF   filialnr = int (filialnummer){}
         THEN schreibe eigene daten in auskunftsdatei{}    ELIF exists task (aktuelle verwaltung){}         THEN hole daten dieser filiale;{}              schreibe daten in auskunftsdatei{}    FI{}  PER;{}  forget (ds).{}  pruefe kundennummer:{}    INT CONST kundenindex :: kundennummer - min kundennr + 1;{}    IF kundenindex < 1  OR  kundenindex > max kunden{}       THEN errorstop ("Unzulässige Kundennummer!"){}    FI.{}  bereite datei vor:{}    forget ("Auskunft: Alle Filialen", quiet);{}    f := sequential file (output, "Auskunft: Alle Filialen");{}
    line (f).{}  schreibe eigene daten in auskunftsdatei:{}    IF kunde [kundenindex].nachname = ""{}       THEN write (f,"   Ein Kunde mit Nr. " + text (kundennummer){}                   + " ist in " + invers ("Filiale " + filialnummer){}                   + " nicht bekannt.");{}            line  (f);{}            write(f,{}        "   ============================================================");{}            line (f,3){}       ELSE write (f, "   Einkaufsliste " + anrede hier +{}                  (kunde [kundenindex].vorname  SUB 1) + ". " +{}
                   kunde [kundenindex].nachname +{}                  " in " + invers ("Filiale " + filialnummer) + ":");{}            fuelle (f, artikel, einkaufsdatei [kundenindex]){}    FI.{}  anrede hier:{}    IF   kunde [kundenindex].geschlecht = "m"{}         THEN "des Kunden "{}    ELIF kunde [kundenindex].geschlecht = "w"{}         THEN "der Kundin "{}         ELSE "von "{}    FI.{}  hole daten dieser filiale:{}    init ds;{}    call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}
    BOUND FILIALDATEN VAR aktuelle daten :: ds;{}    KUNDENDATEN CONST aktueller kunde := aktuelle daten.kunden [kundenindex].{}  schreibe daten in auskunftsdatei:{}    IF aktueller kunde.nachname = ""{}       THEN write (f,"   Ein Kunde mit Nr. " + text (kundennummer){}                   + " ist in " + invers ("Filiale " + text (filialnr)){}                   + " nicht bekannt.");{}            line  (f);{}            write(f,{}        "   ============================================================");{}
            line (f,3){}       ELSE write (f, "   Einkaufsliste " + anrede +{}                  (aktueller kunde.vorname  SUB 1) + ". " +{}                   aktueller kunde.nachname +{}                  " in " + invers ("Filiale " + text (filialnr)) + ":");{}            fuelle (f, aktuelle daten.waren,{}                       aktuelle daten.einkaeufe [kundenindex]){}     FI.{}  anrede:{}    IF   aktueller kunde.geschlecht = "m"{}         THEN "des Kunden "{}    ELIF aktueller kunde.geschlecht = "w"{}
         THEN "der Kundin "{}         ELSE "von "{}    FI.{}END PROC kundeneinkaufslisten aller filialen;{}PROC fuelle (FILE VAR f, WARENDATEI CONST warendatei,{}             ROW max artikel INT CONST einkaufszahlen):{}  INT VAR  artikelnummer;{}  REAL VAR gesamtpreis, summe :: 0.0;{}  bereite datei vor;{}  schreibe daten in datei.{}bereite datei vor:{} line (f);{} write(f,"   ============================================================");{} line (f,2);{} write(f,"   | Art.Nr.| Artikelname       | Anzahl |  Preis  |  Gesamt  |");{}
 line (f);{} write(f,"   +--------+-------------------+--------+---------+----------+");{} line (f).{}schreibe daten in datei:{} FOR artikelnummer FROM 1 UPTO max artikel REP{}     IF einkaufszahlen [artikelnummer] > 0{}        THEN schreibe in datei; line (f){}     FI{} PER;{} write(f,"   +--------+-------------------+--------+---------+----------+");{} line (f);{} write(f,"                                           Summe:   " +{}                                                     text (summe,8,2));{}
 line (f, 3).{}schreibe in datei:{}  gesamtpreis := real (einkaufszahlen [artikelnummer]) *{}                       warendatei [artikelnummer].preis;{}  summe INCR gesamtpreis;{}  write (f,"   |" + text(artikelnummer,5) + "   | "{}                  + text(warendatei [artikelnummer].artikelname,17) + " |  "{}                  + text(einkaufszahlen [artikelnummer],4) + "  |"{}                  + text(warendatei [artikelnummer].preis,7,2) + "  |"{}                  + text(gesamtpreis,8,2) + "  |").{}
END PROC fuelle;{}PROC lageruebersicht von zentrale (FILE VAR f):{}  INT VAR filialnr;{}  beginne mit eigener filiale;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF filialnr <> int (filialnummer) CAND{}       exists task (aktuelle verwaltung){}       THEN hole daten dieser filiale;{}            schreibe daten in zentralliste{}    FI{}  PER;{}  werte zentralliste aus.{}  beginne mit eigener filiale:{}
    WARENDATEI VAR hilfsdatei;{}    CONCR (hilfsdatei) := CONCR (artikel).{}   hole daten dieser filiale:{}     init ds;{}     call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code).{}   schreibe daten in zentralliste:{}     BOUND FILIALDATEN VAR aktuelle daten :: ds;{}     INT VAR i;{}     FOR i FROM 1 UPTO max artikel REP{}       IF hilfsdatei [i].artikelname = ""{}          THEN hilfsdatei [i] := aktuelle daten.waren [i]{}          ELSE hilfsdatei [i].mindestbestand INCR aktuell.mindestbestand;{}
               hilfsdatei [i].bestand INCR aktuell.bestand{}       FI{}     PER.{}  aktuell: aktuelle daten.waren [i].{}  werte zentralliste aus:{}    forget (ds);{}    forget ("Auskunft: Zentrale", quiet);{}    f := sequential file (output, "Auskunft: Zentrale");{}    line  (f);{}    write (f, "   Zentrale Lagerübersicht:");{}    fuelle (f, hilfsdatei).{}END PROC lageruebersicht von zentrale;{}PROC lageruebersicht von filiale (FILE VAR f):{}  forget ("Auskunft: Filiale " + filialnummer, quiet);{}
  f := sequential file (output, "Auskunft: Filiale " + filialnummer);{}  schreibe dateikopf;{}  fuelle (f, artikel).{}  schreibe dateikopf:{}   line  (f);{}   write (f, "   Lagerübersicht:").{}END PROC lageruebersicht von filiale;{}PROC lageruebersichten aller filialen (FILE VAR f):{}  INT VAR filialnr;{}  bereite datei vor;{}  FOR filialnr FROM 1 UPTO max filialen REP{}    TEXT CONST aktuelle verwaltung ::{}               hauptstelle + ".Filialverwaltung " + text (filialnr);{}    IF   filialnr = int (filialnummer){}
         THEN schreibe eigene daten in auskunftsdatei{}    ELIF exists task (aktuelle verwaltung){}         THEN hole daten dieser filiale;{}              schreibe daten in auskunftsdatei{}    FI{}  PER;{}  forget (ds).{}  bereite datei vor:{}    forget ("Auskunft: Alle Filialen", quiet);{}    f := sequential file (output, "Auskunft: Alle Filialen").{}  schreibe eigene daten in auskunftsdatei:{}    line   (f);{}    write  (f, "   Lagerübersicht für " +{}                   invers ("Filiale " + filialnummer) + ":");{}
    fuelle (f, artikel).{}  hole daten dieser filiale:{}    init ds;{}    call (task(aktuelle verwaltung), filialdaten holen code, ds, reply code);{}    BOUND FILIALDATEN VAR aktuelle daten :: ds.{}  schreibe daten in auskunftsdatei:{}    line   (f);{}    write  (f, "   Lagerübersicht für " +{}                  invers ("Filiale " + text (filialnr)) + ":");{}    fuelle (f, aktuelle daten.waren).{}END PROC lageruebersichten aller filialen;{}PROC fuelle (FILE VAR f, WARENDATEI CONST warendatei):{}  INT VAR artikelnummer;{}
  bereite datei vor;{}  schreibe daten in datei.{}bereite datei vor:{} line (f);{} write(f,"   ============================================================");{} line (f,2);{} write(f,"   | Art.Nr.| Artikelname       |  Preis | Min.Best.| Bestand |");{} line (f);{} write(f,"   +--------+-------------------+--------+----------+---------+");{} line (f).{}schreibe daten in datei:{} FOR artikelnummer FROM 1 UPTO max artikel REP{}     IF warendatei[artikelnummer].artikelname <> ""{}        THEN schreibe in datei; line (f){}
     FI{} PER;{} write(f,"   +--------+-------------------+--------+----------+---------+");{} line (f, 3).{}schreibe in datei:{}  write (f, "   |" + text(artikelnummer,5) + "   | "{}                   + text(warendatei[artikelnummer].artikelname,17) + " |"{}                   + text(warendatei[artikelnummer].preis,7,2) + " | "{}                   + text(warendatei[artikelnummer].mindestbestand,6)+"   | "{}                   + text(warendatei[artikelnummer].bestand,6) + "  |").{}END PROC fuelle;{}
PROC initialisiere dateien:{}  INT VAR kundennummer, artikelnummer;{}  FOR kundennummer FROM 1 UPTO max kunden REP{}      kunde [kundennummer].nachname    := "";{}      kunde [kundennummer].vorname     := "";{}      kunde [kundennummer].geschlecht  := ""{}  PER;{}  FOR artikelnummer FROM 1 UPTO max artikel REP{}      verkaufszahl [artikelnummer]                   :=   0;{}      artikel      [artikelnummer].mindestbestand    :=   0;{}      artikel      [artikelnummer].bestand           :=   0;{}      artikel      [artikelnummer].artikelname       :=  "";{}
      artikel      [artikelnummer].preis             := 0.0;{}      FOR kundennummer FROM 1 UPTO max kunden REP{}          einkaufsdatei[kundennummer][artikelnummer] :=   0{}      PER;{}  PER{}END PROC initialisiere dateien;{}initialisiere dateien{}END PACKET ls warenhaus 2{}