home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
LANGUAGS
/
PASCAL
/
INVENT.PQS
/
INVENT.PAS
Wrap
Pascal/Delphi Source File
|
2000-06-30
|
14KB
|
484 lines
{ INVENTORY PROGRAM FOR
TURBO PASCAL
WRITTEN BY CHARLES STEWART
}
PROGRAM INVENT;
TYPE
ITEM=(A,E,T,F,J,M,X); { X IS FOR DELETED FILE FLAG}
INVRECORD=RECORD
ID:STRING[6];
INVTYPE:ITEM;
DESCRIPTION:STRING[20];
COST:STRING[6];
END;
RINV= ARRAY[1..100] OF INVRECORD;
VAR
FNAME:STRING[12];
SELECTION:CHAR;
RIDNUMBER:STRING[6];
RTYPE:ITEM;
RDESCRIPTION:STRING[20];
RCOST:STRING[6];
RINVRECORD:INVRECORD;
INFILE, OUTFILE : FILE OF INVRECORD;
RESPONSE:STRING[30];
ALLDONE:BOOLEAN;
TEMP:INVRECORD;
TOTAL:REAL;
AMT:REAL;
CODE:INTEGER;
INVENTORY:RINV;
PROCEDURE STALL;
BEGIN
WRITELN;
WRITELN('PRESS RETURN TO CONTINUE ');
WRITELN;
READLN;
END; {STALL}
PROCEDURE DELETE(VAR R:RINV);
VAR CODE, I:INTEGER;
ALLDONE:BOOLEAN;
RE:INTEGER;
CLASS:CHAR;
PP,PG:INTEGER;
RCLASS:ITEM;
BEGIN
ALLDONE := FALSE;
CLRSCR;
PP := 0;
PG := 20;
ASSIGN(OUTFILE,FNAME);
RESET(OUTFILE);
I:=0;
CLRSCR;
REPEAT
IF PP < PG THEN
BEGIN
READ (OUTFILE,RINVRECORD);
WITH RINVRECORD DO
BEGIN
WRITE(I:3,' ');
WRITE(ID:8);
WRITE(DESCRIPTION:22);
WRITE(COST:8);
IF INVTYPE = X THEN WRITE('----DELETED---');
WRITELN;
PP := PP + 1;
I:=I+1;
END;
END
ELSE
BEGIN
WRITE(' PRESS RETURN FOR NEXT PAGE');
PP := 0;
READLN;
CLRSCR;
END;
UNTIL EOF(OUTFILE);
WRITELN;
I:= I - 1;
WRITELN('DELETE WHICH ITEM ');
READLN(RE);
IF RE > I THEN
BEGIN
WRITELN('ERROR',^G,' THAT ITEM DOES NOT EXIST');
STALL;
END
ELSE
BEGIN
SEEK(OUTFILE,0); {REWIND THE POINTER TO 0 POS IN FILE}
SEEK(OUTFILE,RE);
RINVRECORD.INVTYPE := X; {DELETE FILE CODE}
WRITE(OUTFILE,RINVRECORD);
END;
CLOSE(OUTFILE);
END;{DELETE}
PROCEDURE CHANGE(VAR R:RINV);
VAR CODE, I:INTEGER;
ALLDONE:BOOLEAN;
PP,PG:INTEGER;
CLASS:CHAR;
RE:INTEGER;
RCLASS:ITEM;
BEGIN
ALLDONE := FALSE;
CLRSCR;
ASSIGN(OUTFILE,FNAME);
RESET(OUTFILE);
I:=0;
CLRSCR;
PP:= 0; PG := 20;
REPEAT
IF PP < PG THEN
BEGIN
READ (OUTFILE,RINVRECORD);
WITH RINVRECORD DO
BEGIN
WRITE(I:3,' ');
WRITE(ID:8);
WRITE(DESCRIPTION:22);
WRITE(COST:8);
IF INVTYPE = X THEN WRITE ('------DELETED-------');
WRITELN;
I:=I+1;
PP := PP +1;
END;
END
ELSE
BEGIN
WRITE('PRESS RETURN FOR NEXT PAGE');
PP :=0;
READLN;
CLRSCR;
END;
UNTIL EOF(OUTFILE);
WRITELN;
I:= I - 1;
WRITELN('CHANGE WHICH ITEM ');
READLN(RE);
IF RE > I THEN
BEGIN
WRITELN('ERROR NO SUCH RECORD',^G);
STALL;
END
ELSE
BEGIN
SEEK(OUTFILE,0); {REWIND THE POINTER TO 0 POS IN FILE}
SEEK(OUTFILE,RE);
WRITELN('PURCHASE DATE AS YYMMDD');
READLN(RIDNUMBER);
R[I].ID := RIDNUMBER;
WRITELN('INVENTORY TYPE A,E,T,F,J,M,? ');
READLN(CLASS);
IF CLASS <> '?' THEN
BEGIN
IF CLASS = 'A' THEN RCLASS := A
ELSE
IF CLASS = 'E' THEN RCLASS := E
ELSE
IF CLASS = 'T' THEN RCLASS := T
ELSE
IF CLASS = 'F' THEN RCLASS := F
ELSE
IF CLASS = 'J' THEN RCLASS := J
ELSE
RCLASS := M;
END
ELSE
BEGIN
CLRSCR;
WRITELN('A- > APPLIANCE');
WRITELN('E- > ELECTRONIC');
WRITELN('T- > TOY');
WRITELN('F- > FURNITURE');
WRITELN('J- > JEWERY');
WRITELN('M- > MISC. ');
WRITELN('INVENTORY TYPE A,E,T,F,J,M');
READLN(CLASS);
END;
WRITELN('DESCRIPTION OF ITEM 20 CHARACTER MAXIMUM ');
WRITELN('-------------------* AS INDICATED BY THE ASTERISK');
READLN(RDESCRIPTION);
R[I].DESCRIPTION := RDESCRIPTION;
WRITELN(' ITEM COST TO NEAREST DOLLAR (NO DECIMALS)');
READLN(RCOST);
R[I].COST := RCOST;
WRITE(OUTFILE,R[I]);
CLOSE(OUTFILE);
END;
END;{CHANGE}
PROCEDURE SORT(VAR R:RINV);
VAR J,I,INDEX:INTEGER;
BEGIN
CLRSCR;
WRITELN('SORT ROUTINE OF THE INPUT DATA');
ASSIGN(INFILE,FNAME);
RESET(INFILE);
INDEX := 0;
WHILE NOT EOF(INFILE) DO
BEGIN
INDEX := INDEX + 1;
READ (INFILE,R[INDEX]);
END;
CLOSE(INFILE);
ASSIGN(OUTFILE,FNAME);
REWRITE(OUTFILE);
FOR I := 1 TO INDEX-1 DO
FOR J := I+1 TO INDEX DO
IF R[I].ID > R[J].ID
THEN
BEGIN {SWAP EM}
TEMP := R[I];
R[I] := R[J];
R[J] := TEMP;
END;
FOR I:= 1 TO INDEX DO
WRITE(OUTFILE,R[I]);
WRITELN(' SORTED FILE WRITTEN TO DISK FILE ',FNAME);
CLOSE(OUTFILE);
STALL;
END; {SORT ROUTINE}
PROCEDURE TYPESORT(VAR R:RINV);
VAR J,I,INDEX:INTEGER;
BEGIN
CLRSCR;
WRITELN('SORT ROUTINE OF THE INPUT DATA');
RESET(INFILE);
INDEX := 0;
WHILE NOT EOF(INFILE) DO
BEGIN
INDEX := INDEX + 1;
READ (INFILE,R[INDEX]);
END;
CLOSE(INFILE);
ASSIGN(OUTFILE,FNAME);
REWRITE(OUTFILE);
FOR I := 1 TO INDEX-1 DO
FOR J := I+1 TO INDEX DO
IF R[I].INVTYPE > R[J].INVTYPE
THEN
BEGIN {SWAP EM}
TEMP := R[I];
R[I] := R[J];
R[J] := TEMP;
END;
FOR I:= 1 TO INDEX DO
WRITE(OUTFILE,R[I]);
CLOSE(OUTFILE);
END; {SORT ROUTINE}
PROCEDURE CREATE(VAR R:RINV);
VAR CLASS:CHAR;
RCLASS:ITEM;
BEGIN
ALLDONE:=FALSE;
ASSIGN(OUTFILE,FNAME);
REWRITE(OUTFILE);
WHILE NOT ALLDONE DO
BEGIN
WRITELN('PURCHASE DATE AS YYMMDD');
READLN(RIDNUMBER);
RINVRECORD.ID := RIDNUMBER;
WRITELN('INVENTORY TYPE A,E,T,F,J,M,? ');
READLN(CLASS);
IF CLASS <> '?' THEN
BEGIN
IF CLASS = 'A' THEN RCLASS := A
ELSE
IF CLASS = 'E' THEN RCLASS := E
ELSE
IF CLASS = 'T' THEN RCLASS := T
ELSE
IF CLASS = 'F' THEN RCLASS := F
ELSE
IF CLASS = 'J' THEN RCLASS := J
ELSE
RCLASS := M;
END
ELSE
BEGIN
CLRSCR;
WRITELN('A- > APPLIANCE');
WRITELN('E- > ELECTRONIC');
WRITELN('T- > TOY');
WRITELN('F- > FURNITURE');
WRITELN('J- > JEWERY');
WRITELN('M- > MISC. ');
WRITELN('INVENTORY TYPE A,E,T,F,J,M,? ');
READLN(CLASS);
END;
RINVRECORD.INVTYPE := RCLASS;
WRITELN('DESCRIPTION OF ITEM 20 CHARACTER MAXIMUM ');
WRITELN('-------------------* AS INDICATED BY THE ASTERISK');
READLN(RDESCRIPTION);
RINVRECORD.DESCRIPTION := RDESCRIPTION;
WRITELN(' ITEM COST TO NEAREST DOLLAR (NO DECIMALS)');
READLN(RCOST);
RINVRECORD.COST := RCOST;
WRITE(OUTFILE,RINVRECORD);
WRITELN(' IF YOU ARE DONE TYPE AN ASTERISK (*), OTHERWISE JUST HIT ENTER');
READLN (RESPONSE);
IF RESPONSE = '*' THEN ALLDONE := TRUE;
END; {WHILE ALLDONE LOOP}
CLOSE(OUTFILE);
SORT(INVENTORY);
END; {CREATE}
PROCEDURE MENU(VAR SELECTION:CHAR);
BEGIN
CLRSCR;
WRITELN('Inventory Management System':53);
WRITELN('by Charles A. Stewart':50);
WRITELN;
WRITELN('Copyright 1986 all rights reserved':56);
WRITELN;
WRITELN('Work file name ',fname);
WRITELN;
WRITELN(' A--> Create new inventory file');
WRITELN(' B--> Add items to inventory ');
WRITELN(' C--> Change items in inventory');
WRITELN(' D--> Delete item in inventory');
WRITELN(' E--> Print the inventory to printer');
WRITELN(' F--> Assign file name ');
WRITELN(' G--> END PROGRAM');
WRITELN;
READLN (SELECTION);
IF SELECTION = 'F' THEN
BEGIN
WRITE('File name please ');
readln(fname);
END;
END;{MENU}
PROCEDURE ADD(VAR R:RINV);
VAR I:INTEGER;
ALLDONE:BOOLEAN;
CLASS:CHAR;
RCLASS:ITEM;
BEGIN
ALLDONE := FALSE;
CLRSCR;
ASSIGN(OUTFILE,FNAME);
RESET(OUTFILE);
SEEK(OUTFILE,FILESIZE(OUTFILE));
WHILE NOT ALLDONE DO
BEGIN
WRITELN('PURCHASE DATE AS YYMMDD');
READLN(RIDNUMBER);
RINVRECORD.ID := RIDNUMBER;
WRITELN('INVENTORY TYPE A,E,T,F,J,M,? ');
READLN(CLASS);
IF CLASS <> '?' THEN
BEGIN
IF CLASS = 'A' THEN RCLASS := A
ELSE
IF CLASS = 'E' THEN RCLASS := E
ELSE
IF CLASS = 'T' THEN RCLASS := T
ELSE
IF CLASS = 'F' THEN RCLASS := F
ELSE
IF CLASS = 'J' THEN RCLASS := J
ELSE
RCLASS := M;
END
ELSE
BEGIN
CLRSCR;
WRITELN('A- > APPLIANCE');
WRITELN('E- > ELECTRONIC');
WRITELN('T- > TOY');
WRITELN('F- > FURNITURE');
WRITELN('J- > JEWERY');
WRITELN('M- > MISC. ');
WRITELN('INVENTORY TYPE A,E,T,F,J,M,? ');
READLN(CLASS);
END;
RINVRECORD.INVTYPE := RCLASS;
WRITELN('DESCRIPTION OF ITEM 20 CHARACTER MAXIMUM ');
WRITELN('-------------------* AS INDICATED BY THE ASTERISK');
READLN(RDESCRIPTION);
RINVRECORD.DESCRIPTION := RDESCRIPTION;
WRITELN(' ITEM COST TO NEAREST DOLLAR (NO DECIMALS)');
READLN(RCOST);
RINVRECORD.COST := RCOST;
WRITE(OUTFILE,RINVRECORD);
WRITELN(' IF YOU ARE DONE TYPE AN ASTERISK (*), OTHERWISE JUST HIT ENTER');
READLN (RESPONSE);
IF RESPONSE = '*' THEN ALLDONE := TRUE;
END; {WHILE ALLDONE LOOP}
FLUSH(OUTFILE);
CLOSE(OUTFILE);
SORT(INVENTORY);
END; {ADD}
PROCEDURE PRINT(VAR R:RINV);
CONST PP=56;
VAR PG:INTEGER;
BEGIN
CLRSCR;
ASSIGN (INFILE,FNAME);
RESET(INFILE);
TYPESORT(INVENTORY);
WRITELN(LST,'Household Inventory');
WRITELN;
WRITELN(LST,'Copyright 1986 by Charles Stewart');
WRITELN(LST,'All Rights Reserved.');
WRITELN(LST);
ASSIGN(INFILE,FNAME);
RESET(INFILE);
TOTAL := 0;
WRITELN(LST,'DATE':8,'DESCRIPTION':22,' COST':6,' CLASS');
WRITELN(LST,'===============================================================');
Pg := 7;
REPEAT
READ (INFILE,RINVRECORD);
WITH RINVRECORD DO
BEGIN
IF Pg > PP THEN
BEGIN
WRITELN(LST,^l); { FORM FEED }
WRITELN(LST,'Household Inventory');
WRITELN;
WRITELN(LST,'Copyright 1986 by Charles Stewart');
WRITELN(LST,'All Rights Reserved.');
WRITELN(LST);
WRITELN(LST,'DATE':8,'DESCRIPTION':22,' COST':6,' CLASS');
WRITELN(LST,'===============================================================');
Pg := 7;
END; {IF PP}
IF INVTYPE <> X THEN
BEGIN
VAL (COST,AMT,CODE);
TOTAL := TOTAL + AMT;
Pg := Pg + 1;
WRITE(LST,ID:8);
WRITE(LST,DESCRIPTION:22);
WRITE(LST,' $');
WRITE(LST,COST:6);
WRITE(LST,' ');
CASE INVTYPE OF
A: WRITE(LST,'APPLANCE');
E: WRITE(LST,'ELECTRONIC');
T: WRITE(LST,'TOY');
J: WRITE(LST,'JEWELRY');
F: WRITE(LST,'FURNITURE');
M: WRITE(LST,'MISC. ');
END; {CASE}
WRITELN(LST);
END;{WHILE}
END;
UNTIL EOF(INFILE);
CLOSE(INFILE);
WRITELN(LST);
WRITELN(LST,'===============================================================');
WRITELN(LST,'TOTAL ----------------> $',TOTAL:5:2);
END;{PRINT}
BEGIN {MAIN PROGRAM}
FNAME :=('INVENT.DAT'); {DEFAULT FILE NAME}
REPEAT
MENU(SELECTION);
CASE SELECTION OF
'A': CREATE(INVENTORY);
'B': ADD(INVENTORY);
'D': DELETE(INVENTORY);
'C': CHANGE(INVENTORY);
'E': PRINT(INVENTORY);
END;{CASE}
UNTIL SELECTION > 'F';
END. {PROGRAM}