       IDENTIFICATION DIVISION.
       PROGRAM-ID. ALL-ACCOUNTS-BALANCE.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.
       OBJECT-COMPUTER.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT JOURNAL-FILE ASSIGN TO DISK
           ORGANIZATION IS LINE SEQUENTIAL.
           SELECT LEDGER-FILE ASSIGN TO DISK
           ORGANIZATION IS LINE SEQUENTIAL.
       DATA DIVISION.
       FILE SECTION.
       FD  JOURNAL-FILE
           LABEL RECORDS ARE STANDARD
           VALUE OF FILE-ID IS "JOURNAL.TXT"
           DATA RECORD IS JOUR-REC.
       01  JOUR-REC.
           02 TRAN-DATE PIC 99/99/99.
           02 DEBIT-AC       PIC X(20).
           02 CREDIT-AC      PIC X(20).
           02 TRAN-AMOUNT    PIC 9(10)V99.
       FD  LEDGER-FILE
           LABEL RECORDS ARE STANDARD
           VALUE OF FILE-ID IS "LEDGER.TXT"
           DATA RECORD IS LEDGER-REC.
       01  LEDGER-REC.
           02 AC-NAME        PIC X(20).
           02 DEBIT-TOTAL    PIC 9(10)V99.
           02 CREDIT-TOTAL   PIC 9(10)V99.
       WORKING-STORAGE SECTION.
       01  SHOW-REC.
           02 FILLER         PIC X.
           02 E-AC-NAME      PIC X(20).
           02 FILLER         PIC X.
           02 E-DEBIT-TOTAL  PIC Z(9)9.99.
           02 FILLER         PIC XX.
           02 E-CREDIT-TOTAL PIC Z(9)9.99.
       77  D-FLAG            PIC X VALUE IS "N".
       77  C-FLAG            PIC X VALUE IS "N".
       77  HIT               PIC X.
       PROCEDURE DIVISION.
       MAIN-PARA.
           PERFORM INITIALIZATION.
           ACCEPT HIT.
           PERFORM UPDATION.
           STOP RUN.

       INITIALIZATION SECTION.
       START-PARA.
           OPEN INPUT JOURNAL-FILE.
       READ-JOURNAL.
           READ JOURNAL-FILE RECORD AT END GO TO INIT-DISPLAY.
           OPEN INPUT LEDGER-FILE.
       READ-LEDGER-1.
           READ LEDGER-FILE RECORD AT END GO TO INSERT-RECORD.
           IF D-FLAG = "N"
              IF DEBIT-AC = AC-NAME
                 MOVE "Y" TO D-FLAG.
           IF C-FLAG = "N"
              IF CREDIT-AC = AC-NAME
                 MOVE "Y" TO C-FLAG.
           IF D-FLAG = "Y" AND C-FLAG = "Y"
              MOVE "N" TO D-FLAG
              MOVE "N" TO C-FLAG
              CLOSE LEDGER-FILE
              GO TO READ-JOURNAL
           ELSE
              GO TO READ-LEDGER-1.
       INSERT-RECORD.
           IF D-FLAG = "N"
              MOVE DEBIT-AC TO AC-NAME
              MOVE 0 TO DEBIT-TOTAL
              MOVE 0 TO CREDIT-TOTAL
              CLOSE LEDGER-FILE
              OPEN EXTEND LEDGER-FILE
              WRITE LEDGER-REC.
           IF C-FLAG = "N"
              MOVE CREDIT-AC TO AC-NAME
              MOVE 0 TO DEBIT-TOTAL
              MOVE 0 TO CREDIT-TOTAL
              CLOSE LEDGER-FILE
              OPEN EXTEND LEDGER-FILE
              WRITE LEDGER-REC.
           MOVE "N" TO D-FLAG.
           MOVE "N" TO C-FLAG.
           CLOSE LEDGER-FILE.
           GO TO READ-JOURNAL.
       INIT-DISPLAY.
           OPEN INPUT LEDGER-FILE.
           DISPLAY (01 01) ERASE.
           DISPLAY "Initialization".
           DISPLAY "--------------------------------------------------".
           DISPLAY " A/C NAME               DEBIT-TOTAL   CREDIT-TOTAL".
           DISPLAY "--------------------------------------------------".
       READ-LEDGER-2.
           READ LEDGER-FILE RECORD AT END GO TO CLOSE-PARA.
           MOVE AC-NAME TO E-AC-NAME.
           MOVE DEBIT-TOTAL TO E-DEBIT-TOTAL.
           MOVE CREDIT-TOTAL TO E-CREDIT-TOTAL.
           DISPLAY SHOW-REC.
           GO TO READ-LEDGER-2.
       CLOSE-PARA.
           DISPLAY "==================================================".
           CLOSE JOURNAL-FILE LEDGER-FILE.

       UPDATION SECTION.
       START-PARA.
           OPEN INPUT JOURNAL-FILE.
       READ-JOURNAL.
           READ JOURNAL-FILE RECORD AT END GO TO FINAL-DISPLAY.
           OPEN I-O LEDGER-FILE.
       READ-LEDGER-1.
           READ LEDGER-FILE RECORD AT END GO TO ERROR-PARA.
           IF DEBIT-AC = AC-NAME
              COMPUTE DEBIT-TOTAL = DEBIT-TOTAL + TRAN-AMOUNT
              MOVE "Y" TO D-FLAG
              REWRITE LEDGER-REC.
           IF CREDIT-AC = AC-NAME
              COMPUTE CREDIT-TOTAL = CREDIT-TOTAL + TRAN-AMOUNT
              MOVE "Y" TO C-FLAG
              REWRITE LEDGER-REC.
           IF D-FLAG = "Y" AND C-FLAG = "Y"
              MOVE "N" TO D-FLAG
              MOVE "N" TO C-FLAG
              CLOSE LEDGER-FILE
              GO TO READ-JOURNAL
           ELSE
              GO TO READ-LEDGER-1.
       ERROR-PARA.
           DISPLAY DEBIT-AC "OR" CREDIT-AC.
           DISPLAY "Account Name not found in the Ledger".
           ACCEPT HIT.
           CLOSE LEDGER-FILE.
           GO TO READ-JOURNAL.
       FINAL-DISPLAY.
           OPEN INPUT LEDGER-FILE.
           DISPLAY "After Updation".
           DISPLAY "--------------------------------------------------".
           DISPLAY " A/C NAME               DEBIT-TOTAL   CREDIT-TOTAL".
           DISPLAY "--------------------------------------------------".
       READ-LEDGER-2.
           READ LEDGER-FILE RECORD AT END GO TO CLOSE-PARA.
           MOVE AC-NAME TO E-AC-NAME.
           MOVE DEBIT-TOTAL TO E-DEBIT-TOTAL.
           MOVE CREDIT-TOTAL TO E-CREDIT-TOTAL.
           DISPLAY SHOW-REC.
           GO TO READ-LEDGER-2.
       CLOSE-PARA.
           DISPLAY "==================================================".
           CLOSE JOURNAL-FILE LEDGER-FILE.
