home *** CD-ROM | disk | FTP | other *** search
- { 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}
-
-