|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 10752 (0x2a00) Types: TextFile Names: »VAREFIL.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer └─ ⟦this⟧ »VAREFIL.PAS« └─⟦09235ab48⟧ Bits:30003065 Demoprogrammer K-Z til Pascal bog └─ ⟦this⟧ »VAREFIL.PAS« └─⟦092727b26⟧ Bits:30005927 Demoprogrammer til Pascal bog (Jet-80) └─ ⟦this⟧ »VAREFIL.PAS«
PROGRAM varefil; CONST varemax = 500; TYPE parpost = RECORD varenummer, postnummer : INTEGER; END; indextype = ARRAY(.1 .. varemax.) OF parpost; str30 = STRING(.30.); varepost = RECORD nr : INTEGER; navn : str30; pris : REAL; beholdning, minimum : INTEGER; END; VAR index : indextype; indexfil : FILE OF parpost; artikelfil : FILE OF varepost; postantal, i : INTEGER; ch : CHAR; PROCEDURE sorter; VAR slut : BOOLEAN; byt : parpost; i, j : INTEGER; BEGIN (* sorter *) i := postantal; REPEAT i := i - 1; slut := TRUE; FOR j := 1 TO i DO IF index(.j.).varenummer > index(.j + 1.).varenummer THEN BEGIN slut := FALSE; byt := index(.j.); index(.j.) := index(.j + 1.); index(.j + 1.) := byt; END; UNTIL (i = 1) OR slut; END; (* sorter *) PROCEDURE retur; VAR ch : CHAR; BEGIN (* retur *) WRITE('Tast <RETUR>: '); REPEAT READ(KBD, ch); UNTIL ch = CHR(13); END; (* retur*) PROCEDURE opret; VAR varefilnavn, indexfilnavn : STRING(.14.); BEGIN (* opret *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('Hvad skal det nye varekartotek hedde: '); READ(varefilnavn); GOTOXY(5, 4); WRITE('Hvad skal indexfilen hedde: '); READ(indexfilnavn); ASSIGN(artikelfil, varefilnavn); ASSIGN(indexfil, indexfilnavn); REWRITE(artikelfil); REWRITE(indexfil); postantal := 0; GOTOXY(5, 6); WRITE(varefilnavn, ' og ', indexfilnavn, ' er nu oprettet'); GOTOXY(5, 8); retur; END; (* opret *) PROCEDURE hvilkefiler; VAR varefilnavn, indexfilnavn : STRING(.14.); i : INTEGER; BEGIN (* hvilkefiler *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('Hvad hedder varekartoteket: '); READLN(varefilnavn); GOTOXY(5, 4); WRITE('Hvad hedder dets indexfil: '); READLN(indexfilnavn); ASSIGN(artikelfil, varefilnavn); ASSIGN(indexfil, indexfilnavn); RESET(artikelfil); RESET(indexfil); i := 0; WHILE NOT EOF(indexfil) DO BEGIN i := i + 1; READ(indexfil, index(.i.)); END; postantal := i; GOTOXY(5, 6); retur; END; (* hvilkefiler *) PROCEDURE udskriv; VAR udfil : TEXT; udnavn : STRING(.4.); vare : varepost; ch : CHAR; i : INTEGER; BEGIN (* udskriv *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('Ønskes udskrift på skærm eller printer (S/P): '); REPEAT READ(KBD, ch); UNTIL ch IN (.'S', 's', 'P', 'p'.); WRITELN(ch); WRITELN; IF ch IN (.'S', 's'.) THEN udnavn := 'CON:' ELSE udnavn := 'LST:'; ASSIGN(udfil, udnavn); REWRITE(udfil); i := 0; WHILE i < postantal DO BEGIN i := i + 1; IF index(.i.).varenummer > 0 THEN BEGIN SEEK(artikelfil, index(.i.).postnummer); READ(artikelfil, vare); WITH vare DO BEGIN WRITELN(udfil, ' Varenummer: ', nr : 7, ' Vare: ', navn); WRITELN(udfil, ' Enhedspris: ', pris : 7 : 2, ' Beholdning: ', beholdning : 6, ' Minimumsbeholdning: ', minimum : 6); WRITELN(udfil); END; END; END; WRITELN; retur; END; (*udskriv *) PROCEDURE slet; VAR vare : varepost; nummer : INTEGER; ch : CHAR; i : INTEGER; BEGIN (* slet *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('Tast varenummer: '); READ(nummer); i := 0; REPEAT i := i + 1; UNTIL (index(.i.).varenummer >= nummer) OR (i = postantal); IF index(.i.).varenummer <> nummer THEN BEGIN GOTOXY(5, 4); WRITE('Dette varenummer findes ikke'); END ELSE BEGIN SEEK(artikelfil, index(.i.).postnummer); READ(artikelfil, vare); SEEK(artikelfil, index(.i.).postnummer); GOTOXY(5, 4); WRITE('Skal ''', vare.navn, ''' slettes (J/N): '); REPEAT READ(KBD, ch); UNTIL ch IN (.'J', 'j', 'N', 'n'.); IF ch IN (.'J', 'j'.) THEN BEGIN vare.nr := -1; WRITE(artikelfil, vare); index(.i.).varenummer := -1; END; END; sorter; GOTOXY(5, 6); retur; END; (* slet *) PROCEDURE ret; VAR nummer : INTEGER; vare : varepost; ch : CHAR; i : INTEGER; BEGIN (* ret *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('Tast varenummer: '); READ(nummer); i := 0; REPEAT i := i + 1; UNTIL (index(.i.).varenummer >= nummer) OR (i = postantal); IF index(.i.).varenummer <> nummer THEN BEGIN GOTOXY(5, 4); WRITE('Dette varenummer findes ikke'); END ELSE BEGIN SEEK(artikelfil, index(.i.).postnummer); READ(artikelfil, vare); SEEK(artikelfil, index(.i.).postnummer); WITH vare DO BEGIN GOTOXY(5, 4); WRITE('N Varenavn: ', navn); GOTOXY(5, 6); WRITE('P Enhedspris: ', pris : 7 : 2); GOTOXY(5, 8); WRITE('B Varebeholdning: ', beholdning); GOTOXY(5, 10); WRITE('M Minimumsbeholdning: ', minimum); GOTOXY(5, 12); WRITE('F FÆRDIG'); REPEAT GOTOXY(0, 14); WRITE(CLREOS); GOTOXY(5, 14); WRITE('Tast kommando (N/P/B/M/F): '); REPEAT READ(KBD, ch); UNTIL ch IN (.'N', 'n', 'P', 'p', 'B', 'b', 'M', 'm', 'F', 'f'.); WRITE(ch); IF NOT (ch IN (.'F', 'f'.)) THEN BEGIN GOTOXY(5, 16); WRITE('Tast ny værdi: '); END; CASE ch OF 'N', 'n' : READ(navn); 'P', 'p' : READ(pris); 'B', 'b' : READ(beholdning); 'M', 'm' : READ(minimum); END; IF NOT (ch IN (.'F', 'f'.)) THEN BEGIN GOTOXY(5, 18); retur; END; UNTIL ch IN (.'F', 'f'.); WRITE(artikelfil, vare); END; END; END; (* ret *) PROCEDURE indsaet; VAR nyvare : varepost; indexnummer, nummer, i : INTEGER; BEGIN (* indsaet *) WRITE(CLRHOM); GOTOXY(5, 0); WRITE('NY VARE I LAGERREGISTERET'); GOTOXY(5, 2); WRITE('Tast varenummer: '); READLN(nummer); (* Findes varen i forvejen? *) i := 1; WHILE (index(.i.).varenummer < nummer) AND (i < postantal) DO i := i + 1; IF index(.i.).varenummer = nummer THEN BEGIN GOTOXY(5, 4); WRITE('Dette varenummer findes allerede'); END ELSE BEGIN IF postantal = 0 (* Helt tomt register *) THEN BEGIN postantal := 1; indexnummer := 1; index(.1.).varenummer := nummer; index(.1.).postnummer := 0; END ELSE IF index(.1.).varenummer < 0 (* Gl post kan bruges *) THEN BEGIN indexnummer := 1; index(.1.).varenummer := nummer; END ELSE (* Tilføj ny post *) BEGIN postantal := postantal + 1; indexnummer := postantal; index(.indexnummer.).varenummer := nummer; index(.indexnummer.).postnummer := postantal - 1; END; WITH nyvare DO BEGIN nr := nummer; GOTOXY(5, 4); WRITE('Varenavn: '); READ(navn); GOTOXY(5, 6); WRITE('Enhedspris: '); READ(pris); GOTOXY(5, 8); WRITE('Varebeholdning: '); READ(beholdning); GOTOXY(5, 10); WRITE('Minimumsbeholdning: '); READ(minimum); END; SEEK(artikelfil, index(.indexnummer.).postnummer); WRITE(artikelfil, nyvare); sorter; END; GOTOXY(5, 12); retur; END; (* indsaet *) BEGIN (* varefil *) WRITE(CLRHOM); GOTOXY(5, 2); WRITE('V A R E R E G I S T E R'); GOTOXY(5, 4); WRITE('Skal der oprettes et nyt vareregister (J/N): '); REPEAT READ(KBD, ch); UNTIL ch IN (.'J', 'j', 'N', 'n'.); IF ch IN (.'J', 'j'.) THEN opret ELSE hvilkefiler; REPEAT WRITE(CLRHOM); GOTOXY(5, 2); WRITE('V A R E R E G I S T E R'); GOTOXY(5, 6); WRITE('U Udskrive hele vareregisteret'); GOTOXY(5, 8); WRITE('L Læse eller rette en varepost'); GOTOXY(5, 10); WRITE('S Slette en varepost'); GOTOXY(5, 12); WRITE('I Indsætte en ny varepost'); GOTOXY(5, 14); WRITE('A Afslutte programkørslen'); GOTOXY(5, 18); WRITE('Tast kommando (U/L/S/I/A): '); REPEAT READ(KBD, ch); UNTIL ch IN (.'U', 'u', 'L', 'l', 'S', 's', 'I', 'i', 'A', 'a'.); WRITE(ch); CASE ch OF 'U', 'u' : udskriv; 'L', 'l' : ret; 'S', 's' : slet; 'I', 'i' : indsaet; END; UNTIL ch IN (.'A', 'a'.); SEEK(indexfil, 0); FOR i := 1 TO postantal DO WRITE(indexfil, index(.i.)); CLOSE(artikelfil); CLOSE(indexfil); WRITELN; END. (* varefil *) «eof»