home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol063 / receival.pas < prev    next >
Pascal/Delphi Source File  |  1984-04-29  |  21KB  |  1,046 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. PROGRAM ACCOUNTS_RECEIVABLE; {$P}
  10.  
  11. TYPE 
  12.  
  13.     MAILING = RECORD
  14.         NAME:ARRAY[1..30] OF CHAR;
  15.         STREET_NUMBER: ARRAY[1..6] OF CHAR;
  16.         STREET: ARRAY[1..20] OF CHAR;
  17.         CITY: ARRAY[1..18] OF CHAR;
  18.         STATE: ARRAY[1..10] OF CHAR;
  19.         ZIP: ARRAY[1..10] OF CHAR;
  20.         ATTENTION: ARRAY[1..30] OF CHAR;
  21.         ACCT_NUMBER: ARRAY[1..4] OF CHAR;
  22.         END;
  23.  
  24.     ALPHABET = RECORD
  25.         START:INTEGER;
  26.         FINISH: INTEGER;
  27.         END;
  28.  
  29. FA = FILE OF ALPHABET;
  30.  
  31.     ENTRY = RECORD
  32.         MONTH:ARRAY[1..2] OF CHAR;
  33.         DAY:  ARRAY[1..2] OF CHAR;
  34.         YEAR: ARRAY[1..2] OF CHAR;
  35.         INVOICE_NUMBER: ARRAY[1..6] OF CHAR;
  36.         PURCHASE_ORDER_NUMBER: ARRAY[1..10] OF CHAR;
  37.         AMOUNT:REAL;
  38.         END;
  39.  
  40. FI = FILE OF ENTRY;
  41. FO = FILE OF CHAR;
  42. M = FILE OF MAILING;
  43.  
  44.     TR = ARRAY [1..10] OF CHAR;
  45.  
  46.     $STRING80 = STRING 80;
  47.     $STRING0 = STRING 0;
  48.     $STRING255 = STRING 255;
  49.     $STRING14 = STRING 14;
  50.     $STRING30 = STRING 30;
  51. $STR2 = STRING 2;
  52. $STR4 = STRING 4;
  53.  
  54.  
  55. VAR
  56. FALP:FA;
  57. ALPFILE:$STRING14;
  58. REC_NUMBER,END_OF_FILE:INTEGER;
  59. DESIRED_NAME:ARRAY[1..30] OF CHAR;
  60. DES_NAM:$STRING80;
  61. FOUND:BOOLEAN;
  62. FIN: FI;
  63. INC,NUMBER_OF_RECORDS,COUNTER,I,N: INTEGER;
  64. NAME_AND_ADDRESS: MAILING;
  65. NAD:M;
  66. INFORMATION: ENTRY;
  67. FOUT:FO;
  68. COR,ANSWER,CONTINUE:CHAR;
  69. ACCOUNT_NAME:$STRING30;
  70. FILENAM,FILNAME:$STRING14;
  71. ACCTNAME: ARRAY[1..30] OF CHAR;
  72. FNAME:ARRAY[1..4] OF CHAR;
  73. STATEMENT,CONT,POST_TO_ANOTHER_ACCOUNT,NEWACCOUNT,RECURSIVE,NEWFILE:BOOLEAN;
  74. MO,DA,YR,INO,PNO,NA,ST_NO,ST,CIT,STA,ZI,ATT: $STRING80;
  75.  
  76. DRIVE:$STR2;
  77. ACN,EXTENSION:$STR4;
  78. BALANCE:REAL;
  79.  
  80.  
  81.  
  82.  
  83. PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL;
  84. FUNCTION  LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91. PROCEDURE CLEAR_SCREEN;
  92. BEGIN
  93. WRITE(CHR(27),'*',CHR(0),CHR(0),CHR(0),CHR(0));
  94. END;
  95.  
  96.  
  97.  
  98.     
  99. PROCEDURE ERASE_LINES(STARTING_LINE,NUMBER_OF_LINES:INTEGER);
  100.  
  101. VAR
  102. I:INTEGER;
  103. BLANKS:STRING 80;
  104.  
  105. BEGIN
  106.  
  107. BLANKS:='                                                ';{40SPACES}
  108. FOR  I:= 1 TO NUMBER_OF_LINES DO
  109.     BEGIN
  110.     WRITE(CHR(27),'=',CHR(STARTING_LINE+31),CHR(32),BLANKS,BLANKS);
  111.     STARTING_LINE:=STARTING_LINE + 1;
  112.     END
  113. END;
  114.  
  115.  
  116.  
  117. PROCEDURE MOVE_CURSOR (X,Y:INTEGER);
  118. BEGIN
  119.     WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31));
  120. END;
  121.  
  122.  
  123.  
  124.  
  125. PROCEDURE PROMPT (X,Y,LENGTH: INTEGER; P:$STRING80;
  126.              PROTECTED_FIELD_DESIRED:BOOLEAN);
  127.  
  128. VAR
  129. UNDERLINE: STRING 80;
  130. I:INTEGER;
  131. BEGIN
  132.     UNDERLINE:='_';
  133.     FOR  I:= 1 TO LENGTH DO APPEND (UNDERLINE,'_');
  134.     IF PROTECTED_FIELD_DESIRED = FALSE THEN
  135. WRITE  (CHR(27),'=',CHR(Y+31),CHR(X+31),P,UNDERLINE)
  136.     ELSE
  137. WRITE (CHR(27),'=',CHR(Y+31),CHR(X+31),CHR(27),')',P,
  138.     UNDERLINE,CHR(27),'(');
  139. END;
  140.  
  141.  
  142.  
  143.  
  144. FUNCTION INPUT_DATA(X,Y,LEN:INTEGER; ALPHANUMERIC:BOOLEAN;
  145.             MAXIMUM_VALUE,MINIMUM_VALUE:REAL):$STRING80;
  146.  
  147.  
  148. VAR
  149. DATA,BLANKS:$STRING80;
  150. I:INTEGER;
  151.  
  152.  
  153.  
  154.  
  155. PROCEDURE CORRECT(X,Y:INTEGER);
  156. VAR
  157. I,A,B:INTEGER;
  158.  
  159. BEGIN
  160.  
  161.     ERASE_LINES (20,2);
  162.     WRITE (CHR(7));
  163.     MOVE_CURSOR (1,20);
  164.  
  165.     IF (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) THEN
  166.        WRITE('TERM TOO LONG ');
  167.  
  168.     
  169.     MOVE_CURSOR(X,Y);
  170.     WRITE (' ');
  171.     A:=X;
  172.     B:=Y;
  173.  
  174.     FOR  I:=1 TO  LENGTH(DATA) DO
  175.     BEGIN
  176.         MOVE_CURSOR(A,B);
  177.         WRITE(' ');
  178.         A:=A+1;
  179.     END;
  180.  
  181.     MOVE_CURSOR(X,Y);
  182.     WRITE('_');
  183.     A:=X;
  184.     B:=Y;
  185.     FOR I:= 1 TO (LEN-1)  DO
  186.     BEGIN
  187.         MOVE_CURSOR(A,B);
  188.         WRITE('_');
  189.         A:=A+1;
  190.     END;
  191.  
  192.     MOVE_CURSOR(X,Y);
  193.     READ(DATA);
  194.     ERASE_LINES(20,1);
  195.  
  196.  
  197.  
  198.  
  199. END;
  200.  
  201.  
  202.  
  203.  
  204.  
  205. BEGIN
  206.     BLANKS:='                                         ';{40SPACES}
  207.  
  208. MOVE_CURSOR(X,Y);
  209. READ(DATA);
  210.  
  211.  
  212.  
  213.  
  214. WHILE (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) DO CORRECT(X,Y);
  215.     
  216.  
  217. IF   LENGTH(DATA) = 0 THEN
  218. BEGIN
  219.     DATA:=' ';    
  220.     FOR I:=  1 TO (LEN-1) DO  APPEND (DATA,' ');
  221. END;
  222.  
  223.  
  224. IF LENGTH(DATA) < LEN THEN
  225.     FOR I:= LENGTH(DATA) TO LEN DO     APPEND(DATA,' ');
  226.  
  227.  
  228.  
  229. INPUT_DATA:=DATA;
  230.  
  231.  
  232. END;
  233.  
  234. {************ PROCEDURE TO DETERMINE NUMBER OF RECORDS****}
  235.  
  236. PROCEDURE NUMBER_RECORDS (FILENAM:$STRING14;CODE:INTEGER);
  237. BEGIN
  238. IF CODE = 1 THEN
  239. BEGIN
  240. RESET(FILENAM,FIN);
  241. WITH INFORMATION DO
  242. BEGIN
  243.  
  244. READ(FIN:1,INFORMATION);
  245. NUMBER_OF_RECORDS:=(((ORD(PURCHASE_ORDER_NUMBER[1])-48)*1000)+
  246.     ((ORD(PURCHASE_ORDER_NUMBER[2])-48)*100)+
  247.     ((ORD(PURCHASE_ORDER_NUMBER[3])-48)*10)+
  248.     ((ORD(PURCHASE_ORDER_NUMBER[4])-48)*1));
  249. END; {OF WITH}
  250. END; {OF CODE = 1}
  251.  
  252. IF CODE = 2 THEN
  253. BEGIN
  254. RESET(FILENAM,NAD);
  255. WITH NAME_AND_ADDRESS DO
  256. BEGIN
  257. READ(NAD:1,NAME_AND_ADDRESS);
  258. NUMBER_OF_RECORDS:=(((ORD(ACCT_NUMBER[1])-48)*1000)+
  259.     ((ORD(ACCT_NUMBER[2])-48)*100)+
  260.     ((ORD(ACCT_NUMBER[3])-48)*10)+
  261.     ((ORD(ACCT_NUMBER[4])-48)*1));
  262. END;  {OF WITH}
  263. END; {OF CODE = 2}
  264. END;    {OF  PROCEDURE}
  265.  
  266.  
  267.  
  268. PROCEDURE PRINT_FILE (FILENAM:$STRING14);  {*******************}
  269.  
  270. TYPE
  271. C = FILE OF CHAR;
  272.  
  273.  
  274. VAR
  275. SCROLLING:CHAR;
  276. ANSWER:CHAR;
  277. HARDCOPY:BOOLEAN;
  278. FOUT:C;
  279. MASK:$STRING80;
  280. PAGE,COUNTER:INTEGER;
  281. ST:ARRAY[1..3] OF CHAR;
  282.  
  283.  
  284. BEGIN      {BEGIN PROCEDURE}
  285.  
  286. CLEAR_SCREEN;
  287. REPEAT
  288. WRITE(' DO YOU WANT A HARDCOPY OF THE FILE? Y/N ');
  289. READ(ANSWER);
  290. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  291. IF ANSWER = 'Y' THEN 
  292.     BEGIN
  293.     HARDCOPY:=TRUE;
  294.     REWRITE('LST:',FOUT);
  295.     END;
  296. IF ANSWER = 'N' THEN HARDCOPY:=FALSE;
  297.  
  298.  
  299.  
  300. RESET (FILENAM,FIN);
  301. CLEAR_SCREEN;
  302. NUMBER_RECORDS(FILENAM,1);
  303.  
  304. WITH NAME_AND_ADDRESS DO
  305. BEGIN
  306.  
  307. IF STATE = 'VIRGINIA  ' THEN ST:='VA.';
  308. IF HARDCOPY = FALSE THEN
  309. BEGIN
  310. WRITELN(NAME);
  311. WRITELN(STREET_NUMBER,'   ',STREET);
  312. IF ST = 'VA.' THEN WRITELN(CITY,',',ST,'   ',ZIP) ELSE
  313.     WRITELN(CITY,',',STATE,'  ',ZIP);
  314. WRITELN;
  315. END;
  316.  
  317. IF HARDCOPY = TRUE THEN
  318. BEGIN
  319. WRITELN(FOUT,CHR(12));
  320. WRITELN(FOUT,'   ');
  321. WRITELN(FOUT,NAME);
  322. WRITELN(FOUT,STREET_NUMBER,'   ',STREET);
  323. IF ST = 'VA.' THEN WRITELN(CITY,',',ST,'  ',ZIP) ELSE
  324.     WRITELN(CITY,',',STATE,'  ',ZIP);
  325. WRITELN(FOUT,'   ');
  326. WRITELN(FOUT,ATTENTION);
  327. END;
  328. END; {OF WITH NAME AND ADDRESS}
  329.  
  330.  
  331.  
  332.  
  333. WITH INFORMATION DO
  334. BEGIN
  335. IF HARDCOPY = FALSE THEN
  336. BEGIN
  337. MOVE_CURSOR(1,6);
  338. WRITE('DATE');
  339. MOVE_CURSOR(11,6);
  340. WRITE('P.O. NO.');
  341. MOVE_CURSOR(23,6);
  342. WRITE('INVOICE NO.');
  343. MOVE_CURSOR(41,6);
  344. WRITE('CHARGES');
  345. MOVE_CURSOR(56,6);
  346. WRITE('CREDITS');
  347. MOVE_CURSOR(70,6);
  348. WRITE('BALANCE');
  349. END;
  350.  
  351. IF HARDCOPY = TRUE THEN
  352. WRITELN(FOUT,'DATE       P.O.NO.            INVOICE NO.   ',
  353.     'CHARGES   CREDITS   BALANCE');
  354.  
  355. COUNTER:=7;
  356. PAGE := 1;
  357. BALANCE:=0.0;
  358.  
  359.  
  360. FOR I:= 2 TO NUMBER_OF_RECORDS DO
  361. BEGIN
  362. READ(FIN:I,INFORMATION);
  363.  
  364. BALANCE:=BALANCE+AMOUNT;
  365.  
  366. IF HARDCOPY = FALSE THEN 
  367. BEGIN
  368. IF COUNTER > 20 THEN 
  369.     BEGIN
  370.     PROMPT(1,22,0,'ENTER ANY CHARACTER TO CONTINUE',FALSE);
  371.     READ(SCROLLING);
  372.     ERASE_LINES(7,15);
  373.     MOVE_CURSOR(50,2);
  374.     PAGE:=PAGE + 1;
  375.     WRITE('PAGE ',PAGE);
  376.     ERASE_LINES(22,1);
  377.     MOVE_CURSOR(1,7);
  378.     COUNTER:=7;
  379.     END;
  380. WRITELN;
  381. MOVE_CURSOR(1,COUNTER);
  382. WRITE(MONTH,'/',DAY,'/',YEAR);
  383. MOVE_CURSOR(11,COUNTER);
  384. WRITE(PURCHASE_ORDER_NUMBER);
  385. MOVE_CURSOR(23,COUNTER);
  386. WRITE(INVOICE_NUMBER);
  387. IF AMOUNT > 0.00 THEN
  388. BEGIN
  389. MOVE_CURSOR(41,COUNTER);
  390. WRITE('$',AMOUNT:9:2);
  391. END;
  392. IF AMOUNT < 0.00 THEN
  393. BEGIN
  394. MOVE_CURSOR(56,COUNTER);
  395. WRITE('$',AMOUNT:9:2);
  396. END;
  397.  
  398. MOVE_CURSOR(70,COUNTER);
  399. WRITE('$',BALANCE:9:2);
  400.  
  401. COUNTER:=COUNTER + 2;
  402. END; {FOR HARDCOPY = FALSE}
  403.  
  404. IF HARDCOPY = TRUE THEN 
  405. BEGIN
  406. WRITELN(FOUT,' ');
  407. WRITE(FOUT,MONTH,'/',DAY,'/',YEAR,'         ',INVOICE_NUMBER,'            ');
  408. IF AMOUNT > 0.0 THEN
  409. WRITELN(FOUT,PURCHASE_ORDER_NUMBER,'            ','$',AMOUNT:9:2);
  410. IF AMOUNT < 0.0 THEN
  411. WRITELN(FOUT,PURCHASE_ORDER_NUMBER,'            ','$',AMOUNT:9:2,' CREDIT');
  412. IF COUNTER >  40 THEN
  413. BEGIN
  414. WRITELN(FOUT,CHR(12));
  415. WRITELN(FOUT,' ');
  416. WRITELN(FOUT,' ');
  417. WRITELN(FOUT,'                                  PAGE: ',PAGE);
  418. COUNTER:=1;
  419. PAGE:=PAGE + 1;
  420. END;
  421. END; {FOR HARDCOPY = TRUE}
  422.  
  423. END; {FOR LOOP}
  424.  
  425. END; {THIS IS FOR WITH STATEMENTS}
  426. ERASE_LINES(22,1);
  427. IF HARDCOPY = FALSE THEN
  428.     BEGIN
  429.     MOVE_CURSOR(1,22);
  430.     WRITELN('BALANCE DUE: ','$',BALANCE:9:2);
  431.     END;
  432.  
  433. IF HARDCOPY = TRUE THEN
  434.     BEGIN
  435.     WRITELN(FOUT,'  ');
  436.     WRITELN(FOUT,'  ');
  437.     WRITELN(FOUT,'BALANCE DUE:  ','$',BALANCE:9:2);
  438.     END;
  439.  
  440.  
  441. END; {PROCEDURE}
  442.  
  443.  
  444.  
  445. {**********************************************************}
  446.  
  447. PROCEDURE ENTER_FILE_NAME;  
  448. VAR
  449. FOUND,ERROR:BOOLEAN;
  450. ANSWER:CHAR;
  451. COUNTER:INTEGER;
  452.  
  453.  
  454.  
  455. BEGIN
  456. REPEAT
  457. ERROR:=FALSE;
  458. CLEAR_SCREEN;
  459. WRITELN('                    ACCOUNTS RECEIVABLE');
  460. WRITELN;
  461. WRITELN;
  462. WRITELN;
  463.  
  464. IF (POST_TO_ANOTHER_ACCOUNT = FALSE) OR (STATEMENT = TRUE) THEN
  465. BEGIN
  466. WRITE('ENTER NAME & ADDRESS FILE AS  DRIVE:NAME.EXT   ');
  467. SETLENGTH(FILNAME,0);
  468. READLN(FILNAME);
  469. RESET(FILNAME,NAD);
  470. IF EOF(NAD) THEN
  471.     BEGIN
  472.     REPEAT
  473.     MOVE_CURSOR(1,10);
  474.     WRITE('FILE NOT FOUND.  IS THIS A NEW FILE? Y/N ');
  475.     READ(ANSWER);
  476.     UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  477.     IF ANSWER = 'Y' THEN
  478.         BEGIN
  479.         CLEAR_SCREEN;
  480.         NEWACCOUNT:=TRUE;
  481.         PROMPT(1,10,0,'EXIT TO CP/M BY TYPE CONTROL-C',FALSE);
  482.         PROMPT(1,11,0,'THEN CREATE NEW NAME & ADDRESS FILE',FALSE);
  483.         END;
  484. IF ANSWER = 'N' THEN ERROR:= TRUE;
  485. END; {OF IF EOF NAD}
  486.  
  487. END; {OF IF POST..}
  488. UNTIL (ERROR = FALSE);
  489.  
  490. END; {PROCEDURE}
  491. {****************** FIND THE ACCOUNT NAME *******************}
  492.  
  493. PROCEDURE FIND( FNAME:$STRING14; FLAG:INTEGER);
  494.  
  495. VAR
  496. FINISHED:BOOLEAN;
  497. I,LINE_COUNTER:INTEGER;
  498. LOCALIZERS:ALPHABET;
  499. LINE_FLAG:BOOLEAN;
  500. FIRST_LETTER:INTEGER;
  501. AN:ARRAY[1..4] OF CHAR;
  502.  
  503.  
  504. BEGIN
  505. DRIVE:='B:';
  506. EXTENSION:='.INV';
  507. REPEAT
  508. FINISHED:=TRUE;
  509. REC_NUMBER:=1;
  510. FOUND:=FALSE;
  511. END_OF_FILE:=COUNTER -1;  {COUNTER WAS SET = NUMBER_OF_RECORDS + 1
  512.                IN THE ENTER_FILE_NAME PROCEDURE}
  513.  
  514. CLEAR_SCREEN;
  515. MOVE_CURSOR(2,2);
  516. IF FLAG = 1 THEN
  517. WRITELN('  PROCEDURE TO DETERMINE IF A NAME IS PRESENT IN FILE ', 
  518.        FNAME)
  519. ELSE IF FLAG = 2 THEN
  520. WRITELN('  PROCEDURE TO FIND AND CHANGE A RECORD')
  521. ELSE IF FLAG = 3 THEN
  522. WRITELN('  PROCEDURE TO FIND AND DELETE A RECORD');
  523.  
  524. PROMPT(1,4,30,'ENTER THE NAME YOU WISH TO LOCATE',FALSE);
  525. DES_NAM:=INPUT_DATA(35,4,30,TRUE,0,0);
  526. FOR I:= 1 TO 30 DO DESIRED_NAME[I]:=DES_NAM[I];
  527.  
  528. CLEAR_SCREEN;
  529. PROMPT(2,12,0,'PROGRAM NOW SEARCHING FILE. ONE MOMENT PLEASE.',FALSE);
  530. RESET(FNAME,NAD);
  531.  
  532. I:=1;
  533. WHILE FNAME[I] <> '.' DO
  534. BEGIN
  535. ALPFILE[I]:=FNAME[I];
  536. I:=I+1;
  537. END;
  538. ALPFILE[I]:='.';
  539. ALPFILE[I+1]:='A';
  540. ALPFILE[I+2]:='L';
  541. ALPFILE[I+3]:='P';
  542. IF (I+4) < 14 THEN 
  543. BEGIN
  544. I:=I+4;
  545. FOR N:= I TO 14 DO 
  546. ALPFILE[N]:=' ';
  547. END;
  548. RESET(ALPFILE,FALP);
  549.  
  550. WITH LOCALIZERS DO
  551. BEGIN
  552. FIRST_LETTER:=ORD(DESIRED_NAME[1]) - 64;
  553. READ(FALP:FIRST_LETTER,LOCALIZERS);
  554. WITH NAME_AND_ADDRESS DO
  555. BEGIN
  556. I:=START;
  557. REPEAT
  558. READ(NAD:I,NAME_AND_ADDRESS);
  559. IF DESIRED_NAME = NAME THEN
  560. BEGIN
  561. FOUND:=TRUE;
  562. AN:=ACCT_NUMBER;
  563. REC_NUMBER:=I;
  564. ERASE_LINES(12,1);
  565. PROMPT(1,1,0,'INFORMATION AS FOUND IN FILE: ',FALSE);
  566. PROMPT(1,3,0,'NAME: ',FALSE);
  567. PROMPT(1,5,0,'#: ',FALSE);
  568. PROMPT(10,5,0,'STREET: ',FALSE);
  569. PROMPT(1,7,0,'CITY: ',FALSE);
  570. PROMPT(28,7,0,'STATE: ',FALSE);
  571. PROMPT(48,7,0,'ZIP: ',FALSE);
  572. PROMPT(1,9,0,'ATTENTION: ',FALSE);
  573. PROMPT(1,11,0,'ACCOUNT NUMBER: ',FALSE);
  574. MOVE_CURSOR(6,3);
  575. WRITE(NAME);
  576. MOVE_CURSOR(4,5);
  577. WRITE(STREET_NUMBER);
  578. MOVE_CURSOR(19,5);
  579. WRITE(STREET);
  580. MOVE_CURSOR(7,7);
  581. WRITE(CITY);
  582. MOVE_CURSOR(35,7);
  583. WRITE(STATE);
  584. MOVE_CURSOR(54,7);
  585. WRITE(ZIP);
  586. MOVE_CURSOR(12,9);
  587. WRITE(ATTENTION);
  588. MOVE_CURSOR(17,11);
  589. WRITE(ACCT_NUMBER);
  590. END;
  591.  
  592. I:=I+1;
  593.  
  594. UNTIL ( I > FINISH) OR (FOUND = TRUE);
  595.  
  596. IF FOUND = TRUE THEN
  597. BEGIN
  598. NEWACCOUNT:=FALSE;
  599. SETLENGTH(ACN,0);
  600. FOR I:= 1 TO 4 DO APPEND(ACN,AN[I]);
  601. SETLENGTH(FILENAM,0);
  602. APPEND(FILENAM,DRIVE);
  603. APPEND(FILENAM,ACN);
  604. APPEND(FILENAM,EXTENSION);
  605. RESET(FILENAM,FIN);
  606. IF EOF(FIN) THEN NEWFILE:=TRUE ELSE NEWFILE:=FALSE;
  607. END; {OF IF FOUND = TRUE}
  608.  
  609.  
  610. IF FOUND = FALSE THEN
  611. BEGIN
  612. NEWACCOUNT:=TRUE;
  613. ERASE_LINES(12,1);
  614. PROMPT(2,12,0,'NAME AS ENTERED NOT FOUND IN FILE.',FALSE);
  615. REPEAT
  616. MOVE_CURSOR(2,14);
  617. WRITE('WOULD YOU LIKE A LIST OF NAMES BEGINNING WITH ',
  618.     DESIRED_NAME[1],' ? Y/N');
  619. READ(ANSWER);
  620. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  621. IF ANSWER = 'Y' THEN
  622.     BEGIN
  623.     CLEAR_SCREEN;
  624.     LINE_COUNTER:=1;
  625.     FOR I:=START TO FINISH DO
  626.     BEGIN
  627.     READ(NAD:I,NAME_AND_ADDRESS);
  628.     IF LINE_COUNTER < 15 THEN
  629.     BEGIN
  630.     MOVE_CURSOR(2,LINE_COUNTER);
  631.     WRITE(NAME);
  632.     END;
  633.     
  634.     IF (LINE_COUNTER >=15) AND (LINE_COUNTER < 30) THEN
  635.     BEGIN
  636.     MOVE_CURSOR(45,LINE_COUNTER-14);
  637.     WRITE(NAME);
  638.     END;
  639.     
  640.     IF LINE_COUNTER >= 30 THEN
  641.     BEGIN
  642.     PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE ',FALSE);
  643.     READ(ANSWER);
  644.     CLEAR_SCREEN;
  645.     LINE_COUNTER:=0;
  646.     END;
  647.  
  648.     LINE_COUNTER:=LINE_COUNTER + 1;
  649.     END; {FOR I  = START TO FINISH OF LISTING}
  650. END; {OF IF ANSWER = Y}
  651. ERASE_LINES(22,2);
  652. PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE',FALSE);
  653. READ(ANSWER);
  654. CLEAR_SCREEN;
  655. PROMPT(2,10,0,'EXIT THIS PROGRAM BY TYPING CONTROL C',FALSE);
  656. PROMPT(2,12,0,'AND ENTER ACCOUNT NAME IN NAME & ADDRESS FILE',FALSE);
  657. READ(ANSWER);
  658. END; {OF FOUND = FALSE}
  659.  
  660.  
  661. END;  {OF WITH NAME AND ADDRESS}
  662. END; {OF LOCALIZERS}
  663.  
  664.  
  665. UNTIL FINISHED = TRUE;
  666. END;  {OF PROCEDURE}
  667.  
  668.  
  669.  
  670.  
  671. {**************  CALCULATE NUMBER OF RECORDS FOR FIRST RECORD***}
  672.  
  673. PROCEDURE CALC_FIRST_RECORD(CURRENT_NUMBER_OF_RECORDS:INTEGER);
  674. VAR
  675. ONES,TENS,HUNDREDS:CHAR;
  676. O,T,H: INTEGER;
  677.  
  678. BEGIN
  679. O:=0;
  680. T:=0;
  681. H:=0;
  682.  
  683. WITH  INFORMATION DO
  684. BEGIN
  685.  
  686. IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
  687. BEGIN
  688. ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
  689. PURCHASE_ORDER_NUMBER[1]:='0';
  690. PURCHASE_ORDER_NUMBER[2]:='0';
  691. PURCHASE_ORDER_NUMBER[3]:='0';
  692. PURCHASE_ORDER_NUMBER[4]:=ONES;
  693. FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
  694. END; {IF}
  695.  
  696. IF CURRENT_NUMBER_OF_RECORDS = 10 THEN PURCHASE_ORDER_NUMBER:='0010      ';
  697. IF CURRENT_NUMBER_OF_RECORDS = 100 THEN PURCHASE_ORDER_NUMBER:= '0100      ';
  698.  
  699. IF (CURRENT_NUMBER_OF_RECORDS < 100) AND
  700.    (CURRENT_NUMBER_OF_RECORDS > 10) THEN
  701. BEGIN
  702.  
  703. WHILE (CURRENT_NUMBER_OF_RECORDS < 100 ) AND
  704.       (CURRENT_NUMBER_OF_RECORDS > 10 ) DO   {VALUES 1-99}
  705. BEGIN
  706.  
  707. CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS - 10;
  708. T:=T+1;
  709. IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
  710. BEGIN
  711. ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
  712. TENS:=CHR(T +  48);
  713. PURCHASE_ORDER_NUMBER[1]:='0';
  714. PURCHASE_ORDER_NUMBER[2]:='0';
  715. PURCHASE_ORDER_NUMBER[3]:=TENS;
  716. PURCHASE_ORDER_NUMBER[4]:=ONES;
  717. FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
  718. END; {IF}
  719.  
  720. END; {WHILE}
  721. END;  {IF}
  722. END; {OF WITH}
  723.  
  724. END; {OF PROCEDURE}
  725.  
  726. {***********  WRITE THE FIRST RECORD   ********************}
  727.  
  728. PROCEDURE CREATE_FIRST_RECORD (ACTNO: TR);
  729. BEGIN
  730. IF NEWFILE = TRUE THEN REWRITE(FILENAM,FIN) ELSE RESET(FILENAM,FIN);
  731.  
  732. WITH INFORMATION DO
  733. BEGIN
  734. MONTH:='  ';
  735. DAY:='  ';
  736. YEAR:='  ';
  737. INVOICE_NUMBER:='FIRST ';
  738. AMOUNT:=0.0;
  739.  
  740. PURCHASE_ORDER_NUMBER:=ACTNO;
  741.  
  742. WRITE(FIN:1,INFORMATION);
  743. END; {WITH LOOP}
  744. END; {OF  PROCEDURE}
  745.  
  746.  
  747. {**********************  PROCEDURE TO CORRECT INCORRECT ENTRY ***}
  748.  
  749. PROCEDURE MISTAKE;
  750. VAR
  751. WRONG:CHAR;
  752.  
  753. BEGIN
  754. WITH INFORMATION DO
  755. BEGIN
  756. ERASE_LINES(10,12);
  757. PROMPT(1,12,0,'ENTER NUMBER OF INCORRECT INFORMATION',FALSE);
  758. PROMPT(1,14,0,'1-MONTH',FALSE);
  759. PROMPT(1,15,0,'2-DAY',FALSE);
  760. PROMPT(1,16,0,'3-YEAR',FALSE);
  761. PROMPT(1,18,0,'5-INVOICE NUMBER',FALSE);
  762. PROMPT(1,17,0,'4-PURCHASE ORDER NUMBER',FALSE);
  763. PROMPT(1,19,0,'6-AMOUNT',FALSE);
  764. PROMPT(1,21,0,'7-ALL INFORMATION IS CORRECT AS DISPLAYED',FALSE);
  765.  
  766. REPEAT
  767. MOVE_CURSOR(50,16);
  768. READ(WRONG);
  769.  
  770. CASE WRONG OF
  771.     '1': BEGIN
  772.         PROMPT(1,N,0,' ',FALSE);
  773.         MO:=INPUT_DATA(1,N,2,TRUE,0,0);
  774.          END;
  775.  
  776.     '2': BEGIN
  777.         PROMPT(4,N,0,' ',FALSE);
  778.         DA:=INPUT_DATA(4,N,2,TRUE,0,0);
  779.          END;
  780.  
  781.     '3': BEGIN
  782.         PROMPT(7,N,0,' ',FALSE);
  783.         YR:=INPUT_DATA(7,N,2,TRUE,0,0);
  784.          END;
  785.     '5':     BEGIN
  786.         PROMPT(30,N,0,'          ',FALSE);
  787.         INO:=INPUT_DATA(30,N,10,TRUE,0,0);
  788.         END;
  789.  
  790.     '4':     BEGIN
  791.         PROMPT(12,N,0,'          ',FALSE);
  792.         PNO:=INPUT_DATA(12,N,10,TRUE,0,0);
  793.         END;
  794.  
  795.     '6':    BEGIN
  796.         PROMPT(45,N,0,'         ',FALSE);
  797.         REPEAT
  798.         MOVE_CURSOR(45,N);
  799.         READ(AMOUNT);
  800.         UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
  801.         END;
  802.  
  803.  
  804.  
  805.     END; {OF CASE}
  806.  
  807. UNTIL WRONG = '7';
  808. END; {OF WITH INFORMATION}
  809. ERASE_LINES(10,12);
  810. END; { OF PROCEDURE}
  811.  
  812. {********* PROCEDURE TO POST TO ACCOUNT RECEIVABLE **************}
  813. PROCEDURE POST;
  814. BEGIN
  815.  
  816.  
  817. POST_TO_ANOTHER_ACCOUNT:=FALSE;
  818.  
  819. REPEAT
  820.  
  821. ENTER_FILE_NAME;
  822. FIND(FILNAME,1);
  823. N:=5;
  824.  
  825. IF NEWACCOUNT = FALSE THEN
  826. BEGIN
  827.  
  828. IF NEWFILE = TRUE THEN
  829. BEGIN
  830. CREATE_FIRST_RECORD('0001      ');
  831. COUNTER:=2;
  832. END;
  833.  
  834.  
  835. IF NEWFILE = FALSE THEN
  836. BEGIN
  837. NUMBER_RECORDS(FILENAM,1);
  838. RESET(FILENAM,FIN);
  839. COUNTER:=NUMBER_OF_RECORDS + 1;
  840. END;
  841. CLEAR_SCREEN;
  842.  
  843. WITH NAME_AND_ADDRESS DO
  844. BEGIN
  845. MOVE_CURSOR(2,1);
  846. WRITE(NAME,'  ',ACCT_NUMBER);
  847. END;
  848.  
  849.  
  850.         PROMPT(1,3,0,'MO/DY/YR',FALSE);
  851.     PROMPT(30,3,0,'INV #',FALSE);
  852.     PROMPT(12,3,0,'P.O.#',FALSE);
  853.     PROMPT(45,3,0,'AMOUNT',FALSE);
  854.     PROMPT(70,3,0,'CORRECT',FALSE);
  855.  
  856.  
  857.  
  858. WITH INFORMATION DO
  859. BEGIN
  860. REPEAT
  861.     MO:=INPUT_DATA(1,N,2,TRUE,0,0);
  862.     FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
  863.  
  864.     IF MONTH <> '00'  THEN 
  865.     BEGIN
  866.  
  867.     PROMPT(3,N,0,'/',FALSE);
  868.     DA:=INPUT_DATA(4,N,2,TRUE,0,0);
  869.     PROMPT(6,N,0,'/',FALSE);
  870.     YR:=INPUT_DATA(7,N,2,TRUE,0,0);
  871.     PNO:=INPUT_DATA(12,N,10,TRUE,0,0);
  872.     INO:=INPUT_DATA(30,N,10,TRUE,0,0);
  873.     REPEAT
  874.     MOVE_CURSOR(45,N);
  875.     READ(AMOUNT);
  876.     UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
  877.     
  878.     REPEAT
  879.     MOVE_CURSOR(70,N);
  880.     READ(COR);
  881.     UNTIL (COR = 'Y') OR (COR = 'N');
  882.  
  883.  
  884.     IF COR = 'N' THEN MISTAKE;
  885.  
  886.  
  887. FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
  888. FOR I:= 1 TO 2 DO  YEAR[I]:=YR[I];
  889. FOR I:= 1 TO 6 DO INVOICE_NUMBER[I]:=INO[I];
  890. FOR I:= 1 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=PNO[I];
  891.  
  892.  
  893.  
  894.  
  895. WRITE (FIN:COUNTER,INFORMATION);
  896. COUNTER:=COUNTER + 1;
  897. N:=N + 1;
  898.  
  899. IF N > 12 THEN
  900.     BEGIN
  901.     ERASE_LINES(5,20);
  902.     N:= 5;
  903.     END;
  904.  
  905. END; {OF IF  MONTH NOT 00}
  906.  
  907.  
  908. UNTIL (MONTH = '00') OR ((COUNTER = 5) AND (NEWFILE = TRUE));
  909. CALC_FIRST_RECORD(COUNTER-1);
  910. CREATE_FIRST_RECORD(PURCHASE_ORDER_NUMBER);
  911.  
  912.  
  913. END;
  914.  
  915.  
  916. ERASE_LINES(20,1);
  917. PROMPT(1,20,1,'DO YOU WANT A LISTING OF THE FILE? Y/N',FALSE);
  918. REPEAT
  919. MOVE_CURSOR(50,20);
  920. READ(ANSWER);
  921. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  922. IF ANSWER = 'Y' THEN   PRINT_FILE(FILENAM);
  923.  
  924. PROMPT(1,23,1,'DO YOU WISH TO POST TO ANOTHER ACCOUNT? Y/N',FALSE);
  925. REPEAT
  926. MOVE_CURSOR(60,23);
  927. READ(ANSWER);
  928. UNTIL (ANSWER = 'Y') OR (ANSWER =  'N');
  929.  
  930. IF ANSWER = 'Y' THEN POST_TO_ANOTHER_ACCOUNT := TRUE;
  931. IF ANSWER = 'N' THEN POST_TO_ANOTHER_ACCOUNT:=FALSE;
  932.  
  933. END; {OF IF NEWACCOUNT = FALSE}
  934. UNTIL POST_TO_ANOTHER_ACCOUNT = FALSE;
  935.  
  936. END; {OF PROCEDURE POST}
  937.  
  938.  
  939. {************ GENERATE A MONTHLY STATEMENT ******************}
  940. PROCEDURE STATMENT;
  941. TYPE
  942. $STR4 = STRING 4;
  943. $STR2 = STRING 2;
  944.  
  945. VAR
  946. COP:FI;
  947. MONTH_OF_STATEMENT:$STR4;
  948. MS:INTEGER;
  949. MO,DA,YR:$STR2;
  950. MONTHFIL:$STRING14;
  951.  
  952. BEGIN
  953. REPEAT
  954. RECURSIVE:=FALSE;
  955. ENTER_FILE_NAME;
  956. FIND(FILNAME,1);
  957.  
  958. PROMPT(1,19,0,'ENTER,NUMERICALLY, THE DATE OF THIS STATMENT',FALSE);
  959. PROMPT(1,20,0,'ENTER A CARRIAGE RETURN AFTER MONTH,DAY AND YEAR',FALSE);
  960. READ(MO);
  961. READ(DA);
  962. READ(YR);
  963. MS:=((ORD(MO[1]) - 48)*10)+(ORD(MO[2])-48);
  964. CASE MS OF
  965.     1:MONTH_OF_STATEMENT:='.JAN';
  966.     2:MONTH_OF_STATEMENT:='.FEB';
  967.     3:MONTH_OF_STATEMENT:='.MAR';
  968.     4:MONTH_OF_STATEMENT:='.APR';
  969.     5:MONTH_OF_STATEMENT:='.MAY';
  970.     6:MONTH_OF_STATEMENT:='.JUN';
  971.     7:MONTH_OF_STATEMENT:='.JUL';
  972.     8:MONTH_OF_STATEMENT:='.AUG';
  973.     9:MONTH_OF_STATEMENT:='.SEP';
  974.     10:MONTH_OF_STATEMENT:='.OCT';
  975.     11:MONTH_OF_STATEMENT:='.NOV';
  976.     12:MONTH_OF_STATEMENT:='.DEC';
  977.  
  978. END;  {OF CASE}
  979. PRINT_FILE(FILENAM);
  980.  
  981. SETLENGTH(MONTHFIL,0);
  982. APPEND(MONTHFIL,DRIVE);
  983. APPEND(MONTHFIL,ACN);
  984. APPEND(MONTHFIL,MONTH_OF_STATEMENT);
  985.  
  986. WITH INFORMATION DO
  987. BEGIN
  988. REWRITE(MONTHFIL,COP);
  989. RESET(FILENAM,FIN);
  990. FOR I:= 1 TO NUMBER_OF_RECORDS DO
  991.     BEGIN
  992.     READ(FIN:I,INFORMATION);
  993.     WRITE(COP:I,INFORMATION);
  994.     END;
  995.  
  996. REWRITE(FILENAM,FIN);
  997. CREATE_FIRST_RECORD('0002      ');
  998.  
  999.  
  1000. FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
  1001. FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
  1002. FOR I:= 1 TO 2 DO YEAR[I]:=YR[I];
  1003. INVOICE_NUMBER:='PRIOR ';
  1004. PURCHASE_ORDER_NUMBER:='BALANCE   ';
  1005. AMOUNT:=BALANCE;
  1006. WRITE(FIN:2,INFORMATION);
  1007. END; {OF WITH INFORMATION DO}
  1008.  
  1009. PROMPT(1,23,1,'DO YOU WISH TO GENERATE ANOTHER STATEMENT? Y/N',FALSE);
  1010. REPEAT
  1011. MOVE_CURSOR(60,23);
  1012. READ(ANSWER);
  1013. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  1014. IF ANSWER = 'Y' THEN STATEMENT:= TRUE ELSE STATEMENT:=FALSE;
  1015.  
  1016. UNTIL STATEMENT = FALSE;
  1017. END; {OF PROCEDURE STATMENT}
  1018.  
  1019.  
  1020. {******************** BEGIN THE MAIN PROGRAM HERE ****************}
  1021.  
  1022. BEGIN
  1023. CLEAR_SCREEN;
  1024. PROMPT(10,5,0,'ACCOUNTS RECEIVABLE PROGRAM PACKAGE',FALSE);
  1025. PROMPT(10,9,0,'CHOOSE FROM EITHER:',FALSE);
  1026. PROMPT(10,11,0,'1- POST TO AN ACCOUNT',FALSE);
  1027. PROMPT(10,12,0,'2- GENERATE A STATEMENT',FALSE);
  1028. PROMPT(10,14,0,'ENTER THE NUMBER OF YOUR CHOICE ',FALSE);
  1029. REPEAT
  1030. READ(I);
  1031. UNTIL (I=1) OR (I=2);
  1032.  
  1033. IF I=2 THEN STATEMENT:=TRUE ELSE STATEMENT:=FALSE;
  1034. POST_TO_ANOTHER_ACCOUNT:=TRUE;
  1035.  
  1036. WHILE (STATEMENT = FALSE) AND (POST_TO_ANOTHER_ACCOUNT = TRUE) DO POST;
  1037.  
  1038.  
  1039.  
  1040. WHILE STATEMENT = TRUE DO STATMENT;
  1041.  
  1042.  
  1043.     
  1044.  
  1045. END.
  1046.