home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol063
/
receival.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
21KB
|
1,046 lines
PROGRAM ACCOUNTS_RECEIVABLE; {$P}
TYPE
MAILING = RECORD
NAME:ARRAY[1..30] OF CHAR;
STREET_NUMBER: ARRAY[1..6] OF CHAR;
STREET: ARRAY[1..20] OF CHAR;
CITY: ARRAY[1..18] OF CHAR;
STATE: ARRAY[1..10] OF CHAR;
ZIP: ARRAY[1..10] OF CHAR;
ATTENTION: ARRAY[1..30] OF CHAR;
ACCT_NUMBER: ARRAY[1..4] OF CHAR;
END;
ALPHABET = RECORD
START:INTEGER;
FINISH: INTEGER;
END;
FA = FILE OF ALPHABET;
ENTRY = RECORD
MONTH:ARRAY[1..2] OF CHAR;
DAY: ARRAY[1..2] OF CHAR;
YEAR: ARRAY[1..2] OF CHAR;
INVOICE_NUMBER: ARRAY[1..6] OF CHAR;
PURCHASE_ORDER_NUMBER: ARRAY[1..10] OF CHAR;
AMOUNT:REAL;
END;
FI = FILE OF ENTRY;
FO = FILE OF CHAR;
M = FILE OF MAILING;
TR = ARRAY [1..10] OF CHAR;
$STRING80 = STRING 80;
$STRING0 = STRING 0;
$STRING255 = STRING 255;
$STRING14 = STRING 14;
$STRING30 = STRING 30;
$STR2 = STRING 2;
$STR4 = STRING 4;
VAR
FALP:FA;
ALPFILE:$STRING14;
REC_NUMBER,END_OF_FILE:INTEGER;
DESIRED_NAME:ARRAY[1..30] OF CHAR;
DES_NAM:$STRING80;
FOUND:BOOLEAN;
FIN: FI;
INC,NUMBER_OF_RECORDS,COUNTER,I,N: INTEGER;
NAME_AND_ADDRESS: MAILING;
NAD:M;
INFORMATION: ENTRY;
FOUT:FO;
COR,ANSWER,CONTINUE:CHAR;
ACCOUNT_NAME:$STRING30;
FILENAM,FILNAME:$STRING14;
ACCTNAME: ARRAY[1..30] OF CHAR;
FNAME:ARRAY[1..4] OF CHAR;
STATEMENT,CONT,POST_TO_ANOTHER_ACCOUNT,NEWACCOUNT,RECURSIVE,NEWFILE:BOOLEAN;
MO,DA,YR,INO,PNO,NA,ST_NO,ST,CIT,STA,ZI,ATT: $STRING80;
DRIVE:$STR2;
ACN,EXTENSION:$STR4;
BALANCE:REAL;
PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL;
FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL;
PROCEDURE CLEAR_SCREEN;
BEGIN
WRITE(CHR(27),'*',CHR(0),CHR(0),CHR(0),CHR(0));
END;
PROCEDURE ERASE_LINES(STARTING_LINE,NUMBER_OF_LINES:INTEGER);
VAR
I:INTEGER;
BLANKS:STRING 80;
BEGIN
BLANKS:=' ';{40SPACES}
FOR I:= 1 TO NUMBER_OF_LINES DO
BEGIN
WRITE(CHR(27),'=',CHR(STARTING_LINE+31),CHR(32),BLANKS,BLANKS);
STARTING_LINE:=STARTING_LINE + 1;
END
END;
PROCEDURE MOVE_CURSOR (X,Y:INTEGER);
BEGIN
WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31));
END;
PROCEDURE PROMPT (X,Y,LENGTH: INTEGER; P:$STRING80;
PROTECTED_FIELD_DESIRED:BOOLEAN);
VAR
UNDERLINE: STRING 80;
I:INTEGER;
BEGIN
UNDERLINE:='_';
FOR I:= 1 TO LENGTH DO APPEND (UNDERLINE,'_');
IF PROTECTED_FIELD_DESIRED = FALSE THEN
WRITE (CHR(27),'=',CHR(Y+31),CHR(X+31),P,UNDERLINE)
ELSE
WRITE (CHR(27),'=',CHR(Y+31),CHR(X+31),CHR(27),')',P,
UNDERLINE,CHR(27),'(');
END;
FUNCTION INPUT_DATA(X,Y,LEN:INTEGER; ALPHANUMERIC:BOOLEAN;
MAXIMUM_VALUE,MINIMUM_VALUE:REAL):$STRING80;
VAR
DATA,BLANKS:$STRING80;
I:INTEGER;
PROCEDURE CORRECT(X,Y:INTEGER);
VAR
I,A,B:INTEGER;
BEGIN
ERASE_LINES (20,2);
WRITE (CHR(7));
MOVE_CURSOR (1,20);
IF (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) THEN
WRITE('TERM TOO LONG ');
MOVE_CURSOR(X,Y);
WRITE (' ');
A:=X;
B:=Y;
FOR I:=1 TO LENGTH(DATA) DO
BEGIN
MOVE_CURSOR(A,B);
WRITE(' ');
A:=A+1;
END;
MOVE_CURSOR(X,Y);
WRITE('_');
A:=X;
B:=Y;
FOR I:= 1 TO (LEN-1) DO
BEGIN
MOVE_CURSOR(A,B);
WRITE('_');
A:=A+1;
END;
MOVE_CURSOR(X,Y);
READ(DATA);
ERASE_LINES(20,1);
END;
BEGIN
BLANKS:=' ';{40SPACES}
MOVE_CURSOR(X,Y);
READ(DATA);
WHILE (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) DO CORRECT(X,Y);
IF LENGTH(DATA) = 0 THEN
BEGIN
DATA:=' ';
FOR I:= 1 TO (LEN-1) DO APPEND (DATA,' ');
END;
IF LENGTH(DATA) < LEN THEN
FOR I:= LENGTH(DATA) TO LEN DO APPEND(DATA,' ');
INPUT_DATA:=DATA;
END;
{************ PROCEDURE TO DETERMINE NUMBER OF RECORDS****}
PROCEDURE NUMBER_RECORDS (FILENAM:$STRING14;CODE:INTEGER);
BEGIN
IF CODE = 1 THEN
BEGIN
RESET(FILENAM,FIN);
WITH INFORMATION DO
BEGIN
READ(FIN:1,INFORMATION);
NUMBER_OF_RECORDS:=(((ORD(PURCHASE_ORDER_NUMBER[1])-48)*1000)+
((ORD(PURCHASE_ORDER_NUMBER[2])-48)*100)+
((ORD(PURCHASE_ORDER_NUMBER[3])-48)*10)+
((ORD(PURCHASE_ORDER_NUMBER[4])-48)*1));
END; {OF WITH}
END; {OF CODE = 1}
IF CODE = 2 THEN
BEGIN
RESET(FILENAM,NAD);
WITH NAME_AND_ADDRESS DO
BEGIN
READ(NAD:1,NAME_AND_ADDRESS);
NUMBER_OF_RECORDS:=(((ORD(ACCT_NUMBER[1])-48)*1000)+
((ORD(ACCT_NUMBER[2])-48)*100)+
((ORD(ACCT_NUMBER[3])-48)*10)+
((ORD(ACCT_NUMBER[4])-48)*1));
END; {OF WITH}
END; {OF CODE = 2}
END; {OF PROCEDURE}
PROCEDURE PRINT_FILE (FILENAM:$STRING14); {*******************}
TYPE
C = FILE OF CHAR;
VAR
SCROLLING:CHAR;
ANSWER:CHAR;
HARDCOPY:BOOLEAN;
FOUT:C;
MASK:$STRING80;
PAGE,COUNTER:INTEGER;
ST:ARRAY[1..3] OF CHAR;
BEGIN {BEGIN PROCEDURE}
CLEAR_SCREEN;
REPEAT
WRITE(' DO YOU WANT A HARDCOPY OF THE FILE? Y/N ');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
HARDCOPY:=TRUE;
REWRITE('LST:',FOUT);
END;
IF ANSWER = 'N' THEN HARDCOPY:=FALSE;
RESET (FILENAM,FIN);
CLEAR_SCREEN;
NUMBER_RECORDS(FILENAM,1);
WITH NAME_AND_ADDRESS DO
BEGIN
IF STATE = 'VIRGINIA ' THEN ST:='VA.';
IF HARDCOPY = FALSE THEN
BEGIN
WRITELN(NAME);
WRITELN(STREET_NUMBER,' ',STREET);
IF ST = 'VA.' THEN WRITELN(CITY,',',ST,' ',ZIP) ELSE
WRITELN(CITY,',',STATE,' ',ZIP);
WRITELN;
END;
IF HARDCOPY = TRUE THEN
BEGIN
WRITELN(FOUT,CHR(12));
WRITELN(FOUT,' ');
WRITELN(FOUT,NAME);
WRITELN(FOUT,STREET_NUMBER,' ',STREET);
IF ST = 'VA.' THEN WRITELN(CITY,',',ST,' ',ZIP) ELSE
WRITELN(CITY,',',STATE,' ',ZIP);
WRITELN(FOUT,' ');
WRITELN(FOUT,ATTENTION);
END;
END; {OF WITH NAME AND ADDRESS}
WITH INFORMATION DO
BEGIN
IF HARDCOPY = FALSE THEN
BEGIN
MOVE_CURSOR(1,6);
WRITE('DATE');
MOVE_CURSOR(11,6);
WRITE('P.O. NO.');
MOVE_CURSOR(23,6);
WRITE('INVOICE NO.');
MOVE_CURSOR(41,6);
WRITE('CHARGES');
MOVE_CURSOR(56,6);
WRITE('CREDITS');
MOVE_CURSOR(70,6);
WRITE('BALANCE');
END;
IF HARDCOPY = TRUE THEN
WRITELN(FOUT,'DATE P.O.NO. INVOICE NO. ',
'CHARGES CREDITS BALANCE');
COUNTER:=7;
PAGE := 1;
BALANCE:=0.0;
FOR I:= 2 TO NUMBER_OF_RECORDS DO
BEGIN
READ(FIN:I,INFORMATION);
BALANCE:=BALANCE+AMOUNT;
IF HARDCOPY = FALSE THEN
BEGIN
IF COUNTER > 20 THEN
BEGIN
PROMPT(1,22,0,'ENTER ANY CHARACTER TO CONTINUE',FALSE);
READ(SCROLLING);
ERASE_LINES(7,15);
MOVE_CURSOR(50,2);
PAGE:=PAGE + 1;
WRITE('PAGE ',PAGE);
ERASE_LINES(22,1);
MOVE_CURSOR(1,7);
COUNTER:=7;
END;
WRITELN;
MOVE_CURSOR(1,COUNTER);
WRITE(MONTH,'/',DAY,'/',YEAR);
MOVE_CURSOR(11,COUNTER);
WRITE(PURCHASE_ORDER_NUMBER);
MOVE_CURSOR(23,COUNTER);
WRITE(INVOICE_NUMBER);
IF AMOUNT > 0.00 THEN
BEGIN
MOVE_CURSOR(41,COUNTER);
WRITE('$',AMOUNT:9:2);
END;
IF AMOUNT < 0.00 THEN
BEGIN
MOVE_CURSOR(56,COUNTER);
WRITE('$',AMOUNT:9:2);
END;
MOVE_CURSOR(70,COUNTER);
WRITE('$',BALANCE:9:2);
COUNTER:=COUNTER + 2;
END; {FOR HARDCOPY = FALSE}
IF HARDCOPY = TRUE THEN
BEGIN
WRITELN(FOUT,' ');
WRITE(FOUT,MONTH,'/',DAY,'/',YEAR,' ',INVOICE_NUMBER,' ');
IF AMOUNT > 0.0 THEN
WRITELN(FOUT,PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2);
IF AMOUNT < 0.0 THEN
WRITELN(FOUT,PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2,' CREDIT');
IF COUNTER > 40 THEN
BEGIN
WRITELN(FOUT,CHR(12));
WRITELN(FOUT,' ');
WRITELN(FOUT,' ');
WRITELN(FOUT,' PAGE: ',PAGE);
COUNTER:=1;
PAGE:=PAGE + 1;
END;
END; {FOR HARDCOPY = TRUE}
END; {FOR LOOP}
END; {THIS IS FOR WITH STATEMENTS}
ERASE_LINES(22,1);
IF HARDCOPY = FALSE THEN
BEGIN
MOVE_CURSOR(1,22);
WRITELN('BALANCE DUE: ','$',BALANCE:9:2);
END;
IF HARDCOPY = TRUE THEN
BEGIN
WRITELN(FOUT,' ');
WRITELN(FOUT,' ');
WRITELN(FOUT,'BALANCE DUE: ','$',BALANCE:9:2);
END;
END; {PROCEDURE}
{**********************************************************}
PROCEDURE ENTER_FILE_NAME;
VAR
FOUND,ERROR:BOOLEAN;
ANSWER:CHAR;
COUNTER:INTEGER;
BEGIN
REPEAT
ERROR:=FALSE;
CLEAR_SCREEN;
WRITELN(' ACCOUNTS RECEIVABLE');
WRITELN;
WRITELN;
WRITELN;
IF (POST_TO_ANOTHER_ACCOUNT = FALSE) OR (STATEMENT = TRUE) THEN
BEGIN
WRITE('ENTER NAME & ADDRESS FILE AS DRIVE:NAME.EXT ');
SETLENGTH(FILNAME,0);
READLN(FILNAME);
RESET(FILNAME,NAD);
IF EOF(NAD) THEN
BEGIN
REPEAT
MOVE_CURSOR(1,10);
WRITE('FILE NOT FOUND. IS THIS A NEW FILE? Y/N ');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
CLEAR_SCREEN;
NEWACCOUNT:=TRUE;
PROMPT(1,10,0,'EXIT TO CP/M BY TYPE CONTROL-C',FALSE);
PROMPT(1,11,0,'THEN CREATE NEW NAME & ADDRESS FILE',FALSE);
END;
IF ANSWER = 'N' THEN ERROR:= TRUE;
END; {OF IF EOF NAD}
END; {OF IF POST..}
UNTIL (ERROR = FALSE);
END; {PROCEDURE}
{****************** FIND THE ACCOUNT NAME *******************}
PROCEDURE FIND( FNAME:$STRING14; FLAG:INTEGER);
VAR
FINISHED:BOOLEAN;
I,LINE_COUNTER:INTEGER;
LOCALIZERS:ALPHABET;
LINE_FLAG:BOOLEAN;
FIRST_LETTER:INTEGER;
AN:ARRAY[1..4] OF CHAR;
BEGIN
DRIVE:='B:';
EXTENSION:='.INV';
REPEAT
FINISHED:=TRUE;
REC_NUMBER:=1;
FOUND:=FALSE;
END_OF_FILE:=COUNTER -1; {COUNTER WAS SET = NUMBER_OF_RECORDS + 1
IN THE ENTER_FILE_NAME PROCEDURE}
CLEAR_SCREEN;
MOVE_CURSOR(2,2);
IF FLAG = 1 THEN
WRITELN(' PROCEDURE TO DETERMINE IF A NAME IS PRESENT IN FILE ',
FNAME)
ELSE IF FLAG = 2 THEN
WRITELN(' PROCEDURE TO FIND AND CHANGE A RECORD')
ELSE IF FLAG = 3 THEN
WRITELN(' PROCEDURE TO FIND AND DELETE A RECORD');
PROMPT(1,4,30,'ENTER THE NAME YOU WISH TO LOCATE',FALSE);
DES_NAM:=INPUT_DATA(35,4,30,TRUE,0,0);
FOR I:= 1 TO 30 DO DESIRED_NAME[I]:=DES_NAM[I];
CLEAR_SCREEN;
PROMPT(2,12,0,'PROGRAM NOW SEARCHING FILE. ONE MOMENT PLEASE.',FALSE);
RESET(FNAME,NAD);
I:=1;
WHILE FNAME[I] <> '.' DO
BEGIN
ALPFILE[I]:=FNAME[I];
I:=I+1;
END;
ALPFILE[I]:='.';
ALPFILE[I+1]:='A';
ALPFILE[I+2]:='L';
ALPFILE[I+3]:='P';
IF (I+4) < 14 THEN
BEGIN
I:=I+4;
FOR N:= I TO 14 DO
ALPFILE[N]:=' ';
END;
RESET(ALPFILE,FALP);
WITH LOCALIZERS DO
BEGIN
FIRST_LETTER:=ORD(DESIRED_NAME[1]) - 64;
READ(FALP:FIRST_LETTER,LOCALIZERS);
WITH NAME_AND_ADDRESS DO
BEGIN
I:=START;
REPEAT
READ(NAD:I,NAME_AND_ADDRESS);
IF DESIRED_NAME = NAME THEN
BEGIN
FOUND:=TRUE;
AN:=ACCT_NUMBER;
REC_NUMBER:=I;
ERASE_LINES(12,1);
PROMPT(1,1,0,'INFORMATION AS FOUND IN FILE: ',FALSE);
PROMPT(1,3,0,'NAME: ',FALSE);
PROMPT(1,5,0,'#: ',FALSE);
PROMPT(10,5,0,'STREET: ',FALSE);
PROMPT(1,7,0,'CITY: ',FALSE);
PROMPT(28,7,0,'STATE: ',FALSE);
PROMPT(48,7,0,'ZIP: ',FALSE);
PROMPT(1,9,0,'ATTENTION: ',FALSE);
PROMPT(1,11,0,'ACCOUNT NUMBER: ',FALSE);
MOVE_CURSOR(6,3);
WRITE(NAME);
MOVE_CURSOR(4,5);
WRITE(STREET_NUMBER);
MOVE_CURSOR(19,5);
WRITE(STREET);
MOVE_CURSOR(7,7);
WRITE(CITY);
MOVE_CURSOR(35,7);
WRITE(STATE);
MOVE_CURSOR(54,7);
WRITE(ZIP);
MOVE_CURSOR(12,9);
WRITE(ATTENTION);
MOVE_CURSOR(17,11);
WRITE(ACCT_NUMBER);
END;
I:=I+1;
UNTIL ( I > FINISH) OR (FOUND = TRUE);
IF FOUND = TRUE THEN
BEGIN
NEWACCOUNT:=FALSE;
SETLENGTH(ACN,0);
FOR I:= 1 TO 4 DO APPEND(ACN,AN[I]);
SETLENGTH(FILENAM,0);
APPEND(FILENAM,DRIVE);
APPEND(FILENAM,ACN);
APPEND(FILENAM,EXTENSION);
RESET(FILENAM,FIN);
IF EOF(FIN) THEN NEWFILE:=TRUE ELSE NEWFILE:=FALSE;
END; {OF IF FOUND = TRUE}
IF FOUND = FALSE THEN
BEGIN
NEWACCOUNT:=TRUE;
ERASE_LINES(12,1);
PROMPT(2,12,0,'NAME AS ENTERED NOT FOUND IN FILE.',FALSE);
REPEAT
MOVE_CURSOR(2,14);
WRITE('WOULD YOU LIKE A LIST OF NAMES BEGINNING WITH ',
DESIRED_NAME[1],' ? Y/N');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
CLEAR_SCREEN;
LINE_COUNTER:=1;
FOR I:=START TO FINISH DO
BEGIN
READ(NAD:I,NAME_AND_ADDRESS);
IF LINE_COUNTER < 15 THEN
BEGIN
MOVE_CURSOR(2,LINE_COUNTER);
WRITE(NAME);
END;
IF (LINE_COUNTER >=15) AND (LINE_COUNTER < 30) THEN
BEGIN
MOVE_CURSOR(45,LINE_COUNTER-14);
WRITE(NAME);
END;
IF LINE_COUNTER >= 30 THEN
BEGIN
PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE ',FALSE);
READ(ANSWER);
CLEAR_SCREEN;
LINE_COUNTER:=0;
END;
LINE_COUNTER:=LINE_COUNTER + 1;
END; {FOR I = START TO FINISH OF LISTING}
END; {OF IF ANSWER = Y}
ERASE_LINES(22,2);
PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE',FALSE);
READ(ANSWER);
CLEAR_SCREEN;
PROMPT(2,10,0,'EXIT THIS PROGRAM BY TYPING CONTROL C',FALSE);
PROMPT(2,12,0,'AND ENTER ACCOUNT NAME IN NAME & ADDRESS FILE',FALSE);
READ(ANSWER);
END; {OF FOUND = FALSE}
END; {OF WITH NAME AND ADDRESS}
END; {OF LOCALIZERS}
UNTIL FINISHED = TRUE;
END; {OF PROCEDURE}
{************** CALCULATE NUMBER OF RECORDS FOR FIRST RECORD***}
PROCEDURE CALC_FIRST_RECORD(CURRENT_NUMBER_OF_RECORDS:INTEGER);
VAR
ONES,TENS,HUNDREDS:CHAR;
O,T,H: INTEGER;
BEGIN
O:=0;
T:=0;
H:=0;
WITH INFORMATION DO
BEGIN
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
BEGIN
ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
PURCHASE_ORDER_NUMBER[1]:='0';
PURCHASE_ORDER_NUMBER[2]:='0';
PURCHASE_ORDER_NUMBER[3]:='0';
PURCHASE_ORDER_NUMBER[4]:=ONES;
FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
END; {IF}
IF CURRENT_NUMBER_OF_RECORDS = 10 THEN PURCHASE_ORDER_NUMBER:='0010 ';
IF CURRENT_NUMBER_OF_RECORDS = 100 THEN PURCHASE_ORDER_NUMBER:= '0100 ';
IF (CURRENT_NUMBER_OF_RECORDS < 100) AND
(CURRENT_NUMBER_OF_RECORDS > 10) THEN
BEGIN
WHILE (CURRENT_NUMBER_OF_RECORDS < 100 ) AND
(CURRENT_NUMBER_OF_RECORDS > 10 ) DO {VALUES 1-99}
BEGIN
CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS - 10;
T:=T+1;
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
BEGIN
ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
TENS:=CHR(T + 48);
PURCHASE_ORDER_NUMBER[1]:='0';
PURCHASE_ORDER_NUMBER[2]:='0';
PURCHASE_ORDER_NUMBER[3]:=TENS;
PURCHASE_ORDER_NUMBER[4]:=ONES;
FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
END; {IF}
END; {WHILE}
END; {IF}
END; {OF WITH}
END; {OF PROCEDURE}
{*********** WRITE THE FIRST RECORD ********************}
PROCEDURE CREATE_FIRST_RECORD (ACTNO: TR);
BEGIN
IF NEWFILE = TRUE THEN REWRITE(FILENAM,FIN) ELSE RESET(FILENAM,FIN);
WITH INFORMATION DO
BEGIN
MONTH:=' ';
DAY:=' ';
YEAR:=' ';
INVOICE_NUMBER:='FIRST ';
AMOUNT:=0.0;
PURCHASE_ORDER_NUMBER:=ACTNO;
WRITE(FIN:1,INFORMATION);
END; {WITH LOOP}
END; {OF PROCEDURE}
{********************** PROCEDURE TO CORRECT INCORRECT ENTRY ***}
PROCEDURE MISTAKE;
VAR
WRONG:CHAR;
BEGIN
WITH INFORMATION DO
BEGIN
ERASE_LINES(10,12);
PROMPT(1,12,0,'ENTER NUMBER OF INCORRECT INFORMATION',FALSE);
PROMPT(1,14,0,'1-MONTH',FALSE);
PROMPT(1,15,0,'2-DAY',FALSE);
PROMPT(1,16,0,'3-YEAR',FALSE);
PROMPT(1,18,0,'5-INVOICE NUMBER',FALSE);
PROMPT(1,17,0,'4-PURCHASE ORDER NUMBER',FALSE);
PROMPT(1,19,0,'6-AMOUNT',FALSE);
PROMPT(1,21,0,'7-ALL INFORMATION IS CORRECT AS DISPLAYED',FALSE);
REPEAT
MOVE_CURSOR(50,16);
READ(WRONG);
CASE WRONG OF
'1': BEGIN
PROMPT(1,N,0,' ',FALSE);
MO:=INPUT_DATA(1,N,2,TRUE,0,0);
END;
'2': BEGIN
PROMPT(4,N,0,' ',FALSE);
DA:=INPUT_DATA(4,N,2,TRUE,0,0);
END;
'3': BEGIN
PROMPT(7,N,0,' ',FALSE);
YR:=INPUT_DATA(7,N,2,TRUE,0,0);
END;
'5': BEGIN
PROMPT(30,N,0,' ',FALSE);
INO:=INPUT_DATA(30,N,10,TRUE,0,0);
END;
'4': BEGIN
PROMPT(12,N,0,' ',FALSE);
PNO:=INPUT_DATA(12,N,10,TRUE,0,0);
END;
'6': BEGIN
PROMPT(45,N,0,' ',FALSE);
REPEAT
MOVE_CURSOR(45,N);
READ(AMOUNT);
UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
END;
END; {OF CASE}
UNTIL WRONG = '7';
END; {OF WITH INFORMATION}
ERASE_LINES(10,12);
END; { OF PROCEDURE}
{********* PROCEDURE TO POST TO ACCOUNT RECEIVABLE **************}
PROCEDURE POST;
BEGIN
POST_TO_ANOTHER_ACCOUNT:=FALSE;
REPEAT
ENTER_FILE_NAME;
FIND(FILNAME,1);
N:=5;
IF NEWACCOUNT = FALSE THEN
BEGIN
IF NEWFILE = TRUE THEN
BEGIN
CREATE_FIRST_RECORD('0001 ');
COUNTER:=2;
END;
IF NEWFILE = FALSE THEN
BEGIN
NUMBER_RECORDS(FILENAM,1);
RESET(FILENAM,FIN);
COUNTER:=NUMBER_OF_RECORDS + 1;
END;
CLEAR_SCREEN;
WITH NAME_AND_ADDRESS DO
BEGIN
MOVE_CURSOR(2,1);
WRITE(NAME,' ',ACCT_NUMBER);
END;
PROMPT(1,3,0,'MO/DY/YR',FALSE);
PROMPT(30,3,0,'INV #',FALSE);
PROMPT(12,3,0,'P.O.#',FALSE);
PROMPT(45,3,0,'AMOUNT',FALSE);
PROMPT(70,3,0,'CORRECT',FALSE);
WITH INFORMATION DO
BEGIN
REPEAT
MO:=INPUT_DATA(1,N,2,TRUE,0,0);
FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
IF MONTH <> '00' THEN
BEGIN
PROMPT(3,N,0,'/',FALSE);
DA:=INPUT_DATA(4,N,2,TRUE,0,0);
PROMPT(6,N,0,'/',FALSE);
YR:=INPUT_DATA(7,N,2,TRUE,0,0);
PNO:=INPUT_DATA(12,N,10,TRUE,0,0);
INO:=INPUT_DATA(30,N,10,TRUE,0,0);
REPEAT
MOVE_CURSOR(45,N);
READ(AMOUNT);
UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
REPEAT
MOVE_CURSOR(70,N);
READ(COR);
UNTIL (COR = 'Y') OR (COR = 'N');
IF COR = 'N' THEN MISTAKE;
FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
FOR I:= 1 TO 2 DO YEAR[I]:=YR[I];
FOR I:= 1 TO 6 DO INVOICE_NUMBER[I]:=INO[I];
FOR I:= 1 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=PNO[I];
WRITE (FIN:COUNTER,INFORMATION);
COUNTER:=COUNTER + 1;
N:=N + 1;
IF N > 12 THEN
BEGIN
ERASE_LINES(5,20);
N:= 5;
END;
END; {OF IF MONTH NOT 00}
UNTIL (MONTH = '00') OR ((COUNTER = 5) AND (NEWFILE = TRUE));
CALC_FIRST_RECORD(COUNTER-1);
CREATE_FIRST_RECORD(PURCHASE_ORDER_NUMBER);
END;
ERASE_LINES(20,1);
PROMPT(1,20,1,'DO YOU WANT A LISTING OF THE FILE? Y/N',FALSE);
REPEAT
MOVE_CURSOR(50,20);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN PRINT_FILE(FILENAM);
PROMPT(1,23,1,'DO YOU WISH TO POST TO ANOTHER ACCOUNT? Y/N',FALSE);
REPEAT
MOVE_CURSOR(60,23);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN POST_TO_ANOTHER_ACCOUNT := TRUE;
IF ANSWER = 'N' THEN POST_TO_ANOTHER_ACCOUNT:=FALSE;
END; {OF IF NEWACCOUNT = FALSE}
UNTIL POST_TO_ANOTHER_ACCOUNT = FALSE;
END; {OF PROCEDURE POST}
{************ GENERATE A MONTHLY STATEMENT ******************}
PROCEDURE STATMENT;
TYPE
$STR4 = STRING 4;
$STR2 = STRING 2;
VAR
COP:FI;
MONTH_OF_STATEMENT:$STR4;
MS:INTEGER;
MO,DA,YR:$STR2;
MONTHFIL:$STRING14;
BEGIN
REPEAT
RECURSIVE:=FALSE;
ENTER_FILE_NAME;
FIND(FILNAME,1);
PROMPT(1,19,0,'ENTER,NUMERICALLY, THE DATE OF THIS STATMENT',FALSE);
PROMPT(1,20,0,'ENTER A CARRIAGE RETURN AFTER MONTH,DAY AND YEAR',FALSE);
READ(MO);
READ(DA);
READ(YR);
MS:=((ORD(MO[1]) - 48)*10)+(ORD(MO[2])-48);
CASE MS OF
1:MONTH_OF_STATEMENT:='.JAN';
2:MONTH_OF_STATEMENT:='.FEB';
3:MONTH_OF_STATEMENT:='.MAR';
4:MONTH_OF_STATEMENT:='.APR';
5:MONTH_OF_STATEMENT:='.MAY';
6:MONTH_OF_STATEMENT:='.JUN';
7:MONTH_OF_STATEMENT:='.JUL';
8:MONTH_OF_STATEMENT:='.AUG';
9:MONTH_OF_STATEMENT:='.SEP';
10:MONTH_OF_STATEMENT:='.OCT';
11:MONTH_OF_STATEMENT:='.NOV';
12:MONTH_OF_STATEMENT:='.DEC';
END; {OF CASE}
PRINT_FILE(FILENAM);
SETLENGTH(MONTHFIL,0);
APPEND(MONTHFIL,DRIVE);
APPEND(MONTHFIL,ACN);
APPEND(MONTHFIL,MONTH_OF_STATEMENT);
WITH INFORMATION DO
BEGIN
REWRITE(MONTHFIL,COP);
RESET(FILENAM,FIN);
FOR I:= 1 TO NUMBER_OF_RECORDS DO
BEGIN
READ(FIN:I,INFORMATION);
WRITE(COP:I,INFORMATION);
END;
REWRITE(FILENAM,FIN);
CREATE_FIRST_RECORD('0002 ');
FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
FOR I:= 1 TO 2 DO YEAR[I]:=YR[I];
INVOICE_NUMBER:='PRIOR ';
PURCHASE_ORDER_NUMBER:='BALANCE ';
AMOUNT:=BALANCE;
WRITE(FIN:2,INFORMATION);
END; {OF WITH INFORMATION DO}
PROMPT(1,23,1,'DO YOU WISH TO GENERATE ANOTHER STATEMENT? Y/N',FALSE);
REPEAT
MOVE_CURSOR(60,23);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN STATEMENT:= TRUE ELSE STATEMENT:=FALSE;
UNTIL STATEMENT = FALSE;
END; {OF PROCEDURE STATMENT}
{******************** BEGIN THE MAIN PROGRAM HERE ****************}
BEGIN
CLEAR_SCREEN;
PROMPT(10,5,0,'ACCOUNTS RECEIVABLE PROGRAM PACKAGE',FALSE);
PROMPT(10,9,0,'CHOOSE FROM EITHER:',FALSE);
PROMPT(10,11,0,'1- POST TO AN ACCOUNT',FALSE);
PROMPT(10,12,0,'2- GENERATE A STATEMENT',FALSE);
PROMPT(10,14,0,'ENTER THE NUMBER OF YOUR CHOICE ',FALSE);
REPEAT
READ(I);
UNTIL (I=1) OR (I=2);
IF I=2 THEN STATEMENT:=TRUE ELSE STATEMENT:=FALSE;
POST_TO_ANOTHER_ACCOUNT:=TRUE;
WHILE (STATEMENT = FALSE) AND (POST_TO_ANOTHER_ACCOUNT = TRUE) DO POST;
WHILE STATEMENT = TRUE DO STATMENT;
END.