IDENTIFICATION DIVISION. PROGRAM-ID. SELLPRO. ENVIRONMENT DIVISION. FILE-CONTROL. SELECT PRODUCT ASSIGN TO "PRODUCT.TXT" ORGANIZATION IS LINE SEQUENTIAL. SELECT SELL ASSIGN TO "SELL.TXT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD PRODUCT. 01 PRODUCTREC. 02 P-ID PIC 999. 02 P-NAME PIC X(12). 02 P-PRICE PIC 9999V99. 02 P-QUANTITY PIC 9999. FD SELL. 01 SELLREC. 02 S-ID PIC 999. 02 S-P-ID PIC 999. 02 S-QUANTITY PIC 9999. WORKING-STORAGE SECTION. 77 I PIC 9999. 77 L PIC 99. 77 FLAG-END PIC 9. 77 FLAG-END-PRO PIC 9. 77 FLAG-MENU PIC 9. 77 NUM PIC 9999. 77 NUM-O PIC ZZZ9. 77 NUM-OF-PAGE PIC 99. 77 NUM-OF-SALE PIC 99. 77 P-PRICE-O PIC ZZZ9.99. 77 P-QUANTITY-O PIC ZZZ9. 77 ID-FOUND PIC 999. 77 ID-SEEK PIC 999. 77 LAST-P-ID PIC 999. 77 LAST-S-ID PIC 999. 77 OLD-S-ID PIC 999. 77 TOTAL-PRODUCT PIC 9999. 77 T-QUANTITY PIC ZZZZ. 77 T-PRICE PIC ZZZZ.ZZ. 77 CAL-PAY PIC 999999V99. 77 TOTAL-PAY PIC 999999V99. 77 TOTAL-PAY-O PIC ZZZZZ9.99. 77 ANY-KEY PIC X. 01 PRO-ARRAY OCCURS 100 TIMES. 02 A-ID PIC 999. 02 A-NAME PIC X(12). 02 A-PRICE PIC 9999V99. 02 A-QUANTITY PIC 9999. 01 TEMP-PRODUCT-REC. 02 T-P-ID PIC 999 VALUE 0. 02 T-P-NAME PIC X(12) VALUE ALL " ". 02 T-P-PRICE PIC 9999V99 VALUE 0. 02 T-P-QUANTITY PIC 9999 VALUE 0. 01 TEMP-SELL-REC. 02 T-S-ID PIC 999 VALUE 0. 02 T-S-P-ID PIC 999 VALUE 0. 02 T-S-QUANTITY PIC 9999 VALUE 0. PROCEDURE DIVISION. INITIAL-PARA. PERFORM GET-PRODUCT-INFO. PERFORM MENU-PARA UNTIL FLAG-MENU = 0. STOP RUN. MENU-PARA. DISPLAY "WELCOME ..." WITH BLANK SCREEN. DISPLAY "MAIN MENU:" AT 0405. DISPLAY " 1. ADD A NEW PRODUCT" AT 0505. DISPLAY " 2. PRODUCT LISTING" AT 0605. DISPLAY " 3. SELL" AT 0705. DISPLAY " 4. SELL LISTING" AT 0805. DISPLAY " 5. UPDATE QUANTITY OF PRODUCT" AT 0905. DISPLAY " 6. RESTORE DATABASE FOR TESTING" AT 1005. DISPLAY " 0. EXIT" AT 1105. DISPLAY "PRESS NUMBER FOR YOUR OPTION:" AT 1305. MOVE 0 TO FLAG-MENU. ACCEPT FLAG-MENU WITH AUTO-SKIP AT 1335. IF FLAG-MENU = 1 PERFORM ADD-PRODUCT. IF FLAG-MENU = 2 PERFORM PRODUCT-LISTING. IF FLAG-MENU = 3 PERFORM SELL-PRODUCT. IF FLAG-MENU = 4 PERFORM SELL-LISTING. IF FLAG-MENU = 5 PERFORM UPDATE-QUANTITY. IF FLAG-MENU = 6 PERFORM DATABASE-FOR-TESTING. PERFORM GET-PRODUCT-INFO. UPDATE-QUANTITY. MOVE 0 TO ID-FOUND T-P-ID T-QUANTITY. DISPLAY "OPTION: " WITH BLANK SCREEN. DISPLAY "UPDATE QUANTITY OF PRODUCT" DISPLAY "GET PRODUCT ID :" AT 0201. ACCEPT T-P-ID WITH AUTO AT 0220. DISPLAY "GET NEW QUANTITY : " AT 0301. ACCEPT T-QUANTITY AT 0320. MOVE T-QUANTITY TO T-P-QUANTITY. IF T-P-ID > 0 AND T-P-QUANTITY > 0 MOVE T-P-ID TO ID-SEEK PERFORM GET-PRODUCT-ON-ID. IF ID-FOUND > 0 MOVE 0 TO I OPEN OUTPUT PRODUCT PERFORM UPDATE-QUANTITY-SUB UNTIL I >= TOTAL-PRODUCT CLOSE PRODUCT DISPLAY "UPDATE : COMPLETELY" AT 0411 DISPLAY "PRESS ANY KEY TO CONTINUE .." AT 0501 ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP. UPDATE-QUANTITY-SUB. ADD 1 TO I. MOVE A-ID(I) TO P-ID. MOVE A-NAME(I) TO P-NAME. MOVE A-PRICE(I) TO P-PRICE. IF A-ID(I) = T-P-ID MOVE T-QUANTITY TO P-QUANTITY ELSE MOVE A-QUANTITY(I) TO P-QUANTITY. WRITE PRODUCTREC. UPDATE-QUANTITY-FROM-SELL. ADD 1 TO I. MOVE A-ID(I) TO P-ID. MOVE A-NAME(I) TO P-NAME. MOVE A-PRICE(I) TO P-PRICE. IF A-ID(I) = S-P-ID COMPUTE P-QUANTITY = A-QUANTITY(I) - S-QUANTITY ELSE MOVE A-QUANTITY(I) TO P-QUANTITY. WRITE PRODUCTREC. SELL-LISTING. MOVE 0 TO NUM-OF-SALE FLAG-END OLD-S-ID NUM. MOVE 1 TO NUM-OF-PAGE DISPLAY "PAGE : " WITH BLANK SCREEN. DISPLAY NUM-OF-PAGE. OPEN INPUT SELL. READ SELL AT END MOVE 1 TO FLAG-END. PERFORM SELL-LISTING-SUB UNTIL FLAG-END = 1. CLOSE SELL. DISPLAY "PRESS ANY KEY TO CONTINUE .." ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP. SELL-LISTING-SUB. IF S-ID NOT = OLD-S-ID ADD 1 TO NUM NUM-OF-SALE MOVE S-ID TO OLD-S-ID MOVE NUM TO NUM-O DISPLAY NUM-O " " S-ID. MOVE S-P-ID TO ID-SEEK. PERFORM GET-PRODUCT-ON-ID. MOVE A-PRICE(ID-FOUND) TO P-PRICE-O. MOVE S-QUANTITY TO P-QUANTITY-O. DISPLAY " " S-P-ID " " A-NAME(ID-FOUND) WITH NO ADVANCING. DISPLAY " " P-PRICE-O " " P-QUANTITY-O. READ SELL AT END MOVE 1 TO FLAG-END. IF NUM-OF-SALE > 3 AND FLAG-END NOT= 1 AND S-ID NOT= OLD-S-ID MOVE 0 TO NUM-OF-SALE ADD 1 TO NUM-OF-PAGE DISPLAY "PRESS ANY KEY TO CONTINUE .." ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP DISPLAY "PAGE : " WITH BLANK SCREEN DISPLAY NUM-OF-PAGE. SELL-PRODUCT. PERFORM GET-LAST-SELL-ID. MOVE TEMP-SELL-REC TO SELLREC DISPLAY "OPTION: " WITH BLANK SCREEN. DISPLAY "SELL-ID =" AT 0201. DISPLAY LAST-S-ID AT 0211 WITH BACKGROUND-COLOR IS 4. DISPLAY "PRESS ENTER FOR THE TOTAL CALCULATION." AT 0301. DISPLAY "PRODUCT ID" AT 0401. DISPLAY "NAME" AT 0415. DISPLAY "PRICE" AT 0430. DISPLAY "QUANTITY" AT 0445. MOVE 0 TO TOTAL-PAY S-P-ID T-QUANTITY MOVE 5 TO L. ACCEPT S-P-ID WITH AUTO BACKGROUND-COLOR IS 1 LINE L COL 5. PERFORM SELL-PRO-SUB UNTIL S-P-ID = 0. MOVE TOTAL-PAY TO TOTAL-PAY-O DISPLAY "TOTAL PAY = " LINE L COL 5 DISPLAY TOTAL-PAY-O WITH BACKGROUND-COLOR IS 4 LINE L COL 43 ADD 1 TO L DISPLAY "PRESS ANY KEY TO CONTINUE .." LINE L COL 1 ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP. SELL-PRO-SUB. MOVE S-P-ID TO ID-SEEK. PERFORM GET-PRODUCT-ON-ID. IF S-P-ID > 0 AND ID-FOUND = 0 MOVE 0 TO S-P-ID ACCEPT S-P-ID WITH AUTO BACKGROUND-COLOR IS 1 LINE L COL 5 PERFORM SELL-PRO-SUB. IF ID-FOUND > 0 DISPLAY A-NAME(ID-FOUND) LINE L COL 15 MOVE A-PRICE(ID-FOUND) TO P-PRICE-O DISPLAY P-PRICE-O LINE L COL 30 ACCEPT T-QUANTITY WITH BACKGROUND-COLOR IS 1 LINE L COL 48 MOVE T-QUANTITY TO S-QUANTITY. IF A-QUANTITY(ID-FOUND) >= S-QUANTITY AND S-QUANTITY > 0 OPEN EXTEND SELL MOVE LAST-S-ID TO S-ID WRITE SELLREC CLOSE SELL MOVE 0 TO I OPEN OUTPUT PRODUCT PERFORM UPDATE-QUANTITY-FROM-SELL UNTIL I >= TOTAL-PRODUCT CLOSE PRODUCT DISPLAY "[ SAVE ]" LINE L COL 70 COMPUTE CAL-PAY = S-QUANTITY * A-PRICE(ID-FOUND) ADD CAL-PAY TO TOTAL-PAY ADD 1 TO L MOVE 0 TO S-P-ID S-QUANTITY T-QUANTITY ACCEPT S-P-ID WITH AUTO BACKGROUND-COLOR IS 1 LINE L COL 5 PERFORM GET-PRODUCT-INFO ELSE IF S-QUANTITY = 0 MOVE 0 TO S-P-ID S-QUANTITY ELSE DISPLAY "NOT ENOUGH" LINE L COL 70 ADD 1 TO L MOVE 0 TO S-P-ID S-QUANTITY T-QUANTITY ACCEPT S-P-ID WITH AUTO BACKGROUND-COLOR IS 1 LINE L COL 5. ADD-PRODUCT. PERFORM GET-LAST-PRODUCT-ID. MOVE 0 TO T-PRICE T-QUANTITY. MOVE TEMP-PRODUCT-REC TO PRODUCTREC. DISPLAY "OPTION: " WITH BLANK SCREEN. DISPLAY "ADD A NEW PRODUCT". DISPLAY "GET PRODUCT ID :" AT 0301. DISPLAY "GET PRODUCT NAME :" AT 0401. DISPLAY "GET PRICE :" AT 0501. DISPLAY "GET QUANTITY :" AT 0601. DISPLAY LAST-P-ID AT 0320. ACCEPT P-NAME WITH BACKGROUND-COLOR IS 1 AT 0420. ACCEPT T-PRICE WITH BACKGROUND-COLOR IS 1 AT 0520. ACCEPT T-QUANTITY WITH BACKGROUND-COLOR IS 1 AT 0620. MOVE T-PRICE TO P-PRICE. MOVE T-QUANTITY TO P-QUANTITY. IF P-QUANTITY > 0 OPEN EXTEND PRODUCT MOVE LAST-P-ID TO P-ID WRITE PRODUCTREC CLOSE PRODUCT DISPLAY "ADD : COMPLETELY" AT 0801 ELSE DISPLAY "INVALID PROCESSING" AT 0801. DISPLAY "PRESS ANY KEY TO CONTINUE .." AT 0901 ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP. PRODUCT-LISTING. DISPLAY "OPTION: " WITH BLANK SCREEN. DISPLAY "LIST ALL PRODUCT" DISPLAY "NO P-ID P-NAME P-PRICE P-QUANTITY". MOVE 0 TO NUM FLAG-END. OPEN INPUT PRODUCT. READ PRODUCT AT END MOVE 1 TO FLAG-END. PERFORM PRODUCT-LISTING-SUB UNTIL FLAG-END = 1. CLOSE PRODUCT. DISPLAY "PRESS ANY KEY TO CONTINUE .." ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP. PRODUCT-LISTING-SUB. ADD 1 TO NUM. MOVE NUM TO NUM-O. MOVE P-PRICE TO P-PRICE-O MOVE P-QUANTITY TO P-QUANTITY-O DISPLAY NUM-O " " P-ID " " P-NAME " " WITH NO ADVANCING. DISPLAY P-PRICE-O " " P-QUANTITY-O READ PRODUCT AT END MOVE 1 TO FLAG-END. GET-LAST-PRODUCT-ID. MOVE 0 TO FLAG-END. OPEN INPUT PRODUCT. READ PRODUCT AT END MOVE 1 TO FLAG-END. PERFORM GET-LAST-PRODUCT-ID-SUB UNTIL FLAG-END = 1. ADD 1 TO LAST-P-ID. CLOSE PRODUCT. GET-LAST-PRODUCT-ID-SUB. MOVE P-ID TO LAST-P-ID. READ PRODUCT AT END MOVE 1 TO FLAG-END. GET-PRODUCT-INFO. MOVE 0 TO FLAG-END I. OPEN INPUT PRODUCT. READ PRODUCT AT END MOVE 1 TO FLAG-END. PERFORM GET-PRODUCT-INFO-SUB UNTIL FLAG-END = 1. MOVE I TO TOTAL-PRODUCT. CLOSE PRODUCT. GET-PRODUCT-INFO-SUB. ADD 1 TO I. MOVE PRODUCTREC TO PRO-ARRAY(I). READ PRODUCT AT END MOVE 1 TO FLAG-END. GET-PRODUCT-ON-ID. MOVE 0 TO FLAG-END-PRO I ID-FOUND. PERFORM GET-PRODUCT-ON-ID-SUB UNTIL FLAG-END-PRO = 1. GET-PRODUCT-ON-ID-SUB. ADD 1 TO I. IF ID-SEEK = A-ID(I) OR I >= TOTAL-PRODUCT MOVE 1 TO FLAG-END-PRO IF ID-SEEK = A-ID(I) MOVE I TO ID-FOUND. GET-LAST-SELL-ID. MOVE 0 TO FLAG-END. OPEN INPUT SELL. READ SELL AT END MOVE 1 TO FLAG-END. PERFORM GET-LAST-SELL-ID-SUB UNTIL FLAG-END = 1. ADD 1 TO LAST-S-ID. CLOSE SELL. GET-LAST-SELL-ID-SUB. MOVE S-ID TO LAST-S-ID. READ SELL AT END MOVE 1 TO FLAG-END. DATABASE-FOR-TESTING. OPEN OUTPUT PRODUCT. WRITE PRODUCTREC FROM "101PALM 0011000010". WRITE PRODUCTREC FROM "102COMPUTER 0010000018". WRITE PRODUCTREC FROM "103PRINTER INK 0150000005". WRITE PRODUCTREC FROM "104BICYCLE 0033560890". WRITE PRODUCTREC FROM "105RADIO 0012000055". CLOSE PRODUCT. OPEN OUTPUT SELL. WRITE SELLREC FROM "2011010005". WRITE SELLREC FROM "2011020002". WRITE SELLREC FROM "2021050020". WRITE SELLREC FROM "2021020020". WRITE SELLREC FROM "2031020005". WRITE SELLREC FROM "2041040080". WRITE SELLREC FROM "2041050010". WRITE SELLREC FROM "2041010020". WRITE SELLREC FROM "2051030090". CLOSE SELL. DISPLAY "RESTORE : COMPLETELY" WITH BLANK SCREEN AT 0101 DISPLAY "PRESS ANY KEY TO CONTINUE .." AT 0201 ACCEPT ANY-KEY WITH NO-ECHO AUTO-SKIP.